Ton

Форк
0
104 строки · 2.5 Кб
1
(slice, (int)) ~parse_text_command(slice in_msg) {
2
    int op = 0;
3
    ;; 3 possible commands deposit, recover, withdraw
4
    int first_char = in_msg~load_uint(8);
5

6
    ;; Deposit
7
    if( first_char == 68 ) { ;; D
8
      throw_unless(error::unknown_text_command(), in_msg~load_uint(48) == 111533580577140); ;; eposit
9
      op = op::stake_deposit();
10
    }
11

12
    ;; Withdraw
13
    if( first_char == 87 ) { ;; W
14
      throw_unless(error::unknown_text_command(), in_msg~load_uint(56) == 29682864265257335); ;; ithdraw
15
      op = op::stake_withdraw();
16
    }
17

18
    ;; Recover
19
    if( first_char == 82 ) { ;; R
20
      throw_unless(error::unknown_text_command(), in_msg~load_uint(48) == 111477746197874); ;; ecover
21
      op = op::stake_recover();
22
    }
23

24
    return (in_msg, (op));
25
}
26

27
() op_nominators(int member, int flags, int value, slice in_msg) impure {
28
    
29
    ;; Ignore bounced
30
    if (flags & 1) {
31
        return ();
32
    }
33

34
    ;; Check value
35
    throw_unless(error::invalid_message(), value >= params::min_op());
36

37
    ;; Parse operation
38
    int op = in_msg~load_uint(32);
39

40
    ;; Text operations
41
    if (op == 0) {
42
        ctx_query_id = 0;
43
        op = in_msg~parse_text_command();
44

45
        ;; Deposit stake
46
        if (op == op::stake_deposit()) {
47
            op_deposit(member, value);
48
            return ();
49
        }
50

51
        ;; Withdraw stake
52
        if (op == op::stake_withdraw()) {
53
            op_withdraw(member, value, 0);
54
            return ();
55
        }
56

57
        ;; Recover stake
58
        if (op == op::stake_recover()) {
59
            load_validator_data();
60
            op_stake_recover(value);
61
            return ();
62
        }
63
        
64
        ;; Unknown message
65
        throw(error::invalid_message());
66
        return ();
67
    }
68

69
    int query_id = in_msg~load_uint(64);
70
    int gas_limit = in_msg~load_coins();
71
    set_gas_limit(gas_limit);
72
    ctx_query_id = query_id;
73
    throw_unless(error::invalid_message(), ctx_query_id > 0);
74

75
    ;; Deposit stake
76
    if (op == op::stake_deposit()) {
77
        op_deposit(member, value);
78
        return ();
79
    }
80

81
    ;; Withdraw stake
82
    if (op == op::stake_withdraw()) {
83
        int stake = in_msg~load_coins();
84
        in_msg.end_parse();
85
        op_withdraw(member, value, stake);
86
        return ();
87
    }
88

89
    ;; Recover stake
90
    if (op == op::stake_recover()) {
91
        load_validator_data();
92
        op_stake_recover(value);
93
        return ();
94
    }
95

96
    ;; Donate stake
97
    if (op == op::donate()) {
98
        op_donate(value);
99
        return ();
100
    }
101

102
    ;; Unknown message
103
    throw(error::invalid_message());
104
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.