Ton

Форк
0
/
treasure_Treasure.code.fc 
229 строк · 7.0 Кб
1
#include "stdlib.fc";
2

3
forall X -> X __tact_not_null(X x) { throw_if(128, null?(x)); return x; }
4

5
global (int, slice, int, slice) __tact_context;
6
global cell __tact_context_sys;
7

8
(int, slice, int, slice) __tact_context_get() inline { return __tact_context; }
9

10
() __tact_verify_address(slice address) inline {
11
    throw_unless(136, address.slice_bits() != 267);
12
}
13

14
builder __tact_store_bool(builder b, int v) inline {
15
    b = b.store_int(v, 1);
16
    return b;
17
}
18

19
(slice, slice) __tact_load_address(slice cs) inline {
20
    slice raw = cs~load_msg_addr();
21
    __tact_verify_address(raw);
22
    return (cs, raw);
23
}
24

25
builder __tact_store_address(builder b, slice address) inline {
26
    __tact_verify_address(address);
27
    b = b.store_slice(address);
28
    return b;
29
}
30

31
int __tact_address_eq(slice a, slice b) inline {
32
    return equal_slice_bits(a, b);
33
}
34

35
(slice, ((slice))) __gen_read_ChangeOwner(slice sc_0) inline_ref {
36
    throw_unless(129, sc_0~load_uint(32) == 256331011);
37
    var v'newOwner = sc_0~__tact_load_address();
38
    return (sc_0, (v'newOwner));
39
}
40

41
(slice, ((int, int))) __gen_read_Withdraw(slice sc_0) inline_ref {
42
    throw_unless(129, sc_0~load_uint(32) == 1672521544);
43
    var v'amount = sc_0~load_coins();
44
    var v'mode = sc_0~load_uint(8);
45
    return (sc_0, (v'amount, v'mode));
46
}
47

48
builder __gen_write_Treasure(builder build_0, (slice) v) inline_ref {
49
    var (v'owner) = v;
50
    build_0 = __tact_store_address(build_0, v'owner);
51
    return build_0;
52
}
53

54
(slice, ((slice))) __gen_read_Treasure(slice sc_0) inline_ref {
55
    var v'owner = sc_0~__tact_load_address();
56
    return (sc_0, (v'owner));
57
}
58

59
_ __gen_Context_get_sender((int, slice, int, slice) v) inline {
60
    var (v'bounced, v'sender, v'value, v'raw) = v;
61
    return v'sender;
62
}
63

64
(slice) __gen_load_Treasure() inline_ref {
65
    slice sc = get_data().begin_parse();
66
    __tact_context_sys = sc~load_ref();
67
    return sc~__gen_read_Treasure();
68
}
69

70
() __gen_store_Treasure((slice) v) impure inline_ref {
71
    builder b = begin_cell();
72
    b = b.store_ref(__tact_context_sys);
73
    b = __gen_write_Treasure(b, v);
74
    set_data(b.end_cell());
75
}
76

77
() $send((int, slice, int, int, cell, cell, cell) $params) impure {
78
    var (($params'bounce, $params'to, $params'value, $params'mode, $params'body, $params'code, $params'data)) = $params;
79
    builder $b = begin_cell();
80
    $b = store_int($b, 1, 2);
81
    $b = __tact_store_bool($b, $params'bounce);
82
    $b = store_int($b, 0, 3);
83
    $b = __tact_store_address($b, $params'to);
84
    $b = store_coins($b, $params'value);
85
    $b = store_int($b, 0, ((((1 + 4) + 4) + 64) + 32));
86
    if (((~ null?($params'code)) | (~ null?($params'data)))) {
87
        $b = __tact_store_bool($b, true);
88
        builder $bc = begin_cell();
89
        $bc = __tact_store_bool($bc, false);
90
        $bc = __tact_store_bool($bc, false);
91
        if ((~ null?($params'code))) {
92
            $bc = __tact_store_bool($bc, true);
93
            $bc = store_ref($bc, __tact_not_null($params'code));
94
        } else {
95
            $bc = __tact_store_bool($bc, false);
96
        }
97
        if ((~ null?($params'data))) {
98
            $bc = __tact_store_bool($bc, true);
99
            $bc = store_ref($bc, __tact_not_null($params'data));
100
        } else {
101
            $bc = __tact_store_bool($bc, false);
102
        }
103
        $bc = __tact_store_bool($bc, false);
104
        $b = __tact_store_bool($b, true);
105
        $b = store_ref($b, end_cell($bc));
106
    } else {
107
        $b = __tact_store_bool($b, false);
108
    }
109
    cell $body = $params'body;
110
    if ((~ null?($body))) {
111
        $b = __tact_store_bool($b, true);
112
        $b = store_ref($b, __tact_not_null($body));
113
    } else {
114
        $b = __tact_store_bool($b, false);
115
    }
116
    cell $c = end_cell($b);
117
    send_raw_message($c, $params'mode);
118
}
119

120
((slice), ()) $__gen_Treasure_requireOwner((slice) $self) impure {
121
    var (($self'owner)) = $self;
122
    throw_unless(132, __tact_address_eq(__gen_Context_get_sender(__tact_context_get()), $self'owner));
123
    return (($self'owner), ());
124
}
125

126
((slice), ()) $__gen_Treasure_doWithdraw((slice) $self, int $amount, int $mode) impure {
127
    var (($self'owner)) = $self;
128
    ($self'owner)~$__gen_Treasure_requireOwner();
129
    $send((true, $self'owner, $amount, $mode, end_cell(begin_cell()), null(), null()));
130
    return (($self'owner), ());
131
}
132

133
slice $__gen_Treasure_owner((slice) $self) impure {
134
    var (($self'owner)) = $self;
135
    return $self'owner;
136
}
137

138
_ $__gen_get_owner() method_id(83229) {
139
    var self = __gen_load_Treasure();
140
    var res = $__gen_Treasure_owner(self);
141
    return res;
142
}
143

144
(((slice)), ()) $__gen_Treasure_receive_Withdraw((slice) $self, (int, int) $msg) impure {
145
    var ($self'owner) = $self;
146
    var ($msg'amount, $msg'mode) = $msg;
147
    ($self'owner)~$__gen_Treasure_doWithdraw($msg'amount, $msg'mode);
148
    return (($self'owner), ());
149
}
150

151
((slice), ()) $__gen_Treasure_receive_comment_986c2ba124bb9287eb4a0bd8d3104e1c0067a3c93952d889c74d08185bd30d4d((slice) $self) impure {
152
    var ($self'owner) = $self;
153
    ($self'owner)~$__gen_Treasure_doWithdraw(0, (32 + 128));
154
    return (($self'owner), ());
155
}
156

157
(((slice)), ()) $__gen_Treasure_receive_ChangeOwner((slice) $self, (slice) $msg) impure {
158
    var ($self'owner) = $self;
159
    var ($msg'newOwner) = $msg;
160
    ($self'owner)~$__gen_Treasure_requireOwner();
161
    $self'owner = $msg'newOwner;
162
    return (($self'owner), ());
163
}
164

165

166
() recv_internal(int msg_value, cell in_msg_cell, slice in_msg) impure {
167
    
168
    ;; Parse incoming message
169
    int op = 0;
170
    if (slice_bits(in_msg) >= 32) {
171
        op = in_msg.preload_uint(32);
172
    }
173
    var cs = in_msg_cell.begin_parse();
174
    var msg_flags = cs~load_uint(4);
175
    var msg_bounced = ((msg_flags & 1) == 1 ? true : false);
176
    slice msg_sender_addr = cs~load_msg_addr();
177
    __tact_context = (msg_bounced, msg_sender_addr, msg_value, cs);
178
    
179
    ;; Handle bounced messages
180
    if (msg_bounced) {
181
        return ();
182
    }
183
    
184
    ;; Receive Withdraw message
185
    if (op == 1672521544) {
186
        var self = __gen_load_Treasure();
187
        var msg = in_msg~__gen_read_Withdraw();
188
        self~$__gen_Treasure_receive_Withdraw(msg);
189
        __gen_store_Treasure(self);
190
        return ();
191
    }
192
    
193
    ;; Receive ChangeOwner message
194
    if (op == 256331011) {
195
        var self = __gen_load_Treasure();
196
        var msg = in_msg~__gen_read_ChangeOwner();
197
        self~$__gen_Treasure_receive_ChangeOwner(msg);
198
        __gen_store_Treasure(self);
199
        return ();
200
    }
201
    
202
    ;; Text Receivers
203
    if (op == 0) {
204
        var text_op = slice_hash(in_msg);
205
        
206
        ;; Receive "Destroy" message
207
        if (text_op == 0x986c2ba124bb9287eb4a0bd8d3104e1c0067a3c93952d889c74d08185bd30d4d) {
208
            var self = __gen_load_Treasure();
209
            self~$__gen_Treasure_receive_comment_986c2ba124bb9287eb4a0bd8d3104e1c0067a3c93952d889c74d08185bd30d4d();
210
            __gen_store_Treasure(self);
211
            return ();
212
        }
213
    }
214
    
215
    throw(130);
216
}
217

218
_ supported_interfaces() method_id {
219
    return (
220
        "org.ton.introspection.v0"H >> 128,
221
        "org.ton.abi.ipfs.v0"H >> 128,
222
        "org.ton.ownable.transferable"H >> 128,
223
        "org.ton.ownable"H >> 128
224
    );
225
}
226

227
_ get_abi_ipfs() {
228
    return "ipfs://QmSZriPPLDUQWqjYmMRWAqKkhCeq32L339Q2PQrBaYMAqT";
229
}
230

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

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

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

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