Ton
60 строк · 1.3 Кб
1() op_owner(int flags, int value, slice in_msg) impure {
2
3;; Ignore bounced
4if (flags & 1) {
5return ();
6}
7
8;; Check value
9throw_unless(error::invalid_message(), value >= params::min_op());
10
11;; Parse operation
12int op = in_msg~load_uint(32);
13int query_id = in_msg~load_uint(64);
14int gas_limit = in_msg~load_coins();
15set_gas_limit(gas_limit);
16ctx_query_id = query_id;
17throw_unless(error::invalid_message(), ctx_query_id > 0);
18
19;; Upgrade
20if (op == op::upgrade()) {
21op_upgrade(value, in_msg);
22return ();
23}
24
25;; Upgrade
26if (op == op::update()) {
27op_update(value, in_msg);
28return ();
29}
30
31;; Add stake
32if (op == op::stake_deposit()) {
33op_deposit(owner_id(), value);
34return ();
35}
36
37;; Withdraw stake
38if (op == op::stake_withdraw()) {
39int stake = in_msg~load_coins();
40in_msg.end_parse();
41op_withdraw(owner_id(), value, stake);
42return ();
43}
44
45;; Recover stake
46if (op == op::stake_recover()) {
47load_validator_data();
48op_stake_recover(value);
49return ();
50}
51
52;; Donate stake
53if (op == op::donate()) {
54op_donate(value);
55return ();
56}
57
58;; Unknown message
59throw(error::invalid_message());
60}