From 673d05f69823b13ec70a96eca459dcf7337343a3 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 26 May 2020 18:21:11 +0300 Subject: [PATCH 01/61] added statistics sending function --- mytoncore.py | 119 +++++++++++++++++++++++++++++++++++++++++---------- mytonctrl.py | 4 +- 2 files changed, 98 insertions(+), 25 deletions(-) diff --git a/mytoncore.py b/mytoncore.py index 12abec55..57254727 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -3,6 +3,7 @@ import crc16 import struct +import requests from mypylib.mypylib import * local = MyPyClass(__file__) @@ -474,10 +475,30 @@ def GetValidatorStatus(self): validatorStatus["masterchainblocktime"] = int(Pars(result, "masterchainblocktime", '\n')) validatorStatus["stateserializermasterchainseqno"] = int(Pars(result, "stateserializermasterchainseqno", '\n')) validatorStatus["shardclientmasterchainseqno"] = int(Pars(result, "shardclientmasterchainseqno", '\n')) + buff = Pars(result, "masterchainblock", '\n') + validatorStatus["masterchainblock"] = self.GVS_GetItemFromBuff(buff) + buff = Pars(result, "gcmasterchainblock", '\n') + validatorStatus["gcmasterchainblock"] = self.GVS_GetItemFromBuff(buff) + buff = Pars(result, "keymasterchainblock", '\n') + validatorStatus["keymasterchainblock"] = self.GVS_GetItemFromBuff(buff) + buff = Pars(result, "rotatemasterchainblock", '\n') + validatorStatus["rotatemasterchainblock"] = self.GVS_GetItemFromBuff(buff) except: validatorStatus["isWorking"] = False return validatorStatus #end define + + def GVS_GetItemFromBuff(self, buff): + buffList = buff.split(':') + buff2 = buffList[0] + buff2 = buff2.replace(' ', '') + buff2 = buff2.replace('(', '') + buff2 = buff2.replace(')', '') + buffList2 = buff2.split(',') + item = buffList2[2] + item = int(item) + return item + #end define def GetConfig12(self): local.AddLog("start GetConfig12 function", "debug") @@ -520,14 +541,15 @@ def GetConfig34(self): config34 = dict() result = self.liteClient.Run("getconfig 34") config34["totalValidators"] = int(Pars(result, "total:", ' ')) - config34["oldStartWorkTime"] = int(Pars(result, "utime_since:", ' ')) + config34["startWorkTime"] = int(Pars(result, "utime_since:", ' ')) + config34["endWorkTime"] = int(Pars(result, "utime_until:", ' ')) lines = result.split('\n') validators = list() for line in lines: if "public_key:" in line: validatorAdnlAddr = Pars(line, "adnl_addr:x", ')') validatorPubkey = Pars(line, "pubkey:x", ')') - validatorWeight = Pars(line, "weight:", ' ') + validatorWeight = int(Pars(line, "weight:", ' ')) buff = dict() buff["adnlAddr"] = validatorAdnlAddr buff["pubkey"] = validatorPubkey @@ -536,6 +558,32 @@ def GetConfig34(self): config34["validators"] = validators return config34 #end define + + def GetConfig36(self): + local.AddLog("start GetConfig36 function", "debug") + config36 = dict() + result = self.liteClient.Run("getconfig 36") + try: + config36["totalValidators"] = int(Pars(result, "total:", ' ')) + config36["startWorkTime"] = int(Pars(result, "utime_since:", ' ')) + config36["endWorkTime"] = int(Pars(result, "utime_until:", ' ')) + lines = result.split('\n') + validators = list() + for line in lines: + if "public_key:" in line: + validatorAdnlAddr = Pars(line, "adnl_addr:x", ')') + validatorPubkey = Pars(line, "pubkey:x", ')') + validatorWeight = Pars(line, "weight:", ' ') + buff = dict() + buff["adnlAddr"] = validatorAdnlAddr + buff["pubkey"] = validatorPubkey + buff["weight"] = validatorWeight + validators.append(buff) + config36["validators"] = validators + except: + pass + return config36 + #end define def CreatNewKey(self): local.AddLog("start CreatNewKey function", "debug") @@ -617,10 +665,10 @@ def CreateConfigProposalRequest(self, offerHash, validatorIndex): return var1 #end define - def CreateElectionRequest(self, wallet, startWorkTime, adnlAddr, rate): + def CreateElectionRequest(self, wallet, startWorkTime, adnlAddr, maxFactor): local.AddLog("start CreateElectionRequest function", "debug") fileName = self.tempDir + str(startWorkTime) + "_validator-to-sign.bin" - args = ["validator-elect-req.fif", wallet.addr, startWorkTime, rate, adnlAddr, fileName] + args = ["validator-elect-req.fif", wallet.addr, startWorkTime, maxFactor, adnlAddr, fileName] result = self.fift.Run(args) fileName = Pars(result, "Saved to file ", '\n') resultList = result.split('\n') @@ -643,10 +691,10 @@ def GetValidatorSignature(self, validatorKey, var1): return validatorSignature #end define - def SignElectionRequestWithValidator(self, wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, rate): + def SignElectionRequestWithValidator(self, wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, maxFactor): local.AddLog("start SignElectionRequestWithValidator function", "debug") fileName = self.tempDir + str(startWorkTime) + "_validator-query.boc" - args = ["validator-elect-signed.fif", wallet.addr, startWorkTime, rate, adnlAddr, validatorPubkey_b64, validatorSignature, fileName] + args = ["validator-elect-signed.fif", wallet.addr, startWorkTime, maxFactor, adnlAddr, validatorPubkey_b64, validatorSignature, fileName] result = self.fift.Run(args) validatorPubkey = Pars(result, "validator public key ", '\n') fileName = Pars(result, "Saved to file ", '\n') @@ -757,17 +805,17 @@ def ElectionEntry(self): self.AttachAdnlAddrToValidator(adnlAddr, validatorKey, endWorkTime) # Create fift's - rate = round(stake / minStake, 1) - var1 = self.CreateElectionRequest(wallet, startWorkTime, adnlAddr, rate) + maxFactor = round(stake / minStake, 1) + var1 = self.CreateElectionRequest(wallet, startWorkTime, adnlAddr, maxFactor) validatorSignature = self.GetValidatorSignature(validatorKey, var1) - validatorPubkey, resultFilePath = self.SignElectionRequestWithValidator(wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, rate) + validatorPubkey, resultFilePath = self.SignElectionRequestWithValidator(wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, maxFactor) # Send boc file to TON resultFilePath = self.SignFileWithWallet(wallet, resultFilePath, fullElectorAddr, stake) self.SendFile(resultFilePath, wallet) # Save vars to json file - self.SaveElectionVarsToJsonFile(wallet=wallet, account=account, stake=stake, rate=rate, fullElectorAddr=fullElectorAddr, startWorkTime=startWorkTime, validatorsElectedFor=validatorsElectedFor, endWorkTime=endWorkTime, validatorKey=validatorKey, validatorPubkey_b64=validatorPubkey_b64, adnlAddr=adnlAddr, var1=var1, validatorSignature=validatorSignature, validatorPubkey=validatorPubkey) + self.SaveElectionVarsToJsonFile(wallet=wallet, account=account, stake=stake, maxFactor=maxFactor, fullElectorAddr=fullElectorAddr, startWorkTime=startWorkTime, validatorsElectedFor=validatorsElectedFor, endWorkTime=endWorkTime, validatorKey=validatorKey, validatorPubkey_b64=validatorPubkey_b64, adnlAddr=adnlAddr, var1=var1, validatorSignature=validatorSignature, validatorPubkey=validatorPubkey) local.AddLog("ElectionEntry completed. Start work time: " + str(startWorkTime)) #end define @@ -964,17 +1012,17 @@ def TestElectionEntry(self): self.AttachAdnlAddrToValidator(adnlAddr, validatorKey, endWorkTime) # Create fift's - rate = round(stake / minStake, 1) - var1 = self.CreateElectionRequest(wallet, startWorkTime, adnlAddr, rate) + maxFactor = round(stake / minStake, 1) + var1 = self.CreateElectionRequest(wallet, startWorkTime, adnlAddr, maxFactor) validatorSignature = self.GetValidatorSignature(validatorKey, var1) - validatorPubkey, resultFilePath = self.SignElectionRequestWithValidator(wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, rate) + validatorPubkey, resultFilePath = self.SignElectionRequestWithValidator(wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, maxFactor) # Send boc file to TON resultFilePath = self.SignFileWithWallet(wallet, resultFilePath, fullElectorAddr, stake) self.SendFile(resultFilePath, wallet) # Save vars to json file - # self.SaveElectionVarsToJsonFile(wallet=wallet, account=account, stake=stake, rate=rate, fullElectorAddr=fullElectorAddr, startWorkTime=startWorkTime, validatorsElectedFor=validatorsElectedFor, endWorkTime=endWorkTime, validatorKey=validatorKey, validatorPubkey_b64=validatorPubkey_b64, adnlAddr=adnlAddr, var1=var1, validatorSignature=validatorSignature, validatorPubkey=validatorPubkey) + # self.SaveElectionVarsToJsonFile(wallet=wallet, account=account, stake=stake, maxFactor=maxFactor, fullElectorAddr=fullElectorAddr, startWorkTime=startWorkTime, validatorsElectedFor=validatorsElectedFor, endWorkTime=endWorkTime, validatorKey=validatorKey, validatorPubkey_b64=validatorPubkey_b64, adnlAddr=adnlAddr, var1=var1, validatorSignature=validatorSignature, validatorPubkey=validatorPubkey) self.validatorConsole.Run("delpermkey {validatorKey}".format(validatorKey=validatorKey)) @@ -1022,7 +1070,7 @@ def GetElectionEntries(self): item = dict() item["validatorPubkey"] = dec2hex(entry[0]).upper() item["stake"] = ng2g(entry[1][0]) - item["rate"] = round(entry[1][1] / 655.36) / 100.0 + item["maxFactor"] = round(entry[1][1] / 655.36) / 100.0 item["walletAddr_hex"] = dec2hex(entry[1][2]).upper() item["walletAddr"] = self.HexAddr2Base64Addr("-1:"+item["walletAddr_hex"]) item["adnlAddr"] = dec2hex(entry[1][3]).upper() @@ -1391,6 +1439,14 @@ def HexAddr2Base64Addr(self, fullAddr, bounceable=True, testnet=True): result = result.replace('/', '_') return result #end define + + def GetNetworStatistics(self): + filePath = self.tempDir + "statistics.json" + with open(filePath) as file: + text = file.read() + data = json.loads(text) + return data + #end define #end class def ng2g(ng): @@ -1431,6 +1487,29 @@ def Domains(ton): pass #end define +def Telemetry(ton): + data = dict() + data["adnlAddr"] = ton.adnlAddr + data["validatorStatus"] = ton.GetValidatorStatus() + data["cpuLoad"] = GetLoadAvg() + data["netLoad"] = ton.GetNetworStatistics() + url = "https://toncenter.com/api/newton_test/status/report_status" + output = json.dumps(data) + resp = requests.post(url, data=output, timeout=3) + + if ton.adnlAddr != "660A8EC119287FE4B8E38D69045E0017EB5BFE1FBBEBE1AA26D492DA4F3A1D69": + return + data = dict() + config34 = ton.GetConfig34() + config36 = ton.GetConfig36() + data["currentValidators"] = config34["validators"] + if len(config36) > 0: + data["nextValidators"] = config36["validators"] + url = "https://toncenter.com/api/newton_test/status/report_validators" + output = json.dumps(data) + resp = requests.post(url, data=output, timeout=3) +#end define + def ReadNetworkData(): local.AddLog("start ReadNetworkData function", "debug") interfaceName = GetInternetInterfaceName() @@ -1488,14 +1567,6 @@ def SaveNetworStatistics(ton): file.write(text) #end define -def GetNetworStatistics(ton): - filePath = ton.tempDir + "statistics.json" - with open(filePath) as file: - text = file.read() - data = json.loads(text) - return data -#end define - def General(): local.AddLog("start General function", "debug") ton = MyTonCore() @@ -1504,6 +1575,8 @@ def General(): local.StartCycle(Elections, sec=600, args=(ton, )) local.StartCycle(Statistics, sec=10, args=(ton, )) local.StartCycle(Offers, sec=600, args=(ton, )) + local.StartCycle(Domains, sec=600, args=(ton, )) + local.StartCycle(Telemetry, sec=60, args=(ton, )) Sleep() #end define diff --git a/mytonctrl.py b/mytonctrl.py index 63ad7bc7..df967e2e 100644 --- a/mytonctrl.py +++ b/mytonctrl.py @@ -101,7 +101,7 @@ def PrintStatus(args): rootWorkchainEnabledTime_int = ton.GetRootWorkchainEnabledTime() config34 = ton.GetConfig34() totalValidators = config34["totalValidators"] - oldStartWorkTime = config34["oldStartWorkTime"] + oldStartWorkTime = config34["startWorkTime"] shardsNumber = ton.GetShardsNumber() validatorStatus = ton.GetValidatorStatus() config15 = ton.GetConfig15() @@ -168,7 +168,7 @@ def PrintLocalStatus(validatorIndex, validatorWallet, validatorAccount, validato cpuLoad1 = loadavg[0] cpuLoad5 = loadavg[1] cpuLoad15 = loadavg[2] - netLoadAvg = GetNetworStatistics(ton) + netLoadAvg = ton.GetNetworStatistics() netLoad1 = netLoadAvg[0] netLoad5 = netLoadAvg[1] netLoad15 = netLoadAvg[2] From 5a7f32d0a7422666ebfe6046a227ed6ff5294813 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 10:43:01 +0300 Subject: [PATCH 02/61] redone installation, calculating stake. --- README.md | 4 +- mytoncore.py | 138 +++++++------------------------------- mytonctrl.py | 34 +++++++--- mytoninstaller.py | 145 ++++++++++++++++++++++++++++++++-------- scripts/install.sh | 35 ++++++---- scripts/toninstaller.sh | 122 ++++++++++++++++++++++++--------- scripts/update.sh | 12 ++-- scripts/upgrade.sh | 28 ++++++++ 8 files changed, 311 insertions(+), 207 deletions(-) create mode 100644 scripts/upgrade.sh diff --git a/README.md b/README.md index 530db132..8e0dd226 100644 --- a/README.md +++ b/README.md @@ -43,8 +43,8 @@ - [x] Управление валидатором - [x] Участвовать в выборах валидатора - [x] Возвращать ставку + вознаграждение - - [ ] Автозапуск валидатора при аварийном завершении - - [ ] Отправлять статистику валидатора на http://validators.ton + - [ ] Автозапуск валидатора при аварийном завершении (systemd) + - [x] Отправлять статистику валидатора на https://toncenter.com ## Список проверенных операционных систем ``` diff --git a/mytoncore.py b/mytoncore.py index 57254727..4b489cf4 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -748,6 +748,21 @@ def RecoverStake(self): resultFilePath = Pars(result, "Saved to file ", '\n') return resultFilePath #end define + + def GetStake(self, account, validators): + stakePercent = local.db.get("stakePercent") + if stakePercent: + sp = stakePercent / 100 + if sp > 1 or sp < 0: + local.AddLog("Wrong stakePercent value. Using default stake.", "warning") + elif len(validators) == 0: + stake = int(account.balance*sp/2) + elif len(validators) > 0: + stake = int(account.balance*sp) + if stake is None: + stake = local.db.get("stake", 20138) + return stake + #end define def ElectionEntry(self): #self.TestElectionEntry() @@ -776,18 +791,15 @@ def ElectionEntry(self): # Get account balance and minimum stake account = self.GetAccount(wallet.addr) minStake = self.GetMinStake() - + + # Calculate stake + stake = GetStake(account, validators) + # Check if we have enough grams - if minStake > account.balance: - local.AddLog("You don't have enough grams. Minimum stake: " + str(minStake), "debug") + if minStake > stake: + local.AddLog("You don't have enough grams. Minimum stake: " + str(minStake), "error") return - # Calculate stake - if len(validators) == 0: - stake = int(account.balance*0.99/2) - if len(validators) > 0 or (stake is not None and stake < minStake): - stake = int(account.balance*0.99) - # Calculate endWorkTime validatorsElectedFor = self.GetValidatorsElectedFor() endWorkTime = startWorkTime + validatorsElectedFor + 300 # 300 sec - margin of seconds @@ -817,6 +829,9 @@ def ElectionEntry(self): # Save vars to json file self.SaveElectionVarsToJsonFile(wallet=wallet, account=account, stake=stake, maxFactor=maxFactor, fullElectorAddr=fullElectorAddr, startWorkTime=startWorkTime, validatorsElectedFor=validatorsElectedFor, endWorkTime=endWorkTime, validatorKey=validatorKey, validatorPubkey_b64=validatorPubkey_b64, adnlAddr=adnlAddr, var1=var1, validatorSignature=validatorSignature, validatorPubkey=validatorPubkey) + # Check is election entries successful and clear key if not ok + # self.validatorConsole.Run("delpermkey {validatorKey}".format(validatorKey=validatorKey)) + local.AddLog("ElectionEntry completed. Start work time: " + str(startWorkTime)) #end define @@ -957,93 +972,6 @@ def GetValidatorKey(self): return validatorKey #end define - def TestElectionEntry(self): - local.AddLog("start TestElectionEntry function", "debug") - walletName = "validator_wallet_002" - wallet = self.GetLocalWallet(walletName) - - # Get startWorkTime and endWorkTime - fullElectorAddr = self.GetFullElectorAddr() - startWorkTime = self.GetActiveElectionId(fullElectorAddr) - - # Check if elections started - if (startWorkTime == 0): - local.AddLog("Elections have not yet begun", "debug") - return - - # Check if election entry is completed - vconfig = self.GetConfigFromValidator() - validators = vconfig.get("validators") - for item in validators: - if item.get("election_date") == startWorkTime: - local.AddLog("Elections entry already completed", "debug") - return - - # Get account balance and minimum stake - account = self.GetAccount(wallet.addr) - minStake = self.GetMinStake() - - # Check if we have enough grams - if minStake > account.balance: - local.AddLog("You don't have enough grams. Minimum stake: " + str(minStake), "debug") - return - - # Calculate stake - if len(validators) == 0: - stake = int(account.balance*0.99/2) - if len(validators) > 0 or (stake is not None and stake < minStake): - stake = int(account.balance*0.99) - - # Calculate endWorkTime - validatorsElectedFor = self.GetValidatorsElectedFor() - endWorkTime = startWorkTime + validatorsElectedFor + 300 # 300 sec - margin of seconds - - # Create keys - validatorKey = self.CreatNewKey() - validatorPubkey_b64 = self.GetPubKeyBase64(validatorKey) - - # Add key to validator - self.AddKeyToValidator(validatorKey, startWorkTime, endWorkTime) - self.AddKeyToTemp(validatorKey, endWorkTime) - - # Get ADNL address - adnlAddr = self.CreatNewKey() - self.AddAdnlAddrToValidator(adnlAddr) - self.AttachAdnlAddrToValidator(adnlAddr, validatorKey, endWorkTime) - - # Create fift's - maxFactor = round(stake / minStake, 1) - var1 = self.CreateElectionRequest(wallet, startWorkTime, adnlAddr, maxFactor) - validatorSignature = self.GetValidatorSignature(validatorKey, var1) - validatorPubkey, resultFilePath = self.SignElectionRequestWithValidator(wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, maxFactor) - - # Send boc file to TON - resultFilePath = self.SignFileWithWallet(wallet, resultFilePath, fullElectorAddr, stake) - self.SendFile(resultFilePath, wallet) - - # Save vars to json file - # self.SaveElectionVarsToJsonFile(wallet=wallet, account=account, stake=stake, maxFactor=maxFactor, fullElectorAddr=fullElectorAddr, startWorkTime=startWorkTime, validatorsElectedFor=validatorsElectedFor, endWorkTime=endWorkTime, validatorKey=validatorKey, validatorPubkey_b64=validatorPubkey_b64, adnlAddr=adnlAddr, var1=var1, validatorSignature=validatorSignature, validatorPubkey=validatorPubkey) - - self.validatorConsole.Run("delpermkey {validatorKey}".format(validatorKey=validatorKey)) - - local.AddLog("TestElectionEntry completed. Start work time: " + str(startWorkTime)) - #end define - - def TestReturnStake(self): - local.AddLog("start TestReturnStake function", "debug") - fullElectorAddr = self.GetFullElectorAddr() - walletName = "validator_wallet_002" - wallet = self.GetLocalWallet(walletName) - returnedStake = self.GetReturnedStake(fullElectorAddr, wallet) - if returnedStake == 0: - local.AddLog("You have nothing on the return stake", "debug") - return - resultFilePath = self.RecoverStake() - resultFilePath = self.SignFileWithWallet(wallet, resultFilePath, fullElectorAddr, 1) - self.SendFile(resultFilePath, wallet) - local.AddLog("TestReturnStake completed") - #end define - def GetElectionEntries(self): local.AddLog("start GetElectionEntries function", "debug") fullConfigAddr = self.GetFullElectorAddr() @@ -1381,24 +1309,6 @@ def GetSaveOffers(self): return saveOffers #end define - def IsAccountAddr(self, str): - type = GetStrType(str) - if type == "account": - result = True - else: - result = False - return result - #end define - - def IsDomainName(self, str): - type = GetStrType(str) - if type == "domain": - result = True - else: - result = False - return result - #end define - def GetStrType(self, str): if len(str) == 48 and '.' not in str: result = "account" diff --git a/mytonctrl.py b/mytonctrl.py index df967e2e..0d6597e6 100644 --- a/mytonctrl.py +++ b/mytonctrl.py @@ -13,6 +13,9 @@ def Init(): # Create user console console.name = "MyTonCtrl" + + console.AddItem("update", Update, "Подтянуть обновление mytonctrl / Pull mytonctrl update") + console.AddItem("upgrade", Upgrade, "Подтянуть исходный код и перекомпилировать компоненты TON / Pull up the source code and recompile the TON components") console.AddItem("status", PrintStatus, "Показать статус TON / Show TON status") console.AddItem("seqno", Seqno, "Получить seqno кошелька / Get seqno wallet") @@ -34,29 +37,42 @@ def Init(): console.AddItem("nr", CreatNewRule, "Добавить правило в расписание / Create new rule") console.AddItem("rl", PrintRulesList, "Показать правила расписания / Show rule list") console.AddItem("dr", DeleteRule, "Удалить правило из расписания / Delete rule") - + #console.AddItem("w2m", MoveGramsFromMixer, "Пропустить средства через миксер") - + console.AddItem("nd", NewDomain, "Арендовать новый домен / New domain") console.AddItem("dl", PrintDomainsList, "Показать арендованные домены / Show domain list") console.AddItem("vds", ViewDomainStatus, "Показать статус домена / View domain status") console.AddItem("dd", DeleteDomain, "Удалить домен / Delete domain") - + console.AddItem("ol", PrintOffersList, "Показать действующие предложения / Show offer list") console.AddItem("vo", VoteOffer, "Голосовать за предложение / Vote for offer") console.AddItem("el", PrintElectionEntriesList, "Показать действующие выборы / Show election entries list") console.AddItem("ve", VoteElectionEntry, "Голосовать в выборах / Vote election entry") console.AddItem("vl", PrintValidatorList, "Показать действующие валидаторы / Show active validators") - - - console.AddItem("test", Test, "") - - + + console.AddItem("test", Test, "Test") + console.AddItem("pt", PrintTest, "PrintTest") + local.db["config"]["logLevel"] = "debug" local.db["config"]["isLocaldbSaving"] = True local.Run() #end define +def Update(args): + RunAsRoot(["sh", "/usr/src/mytonctrl/scripts/update.sh"]) + ColorPrint("Update - {green}OK{endc}") +#end define + +def Upgrade(args): + RunAsRoot(["sh", "/usr/src/mytonctrl/scripts/upgrade.sh"]) + ColorPrint("Upgrade - {green}OK{endc}") +#end define + +def PrintTest(args): + print(json.dumps(local.buffer, indent=4)) +#end define + def Test(args): start = "kf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIue" ok_arr = list() @@ -142,7 +158,7 @@ def PrintTonStatus(startWorkTime, totalValidators, shardsNumber, offersNumber): newOffers_text = bcolors.Green(newOffers) onlineValidators_text = bcolors.Yellow(onlineValidators) if startWorkTime == 0: - electionStatus_text = bcolors.Yellow("close") + electionStatus_text = bcolors.Yellow("closed") else: electionStatus_text = bcolors.Green("open") diff --git a/mytoninstaller.py b/mytoninstaller.py index 72133e18..d0778e3d 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -1,12 +1,15 @@ #!/usr/bin/env python3 # -*- coding: utf_8 -*- +# su -l ${user} -c "cmd" import random +import requests from mypylib.mypylib import * from mytoncore import * local = MyPyClass(__file__) -cport=random.randint(2000, 65000) +cport = random.randint(2000, 65000) +vport = random.randint(2000, 65000) def Init(): @@ -221,6 +224,43 @@ def RunAsRoot(args): subprocess.call(args) #end define +def Vpreparation(): + response = requests.get("https://ifconfig.me") + ip = response.text + vport = random.randint(2000, 65000) + addr = ip + ':' + vport + + # Создать переменные + dbPath = "/var/ton-work/db" + logPath = "/var/ton-work/log" + validatorAppPath = "/usr/bin/ton/validator-engine/validator-engine" + validatorConfig = "/usr/bin/ton/validator-engine/ton-global.config.json" + configPath = dbPath + "/config.json" + + # Подготовить папки валидатора + os.makedirs(dbPath, exists_ok=True) + + # Создать пользователя + file = open("/etc/passwd", 'rt') + text = file.read() + file.close() + if "validator" not in text: + args = ["useradd", "-d", "/dev/null", "-s", "/dev/null", "validator"] + subprocess.run(args) + + # Проверка первого запуска валидатора + if not os.path.isfile(fname): + args = [validatorAppPath, "-C", validatorConfig, "--db", dbPath, "--ip", addr, "-l", logPath] + subprocess.run(args) + + # Прописать автозагрузку авлидатора + Add2Systemd(name="ton-validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log", post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"") + + # Запустить валидатор + args = ["systemctl", "start", "ton-validator"] + subprocess.run(args) +#end define + def WriteSettingToFile(arr): local.AddLog("start WriteSettingToFile fuction", "debug") # Записать настройки в файл @@ -232,8 +272,14 @@ def WriteSettingToFile(arr): return filePath #end define -def LoadSettings(mode): +def LoadSettings(mode, user): local.AddLog("start LoadSettings fuction", "debug") + + path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) + if os.path.isfile(path): + return + #end if + arr = dict() arr["config"] = dict() arr["config"]["logLevel"] = "debug" @@ -285,28 +331,48 @@ def LoadSettings(mode): subprocess.call(["python3", "/usr/src/mytonctrl/mytoncore.py", '-s', filePath]) #end define -def CreateVkeys(): +def CreateVkeys(user): local.AddLog("start CreateVkeys fuction", "debug") - os.makedirs("/tmp/vkeys/", exist_ok=True) + + path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) + if os.path.isfile(path): + return + #end if + + # Переменые + dbPath = "/var/ton-work/db" + generate_random_id = "/usr/bin/ton/utils/generate-random-id" + server_key = "/usr/bin/ton/validator-engine-console/server" + server_pubkey = server_key + ".pub" + client_key = "/usr/bin/ton/validator-engine-console/client" + client_pubkey = client_key + ".pub" # Создание ключей сервера для console - args = ["/usr/bin/ton/utils/generate-random-id", "-m", "keys", "-n", "/tmp/vkeys/server"] + args = ["/usr/bin/ton/utils/generate-random-id", "-m", "keys", "-n", server_key] process = subprocess.run(args, stdout=subprocess.PIPE) output = process.stdout.decode("utf-8") output_arr = output.split(' ') server_key_hex = output_arr[0] server_key_b64 = output_arr[1].replace('\n', '') + + # Копировать ключ в папку валидатора + args = ["mv", server_key, dbPath + "/keyring/" + server_key_hex] + subprocess.run(args) # Создание ключей клиента для console - args = ["/usr/bin/ton/utils/generate-random-id", "-m", "keys", "-n", "/tmp/vkeys/client"] + args = [generate_random_id, "-m", "keys", "-n", client_key] process = subprocess.run(args, stdout=subprocess.PIPE) output = process.stdout.decode("utf-8") output_arr = output.split(' ') client_key_hex = output_arr[0] client_key_b64 = output_arr[1].replace('\n', '') + + # Сменить права на ключи + args = ["chown", "-R", user + ':' + user, server_pubkey, client_key, client_pubkey] + subprocess.run(args) - # Прописать наши ключи во времянном конфигурационном файле валидатора - path = "/tmp/vconfig.json" + # Прописать наши ключи в конфигурационном файле валидатора + path = dbPath + "/config.json" file = open(path) text = file.read() file.close() @@ -323,43 +389,64 @@ def CreateVkeys(): file = open(path, 'w') file.write(text) file.close() - - return server_key_hex #end define -def CheckSettings(): - if CheckLiteClient() != True or CheckValidatorConsole() != True or CheckFift() != True: - QuickSetup() - local.dbSave() -#end define +# def CheckSettings(): +# if CheckLiteClient() != True or CheckValidatorConsole() != True or CheckFift() != True: +# QuickSetup() +# local.dbSave() +# #end define def General(): # Получить режим установки - x = sys.argv.index("-m") - mode = sys.argv[x+1] + mx = sys.argv.index("-m") + ux = sys.argv.index("-u") + mode = sys.argv[mx+1] + user = sys.argv[ux+1] if mode == "full": # Проверить настройки валидатора vfile1 = "/var/ton-work/db/config.json" - vfile2 = "/tmp/vconfig.json" - if not os.path.isfile(vfile1) or not os.path.isfile(vfile2): - RunAsRoot(["sh", "/usr/src/mytonctrl/scripts/vpreparation.sh"]) + if not os.path.isfile(vfile1): + Vpreparation() # Создать ключи доступа к валидатору - server_key_hex = CreateVkeys() - - # Запустить vconfig.sh - local.AddLog("start vconfig.sh", "debug") - RunAsRoot(["sh", "/usr/src/mytonctrl/scripts/vconfig.sh", "-kh", server_key_hex]) + CreateVkeys(user) + + # Сменить права на нужные директории + args = ["chown", "-R", "validator:validator", "/var/ton-work"] + subprocess.run(args) #end if # Создать настройки для mytoncore.py - LoadSettings(mode) + LoadSettings(mode, user) # Прописать mytoncore.py в автозагрузку - local.AddLog("start mytoncore.py", "debug") - subprocess.call(["python3", "/usr/src/mytonctrl/mytoncore.py", "--add2cron"]) - subprocess.call(["python3", "/usr/src/mytonctrl/mytoncore.py", "-d"]) + # local.AddLog("start mytoncore.py", "debug") + # subprocess.run(["python3", "/usr/src/mytonctrl/mytoncore.py", "--add2cron"]) + # subprocess.run(["python3", "/usr/src/mytonctrl/mytoncore.py", "-d"]) + Add2Systemd(name="mytonctrl", start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") + + + # Создаем символические ссылки + mytonctrl_file = "/usr/bin/mytonctrl" + fift_file = "/usr/bin/fift" + liteclient_file = "/usr/bin/liteclient" + validator_console_file = "/usr/bin/validator-console" + file = open(mytonctrl_file, 'wt') + file.write("/usr/bin/python3 /usr/src/mytonctrl/mytonctrl.py") + file.close() + file = open(fift_file, 'wt') + file.write("/usr/bin/ton/crypto/fift") + file.close() + file = open(liteclient_file, 'wt') + file.write("/usr/bin/ton/lite-client/lite-client -C /usr/bin/ton/lite-client/ton-lite-client-test1.config.json \$@") + file.close() + file = open(validator_console_file, 'wt') + file.write("/usr/bin/ton/validator-engine-console/validator-engine-console -k /usr/bin/ton/validator-engine-console/client -p /usr/bin/ton/validator-engine-console/server.pub -a 127.0.0.1:" + str(cport)) + file.close() + args = ["chmod", "+x", mytonctrl_file, fift_file, liteclient_file, validator_console_file] + subprocess.run(args) # Конец local.AddLog("MyTonCtrl успешно установлен") diff --git a/scripts/install.sh b/scripts/install.sh index b28804f9..6a5c7ce1 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -3,13 +3,13 @@ set -e # Проверить sudo if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" + echo "Please run script as root" exit 1 fi # Проверка режима установки if [ "${1}" != "-m" ]; then - echo "Запустите скрипт в одном из двух режимов: '-m lite' или '-m full'" + echo "Run script with with flag '-m lite' or '-m full'" exit 1 fi @@ -24,16 +24,27 @@ rm -rf /tmp/vport.txt rm -rf /tmp/vconfig.json # Начинаю установку mytonctrl -echo -e "${COLOR}[1/4]${ENDC} Начинаю установку mytonctrl" -mode=${2} +echo "${COLOR}[1/4]${ENDC} Starting installation MyTonCtrl" + +# На OSX нет такой директории по-умолчанию, поэтому создаем... +SOURCES_DIR=/usr/src +BIN_DIR=/usr/bin +if [ "$OSTYPE" == "darwin"* ]; then + SOURCES_DIR=/usr/local/src + BIN_DIR=/usr/local/bin + mkdir -p $SOURCES_DIR +fi # Проверяю наличие компонентов TON -echo -e "${COLOR}[2/4]${ENDC} Проверяю наличие компонентов TON" -file1=/usr/bin/ton/crypto/fift -file2=/usr/bin/ton/lite-client/lite-client -file3=/usr/bin/ton/validator-engine-console/validator-engine-console +echo "${COLOR}[2/4]${ENDC} Checking for required TON components" +file1=$BIN_DIR/ton/crypto/fift +file2=$BIN_DIR/ton/lite-client/lite-client +file3=$BIN_DIR/ton/validator-engine-console/validator-engine-console if [ -f "${file1}" ] && [ -f "${file2}" ] && [ -f "${file3}" ]; then echo "TON exist" + cd $SOURCES_DIR + rm -rf $SOURCES_DIR/mytonctrl + git clone --recursive https://github.com/igroman787/mytonctrl.git else rm -f toninstaller.sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/toninstaller.sh @@ -42,10 +53,10 @@ else fi # Запускаю установщик mytoninstaller.py -echo -e "${COLOR}[3/4]${ENDC} Запускаю установщик mytoninstaller.py" -user=$(ls -lh install.sh | cut -d ' ' -f 3) -su -l ${user} -c "python3 /usr/src/mytonctrl/mytoninstaller.py -m ${mode}" +echo "${COLOR}[3/4]${ENDC} Launching the mytoninstaller.py" +user=$(ls -lh ${0} | cut -d ' ' -f 3) +python3 $SOURCES_DIR/mytonctrl/mytoninstaller.py -m ${2} -u ${user} # Выход из программы -echo -e "${COLOR}[4/4]${ENDC} Установка mytonctrl завершена" +echo "${COLOR}[4/4]${ENDC} Mytonctrl installation completed" exit 0 diff --git a/scripts/toninstaller.sh b/scripts/toninstaller.sh index fad93428..52587c9a 100644 --- a/scripts/toninstaller.sh +++ b/scripts/toninstaller.sh @@ -3,7 +3,7 @@ set -e # Проверить sudo if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" + echo "Please run script as root" exit 1 fi @@ -11,57 +11,113 @@ fi COLOR='\033[95m' ENDC='\033[0m' +# На OSX нет такой директории по-умолчанию, поэтому создаем... +SOURCES_DIR=/usr/src +BIN_DIR=/usr/bin +if [ "$OSTYPE" == "darwin"* ]; then + SOURCES_DIR=/usr/local/src + BIN_DIR=/usr/local/bin + mkdir -p $SOURCES_DIR +fi + # Установка требуемых пакетов -echo -e "${COLOR}[1/7]${ENDC} Установка требуемых пакетов" -apt-get install git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev python3 python3-pip -y -pip3 install psutil crc16 +echo "${COLOR}[1/6]${ENDC} Installing required packages" +if [ "$OSTYPE" == "linux-gnu" ]; then + if [ hash yum 2>/dev/null ]; then + echo "RHEL-based Linux detected." + yum install -y epel-release + dnf config-manager --set-enabled PowerTools + yum install -y git make cmake clang gflags gflags-devel zlib zlib-devel openssl-devel openssl-libs readline-devel libmicrohttpd python3 python3-pip python36-devel + elif [ -f /etc/SuSE-release ]; then + echo "Suse Linux detected." + echo "This OS is not supported with this script at present. Sorry." + echo "Please refer to https://github.com/igroman787/mytonctrl for setup information." + exit 1 + elif [ -f /etc/arch-release ]; then + echo "Arch Linux detected." + echo "This OS is not supported with this script at present. Sorry." + echo "Please refer to https://github.com/igroman787/mytonctrl for setup information." + exit 1 + elif [ -f /etc/debian_version ]; then + echo "Ubuntu/Debian Linux detected." + apt update + apt-get install -y git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-pip + else + echo "Unknown Linux distribution." + echo "This OS is not supported with this script at present. Sorry." + echo "Please refer to https://github.com/igroman787/mytonctrl for setup information." + exit 1 + fi +elif [ "$OSTYPE" == "darwin"* ]; then + echo "Mac OS (Darwin) detected." + if [ ! which brew >/dev/null 2>&1 ]; then + $BIN_DIR/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + fi + + echo "Please, write down your username, because brew package manager cannot be run under root user:" + read LOCAL_USERNAME + + su $LOCAL_USERNAME -c "brew update" + su $LOCAL_USERNAME -c "brew install openssl cmake llvm" +elif [ "$OSTYPE" == "freebsd"* ]; then + echo "FreeBSD detected." + echo "This OS is not supported with this script at present. Sorry." + echo "Please refer to https://github.com/paritytech/substrate for setup information." + exit 1 +else + echo "Unknown operating system." + echo "This OS is not supported with this script at present. Sorry." + echo "Please refer to https://github.com/paritytech/substrate for setup information." + exit 1 +fi + +# Установка компонентов python3 +pip3 install psutil crc16 requests # Клонирование репозиториев с github.com -echo -e "${COLOR}[2/7]${ENDC} Клонирование репозиториев с github.com" -cd /usr/src -rm -rf /usr/src/ton -rm -rf /usr/src/mytonctrl +echo "${COLOR}[2/6]${ENDC} Cloning github repository" +cd $SOURCES_DIR +rm -rf $SOURCES_DIR/ton +rm -rf $SOURCES_DIR/mytonctrl git clone --recursive https://github.com/ton-blockchain/ton.git git clone --recursive https://github.com/igroman787/mytonctrl.git + # Подготавливаем папки для компиляции -echo -e "${COLOR}[3/7]${ENDC} Подготавливаем папки для компиляции" -rm -rf /usr/bin/ton -mkdir /usr/bin/ton -cd /usr/bin/ton +echo -e "${COLOR}[3/6]${ENDC} Preparing for compilation" +rm -rf $BIN_DIR/ton +mkdir $BIN_DIR/ton +cd $BIN_DIR/ton + +# Подготовиться к компиляции +if [[ "$OSTYPE" == "darwin"* ]]; then + export CMAKE_C_COMPILER=$(which clang) + export CMAKE_CXX_COMPILER=$(which clang++) +else + export CC=$(which clang) + export CXX=$(which clang++) +fi # Подготовиться к компиляции -export CC=/usr/bin/clang -export CXX=/usr/bin/clang++ -cmake /usr/src/ton +cmake $SOURCES_DIR/ton # Компилируем из исходников -echo -e "${COLOR}[4/7]${ENDC} Компилируем из исходников" -make # use only `make` if some error +echo "${COLOR}[4/6]${ENDC} Source Compilation" +memory=$(cat /proc/meminfo | grep MemAvailable | awk '{print $2}') +let "cpuNumber = memory / 2100000" +make -j ${cpuNumber} # Скачиваем конфигурационные файлы lite-client -echo -e "${COLOR}[5/7]${ENDC} Скачиваем конфигурационные файлы" -cd /usr/bin/ton/lite-client +echo -e "${COLOR}[5/6]${ENDC} Downloading config files" +cd $BIN_DIR/ton/lite-client #wget https://test.ton.org/ton-lite-client-test1.config.json wget -O ton-lite-client-test1.config.json https://newton-blockchain.github.io/newton-test.global.config.json # Скачиваем конфигурационные файлы validator-engine -cd /usr/bin/ton/validator-engine +cd $BIN_DIR/ton/validator-engine #wget https://test.ton.org/ton-global.config.json wget -O ton-global.config.json https://newton-blockchain.github.io/newton-test.global.config.json -# Создаем символические ссылки -echo -e "${COLOR}[6/7]${ENDC} Создаем символические ссылки" -echo "/usr/bin/python3 /usr/src/mytonctrl/mytonctrl.py" > /usr/bin/mytonctrl -echo "/usr/bin/ton/crypto/fift \$@" > /usr/bin/fift -echo "/usr/bin/ton/lite-client/lite-client -C /usr/bin/ton/lite-client/ton-lite-client-test1.config.json \$@" > /usr/bin/liteclient -echo "/usr/bin/ton/validator-engine-console/validator-engine-console \$@" > /usr/bin/validatorconsole -echo "export FIFTPATH=/usr/src/ton/crypto/fift/lib/:/usr/src/ton/crypto/smartcont/" >> /etc/environment -chmod +x /usr/bin/mytonctrl -chmod +x /usr/bin/fift -chmod +x /usr/bin/liteclient -chmod +x /usr/bin/validatorconsole - # Выход из программы -echo -e "${COLOR}[7/7]${ENDC} Установка пакетов программ TON завершена" +echo -e "${COLOR}[6/6]${ENDC} TON software installation complete" exit 0 diff --git a/scripts/update.sh b/scripts/update.sh index 294be226..06c352ef 100644 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -11,13 +11,9 @@ fi COLOR='\033[92m' ENDC='\033[0m' -#cd /usr/src/ton && git pull --recurse-submodules -#export CC=/usr/bin/clang -#export CXX=/usr/bin/clang++ -#cd /usr/bin/ton && cmake /usr/src/ton && make -j - -cd /usr/src/mytonctrl && git pull --recurse-submodules - +cd /usr/src/mytonctrl +git pull --recurse-submodules +systemctl restart mytonctrl # Конец -echo -e "${COLOR}[6/6]${ENDC} Обновление компонентов завершена" +echo "${COLOR}[1/1]${ENDC} Обновление компонентов MyTonCtrl завершена" diff --git a/scripts/upgrade.sh b/scripts/upgrade.sh new file mode 100644 index 00000000..b67fb033 --- /dev/null +++ b/scripts/upgrade.sh @@ -0,0 +1,28 @@ +#!/bin/sh +set -e + +# Проверить sudo +if [ "$(id -u)" != "0" ]; then + echo "Запустите скрипт от имени администратора" + exit 1 +fi + +# Цвета +COLOR='\033[92m' +ENDC='\033[0m' + +cd /usr/src/ton +git pull --recurse-submodules +export CC=/usr/bin/clang +export CXX=/usr/bin/clang++ + +cd /usr/bin/ton +systemctl stop ton-validator && sleep 5 +memory=$(cat /proc/meminfo | grep MemAvailable | awk '{print $2}') +let "cpuNumber = memory / 2100000" +cmake /usr/src/ton && make -j ${cpuNumber} +systemctl start ton-validator + + +# Конец +echo "${COLOR}[1/1]${ENDC} Обновление компонентов TON завершена" From b60a0adaeeebacbc4464145377efd4c5318e5ffb Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 13:01:18 +0300 Subject: [PATCH 03/61] debugging installation script --- mypylib | 2 +- scripts/install.sh | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mypylib b/mypylib index 7598bda4..8dd76b1e 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit 7598bda46108339e5704004daeabe70d44206cb6 +Subproject commit 8dd76b1efda07ea2cf4264fd65d9c11916acc93a diff --git a/scripts/install.sh b/scripts/install.sh index 6a5c7ce1..d34e774d 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -25,6 +25,7 @@ rm -rf /tmp/vconfig.json # Начинаю установку mytonctrl echo "${COLOR}[1/4]${ENDC} Starting installation MyTonCtrl" +mydir=$(pwd) # На OSX нет такой директории по-умолчанию, поэтому создаем... SOURCES_DIR=/usr/src @@ -45,16 +46,17 @@ if [ -f "${file1}" ] && [ -f "${file2}" ] && [ -f "${file3}" ]; then cd $SOURCES_DIR rm -rf $SOURCES_DIR/mytonctrl git clone --recursive https://github.com/igroman787/mytonctrl.git + cd mytonctrl && git checkout original else rm -f toninstaller.sh - wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/toninstaller.sh + wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/toninstaller.sh sh toninstaller.sh rm -f toninstaller.sh fi # Запускаю установщик mytoninstaller.py echo "${COLOR}[3/4]${ENDC} Launching the mytoninstaller.py" -user=$(ls -lh ${0} | cut -d ' ' -f 3) +user=$(ls -lh ${mydir}/${0} | cut -d ' ' -f 3) python3 $SOURCES_DIR/mytonctrl/mytoninstaller.py -m ${2} -u ${user} # Выход из программы From 32b69ccf98ca4a44597f4285e2741003505ecf91 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 13:09:39 +0300 Subject: [PATCH 04/61] debugging installation script --- mytoninstaller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index d0778e3d..ed6d625d 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -228,7 +228,7 @@ def Vpreparation(): response = requests.get("https://ifconfig.me") ip = response.text vport = random.randint(2000, 65000) - addr = ip + ':' + vport + addr = "{ip}:{vport}".format(ip=ip, vport=vport) # Создать переменные dbPath = "/var/ton-work/db" From 683109f3b7935460ed26d812876dfa239088609d Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 13:12:06 +0300 Subject: [PATCH 05/61] debugging installation script --- mytoninstaller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index ed6d625d..9ad2b837 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -238,7 +238,7 @@ def Vpreparation(): configPath = dbPath + "/config.json" # Подготовить папки валидатора - os.makedirs(dbPath, exists_ok=True) + os.makedirs(dbPath, exist_ok=True) # Создать пользователя file = open("/etc/passwd", 'rt') From df6c53b503a18466573f1456749ff9280a114ff0 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 13:15:38 +0300 Subject: [PATCH 06/61] debugging installation script --- mytoninstaller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index 9ad2b837..2f9c9cb6 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -245,7 +245,7 @@ def Vpreparation(): text = file.read() file.close() if "validator" not in text: - args = ["useradd", "-d", "/dev/null", "-s", "/dev/null", "validator"] + args = ["/usr/sbin/useradd", "-d", "/dev/null", "-s", "/dev/null", "validator"] subprocess.run(args) # Проверка первого запуска валидатора From 2943d6fee979c39b254bdb9fc7d006b2553110a6 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 13:17:25 +0300 Subject: [PATCH 07/61] debugging installation script --- mytoninstaller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index 2f9c9cb6..37f7febe 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -249,7 +249,7 @@ def Vpreparation(): subprocess.run(args) # Проверка первого запуска валидатора - if not os.path.isfile(fname): + if not os.path.isfile(configPath): args = [validatorAppPath, "-C", validatorConfig, "--db", dbPath, "--ip", addr, "-l", logPath] subprocess.run(args) From d6c9a22bfda6a390db0fb71dfb9b52048fd1b79d Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 13:34:02 +0300 Subject: [PATCH 08/61] install.sh bugfix --- scripts/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install.sh b/scripts/install.sh index d34e774d..ece63bbc 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -30,7 +30,7 @@ mydir=$(pwd) # На OSX нет такой директории по-умолчанию, поэтому создаем... SOURCES_DIR=/usr/src BIN_DIR=/usr/bin -if [ "$OSTYPE" == "darwin"* ]; then +if [ "$OSTYPE" = "darwin"* ]; then SOURCES_DIR=/usr/local/src BIN_DIR=/usr/local/bin mkdir -p $SOURCES_DIR From 20dd128d0a3a14f651ae1aecbd07044d4e7291ff Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 13:37:19 +0300 Subject: [PATCH 09/61] debugging installation script --- scripts/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install.sh b/scripts/install.sh index ece63bbc..ada37fc8 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -46,7 +46,7 @@ if [ -f "${file1}" ] && [ -f "${file2}" ] && [ -f "${file3}" ]; then cd $SOURCES_DIR rm -rf $SOURCES_DIR/mytonctrl git clone --recursive https://github.com/igroman787/mytonctrl.git - cd mytonctrl && git checkout original + cd mytonctrl && git checkout original && git submodule update --init --recursive else rm -f toninstaller.sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/toninstaller.sh From e09798cec038cea53a37241132d7756195e77db0 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 13:41:58 +0300 Subject: [PATCH 10/61] debugging installation script --- mypylib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypylib b/mypylib index 8dd76b1e..c0ebcf31 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit 8dd76b1efda07ea2cf4264fd65d9c11916acc93a +Subproject commit c0ebcf310bf20e4311b6d52d16bbf9d8b25c3cea From 5669ff7239bbb0e2732e92ef082b13fd94d1190d Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 14:06:59 +0300 Subject: [PATCH 11/61] debugging installation script --- mypylib | 2 +- mytoninstaller.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mypylib b/mypylib index c0ebcf31..5a88a57c 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit c0ebcf310bf20e4311b6d52d16bbf9d8b25c3cea +Subproject commit 5a88a57c5680b522975435625cca1ec23d367b77 diff --git a/mytoninstaller.py b/mytoninstaller.py index 37f7febe..9ad56d01 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -254,7 +254,7 @@ def Vpreparation(): subprocess.run(args) # Прописать автозагрузку авлидатора - Add2Systemd(name="ton-validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log", post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"") + Add2Systemd(name="ton-validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log", post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"") # Запустить валидатор args = ["systemctl", "start", "ton-validator"] @@ -425,7 +425,7 @@ def General(): # local.AddLog("start mytoncore.py", "debug") # subprocess.run(["python3", "/usr/src/mytonctrl/mytoncore.py", "--add2cron"]) # subprocess.run(["python3", "/usr/src/mytonctrl/mytoncore.py", "-d"]) - Add2Systemd(name="mytonctrl", start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") + Add2Systemd(name="mytonctrl", user=user, start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") # Создаем символические ссылки From 6a03f0feeaaa123ede90e0d1fb92d920a5b1e221 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 14:51:26 +0300 Subject: [PATCH 12/61] debugging installation script --- scripts/toninstaller.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/toninstaller.sh b/scripts/toninstaller.sh index 52587c9a..fa623d67 100644 --- a/scripts/toninstaller.sh +++ b/scripts/toninstaller.sh @@ -14,7 +14,7 @@ ENDC='\033[0m' # На OSX нет такой директории по-умолчанию, поэтому создаем... SOURCES_DIR=/usr/src BIN_DIR=/usr/bin -if [ "$OSTYPE" == "darwin"* ]; then +if [ "$OSTYPE" = "darwin"* ]; then SOURCES_DIR=/usr/local/src BIN_DIR=/usr/local/bin mkdir -p $SOURCES_DIR @@ -22,7 +22,7 @@ fi # Установка требуемых пакетов echo "${COLOR}[1/6]${ENDC} Installing required packages" -if [ "$OSTYPE" == "linux-gnu" ]; then +if [ "$OSTYPE" = "linux-gnu" ]; then if [ hash yum 2>/dev/null ]; then echo "RHEL-based Linux detected." yum install -y epel-release @@ -48,7 +48,7 @@ if [ "$OSTYPE" == "linux-gnu" ]; then echo "Please refer to https://github.com/igroman787/mytonctrl for setup information." exit 1 fi -elif [ "$OSTYPE" == "darwin"* ]; then +elif [ "$OSTYPE" = "darwin"* ]; then echo "Mac OS (Darwin) detected." if [ ! which brew >/dev/null 2>&1 ]; then $BIN_DIR/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" @@ -59,7 +59,7 @@ elif [ "$OSTYPE" == "darwin"* ]; then su $LOCAL_USERNAME -c "brew update" su $LOCAL_USERNAME -c "brew install openssl cmake llvm" -elif [ "$OSTYPE" == "freebsd"* ]; then +elif [ "$OSTYPE" = "freebsd"* ]; then echo "FreeBSD detected." echo "This OS is not supported with this script at present. Sorry." echo "Please refer to https://github.com/paritytech/substrate for setup information." @@ -90,7 +90,7 @@ mkdir $BIN_DIR/ton cd $BIN_DIR/ton # Подготовиться к компиляции -if [[ "$OSTYPE" == "darwin"* ]]; then +if [[ "$OSTYPE" = "darwin"* ]]; then export CMAKE_C_COMPILER=$(which clang) export CMAKE_CXX_COMPILER=$(which clang++) else From 33c0416be04f446021accac4373e830869e02960 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 14:57:44 +0300 Subject: [PATCH 13/61] debugging installation script --- scripts/toninstaller.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/toninstaller.sh b/scripts/toninstaller.sh index fa623d67..478a73d2 100644 --- a/scripts/toninstaller.sh +++ b/scripts/toninstaller.sh @@ -90,7 +90,7 @@ mkdir $BIN_DIR/ton cd $BIN_DIR/ton # Подготовиться к компиляции -if [[ "$OSTYPE" = "darwin"* ]]; then +if [ "$OSTYPE" = "darwin"* ]; then export CMAKE_C_COMPILER=$(which clang) export CMAKE_CXX_COMPILER=$(which clang++) else From 35ba784dbcd4560e9338a47114dae1a44acc4589 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 15:46:57 +0300 Subject: [PATCH 14/61] debugging installation script --- scripts/install.sh | 6 +++--- scripts/toninstaller.sh | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/install.sh b/scripts/install.sh index ada37fc8..14e45c9f 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e # Проверить sudo @@ -30,7 +30,7 @@ mydir=$(pwd) # На OSX нет такой директории по-умолчанию, поэтому создаем... SOURCES_DIR=/usr/src BIN_DIR=/usr/bin -if [ "$OSTYPE" = "darwin"* ]; then +if [ "$OSTYPE" == "darwin"* ]; then SOURCES_DIR=/usr/local/src BIN_DIR=/usr/local/bin mkdir -p $SOURCES_DIR @@ -50,7 +50,7 @@ if [ -f "${file1}" ] && [ -f "${file2}" ] && [ -f "${file3}" ]; then else rm -f toninstaller.sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/toninstaller.sh - sh toninstaller.sh + bash toninstaller.sh rm -f toninstaller.sh fi diff --git a/scripts/toninstaller.sh b/scripts/toninstaller.sh index 478a73d2..2017da53 100644 --- a/scripts/toninstaller.sh +++ b/scripts/toninstaller.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e # Проверить sudo @@ -14,7 +14,7 @@ ENDC='\033[0m' # На OSX нет такой директории по-умолчанию, поэтому создаем... SOURCES_DIR=/usr/src BIN_DIR=/usr/bin -if [ "$OSTYPE" = "darwin"* ]; then +if [ "$OSTYPE" == "darwin"* ]; then SOURCES_DIR=/usr/local/src BIN_DIR=/usr/local/bin mkdir -p $SOURCES_DIR @@ -22,7 +22,7 @@ fi # Установка требуемых пакетов echo "${COLOR}[1/6]${ENDC} Installing required packages" -if [ "$OSTYPE" = "linux-gnu" ]; then +if [ "$OSTYPE" == "linux-gnu" ]; then if [ hash yum 2>/dev/null ]; then echo "RHEL-based Linux detected." yum install -y epel-release @@ -48,7 +48,7 @@ if [ "$OSTYPE" = "linux-gnu" ]; then echo "Please refer to https://github.com/igroman787/mytonctrl for setup information." exit 1 fi -elif [ "$OSTYPE" = "darwin"* ]; then +elif [ "$OSTYPE" == "darwin"* ]; then echo "Mac OS (Darwin) detected." if [ ! which brew >/dev/null 2>&1 ]; then $BIN_DIR/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" @@ -59,7 +59,7 @@ elif [ "$OSTYPE" = "darwin"* ]; then su $LOCAL_USERNAME -c "brew update" su $LOCAL_USERNAME -c "brew install openssl cmake llvm" -elif [ "$OSTYPE" = "freebsd"* ]; then +elif [ "$OSTYPE" == "freebsd"* ]; then echo "FreeBSD detected." echo "This OS is not supported with this script at present. Sorry." echo "Please refer to https://github.com/paritytech/substrate for setup information." @@ -90,7 +90,7 @@ mkdir $BIN_DIR/ton cd $BIN_DIR/ton # Подготовиться к компиляции -if [ "$OSTYPE" = "darwin"* ]; then +if [ "$OSTYPE" == "darwin"* ]; then export CMAKE_C_COMPILER=$(which clang) export CMAKE_CXX_COMPILER=$(which clang++) else From 42748cf24ced01fe5c04dafcf4349db6c58565bf Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 22:28:07 +0300 Subject: [PATCH 15/61] debugging installation script --- scripts/install.sh | 4 +-- scripts/toninstaller.sh | 3 +- scripts/vconfig.sh | 52 ---------------------------------- scripts/vpreparation.sh | 63 ----------------------------------------- 4 files changed, 4 insertions(+), 118 deletions(-) delete mode 100644 scripts/vconfig.sh delete mode 100644 scripts/vpreparation.sh diff --git a/scripts/install.sh b/scripts/install.sh index 14e45c9f..004c0f2d 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -46,10 +46,10 @@ if [ -f "${file1}" ] && [ -f "${file2}" ] && [ -f "${file3}" ]; then cd $SOURCES_DIR rm -rf $SOURCES_DIR/mytonctrl git clone --recursive https://github.com/igroman787/mytonctrl.git - cd mytonctrl && git checkout original && git submodule update --init --recursive + cd mytonctrl && git checkout original && git submodule update --init --recursive # fix me else rm -f toninstaller.sh - wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/toninstaller.sh + wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/toninstaller.sh # fix me bash toninstaller.sh rm -f toninstaller.sh fi diff --git a/scripts/toninstaller.sh b/scripts/toninstaller.sh index 2017da53..559c85a1 100644 --- a/scripts/toninstaller.sh +++ b/scripts/toninstaller.sh @@ -40,7 +40,7 @@ if [ "$OSTYPE" == "linux-gnu" ]; then exit 1 elif [ -f /etc/debian_version ]; then echo "Ubuntu/Debian Linux detected." - apt update + apt-get update apt-get install -y git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-pip else echo "Unknown Linux distribution." @@ -81,6 +81,7 @@ rm -rf $SOURCES_DIR/ton rm -rf $SOURCES_DIR/mytonctrl git clone --recursive https://github.com/ton-blockchain/ton.git git clone --recursive https://github.com/igroman787/mytonctrl.git +cd mytonctrl && git checkout original && git submodule update --init --recursive # fix me # Подготавливаем папки для компиляции diff --git a/scripts/vconfig.sh b/scripts/vconfig.sh deleted file mode 100644 index e4e60c38..00000000 --- a/scripts/vconfig.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh -set -e - -# Проверить sudo -if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" - exit 1 -fi - -# Проверка режима -if [ "${1}" != "-kh" ]; then - echo "Запустите скрипт в режиме импорта ключа: '-kh '" - exit 1 -fi - -# Цвета -COLOR='\033[94m' -ENDC='\033[0m' - -# Создать переменные -ip=$(curl --silent ifconfig.me) -dbPath=/var/ton-work/db -logPath=/var/ton-work/log -validatorAppPath=/usr/bin/ton/validator-engine/validator-engine -validatorConfig=/usr/bin/ton/validator-engine/ton-global.config.json -port=$(cat /tmp/vport.txt) -addr=${ip}:${port} - -# Перемещаем наши ключи в нужную папку -echo -e "${COLOR}[1/4]${ENDC} Перемещаем наши ключи в нужную папку" -server_key_hex=${2} -mv /tmp/vkeys/server ${dbPath}/keyring/${server_key_hex} -mv /tmp/vkeys/server.pub /usr/bin/ton/validator-engine-console/server.pub -mv /tmp/vkeys/client /usr/bin/ton/validator-engine-console/client -mv /tmp/vkeys/client.pub /usr/bin/ton/validator-engine-console/client.pub - -# Прописать наши ключи в конфигурационном файле валидатора -echo -e "${COLOR}[2/4]${ENDC} Прописываем наши ключи в конфигурационном файле валидатора" -cat /tmp/vconfig.json > ${dbPath}/config.json - -# Запустить валидатор -echo -e "${COLOR}[3/4]${ENDC} Запускаем валидатор от имени пользователя 'validator'" -cmd="${validatorAppPath} -d -C ${validatorConfig} --db ${dbPath} --ip ${addr} -l ${logPath}" -su -l validator -s /bin/sh -c "${cmd} &" - -# Поправить права на папку -chown -R validator:validator /var/ton-work - -# Конец -echo -e "${COLOR}[4/4]${ENDC} Перенастройка валидатора завершена" - - diff --git a/scripts/vpreparation.sh b/scripts/vpreparation.sh deleted file mode 100644 index 5c901603..00000000 --- a/scripts/vpreparation.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh -set -e - -# Проверить sudo -if [ "$(id -u)" != "0" ]; then - echo "Запустите скрипт от имени администратора" - exit 1 -fi - -# Цвета -COLOR='\033[93m' -ENDC='\033[0m' - -# Генерация порта для валидатора -ip=$(curl --silent ifconfig.me) -echo -e "${COLOR}[1/6]${ENDC} Генерируем для валидатора порт подключения" -port=$(shuf -i 2000-65000 -n 1) -addr=${ip}:${port} -echo "${port}" > /tmp/vport.txt - -# Создать переменные -dbPath=/var/ton-work/db -logPath=/var/ton-work/log -validatorAppPath=/usr/bin/ton/validator-engine/validator-engine -validatorConfig=/usr/bin/ton/validator-engine/ton-global.config.json - -# Подготовить папки валидатора -echo -e "${COLOR}[2/6]${ENDC} Подготавливаем папку валидатора" -rm -rf ${dbPath} -mkdir -p ${dbPath} - -# Создать пользователя -echo -e "${COLOR}[3/6]${ENDC} Создаем нового пользователя 'validator' для работы валидатора" -result=$(cat /etc/passwd) -if echo ${result} | grep 'validator'; then - echo "user 'validator' exists" -else - /usr/sbin/useradd -d /dev/null -s /dev/null validator -fi - -# Проверка первого запуска валидатора -configPath=${dbPath}/config.json -#rm -f ${configPath} && - -# Первый запуск валидатора -echo -e "${COLOR}[4/6]${ENDC} Создаем конфигурационный файл валидатора" -${validatorAppPath} -C ${validatorConfig} --db ${dbPath} --ip ${addr} -l ${logPath} - -# Сменить права на нужные директории -chown -R validator:validator /var/ton-work - -# Создать копию конфигурации во времянной папке -cp -r ${configPath} /tmp/vconfig.json -chmod 777 /tmp/vconfig.json - -# Прописать автозагрузку в cron -echo -e "${COLOR}[5/6]${ENDC} Прописываем автозагрузку валидатора через cron от имени пользователя 'validator'" -cmd="${validatorAppPath} -d -C ${validatorConfig} --db ${dbPath} --ip ${addr} -l ${logPath}" -cronText="@reboot /bin/sleep 60 && ${cmd}" -echo "${cronText}" > mycron && crontab -u validator mycron && rm mycron - -# Конец -echo -e "${COLOR}[6/6]${ENDC} Настройка валидатора завершена" From 886ac76a6253928f142531f5dc8d531cab4fce10 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 22:55:45 +0300 Subject: [PATCH 16/61] debugging installation script --- scripts/install.sh | 8 ++++---- scripts/toninstaller.sh | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/scripts/install.sh b/scripts/install.sh index 004c0f2d..b5ae0222 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -24,7 +24,7 @@ rm -rf /tmp/vport.txt rm -rf /tmp/vconfig.json # Начинаю установку mytonctrl -echo "${COLOR}[1/4]${ENDC} Starting installation MyTonCtrl" +echo -e "${COLOR}[1/4]${ENDC} Starting installation MyTonCtrl" mydir=$(pwd) # На OSX нет такой директории по-умолчанию, поэтому создаем... @@ -37,7 +37,7 @@ if [ "$OSTYPE" == "darwin"* ]; then fi # Проверяю наличие компонентов TON -echo "${COLOR}[2/4]${ENDC} Checking for required TON components" +echo -e "${COLOR}[2/4]${ENDC} Checking for required TON components" file1=$BIN_DIR/ton/crypto/fift file2=$BIN_DIR/ton/lite-client/lite-client file3=$BIN_DIR/ton/validator-engine-console/validator-engine-console @@ -55,10 +55,10 @@ else fi # Запускаю установщик mytoninstaller.py -echo "${COLOR}[3/4]${ENDC} Launching the mytoninstaller.py" +echo -e "${COLOR}[3/4]${ENDC} Launching the mytoninstaller.py" user=$(ls -lh ${mydir}/${0} | cut -d ' ' -f 3) python3 $SOURCES_DIR/mytonctrl/mytoninstaller.py -m ${2} -u ${user} # Выход из программы -echo "${COLOR}[4/4]${ENDC} Mytonctrl installation completed" +echo -e "${COLOR}[4/4]${ENDC} Mytonctrl installation completed" exit 0 diff --git a/scripts/toninstaller.sh b/scripts/toninstaller.sh index 559c85a1..10621e0e 100644 --- a/scripts/toninstaller.sh +++ b/scripts/toninstaller.sh @@ -21,7 +21,7 @@ if [ "$OSTYPE" == "darwin"* ]; then fi # Установка требуемых пакетов -echo "${COLOR}[1/6]${ENDC} Installing required packages" +echo -e "${COLOR}[1/6]${ENDC} Installing required packages" if [ "$OSTYPE" == "linux-gnu" ]; then if [ hash yum 2>/dev/null ]; then echo "RHEL-based Linux detected." @@ -75,7 +75,7 @@ fi pip3 install psutil crc16 requests # Клонирование репозиториев с github.com -echo "${COLOR}[2/6]${ENDC} Cloning github repository" +echo -e "${COLOR}[2/6]${ENDC} Cloning github repository" cd $SOURCES_DIR rm -rf $SOURCES_DIR/ton rm -rf $SOURCES_DIR/mytonctrl @@ -103,9 +103,10 @@ fi cmake $SOURCES_DIR/ton # Компилируем из исходников -echo "${COLOR}[4/6]${ENDC} Source Compilation" +echo -e "${COLOR}[4/6]${ENDC} Source Compilation" memory=$(cat /proc/meminfo | grep MemAvailable | awk '{print $2}') let "cpuNumber = memory / 2100000" +echo "use ${cpuNumber} cpus" make -j ${cpuNumber} # Скачиваем конфигурационные файлы lite-client From f7af31e3b684e60878d8d05d254d24d4537765a3 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 1 Jun 2020 23:46:01 +0300 Subject: [PATCH 17/61] debugging installation script --- mytoninstaller.py | 42 ++++++++++++++++-------------------------- scripts/install.sh | 6 ------ 2 files changed, 16 insertions(+), 32 deletions(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index 9ad56d01..43095671 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -212,18 +212,6 @@ def Translate(text): # TryFiftConfiguration() # #end define -def RunAsRoot(args): - file = open("/etc/issue") - text = file.read() - file.close() - if "Ubuntu" in text: - args = ["sudo", "-S"] + args - else: - print("Введите пароль пользователя root / Enter root password") - args = ["su", "-c"] + [" ".join(args)] - subprocess.call(args) -#end define - def Vpreparation(): response = requests.get("https://ifconfig.me") ip = response.text @@ -259,6 +247,9 @@ def Vpreparation(): # Запустить валидатор args = ["systemctl", "start", "ton-validator"] subprocess.run(args) + + # Подождать загрузку валидатора + time.sleep(10) #end define def WriteSettingToFile(arr): @@ -311,24 +302,23 @@ def LoadSettings(mode, user): filePath = WriteSettingToFile(arr) # Подтянуть настройки в mytoncore.py - subprocess.call(["python3", "/usr/src/mytonctrl/mytoncore.py", '-s', filePath]) + args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -s " + filePath] + subprocess.run(args) + + # Подтянуть событие в mytoncore.py + args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -e \"mytoninstaller\""] + subprocess.run(args) # Создать новый кошелек для валидатора - ton = MyTonCore() - wallet = ton.CreateWallet("validator_wallet_001", -1) - arr["validatorWalletName"] = wallet.name + #ton = MyTonCore() + #wallet = ton.CreateWallet("validator_wallet_001", -1) + #arr["validatorWalletName"] = wallet.name # Создать новый ADNL адрес для валидатора - adnlAddr = ton.CreatNewKey() - ton.AddAdnlAddrToValidator(adnlAddr) - arr["adnlAddr"] = adnlAddr + #adnlAddr = ton.CreatNewKey() + #ton.AddAdnlAddrToValidator(adnlAddr) + #arr["adnlAddr"] = adnlAddr #end if - - # Записать настройки в файл - filePath = WriteSettingToFile(arr) - - # Подтянуть настройки в mytoncore.py - subprocess.call(["python3", "/usr/src/mytonctrl/mytoncore.py", '-s', filePath]) #end define def CreateVkeys(user): @@ -385,7 +375,7 @@ def CreateVkeys(user): allowed["permissions"] = 15 control["allowed"] = [allowed] vjson["control"] = [control] - text = json.dumps(vjson, indent=3) + text = json.dumps(vjson, indent=4) file = open(path, 'w') file.write(text) file.close() diff --git a/scripts/install.sh b/scripts/install.sh index b5ae0222..178e649f 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -17,12 +17,6 @@ fi COLOR='\033[92m' ENDC='\033[0m' -# Почистить папки -rm -rf /tmp/vkeys/ -rm -rf /tmp/mytonsettings.json -rm -rf /tmp/vport.txt -rm -rf /tmp/vconfig.json - # Начинаю установку mytonctrl echo -e "${COLOR}[1/4]${ENDC} Starting installation MyTonCtrl" mydir=$(pwd) From 83810106418c6d7569c35d557fb4be1aef9a703d Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 09:04:55 +0300 Subject: [PATCH 18/61] debugging installation script --- mytoncore.py | 27 +++++++++++++++++++++++---- mytoninstaller.py | 8 +++++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/mytoncore.py b/mytoncore.py index 4b489cf4..a3dc7efd 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -777,7 +777,7 @@ def ElectionEntry(self): # Check if elections started if (startWorkTime == 0): - local.AddLog("Elections have not yet begun", "debug") + local.AddLog("Elections have not yet begun", "info") return # Check if election entry is completed @@ -785,7 +785,7 @@ def ElectionEntry(self): validators = vconfig.get("validators") for item in validators: if item.get("election_date") == startWorkTime: - local.AddLog("Elections entry already completed", "debug") + local.AddLog("Elections entry already completed", "info") return # Get account balance and minimum stake @@ -1370,6 +1370,26 @@ def Init(): local.buffer["network"]["in"] = [0]*15*6 local.buffer["network"]["out"] = [0]*15*6 local.buffer["network"]["all"] = [0]*15*6 + + if ("-e" in sys.argv): + x = sys.argv.index("-e") + eventName = sys.argv[x+1] + Event(eventName) +#end define + +def Event(eventName): + if eventName == "toninstaller": + TonInstallerEvent() + elif eventName == "validator down": + ValidatorDownEvent() +#end define + +def TonInstallerEvent(): + local.AddLog("start TonInstallerEvent function", "debug") +#end define + +def ValidatorDownEvent(): + local.AddLog("start ValidatorDownEvent function", "debug") #end define def Elections(ton): @@ -1407,6 +1427,7 @@ def Telemetry(ton): output = json.dumps(data) resp = requests.post(url, data=output, timeout=3) + # fix me if ton.adnlAddr != "660A8EC119287FE4B8E38D69045E0017EB5BFE1FBBEBE1AA26D492DA4F3A1D69": return data = dict() @@ -1421,7 +1442,6 @@ def Telemetry(ton): #end define def ReadNetworkData(): - local.AddLog("start ReadNetworkData function", "debug") interfaceName = GetInternetInterfaceName() buff = psutil.net_io_counters(pernic=True) data = buff[interfaceName] @@ -1438,7 +1458,6 @@ def ReadNetworkData(): #end define def SaveNetworStatistics(ton): - local.AddLog("start SaveNetworStatistics function", "debug") data = local.buffer["network"]["all"] data = data[::-1] zerodata = data[0] diff --git a/mytoninstaller.py b/mytoninstaller.py index 43095671..018d78f3 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -267,7 +267,8 @@ def LoadSettings(mode, user): local.AddLog("start LoadSettings fuction", "debug") path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) - if os.path.isfile(path): + path2 = "/usr/local/bin/mytoncore/mytoncore.db" + if os.path.isfile(path) or os.path.isfile(path2): return #end if @@ -306,7 +307,7 @@ def LoadSettings(mode, user): subprocess.run(args) # Подтянуть событие в mytoncore.py - args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -e \"mytoninstaller\""] + args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -e \"toninstaller\""] subprocess.run(args) # Создать новый кошелек для валидатора @@ -325,7 +326,8 @@ def CreateVkeys(user): local.AddLog("start CreateVkeys fuction", "debug") path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) - if os.path.isfile(path): + path2 = "/usr/local/bin/mytoncore/mytoncore.db" + if os.path.isfile(path) or os.path.isfile(path2): return #end if From 1ef748c4175cbcff29977e23b4a05cf87719309f Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 09:14:47 +0300 Subject: [PATCH 19/61] debugging installation script --- mytoncore.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mytoncore.py b/mytoncore.py index a3dc7efd..5bfbd6db 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -1386,10 +1386,27 @@ def Event(eventName): def TonInstallerEvent(): local.AddLog("start TonInstallerEvent function", "debug") + # Создать новый кошелек для валидатора + ton = MyTonCore() + wallet = ton.CreateWallet("validator_wallet_001", -1) + local.db["validatorWalletName"] = wallet.name + + # Создать новый ADNL адрес для валидатора + adnlAddr = ton.CreatNewKey() + ton.AddAdnlAddrToValidator(adnlAddr) + local.db["adnlAddr"] = adnlAddr + + # Сохранить + local.dbSave() + + # Выход + local.Exit() #end define def ValidatorDownEvent(): local.AddLog("start ValidatorDownEvent function", "debug") + local.AddLog("Validator is down", "error") + local.Exit() #end define def Elections(ton): From 842875859ce472d3eb4ba7983fc71068faf08a64 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 11:10:12 +0300 Subject: [PATCH 20/61] debugging installation script --- README.md | 4 +++- mytoninstaller.py | 15 ++------------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 8e0dd226..9db77865 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,9 @@ ## Список проверенных операционных систем ``` -Ubuntu 18.04.2 +Ubuntu 16.04 LTS (Xenial Xerus) +Ubuntu 18.04 LTS (Bionic Beaver) +Ubuntu 20.04 LTS (Focal Fossa) Debian 10.3 ``` diff --git a/mytoninstaller.py b/mytoninstaller.py index 018d78f3..d60b2a50 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -309,16 +309,6 @@ def LoadSettings(mode, user): # Подтянуть событие в mytoncore.py args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -e \"toninstaller\""] subprocess.run(args) - - # Создать новый кошелек для валидатора - #ton = MyTonCore() - #wallet = ton.CreateWallet("validator_wallet_001", -1) - #arr["validatorWalletName"] = wallet.name - - # Создать новый ADNL адрес для валидатора - #adnlAddr = ton.CreatNewKey() - #ton.AddAdnlAddrToValidator(adnlAddr) - #arr["adnlAddr"] = adnlAddr #end if #end define @@ -396,6 +386,8 @@ def General(): mode = sys.argv[mx+1] user = sys.argv[ux+1] + local.AddLog("Using: user - {user}, mode - {mode}".format(user=user, mode=mode)) + if mode == "full": # Проверить настройки валидатора vfile1 = "/var/ton-work/db/config.json" @@ -439,9 +431,6 @@ def General(): file.close() args = ["chmod", "+x", mytonctrl_file, fift_file, liteclient_file, validator_console_file] subprocess.run(args) - - # Конец - local.AddLog("MyTonCtrl успешно установлен") #end define From 4f1c3cd66b1a345a9739bea0a1173094d34d5c8f Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 11:45:32 +0300 Subject: [PATCH 21/61] debugging installation script --- mytoncore.py | 5 +---- mytoninstaller.py | 9 +++------ 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/mytoncore.py b/mytoncore.py index 5bfbd6db..031e64b0 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -1382,6 +1382,7 @@ def Event(eventName): TonInstallerEvent() elif eventName == "validator down": ValidatorDownEvent() + local.Exit() #end define def TonInstallerEvent(): @@ -1398,15 +1399,11 @@ def TonInstallerEvent(): # Сохранить local.dbSave() - - # Выход - local.Exit() #end define def ValidatorDownEvent(): local.AddLog("start ValidatorDownEvent function", "debug") local.AddLog("Validator is down", "error") - local.Exit() #end define def Elections(ton): diff --git a/mytoninstaller.py b/mytoninstaller.py index d60b2a50..53ad01a6 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -242,10 +242,10 @@ def Vpreparation(): subprocess.run(args) # Прописать автозагрузку авлидатора - Add2Systemd(name="ton-validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log", post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"") + Add2Systemd(name="validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log") # post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"" # Запустить валидатор - args = ["systemctl", "start", "ton-validator"] + args = ["systemctl", "start", "validator"] subprocess.run(args) # Подождать загрузку валидатора @@ -406,10 +406,7 @@ def General(): LoadSettings(mode, user) # Прописать mytoncore.py в автозагрузку - # local.AddLog("start mytoncore.py", "debug") - # subprocess.run(["python3", "/usr/src/mytonctrl/mytoncore.py", "--add2cron"]) - # subprocess.run(["python3", "/usr/src/mytonctrl/mytoncore.py", "-d"]) - Add2Systemd(name="mytonctrl", user=user, start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") + Add2Systemd(name="mytoncore", user=user, start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") # Создаем символические ссылки From d8a25026a7957abc1aa069797ef6acb6fabd6618 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 13:18:04 +0300 Subject: [PATCH 22/61] debugging installation script --- mytoncore.py | 1 + mytoninstaller.py | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/mytoncore.py b/mytoncore.py index 031e64b0..cc15bc83 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -7,6 +7,7 @@ from mypylib.mypylib import * local = MyPyClass(__file__) +print(bcolors.Red(json.dumps(sys.argv))) class LiteClient: diff --git a/mytoninstaller.py b/mytoninstaller.py index 53ad01a6..1a60e169 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -243,6 +243,10 @@ def Vpreparation(): # Прописать автозагрузку авлидатора Add2Systemd(name="validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log") # post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"" + + # Сменить права на нужные директории + args = ["chown", "-R", "validator:validator", "/var/ton-work"] + subprocess.run(args) # Запустить валидатор args = ["systemctl", "start", "validator"] From d38daa0d5bdeae36921e7e86062e910cf9b3c99c Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 13:37:01 +0300 Subject: [PATCH 23/61] debugging installation script --- mytoncore.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mytoncore.py b/mytoncore.py index cc15bc83..ad5eb127 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -9,6 +9,10 @@ local = MyPyClass(__file__) print(bcolors.Red(json.dumps(sys.argv))) +import getpass +username = getpass.getuser() +print(bcolors.Red(username)) + class LiteClient: def __init__(self): From d85b4cf4738e660650fdb2ede70e6bcf7f4e0e16 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 13:39:21 +0300 Subject: [PATCH 24/61] debugging installation script --- mytoninstaller.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index 1a60e169..a1cba2b3 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -5,7 +5,6 @@ import random import requests from mypylib.mypylib import * -from mytoncore import * local = MyPyClass(__file__) cport = random.randint(2000, 65000) From 8df0ab3f938383881c4727b5dd8a48b1dc9bbfee Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 14:11:09 +0300 Subject: [PATCH 25/61] debugging installation script --- README.md | 10 ++++------ mytoncore.py | 6 ------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 9db77865..3f2fee7b 100644 --- a/README.md +++ b/README.md @@ -56,18 +56,16 @@ Debian 10.3 ## Описание установочных скриптов - `toninstaller.sh` - Данный скрипт клонирует исходники `TON` и `mytonctrl` в папки `/usr/src/ton` и `/usr/src/mytonctrl`, компилирует программы из исходников и прописывает их в `/usr/bin/`. -- `vpreparation.sh` - Данный скрипт создает пользователя `validator` для работы валидатора и пропишет его в автозагрузку через крон. -- `mytoninstaller.py` - Данный скрипт производит настройку `mytonctrl` и создание ключей для подключения к валидатору. -- `vconfig.sh` - Данный скрипт настроит доступ для подключения к валидатору `lite-client` и `validator-engine-console`. +- `mytoninstaller.py` - Данный скрипт производит настройку валидатора, `mytonctrl` и создание ключей для подключения к валидатору. ## Режимы установки -Есть два режима установки: `lite` и `full`. Оба они **компилируют** и устанавливают компоненты `TON`. Однако `lite` версия не настраивает и не запускает валидатор. В данный момент `full` установка сырая/баганутая/недоделанная, поэтому вы можете установить в режиме `lite` и дальше уже руками дописать настройки в конфигурацию `mytonctrl` для взаимодействия с вашим валидатором. +Есть два режима установки: `lite` и `full`. Оба они **компилируют** и устанавливают компоненты `TON`. Однако `lite` версия не настраивает и не запускает валидатор. ## Установка (Ubuntu) 1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. ```sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/install.sh -sudo sh install.sh -m lite +sudo bash install.sh -m lite ``` 2. Готово. Можете пробовать запустить программу `mytonctrl`. @@ -80,7 +78,7 @@ mytonctrl 1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. ```sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/install.sh -su root -c 'sh install.sh -m lite' +su root -c 'bash install.sh -m lite' ``` 2. Готово. Можете пробовать запустить программу `mytonctrl`. diff --git a/mytoncore.py b/mytoncore.py index ad5eb127..300710b8 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -7,12 +7,6 @@ from mypylib.mypylib import * local = MyPyClass(__file__) -print(bcolors.Red(json.dumps(sys.argv))) - -import getpass -username = getpass.getuser() -print(bcolors.Red(username)) - class LiteClient: def __init__(self): From 6a9e03d6528696f33eba6ae64bc293e3cbf4dcd3 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 2 Jun 2020 16:07:42 +0300 Subject: [PATCH 26/61] debugging installation script --- mypylib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypylib b/mypylib index 5a88a57c..7a3a8d21 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit 5a88a57c5680b522975435625cca1ec23d367b77 +Subproject commit 7a3a8d215a5dde3c64f71e74411870dab6326fb1 From 0a25820a4a0a9174434ecf52190d71b345b119e7 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 09:23:02 +0300 Subject: [PATCH 27/61] debugging installation script --- mytoninstaller.py | 445 +++++++++++++++++++++++++++++++++------------- 1 file changed, 322 insertions(+), 123 deletions(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index a1cba2b3..42e99337 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -211,7 +211,256 @@ def Translate(text): # TryFiftConfiguration() # #end define -def Vpreparation(): +# def CheckSettings(): +# if CheckLiteClient() != True or CheckValidatorConsole() != True or CheckFift() != True: +# QuickSetup() +# local.dbSave() +# #end define + +# def Vpreparation(): +# response = requests.get("https://ifconfig.me") +# ip = response.text +# vport = random.randint(2000, 65000) +# addr = "{ip}:{vport}".format(ip=ip, vport=vport) + +# # Создать переменные +# dbPath = "/var/ton-work/db" +# logPath = "/var/ton-work/log" +# validatorAppPath = "/usr/bin/ton/validator-engine/validator-engine" +# validatorConfig = "/usr/bin/ton/validator-engine/ton-global.config.json" +# configPath = dbPath + "/config.json" + +# # Подготовить папки валидатора +# os.makedirs(dbPath, exist_ok=True) + +# # Создать пользователя +# file = open("/etc/passwd", 'rt') +# text = file.read() +# file.close() +# if "validator" not in text: +# args = ["/usr/sbin/useradd", "-d", "/dev/null", "-s", "/dev/null", "validator"] +# subprocess.run(args) + +# # Проверка первого запуска валидатора +# if not os.path.isfile(configPath): +# args = [validatorAppPath, "-C", validatorConfig, "--db", dbPath, "--ip", addr, "-l", logPath] +# subprocess.run(args) + +# # Прописать автозагрузку авлидатора +# Add2Systemd(name="validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log") # post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"" + +# # Сменить права на нужные директории +# args = ["chown", "-R", "validator:validator", "/var/ton-work"] +# subprocess.run(args) + +# # Запустить валидатор +# args = ["systemctl", "start", "validator"] +# subprocess.run(args) + +# # Подождать загрузку валидатора +# time.sleep(10) +# #end define + +# def WriteSettingToFile(arr): +# local.AddLog("start WriteSettingToFile fuction", "debug") +# # Записать настройки в файл +# filePath = "/tmp/mytonsettings.json" +# settings = json.dumps(arr) +# file = open(filePath, 'w') +# file.write(settings) +# file.close() +# return filePath +# #end define + +# def LoadSettings(mode, user): +# local.AddLog("start LoadSettings fuction", "debug") + +# path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) +# path2 = "/usr/local/bin/mytoncore/mytoncore.db" +# if os.path.isfile(path) or os.path.isfile(path2): +# return +# #end if + +# arr = dict() +# arr["config"] = dict() +# arr["config"]["logLevel"] = "debug" +# arr["config"]["isLocaldbSaving"] = True + +# # fift +# fift = dict() +# fift["appPath"] = "/usr/bin/ton/crypto/fift" +# fift["libsPath"] = "/usr/src/ton/crypto/fift/lib" +# fift["smartcontsPath"] = "/usr/src/ton/crypto/smartcont" +# arr["fift"] = fift + +# # lite-client +# liteClient = dict() +# liteClient["appPath"] = "/usr/bin/ton/lite-client/lite-client" +# liteClient["configPath"] = "/usr/bin/ton/lite-client/ton-lite-client-test1.config.json" +# arr["liteClient"] = liteClient + +# if (mode == "full"): +# # validator-engine-console +# validatorConsole = dict() +# validatorConsole["appPath"] = "/usr/bin/ton/validator-engine-console/validator-engine-console" +# validatorConsole["privKeyPath"] = "/usr/bin/ton/validator-engine-console/client" +# validatorConsole["pubKeyPath"] = "/usr/bin/ton/validator-engine-console/server.pub" +# validatorConsole["addr"] = "127.0.0.1:{cport}".format(cport=cport) +# arr["validatorConsole"] = validatorConsole + +# # Записать настройки в файл +# filePath = WriteSettingToFile(arr) + +# # Подтянуть настройки в mytoncore.py +# args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -s " + filePath] +# subprocess.run(args) + +# # Подтянуть событие в mytoncore.py +# args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -e \"toninstaller\""] +# subprocess.run(args) +# #end if +# #end define + +# def CreateVkeys(user): +# local.AddLog("start CreateVkeys fuction", "debug") + +# path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) +# path2 = "/usr/local/bin/mytoncore/mytoncore.db" +# if os.path.isfile(path) or os.path.isfile(path2): +# return +# #end if + +# # Переменые +# dbPath = "/var/ton-work/db" +# generate_random_id = "/usr/bin/ton/utils/generate-random-id" +# server_key = "/usr/bin/ton/validator-engine-console/server" +# server_pubkey = server_key + ".pub" +# client_key = "/usr/bin/ton/validator-engine-console/client" +# client_pubkey = client_key + ".pub" + +# # Создание ключей сервера для console +# args = ["/usr/bin/ton/utils/generate-random-id", "-m", "keys", "-n", server_key] +# process = subprocess.run(args, stdout=subprocess.PIPE) +# output = process.stdout.decode("utf-8") +# output_arr = output.split(' ') +# server_key_hex = output_arr[0] +# server_key_b64 = output_arr[1].replace('\n', '') + +# # Копировать ключ в папку валидатора +# args = ["mv", server_key, dbPath + "/keyring/" + server_key_hex] +# subprocess.run(args) + +# # Создание ключей клиента для console +# args = [generate_random_id, "-m", "keys", "-n", client_key] +# process = subprocess.run(args, stdout=subprocess.PIPE) +# output = process.stdout.decode("utf-8") +# output_arr = output.split(' ') +# client_key_hex = output_arr[0] +# client_key_b64 = output_arr[1].replace('\n', '') + +# # Сменить права на ключи +# args = ["chown", "-R", user + ':' + user, server_pubkey, client_key, client_pubkey] +# subprocess.run(args) + +# # Прописать наши ключи в конфигурационном файле валидатора +# path = dbPath + "/config.json" +# file = open(path) +# text = file.read() +# file.close() +# vjson = json.loads(text) +# control = dict() +# control["id"] = server_key_b64 +# control["port"] = cport +# allowed = dict() +# allowed["id"] = client_key_b64 +# allowed["permissions"] = 15 +# control["allowed"] = [allowed] +# vjson["control"] = [control] +# text = json.dumps(vjson, indent=4) +# file = open(path, 'w') +# file.write(text) +# file.close() +# #end define + +# def OldGeneral(): +# # Получить режим установки +# mx = sys.argv.index("-m") +# ux = sys.argv.index("-u") +# mode = sys.argv[mx+1] +# user = sys.argv[ux+1] + +# local.AddLog("Using: user - {user}, mode - {mode}".format(user=user, mode=mode)) + +# if mode == "full": +# # Проверить настройки валидатора +# vfile1 = "/var/ton-work/db/config.json" +# if not os.path.isfile(vfile1): +# Vpreparation() + +# # Создать ключи доступа к валидатору +# CreateVkeys(user) + +# # Сменить права на нужные директории +# args = ["chown", "-R", "validator:validator", "/var/ton-work"] +# subprocess.run(args) +# #end if + +# # Создать настройки для mytoncore.py +# LoadSettings(mode, user) + +# # Прописать mytoncore.py в автозагрузку +# Add2Systemd(name="mytoncore", user=user, start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") + + +# # Создаем символические ссылки +# mytonctrl_file = "/usr/bin/mytonctrl" +# fift_file = "/usr/bin/fift" +# liteclient_file = "/usr/bin/liteclient" +# validator_console_file = "/usr/bin/validator-console" +# file = open(mytonctrl_file, 'wt') +# file.write("/usr/bin/python3 /usr/src/mytonctrl/mytonctrl.py") +# file.close() +# file = open(fift_file, 'wt') +# file.write("/usr/bin/ton/crypto/fift") +# file.close() +# file = open(liteclient_file, 'wt') +# file.write("/usr/bin/ton/lite-client/lite-client -C /usr/bin/ton/lite-client/ton-lite-client-test1.config.json \$@") +# file.close() +# file = open(validator_console_file, 'wt') +# file.write("/usr/bin/ton/validator-engine-console/validator-engine-console -k /usr/bin/ton/validator-engine-console/client -p /usr/bin/ton/validator-engine-console/server.pub -a 127.0.0.1:" + str(cport)) +# file.close() +# args = ["chmod", "+x", mytonctrl_file, fift_file, liteclient_file, validator_console_file] +# subprocess.run(args) +# #end define + +def General(): + # Получить режим установки + mx = sys.argv.index("-m") + ux = sys.argv.index("-u") + mode = sys.argv[mx+1] + user = sys.argv[ux+1] + + if mode == "full": + # Создать настройки для валидатора + ValidatorSetting(user) + #end if + + # Создать настройки для mytoncore.py + MytoncoreSettings(user, mode) + + # Создать символические ссылки + CreateSymlink() +#end define + +def ValidatorSetting(user): + local.AddLog("start ValidatorSetting fuction", "debug") + + path = "/var/ton-work/db/config.json" + if not os.path.isfile(path): + return + #end if + + # Получить внешний ip адрес response = requests.get("https://ifconfig.me") ip = response.text vport = random.randint(2000, 65000) @@ -234,98 +483,25 @@ def Vpreparation(): if "validator" not in text: args = ["/usr/sbin/useradd", "-d", "/dev/null", "-s", "/dev/null", "validator"] subprocess.run(args) + #end if # Проверка первого запуска валидатора if not os.path.isfile(configPath): args = [validatorAppPath, "-C", validatorConfig, "--db", dbPath, "--ip", addr, "-l", logPath] subprocess.run(args) + #end if # Прописать автозагрузку авлидатора Add2Systemd(name="validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log") # post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"" - # Сменить права на нужные директории - args = ["chown", "-R", "validator:validator", "/var/ton-work"] - subprocess.run(args) - - # Запустить валидатор - args = ["systemctl", "start", "validator"] - subprocess.run(args) - - # Подождать загрузку валидатора - time.sleep(10) -#end define - -def WriteSettingToFile(arr): - local.AddLog("start WriteSettingToFile fuction", "debug") - # Записать настройки в файл - filePath = "/tmp/mytonsettings.json" - settings = json.dumps(arr) - file = open(filePath, 'w') - file.write(settings) - file.close() - return filePath -#end define - -def LoadSettings(mode, user): - local.AddLog("start LoadSettings fuction", "debug") - - path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) - path2 = "/usr/local/bin/mytoncore/mytoncore.db" - if os.path.isfile(path) or os.path.isfile(path2): - return - #end if - - arr = dict() - arr["config"] = dict() - arr["config"]["logLevel"] = "debug" - arr["config"]["isLocaldbSaving"] = True - - # fift - fift = dict() - fift["appPath"] = "/usr/bin/ton/crypto/fift" - fift["libsPath"] = "/usr/src/ton/crypto/fift/lib" - fift["smartcontsPath"] = "/usr/src/ton/crypto/smartcont" - arr["fift"] = fift - - # lite-client - liteClient = dict() - liteClient["appPath"] = "/usr/bin/ton/lite-client/lite-client" - liteClient["configPath"] = "/usr/bin/ton/lite-client/ton-lite-client-test1.config.json" - arr["liteClient"] = liteClient - - if (mode == "full"): - # validator-engine-console - validatorConsole = dict() - validatorConsole["appPath"] = "/usr/bin/ton/validator-engine-console/validator-engine-console" - validatorConsole["privKeyPath"] = "/usr/bin/ton/validator-engine-console/client" - validatorConsole["pubKeyPath"] = "/usr/bin/ton/validator-engine-console/server.pub" - validatorConsole["addr"] = "127.0.0.1:{cport}".format(cport=cport) - arr["validatorConsole"] = validatorConsole - - # Записать настройки в файл - filePath = WriteSettingToFile(arr) - - # Подтянуть настройки в mytoncore.py - args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -s " + filePath] - subprocess.run(args) - - # Подтянуть событие в mytoncore.py - args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -e \"toninstaller\""] - subprocess.run(args) - #end if -#end define - -def CreateVkeys(user): - local.AddLog("start CreateVkeys fuction", "debug") - + # Создать ключи доступа к валидатору path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) path2 = "/usr/local/bin/mytoncore/mytoncore.db" if os.path.isfile(path) or os.path.isfile(path2): return #end if - # Переменые - dbPath = "/var/ton-work/db" + # Создать переменные generate_random_id = "/usr/bin/ton/utils/generate-random-id" server_key = "/usr/bin/ton/validator-engine-console/server" server_pubkey = server_key + ".pub" @@ -374,62 +550,85 @@ def CreateVkeys(user): file = open(path, 'w') file.write(text) file.close() + + # Сменить права на нужные директории + args = ["chown", "-R", "validator:validator", "/var/ton-work"] + subprocess.run(args) + + # Запустить валидатор + args = ["systemctl", "start", "validator"] + subprocess.run(args) + + # Подождать загрузку валидатора + local.AddLog("Waiting for validator to load. Pause 10 seconds.") + time.sleep(10) #end define -# def CheckSettings(): -# if CheckLiteClient() != True or CheckValidatorConsole() != True or CheckFift() != True: -# QuickSetup() -# local.dbSave() -# #end define +def MytoncoreSettings(user, mode): + local.AddLog("start MytoncoreSettings fuction", "debug") + + path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) + path2 = "/usr/local/bin/mytoncore/mytoncore.db" + if os.path.isfile(path) or os.path.isfile(path2): + return + #end if -def General(): - # Получить режим установки - mx = sys.argv.index("-m") - ux = sys.argv.index("-u") - mode = sys.argv[mx+1] - user = sys.argv[ux+1] + arr = dict() + arr["config"] = dict() + arr["config"]["logLevel"] = "debug" + arr["config"]["isLocaldbSaving"] = True - local.AddLog("Using: user - {user}, mode - {mode}".format(user=user, mode=mode)) + # fift + fift = dict() + fift["appPath"] = "/usr/bin/ton/crypto/fift" + fift["libsPath"] = "/usr/src/ton/crypto/fift/lib" + fift["smartcontsPath"] = "/usr/src/ton/crypto/smartcont" + arr["fift"] = fift - if mode == "full": - # Проверить настройки валидатора - vfile1 = "/var/ton-work/db/config.json" - if not os.path.isfile(vfile1): - Vpreparation() + # lite-client + liteClient = dict() + liteClient["appPath"] = "/usr/bin/ton/lite-client/lite-client" + liteClient["configPath"] = "/usr/bin/ton/lite-client/ton-lite-client-test1.config.json" + arr["liteClient"] = liteClient - # Создать ключи доступа к валидатору - CreateVkeys(user) - - # Сменить права на нужные директории - args = ["chown", "-R", "validator:validator", "/var/ton-work"] + # Подтянуть настройки в mytoncore.py + args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -s " + filePath] + subprocess.run(args) + + + if (mode == "full"): + # validator-engine-console + validatorConsole = dict() + validatorConsole["appPath"] = "/usr/bin/ton/validator-engine-console/validator-engine-console" + validatorConsole["privKeyPath"] = "/usr/bin/ton/validator-engine-console/client" + validatorConsole["pubKeyPath"] = "/usr/bin/ton/validator-engine-console/server.pub" + validatorConsole["addr"] = "127.0.0.1:{cport}".format(cport=cport) + arr["validatorConsole"] = validatorConsole + + # Записать настройки в файл + filePath = "/tmp/mytonsettings.json" + settings = json.dumps(arr) + file = open(filePath, 'w') + file.write(settings) + file.close() + + # Подтянуть настройки в mytoncore.py + args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -s " + filePath] subprocess.run(args) - #end if - # Создать настройки для mytoncore.py - LoadSettings(mode, user) + # Навсякий подождать, пока mytoncore подтянет настройки. Возможно это лишнее. + time.sleep(3) + + # Подтянуть событие в mytoncore.py + args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -e \"toninstaller\""] + subprocess.run(args) + #end if # Прописать mytoncore.py в автозагрузку Add2Systemd(name="mytoncore", user=user, start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") - - - # Создаем символические ссылки - mytonctrl_file = "/usr/bin/mytonctrl" - fift_file = "/usr/bin/fift" - liteclient_file = "/usr/bin/liteclient" - validator_console_file = "/usr/bin/validator-console" - file = open(mytonctrl_file, 'wt') - file.write("/usr/bin/python3 /usr/src/mytonctrl/mytonctrl.py") - file.close() - file = open(fift_file, 'wt') - file.write("/usr/bin/ton/crypto/fift") - file.close() - file = open(liteclient_file, 'wt') - file.write("/usr/bin/ton/lite-client/lite-client -C /usr/bin/ton/lite-client/ton-lite-client-test1.config.json \$@") - file.close() - file = open(validator_console_file, 'wt') - file.write("/usr/bin/ton/validator-engine-console/validator-engine-console -k /usr/bin/ton/validator-engine-console/client -p /usr/bin/ton/validator-engine-console/server.pub -a 127.0.0.1:" + str(cport)) - file.close() - args = ["chmod", "+x", mytonctrl_file, fift_file, liteclient_file, validator_console_file] + + # Запустить mytoncore.py + args = ["systemctl", "start", "mytoncore"] subprocess.run(args) #end define From f6504b2ad27488b04e543af5fe47483b08e17743 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 10:24:54 +0300 Subject: [PATCH 28/61] debugging installation script --- README.md | 6 +++--- mytoninstaller.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3f2fee7b..c0d7c9f5 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,9 @@ ## Список проверенных операционных систем ``` -Ubuntu 16.04 LTS (Xenial Xerus) -Ubuntu 18.04 LTS (Bionic Beaver) -Ubuntu 20.04 LTS (Focal Fossa) +Ubuntu 16.04 LTS (Xenial Xerus) - Error: TON compilation error +Ubuntu 18.04 LTS (Bionic Beaver) - OK +Ubuntu 20.04 LTS (Focal Fossa) - OK Debian 10.3 ``` diff --git a/mytoninstaller.py b/mytoninstaller.py index 42e99337..a40e0e98 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -632,6 +632,26 @@ def MytoncoreSettings(user, mode): subprocess.run(args) #end define +def CreateSymlink(): + mytonctrl_file = "/usr/bin/mytonctrl" + fift_file = "/usr/bin/fift" + liteclient_file = "/usr/bin/liteclient" + validator_console_file = "/usr/bin/validator-console" + file = open(mytonctrl_file, 'wt') + file.write("/usr/bin/python3 /usr/src/mytonctrl/mytonctrl.py") + file.close() + file = open(fift_file, 'wt') + file.write("/usr/bin/ton/crypto/fift") + file.close() + file = open(liteclient_file, 'wt') + file.write("/usr/bin/ton/lite-client/lite-client -C /usr/bin/ton/lite-client/ton-lite-client-test1.config.json \$@") + file.close() + file = open(validator_console_file, 'wt') + file.write("/usr/bin/ton/validator-engine-console/validator-engine-console -k /usr/bin/ton/validator-engine-console/client -p /usr/bin/ton/validator-engine-console/server.pub -a 127.0.0.1:" + str(cport)) + file.close() + args = ["chmod", "+x", mytonctrl_file, fift_file, liteclient_file, validator_console_file] + subprocess.run(args) +#end define ### From 7c4ee661345f7e4cf3a0e8333296bb32b5dac30f Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 10:46:52 +0300 Subject: [PATCH 29/61] debugging installation script --- mytoninstaller.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index a40e0e98..a2497e7a 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -261,17 +261,6 @@ def Translate(text): # time.sleep(10) # #end define -# def WriteSettingToFile(arr): -# local.AddLog("start WriteSettingToFile fuction", "debug") -# # Записать настройки в файл -# filePath = "/tmp/mytonsettings.json" -# settings = json.dumps(arr) -# file = open(filePath, 'w') -# file.write(settings) -# file.close() -# return filePath -# #end define - # def LoadSettings(mode, user): # local.AddLog("start LoadSettings fuction", "debug") @@ -591,6 +580,9 @@ def MytoncoreSettings(user, mode): liteClient["configPath"] = "/usr/bin/ton/lite-client/ton-lite-client-test1.config.json" arr["liteClient"] = liteClient + # Записать настройки в файл + filePath = WriteSettingToFile(arr) + # Подтянуть настройки в mytoncore.py args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -s " + filePath] subprocess.run(args) @@ -606,11 +598,7 @@ def MytoncoreSettings(user, mode): arr["validatorConsole"] = validatorConsole # Записать настройки в файл - filePath = "/tmp/mytonsettings.json" - settings = json.dumps(arr) - file = open(filePath, 'w') - file.write(settings) - file.close() + filePath = WriteSettingToFile(arr) # Подтянуть настройки в mytoncore.py args = ["su", "-l", user, "-c", "python3 /usr/src/mytonctrl/mytoncore.py -s " + filePath] @@ -632,7 +620,18 @@ def MytoncoreSettings(user, mode): subprocess.run(args) #end define +def WriteSettingToFile(arr): + local.AddLog("start WriteSettingToFile fuction", "debug") + filePath = "/tmp/mytonsettings.json" + settings = json.dumps(arr) + file = open(filePath, 'w') + file.write(settings) + file.close() + return filePath +#end define + def CreateSymlink(): + local.AddLog("start CreateSymlink fuction", "debug") mytonctrl_file = "/usr/bin/mytonctrl" fift_file = "/usr/bin/fift" liteclient_file = "/usr/bin/liteclient" From 518c8c88f069a1e4a0a05e8e8c9236a3e489e012 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 10:59:03 +0300 Subject: [PATCH 30/61] debugging installation script --- mytoninstaller.py | 2 +- scripts/uninstall.sh | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 scripts/uninstall.sh diff --git a/mytoninstaller.py b/mytoninstaller.py index a2497e7a..79f31ac8 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -445,7 +445,7 @@ def ValidatorSetting(user): local.AddLog("start ValidatorSetting fuction", "debug") path = "/var/ton-work/db/config.json" - if not os.path.isfile(path): + if os.path.isfile(path): return #end if diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh new file mode 100644 index 00000000..21071876 --- /dev/null +++ b/scripts/uninstall.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e + +# Проверить sudo +if [ "$(id -u)" != "0" ]; then + echo "Please run script as root" + exit 1 +fi + +rm -rf /usr/src/ton +rm -rf /usr/src/mytonctrl +rm -rf /usr/bin/ton +rm -rf /var/ton-work +rm -rf /tmp/myton* +rm -rf /usr/loca/bin/myton* +rm -rf ~/.local/share/mytonctrl +rm -rf ~/.local/share/mytoncore/mytoncore.db From fe9cf5e5ff914a2b5f9a72de0573b049bdcea3c1 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 11:01:38 +0300 Subject: [PATCH 31/61] debugging installation script --- mytoninstaller.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index 79f31ac8..ae574616 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -444,6 +444,9 @@ def General(): def ValidatorSetting(user): local.AddLog("start ValidatorSetting fuction", "debug") + # Прописать автозагрузку авлидатора + Add2Systemd(name="validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log") # post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"" + path = "/var/ton-work/db/config.json" if os.path.isfile(path): return @@ -479,9 +482,6 @@ def ValidatorSetting(user): args = [validatorAppPath, "-C", validatorConfig, "--db", dbPath, "--ip", addr, "-l", logPath] subprocess.run(args) #end if - - # Прописать автозагрузку авлидатора - Add2Systemd(name="validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log") # post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"" # Создать ключи доступа к валидатору path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) @@ -555,6 +555,9 @@ def ValidatorSetting(user): def MytoncoreSettings(user, mode): local.AddLog("start MytoncoreSettings fuction", "debug") + + # Прописать mytoncore.py в автозагрузку + Add2Systemd(name="mytoncore", user=user, start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) path2 = "/usr/local/bin/mytoncore/mytoncore.db" @@ -612,9 +615,6 @@ def MytoncoreSettings(user, mode): subprocess.run(args) #end if - # Прописать mytoncore.py в автозагрузку - Add2Systemd(name="mytoncore", user=user, start="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py") - # Запустить mytoncore.py args = ["systemctl", "start", "mytoncore"] subprocess.run(args) From 23a0fefdff01cd89603be884fbacb19096f48ac6 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 11:27:59 +0300 Subject: [PATCH 32/61] debugging installation script --- mytoninstaller.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mytoninstaller.py b/mytoninstaller.py index ae574616..3df69c11 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -447,8 +447,10 @@ def ValidatorSetting(user): # Прописать автозагрузку авлидатора Add2Systemd(name="validator", user="validator", start="/usr/bin/ton/validator-engine/validator-engine -d -C /usr/bin/ton/validator-engine/ton-global.config.json --db /var/ton-work/db -l /var/ton-work/log") # post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\"" + # Проверить конфигурацию валидатора path = "/var/ton-work/db/config.json" if os.path.isfile(path): + local.AddLog("Validators config.json already exist. Break ValidatorSetting fuction", "debug") return #end if @@ -457,6 +459,7 @@ def ValidatorSetting(user): ip = response.text vport = random.randint(2000, 65000) addr = "{ip}:{vport}".format(ip=ip, vport=vport) + local.AddLog("Usnig addr: " + addr, "debug") # Создать переменные dbPath = "/var/ton-work/db" @@ -473,12 +476,14 @@ def ValidatorSetting(user): text = file.read() file.close() if "validator" not in text: + local.AddLog("Creating new user: validator", "debug") args = ["/usr/sbin/useradd", "-d", "/dev/null", "-s", "/dev/null", "validator"] subprocess.run(args) #end if # Проверка первого запуска валидатора if not os.path.isfile(configPath): + local.AddLog("First validator startup", "debug") args = [validatorAppPath, "-C", validatorConfig, "--db", dbPath, "--ip", addr, "-l", logPath] subprocess.run(args) #end if @@ -487,6 +492,7 @@ def ValidatorSetting(user): path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) path2 = "/usr/local/bin/mytoncore/mytoncore.db" if os.path.isfile(path) or os.path.isfile(path2): + local.AddLog("mytoncore.db already exist. Break ValidatorSetting fuction", "debug") return #end if @@ -498,6 +504,7 @@ def ValidatorSetting(user): client_pubkey = client_key + ".pub" # Создание ключей сервера для console + local.AddLog("Generating server key", "debug") args = ["/usr/bin/ton/utils/generate-random-id", "-m", "keys", "-n", server_key] process = subprocess.run(args, stdout=subprocess.PIPE) output = process.stdout.decode("utf-8") @@ -506,10 +513,12 @@ def ValidatorSetting(user): server_key_b64 = output_arr[1].replace('\n', '') # Копировать ключ в папку валидатора + local.AddLog("Coping the key to the validator directory", "debug") args = ["mv", server_key, dbPath + "/keyring/" + server_key_hex] subprocess.run(args) # Создание ключей клиента для console + local.AddLog("Generating client key", "debug") args = [generate_random_id, "-m", "keys", "-n", client_key] process = subprocess.run(args, stdout=subprocess.PIPE) output = process.stdout.decode("utf-8") @@ -522,6 +531,7 @@ def ValidatorSetting(user): subprocess.run(args) # Прописать наши ключи в конфигурационном файле валидатора + local.AddLog("Writing settings to validators config file", "debug") path = dbPath + "/config.json" file = open(path) text = file.read() @@ -545,6 +555,7 @@ def ValidatorSetting(user): subprocess.run(args) # Запустить валидатор + local.AddLog("Launching validator", "debug") args = ["systemctl", "start", "validator"] subprocess.run(args) From 928cced390c99d448b43b31a778226068fe7f457 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 11:32:31 +0300 Subject: [PATCH 33/61] debugging installation script --- scripts/uninstall.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh index 21071876..eab297b4 100644 --- a/scripts/uninstall.sh +++ b/scripts/uninstall.sh @@ -7,6 +7,11 @@ if [ "$(id -u)" != "0" ]; then exit 1 fi +# Цвета +COLOR='\033[92m' +ENDC='\033[0m' + +# Удаление файлов rm -rf /usr/src/ton rm -rf /usr/src/mytonctrl rm -rf /usr/bin/ton @@ -15,3 +20,12 @@ rm -rf /tmp/myton* rm -rf /usr/loca/bin/myton* rm -rf ~/.local/share/mytonctrl rm -rf ~/.local/share/mytoncore/mytoncore.db + +# Удаление ссылок +rm -rf /usr/bin/fift +rm -rf /usr/bin/liteclient +rm -rf /usr/bin/validator-console +rm -rf /usr/bin/mytonctrl + +# Конец +echo -e "${COLOR}Uninstall Complete${ENDC}" From 5b61bd3851122cfd2b1f4f4b662b643ca1916417 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 12:00:56 +0300 Subject: [PATCH 34/61] debugging installation script --- mytoninstaller.py | 1 + scripts/uninstall.sh | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/mytoninstaller.py b/mytoninstaller.py index 3df69c11..6c3c18a1 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -573,6 +573,7 @@ def MytoncoreSettings(user, mode): path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) path2 = "/usr/local/bin/mytoncore/mytoncore.db" if os.path.isfile(path) or os.path.isfile(path2): + local.AddLog("mytoncore.db already exist. Break MytoncoreSettings fuction", "debug") return #end if diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh index eab297b4..612c1ae9 100644 --- a/scripts/uninstall.sh +++ b/scripts/uninstall.sh @@ -11,6 +11,15 @@ fi COLOR='\033[92m' ENDC='\033[0m' +# Остановка служб +systemctl stop validator +systemctl stop mytoncore + +# Удаление служб +rm -rf /etc/systemd/system/validator.service +rm -rf /etc/systemd/system/mytoncore.service +systemctl daemon-reload + # Удаление файлов rm -rf /usr/src/ton rm -rf /usr/src/mytonctrl From cf107f3e94f96d600f52a180dfd789f6852544b2 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 13:37:52 +0300 Subject: [PATCH 35/61] debugging installation script --- mytoninstaller.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mytoninstaller.py b/mytoninstaller.py index 6c3c18a1..a31074ac 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -492,6 +492,8 @@ def ValidatorSetting(user): path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) path2 = "/usr/local/bin/mytoncore/mytoncore.db" if os.path.isfile(path) or os.path.isfile(path2): + result = subprocess.call(["ls", "-lh", path]) + result2 = subprocess.call(["ls", "-lh", path2]) local.AddLog("mytoncore.db already exist. Break ValidatorSetting fuction", "debug") return #end if From 3eb0dcb57ed6866b85c68179a16ba99c17de8eb2 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 14:25:42 +0300 Subject: [PATCH 36/61] debugging installation script --- scripts/uninstall.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh index 612c1ae9..671ef2b4 100644 --- a/scripts/uninstall.sh +++ b/scripts/uninstall.sh @@ -15,6 +15,10 @@ ENDC='\033[0m' systemctl stop validator systemctl stop mytoncore +# Переменные +str=$(systemctl cat mytoncore | grep User | cut -d '=' -f2) +user=$(echo ${str}) + # Удаление служб rm -rf /etc/systemd/system/validator.service rm -rf /etc/systemd/system/mytoncore.service @@ -27,8 +31,8 @@ rm -rf /usr/bin/ton rm -rf /var/ton-work rm -rf /tmp/myton* rm -rf /usr/loca/bin/myton* -rm -rf ~/.local/share/mytonctrl -rm -rf ~/.local/share/mytoncore/mytoncore.db +rm -rf /home/${user}/.local/share/mytonctrl +rm -rf /home/${user}/.local/share/mytoncore/mytoncore.db # Удаление ссылок rm -rf /usr/bin/fift From 09c65ca7c6d3751d9c14c9fc77732581662a5cba Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 14:50:13 +0300 Subject: [PATCH 37/61] debugging installation script --- mytoninstaller.py | 9 +++++++++ scripts/uninstall.sh | 6 +++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index a31074ac..386c3b7d 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -650,6 +650,7 @@ def CreateSymlink(): fift_file = "/usr/bin/fift" liteclient_file = "/usr/bin/liteclient" validator_console_file = "/usr/bin/validator-console" + env_file = "/etc/environment" file = open(mytonctrl_file, 'wt') file.write("/usr/bin/python3 /usr/src/mytonctrl/mytonctrl.py") file.close() @@ -664,6 +665,14 @@ def CreateSymlink(): file.close() args = ["chmod", "+x", mytonctrl_file, fift_file, liteclient_file, validator_console_file] subprocess.run(args) + + # env + fiftpath = "export FIFTPATH=$SOURCES_DIR/ton/crypto/fift/lib/:$SOURCES_DIR/ton/crypto/smartcont/" + file = open(env_file, 'at') + text = file.read() + if fiftpath not in text: + file.write(fiftpath + '\n') + file.close() #end define diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh index 671ef2b4..6e8c2a20 100644 --- a/scripts/uninstall.sh +++ b/scripts/uninstall.sh @@ -25,9 +25,9 @@ rm -rf /etc/systemd/system/mytoncore.service systemctl daemon-reload # Удаление файлов -rm -rf /usr/src/ton -rm -rf /usr/src/mytonctrl -rm -rf /usr/bin/ton +#rm -rf /usr/src/ton +#rm -rf /usr/src/mytonctrl +#rm -rf /usr/bin/ton rm -rf /var/ton-work rm -rf /tmp/myton* rm -rf /usr/loca/bin/myton* From 916bcfcd582b163c02a8d3ecf3b9aff6b67844c8 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 14:52:44 +0300 Subject: [PATCH 38/61] debugging installation script --- mytoninstaller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index 386c3b7d..8f4d1b0c 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -668,7 +668,7 @@ def CreateSymlink(): # env fiftpath = "export FIFTPATH=$SOURCES_DIR/ton/crypto/fift/lib/:$SOURCES_DIR/ton/crypto/smartcont/" - file = open(env_file, 'at') + file = open(env_file, 'a+') text = file.read() if fiftpath not in text: file.write(fiftpath + '\n') From b26a0bb9008d2b0650aea28ed23800afed9f4ec6 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 14:53:42 +0300 Subject: [PATCH 39/61] debugging installation script --- mytoninstaller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index 8f4d1b0c..1d92092c 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -667,7 +667,7 @@ def CreateSymlink(): subprocess.run(args) # env - fiftpath = "export FIFTPATH=$SOURCES_DIR/ton/crypto/fift/lib/:$SOURCES_DIR/ton/crypto/smartcont/" + fiftpath = "export FIFTPATH=/usr/src/ton/crypto/fift/lib/:/usr/src/ton/crypto/smartcont/" file = open(env_file, 'a+') text = file.read() if fiftpath not in text: From 90aef90bc97f1a7ca579bb870c5118787f41bdfd Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 14:59:50 +0300 Subject: [PATCH 40/61] debugging installation script --- mytoninstaller.py | 2 +- test.txt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 test.txt diff --git a/mytoninstaller.py b/mytoninstaller.py index 1d92092c..c7e5b105 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -668,7 +668,7 @@ def CreateSymlink(): # env fiftpath = "export FIFTPATH=/usr/src/ton/crypto/fift/lib/:/usr/src/ton/crypto/smartcont/" - file = open(env_file, 'a+') + file = open(env_file, 'rt+') text = file.read() if fiftpath not in text: file.write(fiftpath + '\n') diff --git a/test.txt b/test.txt new file mode 100644 index 00000000..ce8c77db --- /dev/null +++ b/test.txt @@ -0,0 +1,2 @@ +123 +456 From e56a07c62c2085d2edad0de3ece702047d9b9044 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 15:00:13 +0300 Subject: [PATCH 41/61] debugging installation script --- test.txt | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 test.txt diff --git a/test.txt b/test.txt deleted file mode 100644 index ce8c77db..00000000 --- a/test.txt +++ /dev/null @@ -1,2 +0,0 @@ -123 -456 From b967983c1d21b48719eb0946fd253ebeb5a16793 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 15:01:29 +0300 Subject: [PATCH 42/61] debugging installation script --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0d7c9f5..db219389 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Ubuntu 16.04 LTS (Xenial Xerus) - Error: TON compilation error Ubuntu 18.04 LTS (Bionic Beaver) - OK Ubuntu 20.04 LTS (Focal Fossa) - OK -Debian 10.3 +Debian 10 - OK ``` ## Описание установочных скриптов From 36b01d0e2f0937e37d7f2d012c71650fad03d98e Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 3 Jun 2020 15:16:35 +0300 Subject: [PATCH 43/61] debugging installation script --- mytoninstaller.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mytoninstaller.py b/mytoninstaller.py index c7e5b105..d1ffee4a 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 # -*- coding: utf_8 -*- -# su -l ${user} -c "cmd" import random import requests From 15310057e4d59201f81290edd02beb11f00e753a Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 4 Jun 2020 09:26:54 +0300 Subject: [PATCH 44/61] GetStake function change --- mytoncore.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mytoncore.py b/mytoncore.py index 300710b8..439d796d 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -749,8 +749,9 @@ def RecoverStake(self): #end define def GetStake(self, account, validators): - stakePercent = local.db.get("stakePercent") - if stakePercent: + stake = local.db.get("stake") + stakePercent = local.db.get("stakePercent", 99) + if stake is None: sp = stakePercent / 100 if sp > 1 or sp < 0: local.AddLog("Wrong stakePercent value. Using default stake.", "warning") @@ -758,8 +759,6 @@ def GetStake(self, account, validators): stake = int(account.balance*sp/2) elif len(validators) > 0: stake = int(account.balance*sp) - if stake is None: - stake = local.db.get("stake", 20138) return stake #end define From 15292550ca129e9ca2c606d2feae11a7c23f7cdb Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 4 Jun 2020 09:48:08 +0300 Subject: [PATCH 45/61] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index db219389..53d3a953 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Debian 10 - OK ## Установка (Ubuntu) 1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. ```sh -wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/install.sh +wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/install.sh sudo bash install.sh -m lite ``` @@ -77,7 +77,7 @@ mytonctrl ## Установка (Debian) 1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. ```sh -wget https://raw.githubusercontent.com/igroman787/mytonctrl/master/scripts/install.sh +wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/install.sh su root -c 'bash install.sh -m lite' ``` From 77632cf9e4e9f56799ed77a46046e4c28e24de95 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 4 Jun 2020 11:09:24 +0300 Subject: [PATCH 46/61] GetStake bugfix --- mytoncore.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mytoncore.py b/mytoncore.py index 439d796d..936036f1 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -791,7 +791,7 @@ def ElectionEntry(self): minStake = self.GetMinStake() # Calculate stake - stake = GetStake(account, validators) + stake = self.GetStake(account, validators) # Check if we have enough grams if minStake > stake: From 2ab8a3ff106f5f588172dd7ad8d9591a2de38454 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 4 Jun 2020 11:11:48 +0300 Subject: [PATCH 47/61] update bugfix --- scripts/update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/update.sh b/scripts/update.sh index 06c352ef..e83c3ecf 100644 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -13,7 +13,7 @@ ENDC='\033[0m' cd /usr/src/mytonctrl git pull --recurse-submodules -systemctl restart mytonctrl +systemctl restart mytoncore # Конец echo "${COLOR}[1/1]${ENDC} Обновление компонентов MyTonCtrl завершена" From 4a2ea358afe73549eaaf89a8b1d0e9834858c4d8 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 4 Jun 2020 22:01:15 +0300 Subject: [PATCH 48/61] uninstall.sh bugfix --- scripts/uninstall.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/uninstall.sh b/scripts/uninstall.sh index 6e8c2a20..fe29dd0b 100644 --- a/scripts/uninstall.sh +++ b/scripts/uninstall.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e # Проверить sudo if [ "$(id -u)" != "0" ]; then @@ -8,7 +7,7 @@ if [ "$(id -u)" != "0" ]; then fi # Цвета -COLOR='\033[92m' +COLOR='\033[34m' ENDC='\033[0m' # Остановка служб @@ -30,7 +29,8 @@ systemctl daemon-reload #rm -rf /usr/bin/ton rm -rf /var/ton-work rm -rf /tmp/myton* -rm -rf /usr/loca/bin/myton* +rm -rf /usr/local/bin/mytoninstaller/ +rm -rf /usr/local/bin/mytoncore/mytoncore.db rm -rf /home/${user}/.local/share/mytonctrl rm -rf /home/${user}/.local/share/mytoncore/mytoncore.db From 98fccaf88ab2a33b4550161b11b38df8532555fa Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 22 Jul 2020 12:20:10 +0300 Subject: [PATCH 49/61] GetAdnlAddr function bugfix --- mypylib | 2 +- mytoncore.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mypylib b/mypylib index 7a3a8d21..3ecd8772 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit 7a3a8d215a5dde3c64f71e74411870dab6326fb1 +Subproject commit 3ecd877285bf5e09beda4046e9e85bc846b303c5 diff --git a/mytoncore.py b/mytoncore.py index 936036f1..24142a94 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -629,11 +629,11 @@ def AddAdnlAddrToValidator(self, adnlAddr): def GetAdnlAddr(self): local.AddLog("start GetAdnlAddr function", "debug") adnlAddr = self.adnlAddr - if adnlAddr is None: + # if adnlAddr is None: # Create ADNL address - adnlAddr = self.CreatNewKey() - self.AddAdnlAddrToValidator(adnlAddr) - self.adnlAddr = adnlAddr + # adnlAddr = self.CreatNewKey() + # self.AddAdnlAddrToValidator(adnlAddr) + # self.adnlAddr = adnlAddr return adnlAddr #end define From d20d94887a44819ecc2314bf163ac40e1d8eaf4f Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 22 Jul 2020 12:44:57 +0300 Subject: [PATCH 50/61] GetBookmarks function bugfix --- mytoncore.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mytoncore.py b/mytoncore.py index 24142a94..2aea1268 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -1243,8 +1243,9 @@ def AddBookmark(self, bookmark): def GetBookmarks(self): bookmarks = local.db.get("bookmarks") - for bookmark in bookmarks: - self.WriteBookmarkData(bookmark) + if bookmarks is not None: + for bookmark in bookmarks: + self.WriteBookmarkData(bookmark) return bookmarks #end define From 95dd96535471243f620ab3cd41d8bab6367ff7c3 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 23 Jul 2020 11:45:10 +0300 Subject: [PATCH 51/61] small bugfix --- mypylib | 2 +- mytoninstaller.py | 2 +- scripts/pow-miner.txt | 31 +++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 scripts/pow-miner.txt diff --git a/mypylib b/mypylib index 3ecd8772..ea7aa391 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit 3ecd877285bf5e09beda4046e9e85bc846b303c5 +Subproject commit ea7aa391d4f0c586a3ca6d8ee34784ade0277632 diff --git a/mytoninstaller.py b/mytoninstaller.py index d1ffee4a..d8891d43 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -654,7 +654,7 @@ def CreateSymlink(): file.write("/usr/bin/python3 /usr/src/mytonctrl/mytonctrl.py") file.close() file = open(fift_file, 'wt') - file.write("/usr/bin/ton/crypto/fift") + file.write("/usr/bin/ton/crypto/fift \$@") file.close() file = open(liteclient_file, 'wt') file.write("/usr/bin/ton/lite-client/lite-client -C /usr/bin/ton/lite-client/ton-lite-client-test1.config.json \$@") diff --git a/scripts/pow-miner.txt b/scripts/pow-miner.txt new file mode 100644 index 00000000..00a555c5 --- /dev/null +++ b/scripts/pow-miner.txt @@ -0,0 +1,31 @@ +Name Type Address / Domain Balance / Exp. date +pow100_1 account kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN 12413006.83136239 +pow100_2 account kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN- 12415609.09149575 +pow100_3 account kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV 12413006.83131689 +pow100_4 account kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ 12411505.527347859 +pow100_5 account kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6 12404099.094616815 +pow100_6 account kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF 12402297.53016986 +pow100_7 account kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8 12416609.960904717 +pow100_8 account kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm 12406200.92008303 +pow100_9 account kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7 12406701.354808928 +pow100_10 account kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N 12410804.91885839 +pow10k_1 account kf8guqdIbY6kpMykR8WFeVGbZcP2iuBagXfnQuq0rGrxgE04 324099864.00006646 +pow10k_2 account kf9CxReRyaGj0vpSH0gRZkOAitm_yDHvgiMGtmvG-ZTirrMC 324399864.260822 +pow10k_3 account kf-WXA4CX4lqyVlN4qItlQSWPFIy00NvO2BAydgC4CTeIUme 312099853.56844664 +pow10k_4 account kf8yF4oXfIj7BZgkqXM6VsmDEgCqWVSKECO1pC0LXWl399Vx 314999856.09014076 +pow10k_5 account kf9nNY69S3_heBBSUtpHRhIzjjqY0ChugeqbWcQGtGj-gQxO 323599863.5655469 +pow10k_6 account kf_wUXx-l1Ehw0kfQRgFtWKO07B6WhSqcUQZNyh4Jmj8R4zL 319099859.6536181 +pow10k_7 account kf_6keW5RniwNQYeq3DNWGcohKOwI85p-V2MsPk4v23tyO3I 315199856.2633477 +pow10k_8 account kf_NSPpF4ZQ7mrPylwk-8XQQ1qFD5evLnx5_oZVNywzOjSfh 317599858.3496544 +pow10k_9 account kf-uNWj4JmTJefr7IfjBSYQhFbd3JqtQ6cxuNIsJqDQ8SiEA 318899859.47983295 +pow10k_10 account kf8mO4l6ZB_eaMn1OqjLRrrkiBcSt7kYTvJC_dzJLdpEDKxn 316899857.7413052 + + + +> runmethod kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN get_pow_params +result: [ 290654758487907751949376233055479468292 719712481031621425209468393577880020575432575272700909504830238907 100000000000 256 ] + +> /usr/bin/ton/crypto/pow-miner -vv -w -t +> /usr/bin/ton/crypto/pow-miner -vv -w10 -t100 kQBWkNKqzCAwA9vjMwRmg7aY75Rf8lByPA9zKXoqGkHi8SM7 290654758487907751949376233055479468292 719712481031621425209468393577880020575432575272700909504830238907 100000000000 kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN mined.boc + + From 00b8e0cc3cdf576bdd9be9cb9d3a675e3d47758a Mon Sep 17 00:00:00 2001 From: igroman787 Date: Fri, 24 Jul 2020 14:47:56 +0300 Subject: [PATCH 52/61] add mining function --- mypylib | 2 +- mytoncore.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/mypylib b/mypylib index ea7aa391..a7833c91 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit ea7aa391d4f0c586a3ca6d8ee34784ade0277632 +Subproject commit a7833c9151b9c5628133bc979ee0f91f222fd644 diff --git a/mytoncore.py b/mytoncore.py index 2aea1268..43ba5ded 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -1509,6 +1509,50 @@ def SaveNetworStatistics(ton): file.write(text) #end define +def Mining(ton): + walletName = "mining_wallet" + wallet = ton.GetLocalWallet(walletName) + if wallet is None: + return + while True: + MiningWork(ton, wallet) +#end define + +def MiningWork(ton, wallet): # fix me (ибо говнокод) + local.AddLog("start MiningWork function", "debug") + + powAddr = "kf8guqdIbY6kpMykR8WFeVGbZcP2iuBagXfnQuq0rGrxgE04" + cmd = "runmethod {addr} get_pow_params".format(addr=powAddr) + result = ton.liteClient.Run(cmd) + data = ton.Result2List(result) + seed = data[0] + complexity = data[1] + iterations = data[2] + + fileName = ton.tempDir + "mined.boc" + appPath = "/usr/bin/ton/crypto/pow-miner" + cpus = psutil.cpu_count() - 1 + numThreads = "-w{cpus}".format(cpus=cpus) + args = [appPath, "-vv", numThreads, "-t100", wallet.addr, seed, complexity, iterations, powAddr, fileName] + for i in range(len(args)): + args[i] = str(args[i]) + process = subprocess.run(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=110) + output = process.stdout.decode("utf-8") + err = process.stderr.decode("utf-8") + + print("output:", output) + print("err:", err) + + if "Saving" in err: # fix me (in output) + result = ton.liteClient.Run(cmd) + data = ton.Result2List(result) + if seed == data[0] and complexity == data[1]: + wallet = Wallet() + wallet.addr = powAddr + ton.SendFile(fileName, wallet) + local.AddLog("Yep!") +#end define + def General(): local.AddLog("start General function", "debug") ton = MyTonCore() @@ -1519,6 +1563,7 @@ def General(): local.StartCycle(Offers, sec=600, args=(ton, )) local.StartCycle(Domains, sec=600, args=(ton, )) local.StartCycle(Telemetry, sec=60, args=(ton, )) + local.StartThread(Mining, args=(ton, )) Sleep() #end define From 1988cfb771cbc2b1c0d201e45da968c0b43fa168 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Wed, 29 Jul 2020 15:46:31 +0300 Subject: [PATCH 53/61] miner bugfix --- mypylib | 2 +- mytoncore.py | 134 ++++++++++++++++++++++++---------------------- mytonctrl.py | 29 ++++++++-- mytoninstaller.py | 7 ++- 4 files changed, 104 insertions(+), 68 deletions(-) diff --git a/mypylib b/mypylib index a7833c91..3ecd8772 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit a7833c9151b9c5628133bc979ee0f91f222fd644 +Subproject commit 3ecd877285bf5e09beda4046e9e85bc846b303c5 diff --git a/mytoncore.py b/mytoncore.py index 43ba5ded..90169ada 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -21,13 +21,6 @@ def Run(self, cmd): err = process.stderr.decode("utf-8") if len(err) > 0: raise Exception("LiteClient error: {err}".format(err=err)) - ### debug on ### - filePath = local.buffer.get("myTempDir") + "LiteClient.log" - file = open(filePath, 'w') - file.write(output) - file.write(err) - file.close() - ### debug off ### return output #end define #end class @@ -47,13 +40,6 @@ def Run(self, cmd): err = process.stderr.decode("utf-8") if len(err) > 0: raise Exception("ValidatorConsole error: {err}".format(err=err)) - ### debug on ### - filePath = local.buffer.get("myTempDir") + "ValidatorConsole.log" - file = open(filePath, 'w') - file.write(output) - file.write(err) - file.close() - ### debug off ### return output #end define #end class @@ -75,17 +61,28 @@ def Run(self, args): err = process.stderr.decode("utf-8") if len(err) > 0: raise Exception("Fift error: {err}".format(err=err)) - ### debug on ### - filePath = local.buffer.get("myTempDir") + "Fift.log" - file = open(filePath, 'w') - file.write(output) - file.write(err) - file.close() - ### debug off ### return output #end define #end class +class Miner: + def __init__(self): + self.appPath = None + #end define + + def Run(self, args): + for i in range(len(args)): + args[i] = str(args[i]) + args = [self.appPath] + args + process = subprocess.run(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + output = process.stdout.decode("utf-8") + err = process.stderr.decode("utf-8") + # if len(err) > 0: + # raise Exception("Miner error: {err}".format(err=err)) + return err + #end define +#end class + class Wallet: def __init__(self): self.name = None @@ -143,6 +140,7 @@ def __init__(self): self.liteClient = LiteClient() self.validatorConsole = ValidatorConsole() self.fift = Fift() + self.miner = Miner() local.dbLoad() self.Refresh() @@ -178,6 +176,13 @@ def Refresh(self): self.fift.appPath = fift["appPath"] self.fift.libsPath = fift["libsPath"] self.fift.smartcontsPath = fift["smartcontsPath"] + + miner = local.db.get("miner") + if miner is not None: + self.miner.appPath = miner["appPath"] + # set miner {"appPath":"/usr/bin/ton/crypto/pow-miner"} + # set powAddr kf8guqdIbY6kpMykR8WFeVGbZcP2iuBagXfnQuq0rGrxgE04 + # set minerAddr kQAXRfNYUkFtecUg91zvbUkpy897CDcE2okhFxAlOLcM3_XD #end define def GetVarFromWorkerOutput(self, text, search): @@ -584,6 +589,18 @@ def GetConfig36(self): return config36 #end define + def GetPowParams(self, powAddr): + local.AddLog("start GetPowParams function", "debug") + params = dict() + cmd = "runmethod {addr} get_pow_params".format(addr=powAddr) + result = self.liteClient.Run(cmd) + data = self.Result2List(result) + params["seed"] = data[0] + params["complexity"] = data[1] + params["iterations"] = data[2] + return params + #end define + def CreatNewKey(self): local.AddLog("start CreatNewKey function", "debug") result = self.validatorConsole.Run("newkey") @@ -1356,6 +1373,16 @@ def GetNetworStatistics(self): data = json.loads(text) return data #end define + + def GetSettings(self, name): + result = local.db.get(name) + return result + #end define + + def SetSettings(self, name, value): + local.db[name] = json.loads(value) + local.dbSave() + #end define #end class def ng2g(ng): @@ -1363,17 +1390,19 @@ def ng2g(ng): #end define def Init(): + # Event reaction + if ("-e" in sys.argv): + x = sys.argv.index("-e") + eventName = sys.argv[x+1] + Event(eventName) + #end if + local.Run() local.buffer["network"] = dict() local.buffer["network"]["type"] = "bytes" local.buffer["network"]["in"] = [0]*15*6 local.buffer["network"]["out"] = [0]*15*6 local.buffer["network"]["all"] = [0]*15*6 - - if ("-e" in sys.argv): - x = sys.argv.index("-e") - eventName = sys.argv[x+1] - Event(eventName) #end define def Event(eventName): @@ -1510,47 +1539,26 @@ def SaveNetworStatistics(ton): #end define def Mining(ton): - walletName = "mining_wallet" - wallet = ton.GetLocalWallet(walletName) - if wallet is None: + powAddr = local.db.get("powAddr") + minerAddr = local.db.get("minerAddr") + if powAddr is None or minerAddr is None: return - while True: - MiningWork(ton, wallet) -#end define - -def MiningWork(ton, wallet): # fix me (ибо говнокод) - local.AddLog("start MiningWork function", "debug") + #end if - powAddr = "kf8guqdIbY6kpMykR8WFeVGbZcP2iuBagXfnQuq0rGrxgE04" - cmd = "runmethod {addr} get_pow_params".format(addr=powAddr) - result = ton.liteClient.Run(cmd) - data = ton.Result2List(result) - seed = data[0] - complexity = data[1] - iterations = data[2] - - fileName = ton.tempDir + "mined.boc" - appPath = "/usr/bin/ton/crypto/pow-miner" + local.AddLog("start Mining function", "debug") + filePath = ton.tempDir + "mined.boc" cpus = psutil.cpu_count() - 1 numThreads = "-w{cpus}".format(cpus=cpus) - args = [appPath, "-vv", numThreads, "-t100", wallet.addr, seed, complexity, iterations, powAddr, fileName] - for i in range(len(args)): - args[i] = str(args[i]) - process = subprocess.run(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=110) - output = process.stdout.decode("utf-8") - err = process.stderr.decode("utf-8") - - print("output:", output) - print("err:", err) - - if "Saving" in err: # fix me (in output) - result = ton.liteClient.Run(cmd) - data = ton.Result2List(result) - if seed == data[0] and complexity == data[1]: - wallet = Wallet() - wallet.addr = powAddr - ton.SendFile(fileName, wallet) + params = ton.GetPowParams(powAddr) + args = ["-vv", numThreads, "-t100", minerAddr, params["seed"], params["complexity"], params["iterations"], powAddr, filePath] + result = ton.miner.Run(args) + + if "Saving" in result: + newParams = ton.GetPowParams(powAddr) + if params["seed"] == newParams["seed"] and params["complexity"] == newParams["complexity"]: + ton.liteClient.Run("sendfile " + filePath) local.AddLog("Yep!") + #end if #end define def General(): @@ -1563,7 +1571,7 @@ def General(): local.StartCycle(Offers, sec=600, args=(ton, )) local.StartCycle(Domains, sec=600, args=(ton, )) local.StartCycle(Telemetry, sec=60, args=(ton, )) - local.StartThread(Mining, args=(ton, )) + local.StartCycle(Mining, sec=1, args=(ton, )) Sleep() #end define diff --git a/mytonctrl.py b/mytonctrl.py index 0d6597e6..15d933de 100644 --- a/mytonctrl.py +++ b/mytonctrl.py @@ -8,7 +8,6 @@ local = MyPyClass(__file__) console = MyPyConsole() ton = MyTonCore() -# Must control: /var/ton-work/db/keyring/ def Init(): # Create user console @@ -51,6 +50,9 @@ def Init(): console.AddItem("ve", VoteElectionEntry, "Голосовать в выборах / Vote election entry") console.AddItem("vl", PrintValidatorList, "Показать действующие валидаторы / Show active validators") + console.AddItem("get", GetSettings, "Посмотреть настройки / Get settings") + console.AddItem("set", SetSettings, "Задать настройки / Set settings") + console.AddItem("test", Test, "Test") console.AddItem("pt", PrintTest, "PrintTest") @@ -60,12 +62,12 @@ def Init(): #end define def Update(args): - RunAsRoot(["sh", "/usr/src/mytonctrl/scripts/update.sh"]) + RunAsRoot(["bash", "/usr/src/mytonctrl/scripts/update.sh"]) ColorPrint("Update - {green}OK{endc}") #end define def Upgrade(args): - RunAsRoot(["sh", "/usr/src/mytonctrl/scripts/upgrade.sh"]) + RunAsRoot(["bash", "/usr/src/mytonctrl/scripts/upgrade.sh"]) ColorPrint("Upgrade - {green}OK{endc}") #end define @@ -668,6 +670,27 @@ def PrintValidatorList(args): print(json.dumps(validators, indent=4)) #end define +def GetSettings(args): + try: + name = args[0] + except: + ColorPrint("{red}Bad args. Usage:{endc} get ") + return + result = ton.GetSettings(name) + print(json.dumps(result, indent=4)) +#end define + +def SetSettings(args): + try: + name = args[0] + value = args[1] + except: + ColorPrint("{red}Bad args. Usage:{endc} set ") + return + result = ton.SetSettings(name, value) + ColorPrint("SetSettings - {green}OK{endc}") +#end define + ### diff --git a/mytoninstaller.py b/mytoninstaller.py index d8891d43..916a56da 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -574,7 +574,7 @@ def MytoncoreSettings(user, mode): path = "/home/{user}/.local/share/mytoncore/mytoncore.db".format(user=user) path2 = "/usr/local/bin/mytoncore/mytoncore.db" if os.path.isfile(path) or os.path.isfile(path2): - local.AddLog("mytoncore.db already exist. Break MytoncoreSettings fuction", "debug") + local.AddLog("mytoncore.db already exist. Break MytoncoreSettings fuction", "warning") return #end if @@ -596,6 +596,11 @@ def MytoncoreSettings(user, mode): liteClient["configPath"] = "/usr/bin/ton/lite-client/ton-lite-client-test1.config.json" arr["liteClient"] = liteClient + # miner + miner = dict() + miner["appPath"] = "/usr/bin/ton/crypto/pow-miner" + arr["miner"] = miner + # Записать настройки в файл filePath = WriteSettingToFile(arr) From c649f609c9ebc4b22dcf78e1226af8a70b7618d1 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Mon, 3 Aug 2020 18:28:36 +0300 Subject: [PATCH 54/61] added multilanguage support --- mypylib | 2 +- mytoncore.py | 4 +- mytonctrl.py | 257 +++++++++++++++++++++++------------------ mytoninstaller.py | 32 +++--- translate.json | 288 ++++++++++++++++++++++++++++++++++++++-------- 5 files changed, 404 insertions(+), 179 deletions(-) diff --git a/mypylib b/mypylib index 3ecd8772..763cac93 160000 --- a/mypylib +++ b/mypylib @@ -1 +1 @@ -Subproject commit 3ecd877285bf5e09beda4046e9e85bc846b303c5 +Subproject commit 763cac93ab1695b1d901348232163b93098df32a diff --git a/mytoncore.py b/mytoncore.py index 90169ada..44e9754f 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -181,8 +181,8 @@ def Refresh(self): if miner is not None: self.miner.appPath = miner["appPath"] # set miner {"appPath":"/usr/bin/ton/crypto/pow-miner"} - # set powAddr kf8guqdIbY6kpMykR8WFeVGbZcP2iuBagXfnQuq0rGrxgE04 - # set minerAddr kQAXRfNYUkFtecUg91zvbUkpy897CDcE2okhFxAlOLcM3_XD + # set powAddr "kf8guqdIbY6kpMykR8WFeVGbZcP2iuBagXfnQuq0rGrxgE04" + # set minerAddr "kQAXRfNYUkFtecUg91zvbUkpy897CDcE2okhFxAlOLcM3_XD" #end define def GetVarFromWorkerOutput(self, text, search): diff --git a/mytonctrl.py b/mytonctrl.py index 15d933de..9dd37290 100644 --- a/mytonctrl.py +++ b/mytonctrl.py @@ -10,48 +10,49 @@ ton = MyTonCore() def Init(): + # Load translate table + local.InitTranslator("/usr/src/mytonctrl/translate.json") + # Create user console console.name = "MyTonCtrl" - console.AddItem("update", Update, "Подтянуть обновление mytonctrl / Pull mytonctrl update") - console.AddItem("upgrade", Upgrade, "Подтянуть исходный код и перекомпилировать компоненты TON / Pull up the source code and recompile the TON components") - console.AddItem("status", PrintStatus, "Показать статус TON / Show TON status") - console.AddItem("seqno", Seqno, "Получить seqno кошелька / Get seqno wallet") - - console.AddItem("nw", CreatNewWallet, "Создать новый локальный кошелек / Create a new local wallet") - console.AddItem("aw", ActivateWallet, "Активировать локальный кошелек / Activate local wallet") - console.AddItem("wl", PrintWalletsList, "Показать локальные кошельки / Show wallet list") - console.AddItem("iw", ImportWalletFromFile, "Импортировать кошелек из файла / Import wallet from file") - console.AddItem("swa", SaveWalletAddressToFile, "Сохранить адрес кошелька в файл / Save wallet address to file") - console.AddItem("dw", DeleteWallet, "Удалить локальный кошелек / Delete local wallet") + console.AddItem("update", Update, local.Translate("update_cmd")) + console.AddItem("upgrade", Upgrade, local.Translate("upgrade_cmd")) + console.AddItem("status", PrintStatus, local.Translate("status_cmd")) + console.AddItem("seqno", Seqno, local.Translate("seqno_cmd")) - console.AddItem("vas", ViewAccountStatus, "Показать статус аккаунта / View account status") - console.AddItem("vah", ViewAccountHistory, "Показать историю аккаунта / View account history") - console.AddItem("mg", MoveGrams, "Перевод средств на кошелек / Move grams to account") + console.AddItem("nw", CreatNewWallet, local.Translate("nw_cmd")) + console.AddItem("aw", ActivateWallet, local.Translate("aw_cmd")) + console.AddItem("wl", PrintWalletsList, local.Translate("wl_cmd")) + console.AddItem("iw", ImportWalletFromFile, local.Translate("iw_cmd")) + console.AddItem("swa", SaveWalletAddressToFile, local.Translate("swa_cmd")) + console.AddItem("dw", DeleteWallet, local.Translate("dw_cmd")) - console.AddItem("nb", CreatNewBookmark, "Добавить аккаунт в закладки / Create new bookmark") - console.AddItem("bl", PrintBookmarksList, "Показать закладки / Show bookmark list") - console.AddItem("db", DeleteBookmark, "Удалить закладку / Delete bookmark") + console.AddItem("vas", ViewAccountStatus, local.Translate("vas_cmd")) + console.AddItem("vah", ViewAccountHistory, local.Translate("vah_cmd")) + console.AddItem("mg", MoveGrams, local.Translate("mg_cmd")) - console.AddItem("nr", CreatNewRule, "Добавить правило в расписание / Create new rule") - console.AddItem("rl", PrintRulesList, "Показать правила расписания / Show rule list") - console.AddItem("dr", DeleteRule, "Удалить правило из расписания / Delete rule") + console.AddItem("nb", CreatNewBookmark, local.Translate("nb_cmd")) + console.AddItem("bl", PrintBookmarksList, local.Translate("bl_cmd")) + console.AddItem("db", DeleteBookmark, local.Translate("db_cmd")) - #console.AddItem("w2m", MoveGramsFromMixer, "Пропустить средства через миксер") + # console.AddItem("nr", CreatNewRule, local.Translate("nr_cmd")) # "Добавить правило в расписание / Create new rule" + # console.AddItem("rl", PrintRulesList, local.Translate("rl_cmd")) # "Показать правила расписания / Show rule list" + # console.AddItem("dr", DeleteRule, local.Translate("dr_cmd")) # "Удалить правило из расписания / Delete rule" - console.AddItem("nd", NewDomain, "Арендовать новый домен / New domain") - console.AddItem("dl", PrintDomainsList, "Показать арендованные домены / Show domain list") - console.AddItem("vds", ViewDomainStatus, "Показать статус домена / View domain status") - console.AddItem("dd", DeleteDomain, "Удалить домен / Delete domain") + console.AddItem("nd", NewDomain, local.Translate("nd_cmd")) + console.AddItem("dl", PrintDomainsList, local.Translate("dl_cmd")) + console.AddItem("vds", ViewDomainStatus, local.Translate("vds_cmd")) + console.AddItem("dd", DeleteDomain, local.Translate("dd_cmd")) - console.AddItem("ol", PrintOffersList, "Показать действующие предложения / Show offer list") - console.AddItem("vo", VoteOffer, "Голосовать за предложение / Vote for offer") - console.AddItem("el", PrintElectionEntriesList, "Показать действующие выборы / Show election entries list") - console.AddItem("ve", VoteElectionEntry, "Голосовать в выборах / Vote election entry") - console.AddItem("vl", PrintValidatorList, "Показать действующие валидаторы / Show active validators") + console.AddItem("ol", PrintOffersList, local.Translate("ol_cmd")) + console.AddItem("vo", VoteOffer, local.Translate("vo_cmd")) + console.AddItem("el", PrintElectionEntriesList, local.Translate("el_cmd")) + console.AddItem("ve", VoteElectionEntry, local.Translate("ve_cmd")) + console.AddItem("vl", PrintValidatorList, local.Translate("vl_cmd")) - console.AddItem("get", GetSettings, "Посмотреть настройки / Get settings") - console.AddItem("set", SetSettings, "Задать настройки / Set settings") + console.AddItem("get", GetSettings, local.Translate("get_cmd")) + console.AddItem("set", SetSettings, local.Translate("set_cmd")) console.AddItem("test", Test, "Test") console.AddItem("pt", PrintTest, "PrintTest") @@ -154,23 +155,35 @@ def PrintTonStatus(startWorkTime, totalValidators, shardsNumber, offersNumber): tps1_text = bcolors.Yellow(tps1) tps5_text = bcolors.Yellow(tps5) tps15_text = bcolors.Yellow(tps15) - validators_text = bcolors.Green(validators) - shards_text = bcolors.Green(shardsNumber) - offers_text = bcolors.Green(offers) + tps_text = local.Translate("ton_status_tps").format(tps1_text, tps5_text, tps15_text) + validators_text = local.Translate("ton_status_validators").format(bcolors.Green(validators)) + onlineValidators_text = local.Translate("ton_status_online_validators").format(bcolors.Yellow(onlineValidators)) + shards_text = local.Translate("ton_status_shards").format(bcolors.Green(shardsNumber)) + allOffers_text = bcolors.Green(offers) newOffers_text = bcolors.Green(newOffers) - onlineValidators_text = bcolors.Yellow(onlineValidators) + offers_text = local.Translate("ton_status_offers").format(allOffers_text, newOffers_text) + if startWorkTime == 0: - electionStatus_text = bcolors.Yellow("closed") + election_text = bcolors.Yellow("closed") else: - electionStatus_text = bcolors.Green("open") - - ColorPrint("{cyan}===[ Статус сети TON ]==={endc}") - print("Транзакций в секунду (TPS): {0}, {1}, {2}".format(tps1_text, tps5_text, tps15_text)) - print("Количество валидаторов, прошедших выборы: " + validators_text) - print("Количество валидаторов в сети: " + onlineValidators_text) - print("Количесвто шардчейнов: " + shards_text) - print("Действующие предложения: {0}({1})".format(offers_text, newOffers_text)) - print("Статус выборов: " + electionStatus_text) + election_text = bcolors.Green("open") + election_text = local.Translate("ton_status_election").format(election_text) + + # ColorPrint("{cyan}===[ Статус сети TON ]==={endc}") + # print("Транзакций в секунду (TPS): {0}, {1}, {2}".format(tps1_text, tps5_text, tps15_text)) + # print("Количество валидаторов, прошедших выборы: " + validators_text) + # print("Количество валидаторов в сети: " + onlineValidators_text) + # print("Количесвто шардчейнов: " + shards_text) + # print("Действующие предложения: {0}({1})".format(offers_text, newOffers_text)) + # print("Статус выборов: " + election_text) + # print() + ColorPrint(local.Translate("ton_status_head")) + print(tps_text) + print(validators_text) + print(onlineValidators_text) + print(shards_text) + print(offers_text) + print(election_text) print() #end define @@ -191,45 +204,56 @@ def PrintLocalStatus(validatorIndex, validatorWallet, validatorAccount, validato netLoad5 = netLoadAvg[1] netLoad15 = netLoadAvg[2] validatorOutOfSync = validatorStatus.get("unixtime", GetTimestamp()) - validatorStatus.get("masterchainblocktime", 0) - statisticsStatus_text_bool = True # fix me - electionsThreadStatus_bool = True # fix me + mytoncoreStatus_bool = True # fix me validatorStatus_bool = validatorStatus.get("isWorking") - validatorIndex_text = bcolors.Green(validatorIndex) - adnlAddr_text = bcolors.Yellow(adnlAddr) - walletAddr_text = bcolors.Yellow(walletAddr) - walletBalance_text = bcolors.Green(walletBalance, " GRM") + validatorIndex_text = local.Translate("local_status_validator_index").format(bcolors.Green(validatorIndex)) + adnlAddr_text = local.Translate("local_status_adnl_addr").format(bcolors.Yellow(adnlAddr)) + walletAddr_text = local.Translate("local_status_wallet_addr").format(bcolors.Yellow(walletAddr)) + walletBalance_text = local.Translate("local_status_wallet_balance").format(bcolors.Green(walletBalance, " GRM")) # CPU status cpuNumber_text = bcolors.Yellow(cpuNumber) cpuLoad1_text = GetColorInt(cpuLoad1, cpuNumber) cpuLoad5_text = GetColorInt(cpuLoad5, cpuNumber) cpuLoad15_text = GetColorInt(cpuLoad15, cpuNumber) + cpuLoad_text = local.Translate("local_status_cpu_load").format(cpuNumber_text, cpuLoad1_text, cpuLoad5_text, cpuLoad15_text) # Network status netLoad1_text = GetColorInt(netLoad1, 300) netLoad5_text = GetColorInt(netLoad5, 300) netLoad15_text = GetColorInt(netLoad15, 300) + netLoad_text = local.Translate("local_status_net_load").format(netLoad1_text, netLoad5_text, netLoad15_text) # Thread status - statisticsStatus_text = GetColorStatus(statisticsStatus_text_bool) - electionsThreadStatus_text = GetColorStatus(electionsThreadStatus_bool) - validatorStatus_text = GetColorStatus(validatorStatus_bool) - validatorSyncPercent_text = GetColorInt(validatorOutOfSync, 20, ending=" с") - dbSize_text = GetColorInt(dbSize, 1000, ending=" Gb") - - ColorPrint("{cyan}===[ Статус локального валидатора ]==={endc}") - print("Индекс валидатора: " + validatorIndex_text) - print("ADNL адрес локального валидатора: " + adnlAddr_text) - print("Адрес кошелька локального валидатора: " + walletAddr_text) - print("Баланс кошелька локального валидатора: " + walletBalance_text) - print("Средняя нагрузка[{0}]: {1}, {2}, {3}".format(cpuNumber_text, cpuLoad1_text, cpuLoad5_text, cpuLoad15_text)) - print("Средняя нагрузка сети (Mbit/s): {0}, {1}, {2}".format(netLoad1_text, netLoad5_text, netLoad15_text)) - print("Статус сбора статистики: " + statisticsStatus_text) - print("Статус участия в выборах: " + electionsThreadStatus_text) - print("Статус локального валидатора: " + validatorStatus_text) - print("Рассинхронизация локального валидатора: " + validatorSyncPercent_text) - print("Размер БД локального валидатора: " + dbSize_text) + mytoncoreStatus_text = local.Translate("local_status_mytoncore_status").format(GetColorStatus(mytoncoreStatus_bool)) + validatorStatus_text = local.Translate("local_status_validator_status").format(GetColorStatus(validatorStatus_bool)) + validatorOutOfSync_text = local.Translate("local_status_validator_out_of_sync").format(GetColorInt(validatorOutOfSync, 20, ending=" с")) + dbSize_text = local.Translate("local_status_db_size").format(GetColorInt(dbSize, 1000, ending=" Gb")) + + # ColorPrint("{cyan}===[ Статус локального валидатора ]==={endc}") + # print("Индекс валидатора: " + validatorIndex_text) + # print("ADNL адрес локального валидатора: " + adnlAddr_text) + # print("Адрес кошелька локального валидатора: " + walletAddr_text) + # print("Баланс кошелька локального валидатора: " + walletBalance_text) + # print("Средняя нагрузка[{0}]: {1}, {2}, {3}".format(cpuNumber_text, cpuLoad1_text, cpuLoad5_text, cpuLoad15_text)) + # print("Средняя нагрузка сети (Mbit/s): {0}, {1}, {2}".format(netLoad1_text, netLoad5_text, netLoad15_text)) + # print("Статус ядра mytoncore: " + mytoncoreStatus_text) + # print("Статус локального валидатора: " + validatorStatus_text) + # print("Рассинхронизация локального валидатора: " + validatorOutOfSync_text) + # print("Размер БД локального валидатора: " + dbSize_text) + # print() + ColorPrint(local.Translate("local_status_head")) + print(validatorIndex_text) + print(adnlAddr_text) + print(walletAddr_text) + print(walletBalance_text) + print(cpuLoad_text) + print(netLoad_text) + print(mytoncoreStatus_text) + print(validatorStatus_text) + print(validatorOutOfSync_text) + print(dbSize_text) print() #end define @@ -258,20 +282,28 @@ def PrintTonConfig(fullConfigAddr, fullElectorAddr, config15, config17): minStake = config17["minStake"] maxStake = config17["maxStake"] - fullConfigAddr_text = bcolors.Yellow(fullConfigAddr) - fullElectorAddr_text = bcolors.Yellow(fullElectorAddr) + fullConfigAddr_text = local.Translate("ton_config_configurator_addr").format(bcolors.Yellow(fullConfigAddr)) + fullElectorAddr_text = local.Translate("ton_config_elector_addr").format(bcolors.Yellow(fullElectorAddr)) validatorsElectedFor_text = bcolors.Yellow(validatorsElectedFor) electionsStartBefore_text = bcolors.Yellow(electionsStartBefore) electionsEndBefore_text = bcolors.Yellow(electionsEndBefore) stakeHeldFor_text = bcolors.Yellow(stakeHeldFor) + elections_text = local.Translate("ton_config_elections").format(validatorsElectedFor_text, electionsStartBefore_text, electionsEndBefore_text, stakeHeldFor_text) minStake_text = bcolors.Yellow(minStake) maxStake_text = bcolors.Yellow(maxStake) - - ColorPrint("{cyan}===[ Конфигурация сети TON ]==={endc}") - print("Адрес конфигуратора: {0}".format(fullConfigAddr_text)) - print("Адрес электора: {0}".format(fullElectorAddr_text)) - print("Период валидации: {0}, Длительность выборов: {1}-{2}, Период удержания ставки: {3}".format(validatorsElectedFor_text, electionsStartBefore_text, electionsEndBefore_text, stakeHeldFor_text)) - print("Минимальная ставка: {0}, Максимальная ставка: {1}".format(minStake_text, maxStake_text)) + stake_text = local.Translate("ton_config_stake").format(minStake_text, maxStake_text) + + # ColorPrint("{cyan}===[ Конфигурация сети TON ]==={endc}") + # print("Адрес конфигуратора: {0}".format(fullConfigAddr_text)) + # print("Адрес электора: {0}".format(fullElectorAddr_text)) + # print("Период валидации: {0}, Длительность выборов: {1}-{2}, Период удержания ставки: {3}".format(validatorsElectedFor_text, electionsStartBefore_text, electionsEndBefore_text, stakeHeldFor_text)) + # print("Минимальная ставка: {0}, Максимальная ставка: {1}".format(minStake_text, maxStake_text)) + # print() + ColorPrint(local.Translate("ton_config_head")) + print(fullConfigAddr_text) + print(fullElectorAddr_text) + print(elections_text) + print(stake_text) print() #end define @@ -300,23 +332,28 @@ def PrintTimes(rootWorkchainEnabledTime_int, startWorkTime, oldStartWorkTime, co startNextElectionTime = Timestamp2Datetime(startNextElection) # datetime to color text - rootWorkchainEnabledTime_text = bcolors.Yellow(rootWorkchainEnabledTime) - startValidationTime_text = GetColorTime(startValidationTime, startValidation) - endValidationTime_text = GetColorTime(endValidationTime, endValidation) - startElectionTime_text = GetColorTime(startElectionTime, startElection) - endElectionTime_text = GetColorTime(endElectionTime, endElection) - startNextElectionTime_text = GetColorTime(startNextElectionTime, startNextElection) + rootWorkchainEnabledTime_text = local.Translate("times_root_workchain_enabled_time").format(bcolors.Yellow(rootWorkchainEnabledTime)) + startValidationTime_text = local.Translate("times_start_validation_time").format(GetColorTime(startValidationTime, startValidation)) + endValidationTime_text = local.Translate("times_end_validation_time").format(GetColorTime(endValidationTime, endValidation)) + startElectionTime_text = local.Translate("times_start_election_time").format(GetColorTime(startElectionTime, startElection)) + endElectionTime_text = local.Translate("times_end_election_time").format(GetColorTime(endElectionTime, endElection)) + startNextElectionTime_text = local.Translate("times_start_next_election_time").format(GetColorTime(startNextElectionTime, startNextElection)) # Временные метки TON - ColorPrint("{cyan}===[ Временные метки TON ]==={endc}") - print("TON сеть была запущена: " + rootWorkchainEnabledTime_text) - if startValidation < 0: - return - print("Начало цикла валидации: " + startValidationTime_text) - print("Конец цикла валидации: " + endValidationTime_text) - print("Начало выборов: " + startElectionTime_text) - print("Конец выборов: " + endElectionTime_text) - print("Начало следующих выборов: " + startNextElectionTime_text) + # ColorPrint("{cyan}===[ Временные метки TON ]==={endc}") + # print("TON сеть была запущена: " + rootWorkchainEnabledTime_text) + # print("Начало цикла валидации: " + startValidationTime_text) + # print("Конец цикла валидации: " + endValidationTime_text) + # print("Начало выборов: " + startElectionTime_text) + # print("Конец выборов: " + endElectionTime_text) + # print("Начало следующих выборов: " + startNextElectionTime_text) + ColorPrint(local.Translate("times_head")) + print(rootWorkchainEnabledTime_text) + print(startValidationTime_text) + print(endValidationTime_text) + print(startElectionTime_text) + print(endElectionTime_text) + print(startNextElectionTime_text) #end define def GetColorTime(datetime, timestamp): @@ -553,27 +590,23 @@ def DeleteBookmark(args): ColorPrint("DeleteBookmark - {green}OK{endc}") #end define -def CreatNewRule(args): - print("fix me") -#end define - -def PrintRulesList(args): - data = ton.GetRules() - if (data is None or len(data) == 0): - print("No data") - return - table = list() - table += [["Name", "fix me"]] - for item in data: - table += [[item.get("name"), item.get("fix me")]] - PrintTable(table) -#end define +# def CreatNewRule(args): +# print("fix me") +# #end define -def DeleteRule(args): - print("fix me") -#end define +# def PrintRulesList(args): +# data = ton.GetRules() +# if (data is None or len(data) == 0): +# print("No data") +# return +# table = list() +# table += [["Name", "fix me"]] +# for item in data: +# table += [[item.get("name"), item.get("fix me")]] +# PrintTable(table) +# #end define -# def MoveGramsFromMixer(args): +# def DeleteRule(args): # print("fix me") # #end define diff --git a/mytoninstaller.py b/mytoninstaller.py index 916a56da..fbaff16b 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -21,22 +21,22 @@ def Init(): local.Run() #end define -def Translate(text): - local.AddLog("start Translate", "debug") - lang = local.buffer.get("lang") - if lang == None: - lang = "en" - translate = local.db.get("translate") - textList = text.split(' ') - for item in textList: - sitem = translate.get(item) - if sitem is None: - continue - ritem = sitem.get(lang) - if ritem is not None: - text = text.replace(item, ritem) - return text -#end define +# def Translate(text): +# local.AddLog("start Translate", "debug") +# lang = local.buffer.get("lang") +# if lang == None: +# lang = "en" +# translate = local.db.get("translate") +# textList = text.split(' ') +# for item in textList: +# sitem = translate.get(item) +# if sitem is None: +# continue +# ritem = sitem.get(lang) +# if ritem is not None: +# text = text.replace(item, ritem) +# return text +# #end define # def UserWorker(title, text, notice=None): # title = Translate(title) diff --git a/translate.json b/translate.json index 6ac91302..82f6b9f2 100644 --- a/translate.json +++ b/translate.json @@ -1,66 +1,258 @@ { - "quick_setup_title_welcome": { - "en": "=== Quick Setup ===", - "ru": "=== Быстрая настройка ===" + "update_cmd": { + "en": "Pull mytonctrl update", + "ru": "Подтянуть обновление mytonctrl" }, - "quick_setup_text_welcome": { - "en": "Welcome to Quick Setup. This setting assumes that you have already completed all the steps in this manual: 'https://test.ton.org/FullNode-HOWTO.txt'. Click 'Enter' to continue.", - "ru": "Добро пожаловать в Быструю настройку. Данная настройка предполагает, что вы уже проделали все шаги по данной инструкции: 'https://test.ton.org/FullNode-HOWTO.txt'. Нажмите 'Enter' чтобы продолжить." + "upgrade_cmd": { + "en": "Pull up the source code and recompile the TON components", + "ru": "Подтянуть исходный код и перекомпилировать компоненты TON" }, - "quick_setup_title_liteclient_config": { - "en": "=== Quick Setup -> 'Lite-client' config ===", - "ru": "=== Быстрая настройка -> Конфигурация 'lite-client' ===" + "status_cmd": { + "en": "Show TON status", + "ru": "Показать статус TON" }, - "quick_setup_text_liteclient_program_path": { - "en": "Enter the full path to the 'lite-client' program. Example: '/home/user/build/lite-client/lite-client'", - "ru": "Впишите полный путь до программы 'lite-client'. Пример: '/home/user/build/lite-client/lite-client'" + "seqno_cmd": { + "en": "Get seqno wallet", + "ru": "Получить seqno кошелька" }, - "quick_setup_text_liteclient_config_path": { - "en": "Enter the full path to the 'lite-client' configuration file. Example: '/home/user/build/lite-client/ton-lite-client-test1.config.json'", - "ru": "Впишите полный путь до конфигурационного файла 'lite-client'. Пример: '/home/user/build/lite-client/ton-lite-client-test1.config.json'" + "nw_cmd": { + "en": "Create a new local wallet", + "ru": "Создать новый локальный кошелек" }, - "quick_setup_title_validator_engine_console": { - "en": "=== Quick Setup -> 'Validator-engine-console' config ===", - "ru": "=== Быстрая настройка -> Конфигурация 'validator-engine-console' ===" + "aw_cmd": { + "en": "Activate local wallet", + "ru": "Активировать локальный кошелек" }, - "quick_setup_text_validator_engine_console_program_path": { - "en": "Enter the full path to the 'validator-engine-console' program. Example: '/home/user/build/validator-engine-console/validator-engine-console'", - "ru": "Впишите полный путь до программы 'validator-engine-console'. Пример: '/home/user/build/validator-engine-console/validator-engine-console'" + "wl_cmd": { + "en": "Show wallet list", + "ru": "Показать локальные кошельки" }, - "quick_setup_text_validator_engine_console_privkey_path": { - "en": "Enter the full path to the client’s private key to connect to the 'validator-engine-console'. Example: '/home/user/build/validator-engine-console/client'", - "ru": "Впишите полный путь до приватного ключа клиента для подключения к 'validator-engine-console'. Пример: '/home/user/build/validator-engine-console/client'" + "iw_cmd": { + "en": "Import wallet from file", + "ru": "Импортировать кошелек из файла" }, - "quick_setup_text_validator_engine_console_pubkey_path": { - "en": "Enter the full path to the server's public key to connect to the 'validator-engine-console'. Example: '/home/user/build/validator-engine-console/server.pub'", - "ru": "Впишите полный путь до публичного ключа сервера для подключения к 'validator-engine-console'. Пример: '/home/user/build/validator-engine-console/server.pub'" + "swa_cmd": { + "en": "Save wallet address to file", + "ru": "Сохранить адрес кошелька в файл" }, - "quick_setup_text_validator_engine_console_server_addr": { - "en": "Enter the server address and port to connect to the 'validator-engine-console'. Example: '127.0.0.1:27001'", - "ru": "Впишите адрес и порт сервера для подключения к 'validator-engine-console'. Пример: '127.0.0.1:27001'" + "dw_cmd": { + "en": "Delete local wallet", + "ru": "Удалить локальный кошелек" }, - "quick_setup_title_fift_config": { - "en": "=== Quick Setup -> 'Fift' config ===", - "ru": "=== Быстрая настройка -> Конфигурация 'fift' ===" + "vas_cmd": { + "en": "View account status", + "ru": "Показать статус аккаунта" }, - "quick_setup_title_text_app_path": { - "en": "Enter the full path to the 'fift' program. Example: '/home/user/build/crypto/fift'", - "ru": "Впишите полный путь до программы 'fift'. Пример: '/home/user/build/crypto/fift'" + "vah_cmd": { + "en": "View account history", + "ru": "Показать историю аккаунта" }, - "quick_setup_title_text_lib_path": { - "en": "Enter the full path to the library folder for the 'fift' program. Example: '/home/user/ton/crypto/fift/lib'", - "ru": "Впишите полный путь до папки с библиотеками для программы 'fift'. Пример: '/home/user/ton/crypto/fift/lib'" + "mg_cmd": { + "en": "Move grams to account", + "ru": "Перевод средств на кошелек" }, - "quick_setup_title_text_smartcont_path": { - "en": "Enter the full path to the smart contract folder for the 'fift' program. Example: '/home/user/ton/crypto/smartcont'", - "ru": "Впишите полный путь до папки со смартконтрактами для программы 'fift'. Пример: '/home/user/ton/crypto/smartcont'" + "nb_cmd": { + "en": "Create new bookmark", + "ru": "Добавить аккаунт в закладки" }, - "find_file_to_path": { - "en":"Required path was found:", - "ru":"Был найден требуемый путь:" + "bl_cmd": { + "en": "Show bookmark list", + "ru": "Показать закладки" }, - "click_enter_to_apply": { - "en":"Click the 'Enter' to apply this path.", - "ru":"Нажмите 'Enter' что бы применить этот путь." + "db_cmd": { + "en": "Delete bookmark", + "ru": "Удалить закладку" + }, + "nd_cmd": { + "en": "New domain", + "ru": "Арендовать новый домен" + }, + "dl_cmd": { + "en": "Show domain list", + "ru": "Показать арендованные домены" + }, + "vds_cmd": { + "en": "View domain status", + "ru": "Показать статус домена" + }, + "dd_cmd": { + "en": "Delete domain", + "ru": "Удалить домен" + }, + "ol_cmd": { + "en": "Show offer list", + "ru": "Показать действующие предложения" + }, + "vo_cmd": { + "en": "Vote for offer", + "ru": "Голосовать за предложение" + }, + "el_cmd": { + "en": "Show election entries list", + "ru": "Показать действующие выборы" + }, + "ve_cmd": { + "en": "Vote election entry", + "ru": "Голосовать в выборах" + }, + "vl_cmd": { + "en": "Show active validators", + "ru": "Показать действующие валидаторы" + }, + "get_cmd": { + "en": "Get settings", + "ru": "Посмотреть настройки" + }, + "set_cmd": { + "en": "Set settings", + "ru": "Задать настройки" + }, + "ton_status_head": { + "en": "{cyan}===[ TON network status ]==={endc}", + "ru": "{cyan}===[ Статус сети TON ]==={endc}" + }, + "ton_status_tps": { + "en": "Transactions per second (TPS): {0}, {1}, {2}", + "ru": "Транзакций в секунду (TPS): {0}, {1}, {2}" + }, + "ton_status_validators": { + "en": "Number of validators: {0}", + "ru": "Количество валидаторов, прошедших выборы: {0}" + }, + "ton_status_online_validators": { + "en": "Number of online validators: {0}", + "ru": "Количество валидаторов в сети: {0}" + }, + "ton_status_shards": { + "en": "Number of shardchains: {0}", + "ru": "Количесвто шардчейнов: {0}" + }, + "ton_status_offers": { + "en": "Number of offers: {0}({1})", + "ru": "Действующие предложения: {0}({1})" + }, + "ton_status_election": { + "en": "Election status: {0}", + "ru": "Статус выборов: {0}" + }, + "local_status_head": { + "en": "{cyan}===[ Local validator status ]==={endc}", + "ru": "{cyan}===[ Статус локального валидатора ]==={endc}" + }, + "local_status_validator_index": { + "en": "Validator index: {0}", + "ru": "Индекс валидатора: {0}" + }, + "local_status_adnl_addr": { + "en": "ADNL address of local validator: {0}", + "ru": "ADNL адрес локального валидатора: {0}" + }, + "local_status_wallet_addr": { + "en": "Local validator wallet address: {0}", + "ru": "Адрес кошелька локального валидатора: {0}" + }, + "local_status_wallet_balance": { + "en": "Local validator wallet balance: {0}", + "ru": "Баланс кошелька локального валидатора: {0}" + }, + "local_status_cpu_load": { + "en": "Load average[{0}]: {1}, {2}, {3}", + "ru": "Средняя нагрузка[{0}]: {1}, {2}, {3}" + }, + "local_status_net_load": { + "en": "Network load average (Mbit/s): {0}, {1}, {2}", + "ru": "Средняя нагрузка сети (Mbit/s): {0}, {1}, {2}" + }, + "local_status_mytoncore_status": { + "en": "Mytoncore status: {0}", + "ru": "Статус ядра mytoncore: {0}" + }, + "local_status_validator_status": { + "en": "Local validator status: {0}", + "ru": "Статус локального валидатора: {0}" + }, + "local_status_validator_out_of_sync": { + "en": "Local validator out of sync: {0}", + "ru": "Рассинхронизация локального валидатора: {0}" + }, + "local_status_db_size": { + "en": "Local validator database size: {0}", + "ru": "Размер БД локального валидатора: {0}" + }, + "ton_config_head": { + "en": "{cyan}===[ TON network configuration ]==={endc}", + "ru": "{cyan}===[ Конфигурация сети TON ]==={endc}" + }, + "ton_config_configurator_addr": { + "en": "Configurator address: {0}", + "ru": "Адрес конфигуратора: {0}" + }, + "ton_config_elector_addr": { + "en": "Elector address: {0}", + "ru": "Адрес электора: {0}" + }, + "ton_config_elections": { + "en": "Validation period: {0}, Duration of elections: {1}-{2}, Hold period: {3}", + "ru": "Период валидации: {0}, Длительность выборов: {1}-{2}, Период удержания ставки: {3}" + }, + "ton_config_stake": { + "en": "Minimum stake: {0}, Maximum stake: {1}", + "ru": "Минимальная ставка: {0}, Максимальная ставка: {1}" + }, + "times_head": { + "en": "{cyan}===[ TON timestamps ]==={endc}", + "ru": "{cyan}===[ Временные метки TON ]==={endc}" + }, + "times_root_workchain_enabled_time": { + "en": "TON network was launched: {0}", + "ru": "TON сеть была запущена: {0}" + }, + "times_start_validation_time": { + "en": "Start of the validation cycle: {0}", + "ru": "Начало цикла валидации: {0}" + }, + "times_end_validation_time": { + "en": "End of the validation cycle: {0}", + "ru": "Конец цикла валидации: {0}" + }, + "times_start_election_time": { + "en": "Start of elections: {0}", + "ru": "Начало выборов: {0}" + }, + "times_end_election_time": { + "en": "End of elections: {0}", + "ru": "Конец выборов: {0}" + }, + "times_start_next_election_time": { + "en": "Beginning of the next elections: {0}", + "ru": "Начало следующих выборов: {0}" + }, + "000": { + "en": "001", + "ru": "002" + }, + "000": { + "en": "001", + "ru": "002" + }, + "000": { + "en": "001", + "ru": "002" + }, + "000": { + "en": "001", + "ru": "002" + }, + "000": { + "en": "001", + "ru": "002" + }, + "000": { + "en": "001", + "ru": "002" + }, + "000": { + "en": "001", + "ru": "002" } } From dba4bc872286d9cfc992a656251daa5ef0ab6929 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Tue, 4 Aug 2020 16:00:37 +0300 Subject: [PATCH 55/61] Fix parsing of validatorWeight from sonofmom (https://github.com/igroman787/mytonctrl/pull/12) --- mytoncore.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mytoncore.py b/mytoncore.py index 44e9754f..b80e8fb1 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -553,7 +553,10 @@ def GetConfig34(self): if "public_key:" in line: validatorAdnlAddr = Pars(line, "adnl_addr:x", ')') validatorPubkey = Pars(line, "pubkey:x", ')') - validatorWeight = int(Pars(line, "weight:", ' ')) + if config34["totalValidators"] > 1: + validatorWeight = int(Pars(line, "weight:", ' ')) + else: + validatorWeight = int(Pars(line, "weight:", ')')) buff = dict() buff["adnlAddr"] = validatorAdnlAddr buff["pubkey"] = validatorPubkey From b9a10a10754e3367ff860faba75499ba574f168c Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 6 Aug 2020 11:54:09 +0300 Subject: [PATCH 56/61] update telemetry function --- mytoncore.py | 4 ++++ mytoninstaller.py | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mytoncore.py b/mytoncore.py index b80e8fb1..15e6f7aa 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -1463,6 +1463,10 @@ def Domains(ton): #end define def Telemetry(ton): + if (local.db.get("sendTelemetry") != True): + return + #end if + data = dict() data["adnlAddr"] = ton.adnlAddr data["validatorStatus"] = ton.GetValidatorStatus() diff --git a/mytoninstaller.py b/mytoninstaller.py index fbaff16b..63d3702a 100644 --- a/mytoninstaller.py +++ b/mytoninstaller.py @@ -565,7 +565,7 @@ def ValidatorSetting(user): time.sleep(10) #end define -def MytoncoreSettings(user, mode): +def MytoncoreSettings(user, mode, telemetry): local.AddLog("start MytoncoreSettings fuction", "debug") # Прописать mytoncore.py в автозагрузку @@ -596,6 +596,13 @@ def MytoncoreSettings(user, mode): liteClient["configPath"] = "/usr/bin/ton/lite-client/ton-lite-client-test1.config.json" arr["liteClient"] = liteClient + # Telemetry + if ("--no_send_telemetry" in sys.argv): + sendTelemetry = False + else: + sendTelemetry = True + arr["sendTelemetry"] = sendTelemetry + # miner miner = dict() miner["appPath"] = "/usr/bin/ton/crypto/pow-miner" From 22dc3a1d81c5f6060cb2f6ad93548c525e0b6d0f Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 6 Aug 2020 12:01:09 +0300 Subject: [PATCH 57/61] script bugfix --- scripts/update.sh | 3 ++- scripts/upgrade.sh | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/update.sh b/scripts/update.sh index e83c3ecf..86a6a636 100644 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -16,4 +16,5 @@ git pull --recurse-submodules systemctl restart mytoncore # Конец -echo "${COLOR}[1/1]${ENDC} Обновление компонентов MyTonCtrl завершена" +echo -e "${COLOR}[1/1]${ENDC} MyTonCtrl components update completed" +exit 0 diff --git a/scripts/upgrade.sh b/scripts/upgrade.sh index b67fb033..8246bf5c 100644 --- a/scripts/upgrade.sh +++ b/scripts/upgrade.sh @@ -25,4 +25,5 @@ systemctl start ton-validator # Конец -echo "${COLOR}[1/1]${ENDC} Обновление компонентов TON завершена" +echo -e "${COLOR}[1/1]${ENDC} TON components update completed" +exit 0 From f52f41ec46de352b5d1db5e393831cfadadbf48b Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 6 Aug 2020 12:26:00 +0300 Subject: [PATCH 58/61] Enable agruments for election entry (ve) from sonofmom (https://github.com/igroman787/mytonctrl/pull/5) --- mytoncore.py | 37 +++++++++++++++++++++++++++++++++---- mytonctrl.py | 2 +- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/mytoncore.py b/mytoncore.py index 15e6f7aa..9e707a16 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -4,6 +4,7 @@ import crc16 import struct import requests +import re from mypylib.mypylib import * local = MyPyClass(__file__) @@ -768,9 +769,32 @@ def RecoverStake(self): return resultFilePath #end define - def GetStake(self, account, validators): + def GetStake(self, account, validators, args=None): stake = local.db.get("stake") stakePercent = local.db.get("stakePercent", 99) + + # Check if optional arguments have been passed to us + if args: + desiredStake = args[0] + m = re.match(r"(\d+\.?\d?)\%", desiredStake) + if m: + # Stake was in percent + stake = round((account.balance / 100) * float(m.group(1))) + elif desiredStake.isnumeric(): + # Stake was a number + stake = int(desiredStake) + else: + local.AddLog("Specified stake must be a percentage or whole number", "error") + return + + # Limit stake to maximum available amount minus 10 (for transaction fees) + if stake > account.balance - 10: + stake = account.balance - 10 + + if minStake > stake: + local.AddLog('Stake is smaller then Minimum stake: ' + str(minStake), "error") + return + if stake is None: sp = stakePercent / 100 if sp > 1 or sp < 0: @@ -782,7 +806,7 @@ def GetStake(self, account, validators): return stake #end define - def ElectionEntry(self): + def ElectionEntry(self, args): #self.TestElectionEntry() local.AddLog("start ElectionEntry function", "debug") @@ -811,7 +835,12 @@ def ElectionEntry(self): minStake = self.GetMinStake() # Calculate stake - stake = self.GetStake(account, validators) + stake = self.GetStake(account, validators, args) + + # Get rateMultiplier + rateMultiplier = 1 + if len(args) > 1: + rateMultiplier = float(args[1]) # Check if we have enough grams if minStake > stake: @@ -835,7 +864,7 @@ def ElectionEntry(self): self.AttachAdnlAddrToValidator(adnlAddr, validatorKey, endWorkTime) # Create fift's - maxFactor = round(stake / minStake, 1) + maxFactor = round((stake / minStake) * rateMultiplier, 1) var1 = self.CreateElectionRequest(wallet, startWorkTime, adnlAddr, maxFactor) validatorSignature = self.GetValidatorSignature(validatorKey, var1) validatorPubkey, resultFilePath = self.SignElectionRequestWithValidator(wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, maxFactor) diff --git a/mytonctrl.py b/mytonctrl.py index 9dd37290..f0bf6c1b 100644 --- a/mytonctrl.py +++ b/mytonctrl.py @@ -693,7 +693,7 @@ def VoteElectionEntry(args): if ton.validatorWalletName is None: ColorPrint("{red}You are not a validator, or this utility is not configured correctly.{endc}") ton.ReturnStake() - ton.ElectionEntry() + ton.ElectionEntry(args) ColorPrint("VoteElectionEntry - {green}OK{endc}") #end define From cf227cc2633f6384ec99adc1ea3b3ed9bf6bf5b9 Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 6 Aug 2020 12:37:47 +0300 Subject: [PATCH 59/61] Allow optional definition of config file and wallets path from sonofmom (https://github.com/igroman787/mytonctrl/pull/11) --- mytoncore.py | 10 ++++++++-- mytonctrl.py | 29 +++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/mytoncore.py b/mytoncore.py index 9e707a16..51c9c31b 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -134,6 +134,7 @@ def __init__(self): class MyTonCore(): def __init__(self): self.walletsDir = None + self.dbFile = None self.adnlAddr = None self.tempDir = None self.validatorWalletName = None @@ -143,7 +144,6 @@ def __init__(self): self.fift = Fift() self.miner = Miner() - local.dbLoad() self.Refresh() self.Init() #end define @@ -154,7 +154,13 @@ def Init(self): #end define def Refresh(self): - self.walletsDir = dir(local.buffer.get("myWorkDir") + "wallets") + if self.dbFile: + local.dbLoad(self.dbFile) + else: + local.dbLoad() + + if not self.walletsDir: + self.walletsDir = dir(local.buffer.get("myWorkDir") + "wallets") self.tempDir = local.buffer.get("myTempDir") self.adnlAddr = local.db.get("adnlAddr") diff --git a/mytonctrl.py b/mytonctrl.py index f0bf6c1b..6e9c2974 100644 --- a/mytonctrl.py +++ b/mytonctrl.py @@ -4,12 +4,13 @@ from mypylib.mypylib import * from mypyconsole.mypyconsole import MyPyConsole from mytoncore import * +import sys, getopt, os local = MyPyClass(__file__) console = MyPyConsole() ton = MyTonCore() -def Init(): +def Init(argv): # Load translate table local.InitTranslator("/usr/src/mytonctrl/translate.json") @@ -57,6 +58,30 @@ def Init(): console.AddItem("test", Test, "Test") console.AddItem("pt", PrintTest, "PrintTest") + # Process input parameters + opts, args = getopt.getopt(argv,"hc:w:",["config=","wallets="]) + for opt, arg in opts: + if opt == '-h': + print ('mytonctrl.py -c -w ') + sys.exit() + elif opt in ("-c", "--config"): + configfile = arg + if not os.access(configfile, os.R_OK): + print ("Configuration file " + configfile + " could not be opened") + sys.exit() + + ton.dbFile = configfile + ton.Refresh() + elif opt in ("-w", "--wallets"): + wallets = arg + if not os.access(wallets, os.R_OK): + print ("Wallets path " + wallets + " could not be opened") + sys.exit() + elif not os.path.isdir(wallets): + print ("Wallets path " + wallets + " is not a directory") + sys.exit() + ton.walletsDir = wallets + local.db["config"]["logLevel"] = "debug" local.db["config"]["isLocaldbSaving"] = True local.Run() @@ -731,6 +756,6 @@ def SetSettings(args): ### if __name__ == "__main__": - Init() + Init(sys.argv[1:]) console.Run() #end if From 12263c93e76fe63593fa2f325d0970f62de358ba Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 6 Aug 2020 12:44:34 +0300 Subject: [PATCH 60/61] Add Node name for safe parallel execution from sonofmom (https://github.com/igroman787/mytonctrl/pull/13) --- mytoncore.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/mytoncore.py b/mytoncore.py index 51c9c31b..211c9bbb 100644 --- a/mytoncore.py +++ b/mytoncore.py @@ -138,6 +138,7 @@ def __init__(self): self.adnlAddr = None self.tempDir = None self.validatorWalletName = None + self.nodeName = None self.liteClient = LiteClient() self.validatorConsole = ValidatorConsole() @@ -165,6 +166,11 @@ def Refresh(self): self.adnlAddr = local.db.get("adnlAddr") self.validatorWalletName = local.db.get("validatorWalletName") + self.nodeName = local.db.get("nodeName") + if self.nodeName is None: + self.nodeName="" + else: + self.nodeName = self.nodeName + "_" liteClient = local.db.get("liteClient") if liteClient is not None: @@ -675,7 +681,7 @@ def AttachAdnlAddrToValidator(self, adnlAddr, key, endWorkTime): def CreateConfigProposalRequest(self, offerHash, validatorIndex): local.AddLog("start CreateConfigProposalRequest function", "debug") - fileName = self.tempDir + "_validator-to-sign.req" + fileName = self.tempDir + self.nodeName + "validator-to-sign.req" args = ["config-proposal-vote-req.fif", "-i", validatorIndex, offerHash] result = self.fift.Run(args) fileName = Pars(result, "Saved to file ", '\n') @@ -693,7 +699,7 @@ def CreateConfigProposalRequest(self, offerHash, validatorIndex): def CreateElectionRequest(self, wallet, startWorkTime, adnlAddr, maxFactor): local.AddLog("start CreateElectionRequest function", "debug") - fileName = self.tempDir + str(startWorkTime) + "_validator-to-sign.bin" + fileName = self.tempDir + self.nodeName + str(startWorkTime) + "_validator-to-sign.bin" args = ["validator-elect-req.fif", wallet.addr, startWorkTime, maxFactor, adnlAddr, fileName] result = self.fift.Run(args) fileName = Pars(result, "Saved to file ", '\n') @@ -719,7 +725,7 @@ def GetValidatorSignature(self, validatorKey, var1): def SignElectionRequestWithValidator(self, wallet, startWorkTime, adnlAddr, validatorPubkey_b64, validatorSignature, maxFactor): local.AddLog("start SignElectionRequestWithValidator function", "debug") - fileName = self.tempDir + str(startWorkTime) + "_validator-query.boc" + fileName = self.tempDir + self.nodeName + str(startWorkTime) + "_validator-query.boc" args = ["validator-elect-signed.fif", wallet.addr, startWorkTime, maxFactor, adnlAddr, validatorPubkey_b64, validatorSignature, fileName] result = self.fift.Run(args) validatorPubkey = Pars(result, "validator public key ", '\n') @@ -730,7 +736,7 @@ def SignElectionRequestWithValidator(self, wallet, startWorkTime, adnlAddr, vali def SignFileWithWallet(self, wallet, filePath, addr, gram): local.AddLog("start SignFileWithWallet function", "debug") seqno = self.GetSeqno(wallet) - resultFilePath = self.tempDir + wallet.name + "_wallet-query" + resultFilePath = self.tempDir + self.nodeName + wallet.name + "_wallet-query" args = ["wallet.fif", wallet.path, addr, seqno, gram, "-B", filePath, resultFilePath] result = self.fift.Run(args) resultFilePath = Pars(result, "Saved to file ", ")") @@ -768,7 +774,7 @@ def GetReturnedStake(self, fullElectorAddr, wallet): def RecoverStake(self): local.AddLog("start RecoverStake function", "debug") - resultFilePath = self.tempDir + "recover-query" + resultFilePath = self.tempDir + self.nodeName + "recover-query" args = ["recover-stake.fif", resultFilePath] result = self.fift.Run(args) resultFilePath = Pars(result, "Saved to file ", '\n') @@ -906,7 +912,7 @@ def ReturnStake(self): def SaveElectionVarsToJsonFile(self, **kwargs): local.AddLog("start SaveElectionVarsToJsonFile function", "debug") - fileName = self.tempDir + str(kwargs.get("startWorkTime")) + "_ElectionEntry.json" + fileName = self.tempDir + self.nodeName + str(kwargs.get("startWorkTime")) + "_ElectionEntry.json" wallet = kwargs.get("wallet") account = kwargs.get("account") arr = {"wallet":wallet.__dict__, "account":account.__dict__} @@ -1097,7 +1103,7 @@ def GetOffers(self): def SignProposalVoteRequestWithValidator(self, offerHash, validatorIndex, validatorPubkey_b64, validatorSignature): local.AddLog("start SignProposalVoteRequestWithValidator function", "debug") - fileName = self.tempDir + "_vote-msg-body.boc" + fileName = self.tempDir + self.nodeName + "vote-msg-body.boc" args = ["config-proposal-vote-signed.fif", "-i", validatorIndex, offerHash, validatorPubkey_b64, validatorSignature, fileName] result = self.fift.Run(args) fileName = Pars(result, "Saved to file ", '\n') @@ -1232,7 +1238,7 @@ def NewDomain(self, domain): raise Exception("NewDomain error: domain is busy") #end if - fileName = self.tempDir + "_dns-msg-body.boc" + fileName = self.tempDir + self.nodeName + "dns-msg-body.boc" args = ["auto-dns.fif", dnsAddr, "add", subdomain, expireInSec, "owner", wallet.addr, "cat", catId, "adnl", domain["adnlAddr"], "-o", fileName] result = self.fift.Run(args) resultFilePath = Pars(result, "Saved to file ", ')') From e989e4dda85ab64b9eee1f27cf974631b9f550eb Mon Sep 17 00:00:00 2001 From: igroman787 Date: Thu, 6 Aug 2020 13:12:29 +0300 Subject: [PATCH 61/61] update readme.md file --- .gitignore | 1 + README.Ru.md | 90 +++++++++++++++++++++++++++++++++++++ README.md | 123 +++++++++++++++++++++++++++------------------------ 3 files changed, 155 insertions(+), 59 deletions(-) create mode 100644 .gitignore create mode 100644 README.Ru.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..5509140f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.DS_Store diff --git a/README.Ru.md b/README.Ru.md new file mode 100644 index 00000000..5209223f --- /dev/null +++ b/README.Ru.md @@ -0,0 +1,90 @@ +## Что это +Данная консольная программа является оберткой над `fift`, `lite-client` и `validator-engine-console`. Она была создана для облегчения управления кошельками, доменами и валидатором на операционной системе `Linux`. +![](https://raw.githubusercontent.com/igroman787/mytonctrl/master/screens/mytonctrl-status.png) + +## Функционал +- [x] Показать статус сети TON +- [x] Управление локальными кошельками + - [x] Создать локальный кошелек + - [x] Активировать локальный кошелек + - [x] Показать локальные кошельки + - [x] Импортировать кошелек из файла (.pk) + - [x] Сохранить адрес кошелька в файл (.addr) + - [x] Удалить локальный кошелек +- [x] Показать статус аккаунта + - [x] Показать баланс аккаунта + - [x] Показать историю аккаунта + - [x] Показать статус аккаунта из закладок +- [x] Перевод средств на кошелек + - [x] Перевод фиксированной суммы + - [x] Перевод всей суммы (all) + - [x] Перевод всей суммы с диактивацией кошелька (alld) + - [x] Перевод средств на кошелек из закладок +- [x] Управление закладками + - [x] Добавить аккаунт в закладки + - [x] Показать закладки + - [x] Удалить закладку +- [x] Управление предложениями + - [x] Показать предложения + - [x] Проголосовать за предложение + - [x] Автоматическое голосование за ранее проголосованные предложения +- [x] Управление доменами + - [x] Арендовать новый домен + - [x] Показать арендованные домены + - [x] Показать статус домена + - [x] Удалить домен + - [ ] Автоматическое продление доменов +- [x] Управление валидатором + - [x] Участвовать в выборах валидатора + - [x] Возвращать ставку + вознаграждение + - [x] Автозапуск валидатора при аварийном завершении (systemd) + - [x] Отправлять статистику валидатора на https://toncenter.com + +## Список проверенных операционных систем +``` +Ubuntu 16.04 LTS (Xenial Xerus) - Error: TON compilation error +Ubuntu 18.04 LTS (Bionic Beaver) - OK +Ubuntu 20.04 LTS (Focal Fossa) - OK +Debian 10 - OK +``` + +## Описание установочных скриптов +- `toninstaller.sh` - Данный скрипт клонирует исходники `TON` и `mytonctrl` в папки `/usr/src/ton` и `/usr/src/mytonctrl`, компилирует программы из исходников и прописывает их в `/usr/bin/`. +- `mytoninstaller.py` - Данный скрипт производит настройку валидатора, `mytonctrl` и создание ключей для подключения к валидатору. + +## Режимы установки +Есть два режима установки: `lite` и `full`. Оба они **компилируют** и устанавливают компоненты `TON`. Однако `lite` версия не настраивает и не запускает валидатор. + +## Установка (Ubuntu) +1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки (``). В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. +```sh +wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/install.sh +sudo bash install.sh -m +``` + +2. Готово. Можете пробовать запустить программу `mytonctrl`. +```sh +mytonctrl +``` + + +## Установка (Debian) +1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. +```sh +wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/install.sh +su root -c 'bash install.sh -m ' +``` + +2. Готово. Можете пробовать запустить программу `mytonctrl`. +```sh +mytonctrl +``` + +## Полезные ссылки +1. https://ton.org/README.txt +2. https://ton.org/HOWTO.txt +3. https://ton.org/FullNode-HOWTO.txt +4. https://ton.org/Validator-HOWTO.txt +5. https://ton.org/TonSites-HOWTO.txt +6. https://ton.org/DNS-HOWTO.txt +7. https://ton.org/ConfigParam-HOWTO.txt diff --git a/README.md b/README.md index 53d3a953..0d616c5e 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,48 @@ -## Что это -Данная консольная программа является оберткой над `fift`, `lite-client` и `validator-engine-console`. Она была создана для облегчения управления кошельками, доменами и валидатором на операционной системе `Linux`. -Проект находится в активной разработке, поэтому стабильность работы не гарантируется. +[Данный текст доступен на русском языке.](https://github.com/igroman787/mytonctrl/blob/master/README.Ru.md) + +## What is it +This console program is a wrapper over `fift`,` lite-client` and `validator-engine-console`. It was created to facilitate the management of wallets, domains and a validator on the Linux operating system. ![](https://raw.githubusercontent.com/igroman787/mytonctrl/master/screens/mytonctrl-status.png) -## Функционал -- [x] Показать статус сети TON -- [x] Управление локальными кошельками - - [x] Создать локальный кошелек - - [x] Активировать локальный кошелек - - [x] Показать локальные кошельки - - [x] Импортировать кошелек из файла (.pk) - - [x] Сохранить адрес кошелька в файл (.addr) - - [x] Удалить локальный кошелек -- [x] Показать статус аккаунта - - [x] Показать баланс аккаунта - - [x] Показать историю аккаунта - - [x] Показать статус аккаунта из закладок -- [x] Перевод средств на кошелек - - [x] Перевод фиксированной суммы - - [x] Перевод всей суммы (all) - - [x] Перевод всей суммы с диактивацией кошелька (alld) - - [x] Перевод средств на кошелек из закладок - - [ ] Пропустить средства через миксер -- [x] Управление закладками - - [x] Добавить аккаунт в закладки - - [x] Показать закладки - - [x] Удалить закладку -- [x] Управление предложениями - - [x] Показать предложения - - [x] Проголосовать за предложение - - [x] Автоматическое голосование за ранее проголосованные предложения -- [x] Управление доменами - - [x] Арендовать новый домен - - [x] Показать арендованные домены - - [x] Показать статус домена - - [x] Удалить домен - - [ ] Автоматическое продление доменов -- [ ] Автоматическая отправка средств по расписанию - - [ ] Добавить правило в расписание - - [ ] Показать правила расписания - - [ ] Удалить правило из расписания -- [x] Управление валидатором - - [x] Участвовать в выборах валидатора - - [x] Возвращать ставку + вознаграждение - - [ ] Автозапуск валидатора при аварийном завершении (systemd) - - [x] Отправлять статистику валидатора на https://toncenter.com +## Functional +- [x] Show TON network status +- [x] Management of local wallets + - [x] Create local wallet + - [x] Activate local wallet + - [x] Show local wallets + - [x] Import wallet from file (.pk) + - [x] Save wallet address to file (.addr) + - [x] Delete local wallet +- [x] Show account status + - [x] Show account balance + - [x] Show account history + - [x] Show account status from bookmarks +- [x] Transferring funds to the wallet + - [x] Transfer of a fixed amount + - [x] Transfer of the entire amount (all) + - [x] Transfer of the entire amount with wallet deactivation (alld) + - [x] Transferring funds to the wallet from bookmarks +- [x] Manage bookmarks + - [x] Add account to bookmarks + - [x] Show bookmarks + - [x] Delete bookmark +- [x] Offer management + - [x] Show offers + - [x] Vote for the proposal + - [x] Automatic voting for previously voted proposals +- [x] Domain management + - [x] Rent a new domain + - [x] Show rented domains + - [x] Show domain status + - [x] Delete domain + - [] Automatic domain renewal +- [x] Controlling the validator + - [x] Participate in the election of a validator + - [x] Return bet + reward + - [x] Autostart validator on abnormal termination (systemd) + - [x] Send validator statistics to https://toncenter.com -## Список проверенных операционных систем +## List of tested operating systems ``` Ubuntu 16.04 LTS (Xenial Xerus) - Error: TON compilation error Ubuntu 18.04 LTS (Bionic Beaver) - OK @@ -54,34 +50,43 @@ Ubuntu 20.04 LTS (Focal Fossa) - OK Debian 10 - OK ``` -## Описание установочных скриптов -- `toninstaller.sh` - Данный скрипт клонирует исходники `TON` и `mytonctrl` в папки `/usr/src/ton` и `/usr/src/mytonctrl`, компилирует программы из исходников и прописывает их в `/usr/bin/`. -- `mytoninstaller.py` - Данный скрипт производит настройку валидатора, `mytonctrl` и создание ключей для подключения к валидатору. +## Description of installation scripts +- `toninstaller.sh` - This script clones the sources of `TON` and` mytonctrl` in the folders `/ usr / src / ton` and` / usr / src / mytonctrl`, compiles programs from sources and writes them to `/ usr / bin /`. +- `mytoninstaller.py` - This script configures the validator, `mytonctrl` and creates keys for connecting to the validator. -## Режимы установки -Есть два режима установки: `lite` и `full`. Оба они **компилируют** и устанавливают компоненты `TON`. Однако `lite` версия не настраивает и не запускает валидатор. +## Installation modes +There are two installation modes: `lite` and` full`. They both **compile** and install the `TON` components. However, the `lite` version does not configure or run the validator. -## Установка (Ubuntu) -1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. +## Installation (Ubuntu) +1. Download and execute the script `install.sh` with the desired installation mode. During installation, you will be prompted for the superuser password several times. ```sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/install.sh -sudo bash install.sh -m lite +sudo bash install.sh -m ``` -2. Готово. Можете пробовать запустить программу `mytonctrl`. +2. Done. You can try to run the program `mytonctrl`. ```sh mytonctrl ``` -## Установка (Debian) -1. Скачайте и выполните скрипт `install.sh` с нужным вам режимом установки. Мы будем устанавливать в режиме `lite`. В ходе установки у вас будет несколько раз запрошен пароль суперпользователя. +## Installation (Debian) +1. Download and execute the script `install.sh` with the desired installation mode. During installation, you will be prompted for the superuser password several times. ```sh wget https://raw.githubusercontent.com/igroman787/mytonctrl/original/scripts/install.sh -su root -c 'bash install.sh -m lite' +su root -c 'bash install.sh -m ' ``` -2. Готово. Можете пробовать запустить программу `mytonctrl`. +2. Done. You can try to run the program `mytonctrl`. ```sh mytonctrl ``` + +## Useful links +1. https://ton.org/README.txt +2. https://ton.org/HOWTO.txt +3. https://ton.org/FullNode-HOWTO.txt +4. https://ton.org/Validator-HOWTO.txt +5. https://ton.org/TonSites-HOWTO.txt +6. https://ton.org/DNS-HOWTO.txt +7. https://ton.org/ConfigParam-HOWTO.txt