Skip to content

Commit 55c3c0d

Browse files
authored
Merge pull request #288 from ton-blockchain/mytonctrl2_dev
Mytonctrl2 dev
2 parents a4b8bf2 + 7d46dc7 commit 55c3c0d

File tree

10 files changed

+81
-34
lines changed

10 files changed

+81
-34
lines changed

modules/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class Setting:
5252
'fift_timeout': Setting(None, 3, 'Fift default timeout'),
5353
'useDefaultCustomOverlays': Setting(None, True, 'Participate in default custom overlays node eligible to'),
5454
'defaultCustomOverlaysUrl': Setting(None, 'https://ton-blockchain.github.io/fallback_custom_overlays.json', 'Default custom overlays config url'),
55+
'debug': Setting(None, False, 'Debug mtc console mode. Prints Traceback on errors'),
5556
}
5657

5758

modules/controller.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ def print_controllers_list(self, args):
4848
old_controllers = self.ton.GetSettings("old_controllers")
4949
user_controllers_list = self.ton.GetSettings("user_controllers_list")
5050
print("using controllers:")
51-
self.print_controllers_list_process(using_controllers)
52-
if new_controllers != using_controllers:
51+
if using_controllers is not None:
52+
self.print_controllers_list_process(using_controllers)
53+
if new_controllers is not None and new_controllers != using_controllers:
5354
print()
5455
print("new controllers:")
5556
self.print_controllers_list_process(new_controllers)

modules/custom_overlays.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,20 @@ def parse_config(name: str, config: dict, vset: list = None):
3131
"msg_sender": False,
3232
})
3333
else:
34-
result["nodes"].append({
35-
"adnl_id": hex2base64(k),
36-
"msg_sender": v["msg_sender"],
37-
})
38-
if v["msg_sender"]:
39-
result["nodes"][-1]["msg_sender_priority"] = v["msg_sender_priority"]
34+
if "block_sender" in v:
35+
result["nodes"].append({
36+
"adnl_id": hex2base64(k),
37+
"block_sender": v["block_sender"],
38+
})
39+
elif "msg_sender" in v:
40+
result["nodes"].append({
41+
"adnl_id": hex2base64(k),
42+
"msg_sender": v["msg_sender"],
43+
})
44+
if v["msg_sender"]:
45+
result["nodes"][-1]["msg_sender_priority"] = v["msg_sender_priority"]
46+
else:
47+
raise Exception("Unknown node type")
4048
return result
4149

4250
def add_custom_overlay(self, args):
@@ -168,7 +176,7 @@ def get_default_custom_overlay(self):
168176
network = self.ton.GetNetworkName()
169177
default_url = 'https://ton-blockchain.github.io/fallback_custom_overlays.json'
170178
url = self.ton.local.db.get('defaultCustomOverlaysUrl', default_url)
171-
resp = requests.get(url)
179+
resp = requests.get(url, timeout=3)
172180
if resp.status_code != 200:
173181
self.ton.local.add_log(f"Failed to get default custom overlays from {url}", "error")
174182
return None

modules/nominator_pool.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ def new_pool(self, args):
5656

5757
def do_activate_pool(self, pool, ex=True):
5858
self.ton.local.add_log("start ActivatePool function", "debug")
59-
for i in range(10):
60-
time.sleep(3)
61-
account = self.ton.GetAccount(pool.addrB64)
62-
if account.balance > 0:
63-
self.ton.SendFile(pool.bocFilePath, pool, timeout=False)
64-
return
65-
if ex:
66-
raise Exception("ActivatePool error: time out")
59+
account = self.ton.GetAccount(pool.addrB64)
60+
if account.status == "empty":
61+
raise Exception("do_activate_pool error: account status is empty")
62+
elif account.status == "active":
63+
self.local.add_log("do_activate_pool warning: account status is active", "warning")
64+
else:
65+
self.ton.SendFile(pool.bocFilePath, pool, timeout=False, remove=False)
66+
#end define
6767

