Skip to content

Commit 65f664e

Browse files
committed
add settings checking in set
1 parent 63492ad commit 65f664e

File tree

2 files changed

+65
-7
lines changed

2 files changed

+65
-7
lines changed

modules/__init__.py

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import typing
2+
from dataclasses import dataclass
23

3-
from .module import MtcModule
4-
from .pool import PoolModule
5-
from .nominator_pool import NominatorPoolModule
6-
from .single_pool import SingleNominatorModule
7-
from .validator import ValidatorModule
8-
from .controller import ControllerModule
4+
from modules.module import MtcModule
5+
from modules.pool import PoolModule
6+
from modules.nominator_pool import NominatorPoolModule
7+
from modules.single_pool import SingleNominatorModule
8+
from modules.validator import ValidatorModule
9+
from modules.controller import ControllerModule
910

1011

1112
MODES = {
@@ -18,3 +19,43 @@
1819

1920
def get_mode(mode_name: str) -> typing.Optional[MtcModule]:
2021
return MODES.get(mode_name)
22+
23+
24+
@dataclass
25+
class Setting:
26+
mode: typing.Optional[str]
27+
default_value: typing.Any
28+
description: str
29+
30+
31+
SETTINGS = {
32+
'stake': Setting('validator', False, 'Stake amount'),
33+
'stakePercent': Setting('validator', 99, 'Stake percent if `stake` is null'),
34+
'isSlashing': Setting('validator', None, 'Create complaints to validators'),
35+
'maxFactor': Setting('validator', None, 'Param send to Elector. if null will be taken from 17 config param'),
36+
'participateBeforeEnd': Setting('validator', None, 'Amount of seconds before start of round to participate'),
37+
'liquid_pool_addr': Setting('liquid-staking', None, 'Liquid staking pool address'),
38+
'min_loan': Setting('liquid-staking', 41000, 'Min loan amount'),
39+
'max_loan': Setting('liquid-staking', 43000, 'Max loan amount'),
40+
'max_interest_percent': Setting('liquid-staking', 10, 'Max interest percent'),
41+
'duplicateSendfile': Setting(None, True, 'Duplicate external to public Liteservers'),
42+
'sendTelemetry': Setting(None, True, 'Send node telemetry'),
43+
'telemetryLiteUrl': Setting(None, 'https://telemetry.toncenter.com/report_status', 'Telemetry url'),
44+
'overlayTelemetryUrl': Setting(None, 'https://telemetry.toncenter.com/report_overlays', 'Overlay telemetry url'),
45+
'duplicateApi': Setting(None, 'sendTelemetry', 'Duplicate external to Toncenter'),
46+
'duplicateApiUrl': Setting(None, 'https://[testnet.]toncenter.com/api/v2/sendBoc', 'Toncenter api url for duplicate'),
47+
'liteclient_timeout': Setting(None, 3, 'Liteclient default timeout'),
48+
'console_timeout': Setting(None, 3, 'Validator console default timeout'),
49+
'fift_timeout': Setting(None, 3, 'Fift default timeout'),
50+
'useDefaultCustomOverlays': Setting(None, True, 'Participate in default custom overlays node eligible to'),
51+
'defaultCustomOverlaysUrl': Setting(None, 'https://ton-blockchain.github.io/fallback_custom_overlays.json', 'Default custom overlays config url'),
52+
}
53+
54+
55+
def get_setting(name: str) -> typing.Optional[Setting]:
56+
return SETTINGS.get(name)
57+
58+
59+
def get_mode_settings(name: str):
60+
return {k: v for k, v in SETTINGS.items() if v.mode == name}
61+

mytonctrl/mytonctrl.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,16 +181,21 @@ def inject_globals(func):
181181

182182

183183
def about(local, ton, args):
184+
from modules import get_mode, get_mode_settings
184185
if len(args) != 1:
185186
color_print("{red}Bad args. Usage:{endc} about <mode_name>")
186187
mode_name = args[0]
187-
mode = ton.get_mode(mode_name)
188+
mode = get_mode(mode_name)
188189
if mode is None:
189190
color_print(f"{{red}}Mode {mode_name} not found{{endc}}")
190191
return
192+
mode_settings = get_mode_settings(mode_name)
191193
color_print(f'''{{cyan}}===[ {mode_name} MODE ]==={{cyan}}=''')
192194
color_print(f'''Description: {mode.description}''')
193195
color_print('Enabled: ' + color_text('{green}yes{endc}' if ton.get_mode_value(mode_name) else '{red}no{endc}'))
196+
print('Settings:', 'no' if len(mode_settings) == 0 else '')
197+
for setting_name, setting in mode_settings.items():
198+
print(f' {setting_name}: {setting.description}. Default value: {setting.default_value}')
194199
#end define
195200

196201

@@ -1287,6 +1292,18 @@ def SetSettings(ton, args):
12871292
color_print(f"{{red}} Error: set {name} ... is deprecated and does not work {{endc}}."
12881293
f"\nInstead, use {{bold}}enable_mode {mode_name}{{endc}}")
12891294
return
1295+
force = False
1296+
if len(args) > 2:
1297+
if args[2] == "--force":
1298+
force = True
1299+
from modules import get_setting
1300+
setting = get_setting(name)
1301+
if setting is None and not force:
1302+
color_print(f"{{red}} Error: setting {name} not found {{endc}}. use flag --force to set it anyway")
1303+
if setting.mode is not None:
1304+
if not ton.get_mode_value(setting.mode) and not force:
1305+
color_print(f"{{red}} Error: mode {setting.mode} is disabled {{endc}}. Use flag --force to set it anyway")
1306+
return
12901307
ton.SetSettings(name, value)
12911308
color_print("SetSettings - {green}OK{endc}")
12921309
#end define

0 commit comments

Comments
 (0)