Ton
99 строк · 3.2 Кб
1global int ctx_query_id;
2
3global int ctx_locked;
4global slice ctx_owner;
5global slice ctx_controller;
6global slice ctx_proxy;
7global cell ctx_proxy_state;
8
9global int ctx_profit_per_coin;
10global int ctx_balance;
11global int ctx_balance_sent;
12global int ctx_balance_withdraw;
13global int ctx_balance_pending_withdraw;
14global int ctx_balance_pending_deposits;
15
16global cell ctx_nominators;
17
18;; var (enabled, udpates_enabled, min_stake, deposit_fee, withdraw_fee, pool_fee, receipt_price) = ctx_extras;
19global (int, int, int, int, int, int, int) ctx_extras;
20
21() load_base_data() impure {
22var ds = get_data().begin_parse();
23ctx_locked = ds~load_int(1);
24
25ctx_owner = ds~load_msg_addr();
26ctx_controller = ds~load_msg_addr();
27ctx_proxy = ds~load_msg_addr();
28
29cell balance_cell = ds~load_ref();
30ctx_nominators = ds~load_dict();
31ctx_proxy_state = ds~load_ref();
32cell extras_cell = null();
33if (ds.slice_refs() > 0) {
34extras_cell = ds~load_ref();
35}
36ds.end_parse();
37
38var bs = balance_cell.begin_parse();
39ctx_profit_per_coin = bs~load_int(128);
40ctx_balance = bs~load_coins();
41ctx_balance_sent = bs~load_coins();
42ctx_balance_withdraw = bs~load_coins();
43ctx_balance_pending_withdraw = bs~load_coins();
44ctx_balance_pending_deposits = bs~load_coins();
45bs.end_parse();
46
47;; Parsing extras (enabled, upgrades_enabled, min_stake, deposit_fee, withdraw_fee, pool_fee, receipt_price)
48ctx_extras = (
49true, ;; Enabled
50true, ;; Upgrades enabled
51params::min_stake(), ;; Min Stake
52fees::op(), ;; Deposit fee
53fees::op(), ;; Withdraw fee
5410 * 100, ;; Pool fee (%),
55fees::receipt()
56);
57if (~ extras_cell.null?()) {
58var ec = extras_cell.begin_parse();
59var enabled = ec~load_int(1);
60var udpates_enabled = ec~load_int(1);
61var min_stake = ec~load_coins();
62var deposit_fee = ec~load_coins();
63var withdraw_fee = ec~load_coins();
64var pool_fee = ec~load_coins();
65var receipt_price = ec~load_coins();
66ctx_extras = (enabled, udpates_enabled, min_stake, deposit_fee, withdraw_fee, pool_fee, receipt_price);
67ec.end_parse();
68}
69}
70
71() store_base_data() impure {
72var (enabled, udpates_enabled, min_stake, deposit_fee, withdraw_fee, pool_fee, receipt_price) = ctx_extras;
73set_data(begin_cell()
74.store_int(ctx_locked, 1)
75.store_slice(ctx_owner)
76.store_slice(ctx_controller)
77.store_slice(ctx_proxy)
78.store_ref(begin_cell()
79.store_int(ctx_profit_per_coin, 128)
80.store_coins(ctx_balance)
81.store_coins(ctx_balance_sent)
82.store_coins(ctx_balance_withdraw)
83.store_coins(ctx_balance_pending_withdraw)
84.store_coins(ctx_balance_pending_deposits)
85.end_cell())
86.store_dict(ctx_nominators)
87.store_ref(ctx_proxy_state)
88.store_ref(begin_cell()
89.store_int(enabled, 1)
90.store_int(udpates_enabled, 1)
91.store_coins(min_stake)
92.store_coins(deposit_fee)
93.store_coins(withdraw_fee)
94.store_coins(pool_fee)
95.store_coins(receipt_price)
96.end_cell())
97.end_cell());
98commit();
99}