6868
def activate_pool(self, args):
6969
try:
@@ -72,9 +72,6 @@ def activate_pool(self, args):
7272
color_print("{red}Bad args. Usage:{endc} activate_pool <pool-name>")
7373
return
7474
pool = self.ton.GetLocalPool(pool_name)
75-
if not os.path.isfile(pool.bocFilePath):
76-
self.local.add_log(f"Pool {pool_name} already activated", "warning")
77-
return
7875
self.do_activate_pool(pool)
7976
color_print("ActivatePool - {green}OK{endc}")
8077

modules/single_pool.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,18 @@ def activate_single_pool(self, args):
6767
self.do_activate_single_pool(pool)
6868
color_print("activate_single_pool - {green}OK{endc}")
6969

70+
def withdraw_from_single_pool(self, args):
71+
try:
72+
pool_addr = args[0]
73+
amount = float(args[1])
74+
except:
75+
color_print("{red}Bad args. Usage:{endc} withdraw_from_single_pool <pool-addr> <amount>")
76+
return
77+
self.ton.WithdrawFromPoolProcess(pool_addr, amount)
78+
color_print("withdraw_from_single_pool - {green}OK{endc}")
79+
#end define
80+
7081
def add_console_commands(self, console):
7182
console.AddItem("new_single_pool", self.new_single_pool, self.local.translate("new_single_pool_cmd"))
7283
console.AddItem("activate_single_pool", self.activate_single_pool, self.local.translate("activate_single_pool_cmd"))
84+
console.AddItem("withdraw_from_single_pool", self.withdraw_from_single_pool, self.local.translate("withdraw_from_single_pool_cmd"))

mypylib

Submodule mypylib updated 1 file

mytoncore/mytoncore.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -497,20 +497,18 @@ def AddrFile2Object(self, object):
497497
#end define
498498

499499
def WalletVersion2Wallet(self, wallet):
500-
self.local.add_log("start WalletVersion2Wallet function", "debug")
501500
if wallet.version is not None:
502501
return
502+
self.local.add_log("start WalletVersion2Wallet function", "debug")
503503
walletsVersionList = self.GetWalletsVersionList()
504-
account = self.GetAccount(wallet.addrB64)
505504
version = walletsVersionList.get(wallet.addrB64)
506505
if version is None:
506+
account = self.GetAccount(wallet.addrB64)
507507
version = self.GetVersionFromCodeHash(account.codeHash)
508+
self.SetWalletVersion(wallet.addrB64, version)
508509
if version is None:
509510
self.local.add_log("Wallet version not found: " + wallet.addrB64, "warning")
510511
return
511-
#end if
512-
513-
self.SetWalletVersion(wallet.addrB64, version)
514512
wallet.version = version
515513
#end define
516514

@@ -3047,7 +3045,7 @@ def offers_gc(self, save_offers):
30473045
def GetSaveOffers(self):
30483046
bname = "saveOffers"
30493047
save_offers = self.local.db.get(bname)
3050-
if save_offers is None:
3048+
if save_offers is None or isinstance(save_offers, list):
30513049
save_offers = dict()
30523050
self.local.db[bname] = save_offers
30533051
self.offers_gc(save_offers)

mytonctrl/mytonctrl.py

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf_8 -*-
3+
import base64
34
import subprocess
45
import json
56
import psutil
@@ -379,6 +380,14 @@ def Upgrade(ton, args):
379380
upgrade_script_path = pkg_resources.resource_filename('mytonctrl', 'scripts/upgrade.sh')
380381
runArgs = ["bash", upgrade_script_path, "-a", author, "-r", repo, "-b", branch]
381382
exitCode = run_as_root(runArgs)
383+
if ton.using_validator():
384+
try:
385+
from mytoninstaller.mytoninstaller import set_node_argument, get_node_args
386+
node_args = get_node_args()
387+
if node_args['--state-ttl'] == '604800':
388+
set_node_argument(ton.local, ["--state-ttl", "-d"])
389+
except Exception as e:
390+
color_print(f"{{red}}Failed to set node argument: {e} {{endc}}")
382391
if exitCode == 0:
383392
text = "Upgrade - {green}OK{endc}"
384393
else:
@@ -460,6 +469,10 @@ def check_sync(local, ton):
460469
#end define
461470

