Ton

Форк
0
/
jetton_SampleJetton.code.fc 
440 строк · 16.9 Кб
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
(slice, slice) __tact_load_address_opt(slice cs) inline {
26
    slice raw = cs~load_msg_addr();
27
    if (raw.preload_uint(2) != 0) {
28
        __tact_verify_address(raw);
29
        return (cs, raw);
30
    } else {
31
        return (cs, null());
32
    }
33
}
34

35
builder __tact_store_address(builder b, slice address) inline {
36
    __tact_verify_address(address);
37
    b = b.store_slice(address);
38
    return b;
39
}
40

41
builder __tact_store_address_opt(builder b, slice address) inline {
42
    if (null?(address)) {
43
        b = b.store_uint(0, 2);
44
        return b;
45
    } else {
46
        return __tact_store_address(b, address);
47
    }
48
}
49

50
slice __tact_create_address(int chain, int hash) inline {
51
    var b = begin_cell();
52
    b = b.store_uint(2, 2);
53
    b = b.store_uint(0, 1);
54
    b = b.store_int(chain, 8);
55
    b = b.store_uint(hash, 256);
56
    return b.end_cell().begin_parse();
57
}
58

59
slice __tact_compute_contract_address(int chain, cell code, cell data) inline {
60
    var b = begin_cell();
61
    b = b.store_uint(0, 2);
62
    b = b.store_uint(3, 2);
63
    b = b.store_uint(0, 1);
64
    b = b.store_ref(code);
65
    b = b.store_ref(data);
66
    var hash = cell_hash(b.end_cell());
67
    return __tact_create_address(chain, hash);
68
}
69

70
int __tact_address_eq(slice a, slice b) inline {
71
    return equal_slice_bits(a, b);
72
}
73

74
cell __tact_dict_set_code(cell dict, int id, cell code) inline {
75
    return udict_set_ref(dict, 16, id, code);
76
}
77

78
cell __tact_dict_get_code(cell dict, int id) inline {
79
    var (data, ok) = udict_get_ref?(dict, 16, id);
80
    throw_unless(135, ok);
81
    return data;
82
}
83

