Skip to content

Commit 6cb38f1

Browse files
committed
add more modes
1 parent 390b431 commit 6cb38f1

File tree

8 files changed

+202
-233
lines changed

8 files changed

+202
-233
lines changed

mytoncore/functions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ def ValidatorDownEvent(local):
7979

8080

8181
def Elections(local, ton):
82-
usePool = local.db.get("usePool")
83-
if usePool == True:
82+
use_pool = ton.using_pool()
83+
if use_pool:
8484
ton.PoolsUpdateValidatorSet()
8585
ton.RecoverStake()
8686
ton.ElectionEntry()

mytoncore/modes.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
MODES = { # mode_name : is_enabled_by_default
2-
'Controller': False,
3-
'Validator': True
2+
'validator': True,
3+
'nominator-pool': False,
4+
'single-pool': False,
5+
'liquid-staking': False,
46
}

mytoncore/mytoncore.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,7 +1292,7 @@ def ProcessRecoverStake(self):
12921292

12931293
def GetStake(self, account, args=None):
12941294
stake = self.local.db.get("stake")
1295-
usePool = self.local.db.get("usePool")
1295+
usePool = self.using_pool()
12961296
useController = self.local.db.get("useController")
12971297
stakePercent = self.local.db.get("stakePercent", 99)
12981298
vconfig = self.GetValidatorConfig()
@@ -1409,7 +1409,7 @@ def GetValidatorWallet(self, mode="stake"):
14091409
#end define
14101410

14111411
def ElectionEntry(self, args=None):
1412-
usePool = self.local.db.get("usePool")
1412+
usePool = self.using_pool()
14131413
useController = self.local.db.get("useController")
14141414
wallet = self.GetValidatorWallet()
14151415
addrB64 = wallet.addrB64
@@ -3237,6 +3237,13 @@ def get_mode_value(self, name):
32373237
raise Exception(f'No mode named {name} found in current modes: {current_modes}')
32383238
return current_modes[name]
32393239

3240+
def using_nominator_pool(self):
3241+
return (self.local.db.get("usePool") or # for backward compatibility
3242+
self.get_mode_value('nominator-pool'))
3243+
3244+
def using_pool(self) -> bool:
3245+
return self.using_nominator_pool() or self.get_mode_value('single-nominator')
3246+
32403247
def Tlb2Json(self, text):
32413248
# Заменить скобки
32423249
start = 0
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import os
2+
3+
from mypylib.mypylib import color_print
4+
from mytonctrl.modules.pool import PoolModule
5+
6+
7+
class NominatorPoolModule(PoolModule):
8+
9+
def new_pool(self, args):
10+
try:
11+
pool_name = args[0]
12+
validator_reward_share_percent = float(args[1])
13+
max_nominators_count = int(args[2])
14+
min_validator_stake = int(args[3])
15+
min_nominator_stake = int(args[4])
16+
except:
17+
color_print("{red}Bad args. Usage:{endc} new_pool <pool-name> <validator-reward-share-percent> <max-nominators-count> <min-validator-stake> <min-nominator-stake>")
18+
return
19+
self.ton.CreatePool(pool_name, validator_reward_share_percent, max_nominators_count, min_validator_stake, min_nominator_stake)
20+
color_print("NewPool - {green}OK{endc}")
21+
22+
def activate_pool(self, args):
23+
try:
24+
pool_name = args[0]
25+
except:
26+
color_print("{red}Bad args. Usage:{endc} activate_pool <pool-name>")
27+
return
28+
pool = self.ton.GetLocalPool(pool_name)
29+
if not os.path.isfile(pool.bocFilePath):
30+
self.local.add_log(f"Pool {pool_name} already activated", "warning")
31+
return
32+
self.ton.ActivatePool(pool)
33+
color_print("ActivatePool - {green}OK{endc}")
34+
35+
def deposit_to_pool(self, args):
36+
try:
37+
poll_addr = args[0]
38+
amount = float(args[1])
39+
except:
40+
color_print("{red}Bad args. Usage:{endc} deposit_to_pool <pool-addr> <amount>")
41+
return
42+
self.ton.DepositToPool(poll_addr, amount)
43+
color_print("DepositToPool - {green}OK{endc}")
44+
45+
def withdraw_from_pool(self, args):
46+
try:
47+
pool_addr = args[0]
48+
amount = float(args[1])
49+
except:
50+
color_print("{red}Bad args. Usage:{endc} withdraw_from_pool <pool-addr> <amount>")
51+
return
52+
self.ton.WithdrawFromPool(pool_addr, amount)
53+
color_print("WithdrawFromPool - {green}OK{endc}")
54+
55+
def update_validator_set(self, args):
56+
try:
57+
pool_addr = args[0]
58+
except:
59+
color_print("{red}Bad args. Usage:{endc} update_validator_set <pool-addr>")
60+
return
61+
wallet = self.ton.GetValidatorWallet()
62+
self.ton.PoolUpdateValidatorSet(pool_addr, wallet)
63+
color_print("UpdateValidatorSet - {green}OK{endc}")
64+
65+
def add_console_commands(self, console):
66+
console.AddItem("new_pool", self.new_pool, self.local.translate("new_pool_cmd"))
67+
console.AddItem("activate_pool", self.activate_pool, self.local.translate("activate_pool_cmd"))
68+
console.AddItem("deposit_to_pool", self.deposit_to_pool, self.local.translate("deposit_to_pool_cmd"))
69+
console.AddItem("withdraw_from_pool", self.withdraw_from_pool, self.local.translate("withdraw_from_pool_cmd"))
70+
console.AddItem("update_validator_set", self.update_validator_set, self.local.translate("update_validator_set_cmd"))
71+
72+