462471
def check_validator_balance(local, ton):
472+
validator_status = ton.GetValidatorStatus()
473+
if not validator_status.is_working or validator_status.out_of_sync >= 20:
474+
# Do not check the validator wallet balance if the node is not synchronized (via public lite-servers)
475+
return
463476
if ton.using_validator():
464477
validator_wallet = ton.GetValidatorWallet()
465478
validator_account = local.try_function(ton.GetAccount, args=[validator_wallet.addrB64])
@@ -475,6 +488,7 @@ def check_vps(local, ton):
475488
data = local.try_function(is_host_virtual)
476489
if data and data["virtual"]:
477490
color_print(f"Virtualization detected: {data['product_name']}")
491+
#end define
478492

479493
def warnings(local, ton):
480494
check_disk_usage(local, ton)
@@ -544,6 +558,13 @@ def PrintStatus(local, ton, args):
544558
disks_load_percent_avg = ton.GetStatistics("disksLoadPercentAvg", statistics)
545559

546560
all_status = validator_status.is_working == True and validator_status.out_of_sync < 20
561+
562+
try:
563+
vconfig = ton.GetValidatorConfig()
564+
fullnode_adnl = base64.b64decode(vconfig.fullnode).hex().upper()
565+
except:
566+
fullnode_adnl = 'n/a'
567+
547568
if all_status:
548569
network_name = ton.GetNetworkName()
549570
rootWorkchainEnabledTime_int = ton.GetRootWorkchainEnabledTime()
@@ -581,7 +602,7 @@ def PrintStatus(local, ton, args):
581602
if all_status:
582603
PrintTonStatus(local, network_name, startWorkTime, totalValidators, onlineValidators, shardsNumber, offersNumber, complaintsNumber, tpsAvg)
583604
PrintLocalStatus(local, adnl_addr, validator_index, validator_efficiency, validator_wallet, validator_account, validator_status,
584-
db_size, db_usage, memory_info, swap_info, net_load_avg, disks_load_avg, disks_load_percent_avg)
605+
db_size, db_usage, memory_info, swap_info, net_load_avg, disks_load_avg, disks_load_percent_avg, fullnode_adnl)
585606
if all_status:
586607
PrintTonConfig(local, fullConfigAddr, fullElectorAddr, config15, config17)
587608
PrintTimes(local, rootWorkchainEnabledTime_int, startWorkTime, oldStartWorkTime, config15)
@@ -631,7 +652,7 @@ def PrintTonStatus(local, network_name, startWorkTime, totalValidators, onlineVa
631652
print()
632653
#end define
633654

634-
def PrintLocalStatus(local, adnlAddr, validatorIndex, validatorEfficiency, validatorWallet, validatorAccount, validator_status, dbSize, dbUsage, memoryInfo, swapInfo, netLoadAvg, disksLoadAvg, disksLoadPercentAvg):
655+
def PrintLocalStatus(local, adnlAddr, validatorIndex, validatorEfficiency, validatorWallet, validatorAccount, validator_status, dbSize, dbUsage, memoryInfo, swapInfo, netLoadAvg, disksLoadAvg, disksLoadPercentAvg, fullnode_adnl):
635656
if validatorWallet is None:
636657
return
637658
walletAddr = validatorWallet.addrB64
@@ -650,6 +671,7 @@ def PrintLocalStatus(local, adnlAddr, validatorIndex, validatorEfficiency, valid
650671
validatorEfficiency_text = GetColorInt(validatorEfficiency, 10, logic="more", ending=" %")
651672
validatorEfficiency_text = local.translate("local_status_validator_efficiency").format(validatorEfficiency_text)
652673
adnlAddr_text = local.translate("local_status_adnl_addr").format(bcolors.yellow_text(adnlAddr))
674+
fullnode_adnl_text = local.translate("local_status_fullnode_adnl").format(bcolors.yellow_text(fullnode_adnl))
653675
walletAddr_text = local.translate("local_status_wallet_addr").format(bcolors.yellow_text(walletAddr))
654676
walletBalance_text = local.translate("local_status_wallet_balance").format(bcolors.green_text(walletBalance))
655677

@@ -709,7 +731,9 @@ def PrintLocalStatus(local, adnlAddr, validatorIndex, validatorEfficiency, valid
709731
mytoncoreStatus_text = local.translate("local_status_mytoncore_status").format(mytoncoreStatus_color, mytoncoreUptime_text)
710732
validatorStatus_text = local.translate("local_status_validator_status").format(validatorStatus_color, validatorUptime_text)
711733
validator_out_of_sync_text = local.translate("local_status_validator_out_of_sync").format(GetColorInt(validator_status.out_of_sync, 20, logic="less", ending=" s"))
712-
validator_out_of_ser_text = local.translate("local_status_validator_out_of_ser").format(GetColorInt(validator_status.out_of_ser, 20, logic="less", ending=" blocks"))
734+
735+
validator_out_of_ser_text = local.translate("local_status_validator_out_of_ser").format(f'{validator_status.out_of_ser} blocks ago')
736+
713737
dbSize_text = GetColorInt(dbSize, 1000, logic="less", ending=" Gb")
714738
dbUsage_text = GetColorInt(dbUsage, 80, logic="less", ending="%")
715739
dbStatus_text = local.translate("local_status_db").format(dbSize_text, dbUsage_text)
@@ -735,6 +759,7 @@ def PrintLocalStatus(local, adnlAddr, validatorIndex, validatorEfficiency, valid
735759
print(validatorIndex_text)
736760
print(validatorEfficiency_text)
737761
print(adnlAddr_text)
762+
print(fullnode_adnl_text)
738763
print(walletAddr_text)
739764
print(walletBalance_text)
740765
print(cpuLoad_text)

mytonctrl/resources/translate.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,11 @@
284284
"ru": "ADNL адрес локального валидатора: {0}",
285285
"zh_TW": "本地驗證者的 ADNL 地址: {0}"
286286
},
287+
"local_status_fullnode_adnl": {
288+
"en": "Public ADNL address of node: {0}",
289+
"ru": "Публичный ADNL адрес ноды: {0}",
290+
"zh_TW": "節點的公共 ADNL 地址: {0}"
291+
},
287292
"local_status_wallet_addr": {
288293
"en": "Local validator wallet address: {0}",
289294
"ru": "Адрес кошелька локального валидатора: {0}",
@@ -330,9 +335,9 @@
330335
"zh_TW": "本地驗證者不同步: {0}"
331336
},
332337
"local_status_validator_out_of_ser": {
333-
"en": "Local validator out of ser: {0}",
334-
"ru": "Рассериализация локального валидатора: {0}",
335-
"zh_TW": "本地驗證者不同步: {0}"
338+
"en": "Local validator last state serialization: {0}",
339+
"ru": "Серализация стейта локального валидатора была: {0}",
340+
"zh_TW": "本地驗證者最後一次狀態序列化: {0}"
336341
},
337342
"local_status_db": {
338343
"en": "Local validator database size: {0}, {1}",

mytoninstaller/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def FirstNodeSettings(local):
5858

5959
# Прописать автозагрузку
6060
cpus = psutil.cpu_count() - 1
61-
cmd = f"{validatorAppPath} --threads {cpus} --daemonize --global-config {globalConfigPath} --db {ton_db_dir} --logname {tonLogPath} --state-ttl 604800 --archive-ttl {archive_ttl} --verbosity 1"
61+
cmd = f"{validatorAppPath} --threads {cpus} --daemonize --global-config {globalConfigPath} --db {ton_db_dir} --logname {tonLogPath} --archive-ttl {archive_ttl} --verbosity 1"
6262
add2systemd(name="validator", user=vuser, start=cmd) # post="/usr/bin/python3 /usr/src/mytonctrl/mytoncore.py -e \"validator down\""
6363

6464
# Получить внешний ip адрес

0 commit comments

Comments
 (0)