Skip to content

Commit fafe4e1

Browse files
authored
Merge pull request #201 from yungwine/mytonctrl2_dev
add modes
2 parents 64bcbf3 + 24157c6 commit fafe4e1

File tree

7 files changed

+227
-159
lines changed

7 files changed

+227
-159
lines changed

mytoncore/modes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
MODES = { # mode_name : is_enabled_by_default
2+
'Controller': False,
3+
'Validator': True
4+
}

mytoncore/mytoncore.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import requests
1212
from fastcrc import crc16
1313

14+
from mytoncore.modes import MODES
1415
from mytoncore.utils import xhex2hex, ng2g
1516
from mytoncore.liteclient import LiteClient
1617
from mytoncore.validator_console import ValidatorConsole
@@ -3207,6 +3208,35 @@ def SetSettings(self, name, data):
32073208
self.local.save()
32083209
#end define
32093210

3211+
def get_modes(self):
3212+
current_modes = self.local.db.get('modes', {})
3213+
if 'modes' not in self.local.db:
3214+
self.local.db['modes'] = current_modes
3215+
for mode in MODES:
3216+
if mode not in current_modes:
3217+
current_modes[mode] = MODES[mode] # assign default mode value
3218+
return current_modes
3219+
3220+
def enable_mode(self, name):
3221+
if name not in MODES:
3222+
raise Exception(f'Unknown module name: {name}. Available modes: {", ".join(MODES)}')
3223+
current_modes = self.get_modes()
3224+
current_modes[name] = True
3225+
self.local.save()
3226+
3227+
def disable_mode(self, name):
3228+
current_modes = self.get_modes()
3229+
if name not in current_modes:
3230+
raise Exception(f'Unknown module name: {name}. Available modes: {", ".join(MODES)}')
3231+
current_modes[name] = False
3232+
self.local.save()
3233+
3234+
def get_mode_value(self, name):
3235+
current_modes = self.get_modes()
3236+
if name not in current_modes:
3237+
raise Exception(f'No mode named {name} found in current modes: {current_modes}')
3238+
return current_modes[name]
3239+
32103240
def Tlb2Json(self, text):
32113241
# Заменить скобки
32123242
start = 0

mytonctrl/modules/__init__.py

Whitespace-only changes.