mytonctrl/modules/pool.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import os
2+
3+
from mypylib.mypylib import color_print, print_table
4+
from mytonctrl.modules.module import MtcModule
5+
6+
7+
class PoolModule(MtcModule):
8+
9+
def print_pools_list(self, args):
10+
table = list()
11+
table += [["Name", "Status", "Balance", "Version", "Address"]]
12+
data = self.ton.GetPools()
13+
if data is None or len(data) == 0:
14+
print("No data")
15+
return
16+
for pool in data:
17+
account = self.ton.GetAccount(pool.addrB64)
18+
if account.status != "active":
19+
pool.addrB64 = pool.addrB64_init
20+
version = self.ton.GetVersionFromCodeHash(account.codeHash)
21+
table += [[pool.name, account.status, account.balance, version, pool.addrB64]]
22+
print_table(table)
23+
24+
def delete_pool(self, args):
25+
try:
26+
pool_name = args[0]
27+
except:
28+
color_print("{red}Bad args. Usage:{endc} delete_pool <pool-name>")
29+
return
30+
pool = self.ton.GetLocalPool(pool_name)
31+
pool.Delete()
32+
color_print("DeletePool - {green}OK{endc}")
33+
34+
def import_pool(self, args):
35+
try:
36+
pool_name = args[0]
37+
pool_addr = args[1]
38+
except:
39+
color_print("{red}Bad args. Usage:{endc} import_pool <pool-name> <pool-addr>")
40+
return
41+
self.ton.import_pool(pool_name, pool_addr)
42+
color_print("import_pool - {green}OK{endc}")
43+
44+
def add_console_commands(self, console):
45+
console.AddItem("pools_list", self.print_pools_list, self.local.translate("pools_list_cmd"))
46+
console.AddItem("delete_pool", self.delete_pool, self.local.translate("delete_pool_cmd"))
47+
console.AddItem("import_pool", self.import_pool, self.local.translate("import_pool_cmd"))

mytonctrl/modules/single_pool.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import os
2+
3+
from mypylib.mypylib import color_print
4+
from mytonctrl.modules.pool import PoolModule
5+
6+
7+
class SingleNominatorModule(PoolModule):
8+
9+
def new_single_pool(self, args):
10+
try:
11+
pool_name = args[0]
12+
owner_address = args[1]
13+
except:
14+
color_print("{red}Bad args. Usage:{endc} new_single_pool <pool-name> <owner_address>")
15+
return
16+
self.ton.create_single_pool(pool_name, owner_address)
17+
color_print("new_single_pool - {green}OK{endc}")
18+
19+
def activate_single_pool(self, args):
20+
try:
21+
pool_name = args[0]
22+
except:
23+
color_print("{red}Bad args. Usage:{endc} activate_single_pool <pool-name>")
24+
return
25+
pool = self.ton.GetLocalPool(pool_name)
26+
if not os.path.isfile(pool.bocFilePath):
27+
self.local.add_log(f"Pool {pool_name} already activated", "warning")
28+
return
29+
self.ton.activate_single_pool(pool)
30+
color_print("activate_single_pool - {green}OK{endc}")
31+
32+
def add_console_commands(self, console):
33+
console.AddItem("new_single_pool", self.new_single_pool, self.local.translate("new_single_pool_cmd"))
34+
console.AddItem("activate_single_pool", self.activate_single_pool, self.local.translate("activate_single_pool_cmd"))

0 commit comments

Comments
 (0)