84
builder __gen_write_TokenTransferInternal(builder build_0, (int, int, slice, slice, int, slice) v) inline_ref {
85
    var (v'queryId, v'amount, v'from, v'responseAddress, v'forwardTonAmount, v'forwardPayload) = v;
86
    build_0 = store_uint(build_0, 395134233, 32);
87
    build_0 = build_0.store_uint(v'queryId, 64);
88
    build_0 = build_0.store_coins(v'amount);
89
    build_0 = __tact_store_address(build_0, v'from);
90
    build_0 = __tact_store_address_opt(build_0, v'responseAddress);
91
    build_0 = build_0.store_coins(v'forwardTonAmount);
92
    build_0 = build_0.store_slice(v'forwardPayload);
93
    return build_0;
94
}
95

96
cell __gen_writecell_TokenTransferInternal((int, int, slice, slice, int, slice) v) inline_ref {
97
    return __gen_write_TokenTransferInternal(begin_cell(), v).end_cell();
98
}
99

100
(slice, ((int, int, slice, slice))) __gen_read_TokenBurnNotification(slice sc_0) inline_ref {
101
    throw_unless(129, sc_0~load_uint(32) == 2078119902);
102
    var v'queryId = sc_0~load_uint(64);
103
    var v'amount = sc_0~load_coins();
104
    var v'owner = sc_0~__tact_load_address();
105
    var v'responseAddress = sc_0~__tact_load_address_opt();
106
    return (sc_0, (v'queryId, v'amount, v'owner, v'responseAddress));
107
}
108

109
builder __gen_write_TokenExcesses(builder build_0, (int) v) inline_ref {
110
    var (v'queryId) = v;
111
    build_0 = store_uint(build_0, 3576854235, 32);
112
    build_0 = build_0.store_uint(v'queryId, 64);
113
    return build_0;
114
}
115

116
cell __gen_writecell_TokenExcesses((int) v) inline_ref {
117
    return __gen_write_TokenExcesses(begin_cell(), v).end_cell();
118
}
119

120
(slice, ((cell))) __gen_read_TokenUpdateContent(slice sc_0) inline_ref {
121
    throw_unless(129, sc_0~load_uint(32) == 201882270);
122
    var v'content = sc_0~load_int(1) ? sc_0~load_ref() : null();
123
    return (sc_0, (v'content));
124
}
125

126
(slice, ((int))) __gen_read_Mint(slice sc_0) inline_ref {
127
    throw_unless(129, sc_0~load_uint(32) == 33240155);
128
    var v'amount = sc_0~load_int(257);
129
    return (sc_0, (v'amount));
130
}
131

132
builder __gen_write_JettonDefaultWallet(builder build_0, (int, slice, slice) v) inline_ref {
133
    var (v'balance, v'owner, v'master) = v;
134
    build_0 = build_0.store_int(v'balance, 257);
135
    build_0 = __tact_store_address(build_0, v'owner);
136
    build_0 = __tact_store_address(build_0, v'master);
137
    return build_0;
138
}
139

140
builder __gen_write_SampleJetton(builder build_0, (int, slice, cell, int) v) inline_ref {
141
    var (v'totalSupply, v'owner, v'content, v'mintable) = v;
142
    build_0 = build_0.store_coins(v'totalSupply);
143
    build_0 = __tact_store_address(build_0, v'owner);
144
    build_0 = ~ null?(v'content) ? build_0.store_int(true, 1).store_ref(v'content) : build_0.store_int(false, 1);
145
    build_0 = build_0.store_int(v'mintable, 1);
146
    return build_0;
147
}
148

149
(slice, ((int, slice, cell, int))) __gen_read_SampleJetton(slice sc_0) inline_ref {
150
    var v'totalSupply = sc_0~load_coins();
151
    var v'owner = sc_0~__tact_load_address();
152
    var v'content = sc_0~load_int(1) ? sc_0~load_ref() : null();
153
    var v'mintable = sc_0~load_int(1);
154
    return (sc_0, (v'totalSupply, v'owner, v'content, v'mintable));
155
}
156

157
_ __gen_StateInit_get_code((cell, cell) v) inline {
158
    var (v'code, v'data) = v;
159
    return v'code;
160
}
161

162
_ __gen_Context_get_sender((int, slice, int, slice) v) inline {
163
    var (v'bounced, v'sender, v'value, v'raw) = v;
164
    return v'sender;
165
}
166

167
(int, int, slice, cell, cell) __gen_JettonData_to_external(((int, int, slice, cell, cell)) v) {
168
    var (v'totalSupply, v'mintable, v'owner, v'content, v'walletCode) = v; 
169
    return (v'totalSupply, v'mintable, v'owner, v'content, v'walletCode);
170
}
171

172
(int, slice, cell, int) __gen_load_SampleJetton() inline_ref {
173
    slice sc = get_data().begin_parse();
174
    __tact_context_sys = sc~load_ref();
175
    return sc~__gen_read_SampleJetton();
176
}
177

178
() __gen_store_SampleJetton((int, slice, cell, int) v) impure inline_ref {
179
    builder b = begin_cell();
180
    b = b.store_ref(__tact_context_sys);
181
    b = __gen_write_SampleJetton(b, v);
182
    set_data(b.end_cell());
183
}
184

185
cell $emptyCell() impure {
186
    return end_cell(begin_cell());
187
}
188

189
slice $__gen_Cell_asSlice(cell $self) impure {
190
    var ($self) = $self;
191
    return begin_parse($self);
192
}
193

194
slice $emptySlice() impure {
195
    return $__gen_Cell_asSlice($emptyCell());
196
}
197

198
slice $contractAddress((cell, cell) $s) impure {
199
    var (($s'code, $s'data)) = $s;
200
    return __tact_compute_contract_address(0, $s'code, $s'data);
201
}
202

203
() $send((int, slice, int, int, cell, cell, cell) $params) impure {
204
    var (($params'bounce, $params'to, $params'value, $params'mode, $params'body, $params'code, $params'data)) = $params;
205
    builder $b = begin_cell();
206
    $b = store_int($b, 1, 2);
207
    $b = __tact_store_bool($b, $params'bounce);
208
    $b = store_int($b, 0, 3);
209
    $b = __tact_store_address($b, $params'to);
210
    $b = store_coins($b, $params'value);
211
    $b = store_int($b, 0, ((((1 + 4) + 4) + 64) + 32));
212
    if (((~ null?($params'code)) | (~ null?($params'data)))) {
213
        $b = __tact_store_bool($b, true);
214
        builder $bc = begin_cell();
215
        $bc = __tact_store_bool($bc, false);
216
        $bc = __tact_store_bool($bc, false);
217
        if ((~ null?($params'code))) {
218
            $bc = __tact_store_bool($bc, true);
219
            $bc = store_ref($bc, __tact_not_null($params'code));
220
        } else {
221
            $bc = __tact_store_bool($bc, false);
222
        }
223
        if ((~ null?($params'data))) {
224
            $bc = __tact_store_bool($bc, true);
225
            $bc = store_ref($bc, __tact_not_null($params'data));
226
        } else {
227
            $bc = __tact_store_bool($bc, false);
228
        }
229
        $bc = __tact_store_bool($bc, false);
230
        $b = __tact_store_bool($b, true);
231
        $b = store_ref($b, end_cell($bc));
232
    } else {
233
        $b = __tact_store_bool($b, false);
234
    }
235
    cell $body = $params'body;
236
    if ((~ null?($body))) {
237
        $b = __tact_store_bool($b, true);
238
        $b = store_ref($b, __tact_not_null($body));
239
    } else {
240
        $b = __tact_store_bool($b, false);
241
    }
242
    cell $c = end_cell($b);
243
    send_raw_message($c, $params'mode);
244
}
245

246
cell $__gen_JettonDefaultWallet_init(cell sys', slice $master, slice $owner) {
247
    var (($self'balance, $self'owner, $self'master)) = (null(), null(), null());
248
    $self'balance = 0;
249
    $self'owner = $owner;
250
    $self'master = $master;
251
    var b' = begin_cell();
252
    b' = b'.store_ref(sys');
253
    b' = __gen_write_JettonDefaultWallet(b', ($self'balance, $self'owner, $self'master));
254
    return b'.end_cell();
255
}
256

257
(cell, cell) $__gen_JettonDefaultWallet_init_child(cell sys', slice $master, slice $owner) {
258
    slice sc' = sys'.begin_parse();
259
    cell source = sc'~load_dict();
260
    cell contracts = new_dict();
261
    
262
    ;; Contract Code: JettonDefaultWallet
263
    cell mine = __tact_dict_get_code(source, 55471);
264
    contracts = __tact_dict_set_code(contracts, 55471, mine);
265
    cell sys = begin_cell().store_dict(contracts).end_cell();
266
    return (mine, $__gen_JettonDefaultWallet_init(sys, $master, $owner));
267
}
268

269
((int, slice, cell, int), (cell, cell)) $__gen_SampleJetton_getJettonWalletInit((int, slice, cell, int) $self, slice $address) impure {
270
    var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
271
    return (($self'totalSupply, $self'owner, $self'content, $self'mintable), $__gen_JettonDefaultWallet_init_child(__tact_context_sys, my_address(), $address));
272
}
273

274
slice $__gen_SampleJetton_get_wallet_address((int, slice, cell, int) $self, slice $owner) impure {
275
    var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
276
    var ($winit'code, $winit'data) = ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_getJettonWalletInit($owner);
277
    return $contractAddress(($winit'code, $winit'data));
278
}
279

280
_ $__gen_get_get_wallet_address(slice $$owner) method_id(103289) {
281
    slice $owner = $$owner;
282
    var self = __gen_load_SampleJetton();
283
    var res = $__gen_SampleJetton_get_wallet_address(self, $owner);
284
    return res;
285
}
286

287
(int, int, slice, cell, cell) $__gen_SampleJetton_get_jetton_data((int, slice, cell, int) $self) impure {
288
    var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
289
    cell $code = __gen_StateInit_get_code(($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_getJettonWalletInit(my_address()));
290
    return ($self'totalSupply, $self'mintable, $self'owner, $self'content, $code);
291
}
292

293
_ $__gen_get_get_jetton_data() method_id(106029) {
294
    var self = __gen_load_SampleJetton();
295
    var res = $__gen_SampleJetton_get_jetton_data(self);
296
    return __gen_JettonData_to_external(res);
297
}
298

299
((int, slice, cell, int), ()) $__gen_SampleJetton_mint((int, slice, cell, int) $self, slice $to, int $amount, slice $responseAddress) impure {
300
    var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
301
    $self'totalSupply = ($self'totalSupply + $amount);
302
    var ($winit'code, $winit'data) = ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_getJettonWalletInit($to);
303
    slice $walletAddress = $contractAddress(($winit'code, $winit'data));
304
    $send((false, $walletAddress, 0, 64, __gen_writecell_TokenTransferInternal((0, $amount, my_address(), $responseAddress, 0, $emptySlice())), $winit'code, $winit'data));
305
    return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
306
}
307

308
((int, slice, cell, int), ()) $__gen_SampleJetton_requireWallet((int, slice, cell, int) $self, slice $owner) impure {
309
    var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
310
    var ($ctx'bounced, $ctx'sender, $ctx'value, $ctx'raw) = __tact_context_get();
311
    var ($winit'code, $winit'data) = ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_getJettonWalletInit($owner);
312
    throw_unless(4429, __tact_address_eq($contractAddress(($winit'code, $winit'data)), $ctx'sender));
313
    return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
314
}
315

316
((int, slice, cell, int), ()) $__gen_SampleJetton_requireOwner((int, slice, cell, int) $self) impure {
317
    var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
318
    throw_unless(132, __tact_address_eq(__gen_Context_get_sender(__tact_context_get()), $self'owner));
319
    return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
320
}
321

322
slice $__gen_SampleJetton_owner((int, slice, cell, int) $self) impure {
323
    var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
324
    return $self'owner;
325
}
326

327
_ $__gen_get_owner() method_id(83229) {
328
    var self = __gen_load_SampleJetton();
329
    var res = $__gen_SampleJetton_owner(self);
330
    return res;
331
}
332

333
(((int, slice, cell, int)), ()) $__gen_SampleJetton_receive_Mint((int, slice, cell, int) $self, (int) $msg) impure {
334
    var ($self'totalSupply, $self'owner, $self'content, $self'mintable) = $self;
335
    var ($msg'amount) = $msg;
336
    var ($ctx'bounced, $ctx'sender, $ctx'value, $ctx'raw) = __tact_context_get();
337
    ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_mint($ctx'sender, $msg'amount, $ctx'sender);
338
    return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
339
}
340

341
((int, slice, cell, int), ()) $__gen_SampleJetton_receive_comment_cd0d986cb1a2f468ae7089f4fc3162c116e5f53fbd11a6839f52dbf5040830b2((int, slice, cell, int) $self) impure {
342
    var ($self'totalSupply, $self'owner, $self'content, $self'mintable) = $self;
343
    var ($ctx'bounced, $ctx'sender, $ctx'value, $ctx'raw) = __tact_context_get();
344
    ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_mint($ctx'sender, 1000000000, $ctx'sender);
345
    return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
346
}
347

348
(((int, slice, cell, int)), ()) $__gen_SampleJetton_receive_TokenUpdateContent((int, slice, cell, int) $self, (cell) $msg) impure {
349
    var ($self'totalSupply, $self'owner, $self'content, $self'mintable) = $self;
350
    var ($msg'content) = $msg;
351
    ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_requireOwner();
352
    $self'content = $msg'content;
353
    return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
354
}
355

356
(((int, slice, cell, int)), ()) $__gen_SampleJetton_receive_TokenBurnNotification((int, slice, cell, int) $self, (int, int, slice, slice) $msg) impure {
357
    var ($self'totalSupply, $self'owner, $self'content, $self'mintable) = $self;
358
    var ($msg'queryId, $msg'amount, $msg'owner, $msg'responseAddress) = $msg;
359
    ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_requireWallet($msg'owner);
360
    $self'totalSupply = ($self'totalSupply - $msg'amount);
361
    if ((~ null?($msg'responseAddress))) {
362
        $send((false, $msg'responseAddress, 0, (64 + 2), __gen_writecell_TokenExcesses(($msg'queryId)), null(), null()));
363
    }
364
    return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
365
}
366

367

368
() recv_internal(int msg_value, cell in_msg_cell, slice in_msg) impure {
369
    
370
    ;; Parse incoming message
371
    int op = 0;
372
    if (slice_bits(in_msg) >= 32) {
373
        op = in_msg.preload_uint(32);
374
    }
375
    var cs = in_msg_cell.begin_parse();
376
    var msg_flags = cs~load_uint(4);
377
    var msg_bounced = ((msg_flags & 1) == 1 ? true : false);
378
    slice msg_sender_addr = cs~load_msg_addr();
379
    __tact_context = (msg_bounced, msg_sender_addr, msg_value, cs);
380
    
381
    ;; Handle bounced messages
382
    if (msg_bounced) {
383
        return ();
384
    }
385
    
386
    ;; Receive Mint message
387
    if (op == 33240155) {
388
        var self = __gen_load_SampleJetton();
389
        var msg = in_msg~__gen_read_Mint();
390
        self~$__gen_SampleJetton_receive_Mint(msg);
391
        __gen_store_SampleJetton(self);
392
        return ();
393
    }
394
    
395
    ;; Receive TokenUpdateContent message
396
    if (op == 201882270) {
397
        var self = __gen_load_SampleJetton();
398
        var msg = in_msg~__gen_read_TokenUpdateContent();
399
        self~$__gen_SampleJetton_receive_TokenUpdateContent(msg);
400
        __gen_store_SampleJetton(self);
401
        return ();
402
    }
403
    
404
    ;; Receive TokenBurnNotification message
405
    if (op == 2078119902) {
406
        var self = __gen_load_SampleJetton();
407
        var msg = in_msg~__gen_read_TokenBurnNotification();
408
        self~$__gen_SampleJetton_receive_TokenBurnNotification(msg);
409
        __gen_store_SampleJetton(self);
410
        return ();
411
    }
412
    
413
    ;; Text Receivers
414
    if (op == 0) {
415
        var text_op = slice_hash(in_msg);
416
        
417
        ;; Receive "Mint!" message
418
        if (text_op == 0xcd0d986cb1a2f468ae7089f4fc3162c116e5f53fbd11a6839f52dbf5040830b2) {
419
            var self = __gen_load_SampleJetton();
420
            self~$__gen_SampleJetton_receive_comment_cd0d986cb1a2f468ae7089f4fc3162c116e5f53fbd11a6839f52dbf5040830b2();
421
            __gen_store_SampleJetton(self);
422
            return ();
423
        }
424
    }
425
    
426
    throw(130);
427
}
428

429
_ supported_interfaces() method_id {
430
    return (
431
        "org.ton.introspection.v0"H >> 128,
432
        "org.ton.abi.ipfs.v0"H >> 128,
433
        "org.ton.jetton.master"H >> 128,
434
        "org.ton.ownable"H >> 128
435
    );
436
}
437

438
_ get_abi_ipfs() {
439
    return "ipfs://QmPfyoAvkPUqzx93gq8EBcVccAYXFEbjnqCMrHYtyPUHfE";
440
}
441

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

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

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

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