mytonctrl/modules/controller.py

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
import json
2+
from mypylib.mypylib import color_print, print_table
3+
4+
from mytonctrl.utils import GetItemFromList
5+
from mytonctrl.modules.module import MtcModule
6+
7+
8+
class ControllerModule(MtcModule):
9+
10+
def create_controllers(self, args):
11+
self.ton.CreateControllers()
12+
color_print("CreateControllers - {green}OK{endc}")
13+
14+
def print_controllers_list(self, args):
15+
new_controllers = self.ton.GetControllers()
16+
using_controllers = self.ton.GetSettings("using_controllers")
17+
old_controllers = self.ton.GetSettings("old_controllers")
18+
user_controllers_list = self.ton.GetSettings("user_controllers_list")
19+
print("using controllers:")
20+
self.print_controllers_list_process(using_controllers)
21+
if new_controllers != using_controllers:
22+
print()
23+
print("new controllers:")
24+
self.print_controllers_list_process(new_controllers)
25+
if old_controllers is not None and len(old_controllers) > 0:
26+
print()
27+
print("old controllers:")
28+
self.print_controllers_list_process(old_controllers)
29+
if user_controllers_list is not None and len(user_controllers_list) > 0:
30+
print()
31+
print("user controllers:")
32+
self.print_controllers_list_process(user_controllers_list)
33+
34+
def print_controllers_list_process(self, controllers):
35+
table = list()
36+
table += [["Address", "Status", "Balance", "Approved", "State"]]
37+
for controllerAddr in controllers:
38+
account = self.ton.GetAccount(controllerAddr)
39+
controllerData = self.ton.GetControllerData(controllerAddr)
40+
approved = True if controllerData and controllerData["approved"] == -1 else False
41+
state = controllerData["state"] if controllerData else None
42+
table += [[controllerAddr, account.status, account.balance, approved, state]]
43+
print_table(table)
44+
45+
def get_controller_data(self, args):
46+
try:
47+
controller_addr = args[0]
48+
except:
49+
color_print("{red}Bad args. Usage:{endc} get_controller_data <controller-addr>")
50+
return
51+
controller_data = self.ton.GetControllerData(controller_addr)
52+
print(json.dumps(controller_data, indent=4))
53+
54+
def deposit_to_controller(self, args):
55+
try:
56+
controller_addr = args[0]
57+
amount = float(args[1])
58+
except:
59+
color_print("{red}Bad args. Usage:{endc} deposit_to_controller <controller-addr> <amount>")
60+
return
61+
self.ton.DepositToController(controller_addr, amount)
62+
63+
def withdraw_from_controller(self, args):
64+
try:
65+
controller_addr = args[0]
66+
amount = GetItemFromList(args, 1)
67+
except:
68+
color_print("{red}Bad args. Usage:{endc} withdraw_from_controller <controller-addr> [amount]")
69+
return
70+
self.ton.WithdrawFromController(controller_addr, amount)
71+
72+
def calculate_annual_controller_percentage(self, args):
73+
try:
74+
percent_per_round = float(args[0])
75+
except:
76+
percent_per_round = self.ton.GetSettings("max_interest_percent")
77+
config15 = self.ton.GetConfig(15)
78+
roundPeriod = config15["validators_elected_for"]
79+
rounds = 365 * 24 * 3600 / roundPeriod
80+
yearInterest = (1 + percent_per_round / 100) * rounds
81+
yearInterestPercent = round(yearInterest / 100, 2)
82+
print("roundPeriod", roundPeriod)
83+
print("rounds", rounds)
84+
print("percentPerRound", percent_per_round)
85+
print("yearInterest", yearInterest)
86+
print(f"yearInterestPercent: {yearInterestPercent}%")
87+
88+
def controller_update_validator_set(self, args):
89+
try:
90+
controller_addr = args[0]
91+
except:
92+
color_print("{red}Bad args. Usage:{endc} controller_update_validator_set <controller-addr>")
93+
return
94+
self.ton.ControllerUpdateValidatorSet(controller_addr)
95+
color_print("ControllerUpdateValidatorSet - {green}OK{endc}")
96+
97+
def stop_controller(self, args):
98+
try:
99+
controller_addr = args[0]
100+
except:
101+
color_print("{red}Bad args. Usage:{endc} stop_controller <controller-addr>")
102+
return
103+
self.ton.StopController(controller_addr)
104+
color_print("StopController - {green}OK{endc}")
105+
106+
def stop_and_withdraw_controller(self, args):
107+
try:
108+
controller_addr = args[0]
109+
amount = GetItemFromList(args, 1)
110+
except:
111+
color_print("{red}Bad args. Usage:{endc} stop_and_withdraw_controller <controller-addr> [amount]")
112+
return
113+
if amount is None:
114+
account = self.ton.GetAccount(controller_addr)
115+
amount = account.balance - 10.1
116+
self.ton.StopController(controller_addr)
117+
self.ton.WithdrawFromController(controller_addr, amount)
118+
color_print("StopAndWithdrawController - {green}OK{endc}")
119+
120+
def add_controller(self, args):
121+
try:
122+
controller_addr = args[0]
123+
except:
124+
color_print("{red}Bad args. Usage:{endc} add_controller <controller-addr>")
125+
return
126+
self.ton.AddController(controller_addr)
127+
color_print("AddController - {green}OK{endc}")
128+
129+
def check_liquid_pool(self, args):
130+
self.ton.CheckLiquidPool()
131+
color_print("CheckLiquidPool - {green}OK{endc}")
132+
133+
def calculate_loan_amount_test(self, args):
134+
t = self.ton.CalculateLoanAmount_test()
135+
print(t)
136+
137+
def add_console_commands(self, console):
138+
console.AddItem("create_controllers", self.create_controllers, self.local.translate("_"))
139+
console.AddItem("update_controllers", self.create_controllers, self.local.translate("_"))
140+
console.AddItem("controllers_list", self.print_controllers_list, self.local.translate("_"))
141+
console.AddItem("get_controller_data", self.get_controller_data, self.local.translate("_"))
142+
console.AddItem("deposit_to_controller", self.deposit_to_controller, self.local.translate("_"))
143+
console.AddItem("withdraw_from_controller", self.withdraw_from_controller, self.local.translate("_"))
144+
console.AddItem("calculate_annual_controller_percentage", self.calculate_annual_controller_percentage, self.local.translate("_"))
145+
console.AddItem("controller_update_validator_set", self.controller_update_validator_set, self.local.translate("_"))
146+
console.AddItem("stop_controller", self.stop_controller, self.local.translate("_"))
147+
console.AddItem("stop_and_withdraw_controller", self.stop_and_withdraw_controller, self.local.translate("_"))
148+
console.AddItem("add_controller", self.add_controller, self.local.translate("_"))
149+
console.AddItem("check_liquid_pool", self.check_liquid_pool, self.local.translate("_"))
150+
console.AddItem("test_calculate_loan_amount", self.calculate_loan_amount_test, self.local.translate("_"))

mytonctrl/modules/module.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from abc import ABC, abstractmethod
2+
from mytoncore.mytoncore import MyTonCore
3+
4+
5+
class MtcModule(ABC):
6+
7+
def __init__(self, ton, local, *args, **kwargs):
8+
self.ton: MyTonCore = ton
9+
self.local = local
10+
11+
@abstractmethod
12+
def add_console_commands(self, console): ...

0 commit comments

Comments
 (0)