Ton
440 строк · 16.9 Кб
1#include "stdlib.fc";
2
3forall X -> X __tact_not_null(X x) { throw_if(128, null?(x)); return x; }
4
5global (int, slice, int, slice) __tact_context;
6global 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 {
11throw_unless(136, address.slice_bits() != 267);
12}
13
14builder __tact_store_bool(builder b, int v) inline {
15b = b.store_int(v, 1);
16return b;
17}
18
19(slice, slice) __tact_load_address(slice cs) inline {
20slice raw = cs~load_msg_addr();
21__tact_verify_address(raw);
22return (cs, raw);
23}
24
25(slice, slice) __tact_load_address_opt(slice cs) inline {
26slice raw = cs~load_msg_addr();
27if (raw.preload_uint(2) != 0) {
28__tact_verify_address(raw);
29return (cs, raw);
30} else {
31return (cs, null());
32}
33}
34
35builder __tact_store_address(builder b, slice address) inline {
36__tact_verify_address(address);
37b = b.store_slice(address);
38return b;
39}
40
41builder __tact_store_address_opt(builder b, slice address) inline {
42if (null?(address)) {
43b = b.store_uint(0, 2);
44return b;
45} else {
46return __tact_store_address(b, address);
47}
48}
49
50slice __tact_create_address(int chain, int hash) inline {
51var b = begin_cell();
52b = b.store_uint(2, 2);
53b = b.store_uint(0, 1);
54b = b.store_int(chain, 8);
55b = b.store_uint(hash, 256);
56return b.end_cell().begin_parse();
57}
58
59slice __tact_compute_contract_address(int chain, cell code, cell data) inline {
60var b = begin_cell();
61b = b.store_uint(0, 2);
62b = b.store_uint(3, 2);
63b = b.store_uint(0, 1);
64b = b.store_ref(code);
65b = b.store_ref(data);
66var hash = cell_hash(b.end_cell());
67return __tact_create_address(chain, hash);
68}
69
70int __tact_address_eq(slice a, slice b) inline {
71return equal_slice_bits(a, b);
72}
73
74cell __tact_dict_set_code(cell dict, int id, cell code) inline {
75return udict_set_ref(dict, 16, id, code);
76}
77
78cell __tact_dict_get_code(cell dict, int id) inline {
79var (data, ok) = udict_get_ref?(dict, 16, id);
80throw_unless(135, ok);
81return data;
82}
83
84builder __gen_write_TokenTransferInternal(builder build_0, (int, int, slice, slice, int, slice) v) inline_ref {
85var (v'queryId, v'amount, v'from, v'responseAddress, v'forwardTonAmount, v'forwardPayload) = v;
86build_0 = store_uint(build_0, 395134233, 32);
87build_0 = build_0.store_uint(v'queryId, 64);
88build_0 = build_0.store_coins(v'amount);
89build_0 = __tact_store_address(build_0, v'from);
90build_0 = __tact_store_address_opt(build_0, v'responseAddress);
91build_0 = build_0.store_coins(v'forwardTonAmount);
92build_0 = build_0.store_slice(v'forwardPayload);
93return build_0;
94}
95
96cell __gen_writecell_TokenTransferInternal((int, int, slice, slice, int, slice) v) inline_ref {
97return __gen_write_TokenTransferInternal(begin_cell(), v).end_cell();
98}
99
100(slice, ((int, int, slice, slice))) __gen_read_TokenBurnNotification(slice sc_0) inline_ref {
101throw_unless(129, sc_0~load_uint(32) == 2078119902);
102var v'queryId = sc_0~load_uint(64);
103var v'amount = sc_0~load_coins();
104var v'owner = sc_0~__tact_load_address();
105var v'responseAddress = sc_0~__tact_load_address_opt();
106return (sc_0, (v'queryId, v'amount, v'owner, v'responseAddress));
107}
108
109builder __gen_write_TokenExcesses(builder build_0, (int) v) inline_ref {
110var (v'queryId) = v;
111build_0 = store_uint(build_0, 3576854235, 32);
112build_0 = build_0.store_uint(v'queryId, 64);
113return build_0;
114}
115
116cell __gen_writecell_TokenExcesses((int) v) inline_ref {
117return __gen_write_TokenExcesses(begin_cell(), v).end_cell();
118}
119
120(slice, ((cell))) __gen_read_TokenUpdateContent(slice sc_0) inline_ref {
121throw_unless(129, sc_0~load_uint(32) == 201882270);
122var v'content = sc_0~load_int(1) ? sc_0~load_ref() : null();
123return (sc_0, (v'content));
124}
125
126(slice, ((int))) __gen_read_Mint(slice sc_0) inline_ref {
127throw_unless(129, sc_0~load_uint(32) == 33240155);
128var v'amount = sc_0~load_int(257);
129return (sc_0, (v'amount));
130}
131
132builder __gen_write_JettonDefaultWallet(builder build_0, (int, slice, slice) v) inline_ref {
133var (v'balance, v'owner, v'master) = v;
134build_0 = build_0.store_int(v'balance, 257);
135build_0 = __tact_store_address(build_0, v'owner);
136build_0 = __tact_store_address(build_0, v'master);
137return build_0;
138}
139
140builder __gen_write_SampleJetton(builder build_0, (int, slice, cell, int) v) inline_ref {
141var (v'totalSupply, v'owner, v'content, v'mintable) = v;
142build_0 = build_0.store_coins(v'totalSupply);
143build_0 = __tact_store_address(build_0, v'owner);
144build_0 = ~ null?(v'content) ? build_0.store_int(true, 1).store_ref(v'content) : build_0.store_int(false, 1);
145build_0 = build_0.store_int(v'mintable, 1);
146return build_0;
147}
148
149(slice, ((int, slice, cell, int))) __gen_read_SampleJetton(slice sc_0) inline_ref {
150var v'totalSupply = sc_0~load_coins();
151var v'owner = sc_0~__tact_load_address();
152var v'content = sc_0~load_int(1) ? sc_0~load_ref() : null();
153var v'mintable = sc_0~load_int(1);
154return (sc_0, (v'totalSupply, v'owner, v'content, v'mintable));
155}
156
157_ __gen_StateInit_get_code((cell, cell) v) inline {
158var (v'code, v'data) = v;
159return v'code;
160}
161
162_ __gen_Context_get_sender((int, slice, int, slice) v) inline {
163var (v'bounced, v'sender, v'value, v'raw) = v;
164return v'sender;
165}
166
167(int, int, slice, cell, cell) __gen_JettonData_to_external(((int, int, slice, cell, cell)) v) {
168var (v'totalSupply, v'mintable, v'owner, v'content, v'walletCode) = v;
169return (v'totalSupply, v'mintable, v'owner, v'content, v'walletCode);
170}
171
172(int, slice, cell, int) __gen_load_SampleJetton() inline_ref {
173slice sc = get_data().begin_parse();
174__tact_context_sys = sc~load_ref();
175return sc~__gen_read_SampleJetton();
176}
177
178() __gen_store_SampleJetton((int, slice, cell, int) v) impure inline_ref {
179builder b = begin_cell();
180b = b.store_ref(__tact_context_sys);
181b = __gen_write_SampleJetton(b, v);
182set_data(b.end_cell());
183}
184
185cell $emptyCell() impure {
186return end_cell(begin_cell());
187}
188
189slice $__gen_Cell_asSlice(cell $self) impure {
190var ($self) = $self;
191return begin_parse($self);
192}
193
194slice $emptySlice() impure {
195return $__gen_Cell_asSlice($emptyCell());
196}
197
198slice $contractAddress((cell, cell) $s) impure {
199var (($s'code, $s'data)) = $s;
200return __tact_compute_contract_address(0, $s'code, $s'data);
201}
202
203() $send((int, slice, int, int, cell, cell, cell) $params) impure {
204var (($params'bounce, $params'to, $params'value, $params'mode, $params'body, $params'code, $params'data)) = $params;
205builder $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));
212if (((~ null?($params'code)) | (~ null?($params'data)))) {
213$b = __tact_store_bool($b, true);
214builder $bc = begin_cell();
215$bc = __tact_store_bool($bc, false);
216$bc = __tact_store_bool($bc, false);
217if ((~ 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}
223if ((~ 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}
235cell $body = $params'body;
236if ((~ 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}
242cell $c = end_cell($b);
243send_raw_message($c, $params'mode);
244}
245
246cell $__gen_JettonDefaultWallet_init(cell sys', slice $master, slice $owner) {
247var (($self'balance, $self'owner, $self'master)) = (null(), null(), null());
248$self'balance = 0;
249$self'owner = $owner;
250$self'master = $master;
251var b' = begin_cell();
252b' = b'.store_ref(sys');
253b' = __gen_write_JettonDefaultWallet(b', ($self'balance, $self'owner, $self'master));
254return b'.end_cell();
255}
256
257(cell, cell) $__gen_JettonDefaultWallet_init_child(cell sys', slice $master, slice $owner) {
258slice sc' = sys'.begin_parse();
259cell source = sc'~load_dict();
260cell contracts = new_dict();
261
262;; Contract Code: JettonDefaultWallet
263cell mine = __tact_dict_get_code(source, 55471);
264contracts = __tact_dict_set_code(contracts, 55471, mine);
265cell sys = begin_cell().store_dict(contracts).end_cell();
266return (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 {
270var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
271return (($self'totalSupply, $self'owner, $self'content, $self'mintable), $__gen_JettonDefaultWallet_init_child(__tact_context_sys, my_address(), $address));
272}
273
274slice $__gen_SampleJetton_get_wallet_address((int, slice, cell, int) $self, slice $owner) impure {
275var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
276var ($winit'code, $winit'data) = ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_getJettonWalletInit($owner);
277return $contractAddress(($winit'code, $winit'data));
278}
279
280_ $__gen_get_get_wallet_address(slice $$owner) method_id(103289) {
281slice $owner = $$owner;
282var self = __gen_load_SampleJetton();
283var res = $__gen_SampleJetton_get_wallet_address(self, $owner);
284return res;
285}
286
287(int, int, slice, cell, cell) $__gen_SampleJetton_get_jetton_data((int, slice, cell, int) $self) impure {
288var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
289cell $code = __gen_StateInit_get_code(($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_getJettonWalletInit(my_address()));
290return ($self'totalSupply, $self'mintable, $self'owner, $self'content, $code);
291}
292
293_ $__gen_get_get_jetton_data() method_id(106029) {
294var self = __gen_load_SampleJetton();
295var res = $__gen_SampleJetton_get_jetton_data(self);
296return __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 {
300var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
301$self'totalSupply = ($self'totalSupply + $amount);
302var ($winit'code, $winit'data) = ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_getJettonWalletInit($to);
303slice $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));
305return (($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 {
309var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
310var ($ctx'bounced, $ctx'sender, $ctx'value, $ctx'raw) = __tact_context_get();
311var ($winit'code, $winit'data) = ($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_getJettonWalletInit($owner);
312throw_unless(4429, __tact_address_eq($contractAddress(($winit'code, $winit'data)), $ctx'sender));
313return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
314}
315
316((int, slice, cell, int), ()) $__gen_SampleJetton_requireOwner((int, slice, cell, int) $self) impure {
317var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
318throw_unless(132, __tact_address_eq(__gen_Context_get_sender(__tact_context_get()), $self'owner));
319return (($self'totalSupply, $self'owner, $self'content, $self'mintable), ());
320}
321
322slice $__gen_SampleJetton_owner((int, slice, cell, int) $self) impure {
323var (($self'totalSupply, $self'owner, $self'content, $self'mintable)) = $self;
324return $self'owner;
325}
326
327_ $__gen_get_owner() method_id(83229) {
328var self = __gen_load_SampleJetton();
329var res = $__gen_SampleJetton_owner(self);
330return res;
331}
332
333(((int, slice, cell, int)), ()) $__gen_SampleJetton_receive_Mint((int, slice, cell, int) $self, (int) $msg) impure {
334var ($self'totalSupply, $self'owner, $self'content, $self'mintable) = $self;
335var ($msg'amount) = $msg;
336var ($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);
338return (($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 {
342var ($self'totalSupply, $self'owner, $self'content, $self'mintable) = $self;
343var ($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);
345return (($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 {
349var ($self'totalSupply, $self'owner, $self'content, $self'mintable) = $self;
350var ($msg'content) = $msg;
351($self'totalSupply, $self'owner, $self'content, $self'mintable)~$__gen_SampleJetton_requireOwner();
352$self'content = $msg'content;
353return (($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 {
357var ($self'totalSupply, $self'owner, $self'content, $self'mintable) = $self;
358var ($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);
361if ((~ null?($msg'responseAddress))) {
362$send((false, $msg'responseAddress, 0, (64 + 2), __gen_writecell_TokenExcesses(($msg'queryId)), null(), null()));
363}
364return (($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
371int op = 0;
372if (slice_bits(in_msg) >= 32) {
373op = in_msg.preload_uint(32);
374}
375var cs = in_msg_cell.begin_parse();
376var msg_flags = cs~load_uint(4);
377var msg_bounced = ((msg_flags & 1) == 1 ? true : false);
378slice msg_sender_addr = cs~load_msg_addr();
379__tact_context = (msg_bounced, msg_sender_addr, msg_value, cs);
380
381;; Handle bounced messages
382if (msg_bounced) {
383return ();
384}
385
386;; Receive Mint message
387if (op == 33240155) {
388var self = __gen_load_SampleJetton();
389var msg = in_msg~__gen_read_Mint();
390self~$__gen_SampleJetton_receive_Mint(msg);
391__gen_store_SampleJetton(self);
392return ();
393}
394
395;; Receive TokenUpdateContent message
396if (op == 201882270) {
397var self = __gen_load_SampleJetton();
398var msg = in_msg~__gen_read_TokenUpdateContent();
399self~$__gen_SampleJetton_receive_TokenUpdateContent(msg);
400__gen_store_SampleJetton(self);
401return ();
402}
403
404;; Receive TokenBurnNotification message
405if (op == 2078119902) {
406var self = __gen_load_SampleJetton();
407var msg = in_msg~__gen_read_TokenBurnNotification();
408self~$__gen_SampleJetton_receive_TokenBurnNotification(msg);
409__gen_store_SampleJetton(self);
410return ();
411}
412
413;; Text Receivers
414if (op == 0) {
415var text_op = slice_hash(in_msg);
416
417;; Receive "Mint!" message
418if (text_op == 0xcd0d986cb1a2f468ae7089f4fc3162c116e5f53fbd11a6839f52dbf5040830b2) {
419var self = __gen_load_SampleJetton();
420self~$__gen_SampleJetton_receive_comment_cd0d986cb1a2f468ae7089f4fc3162c116e5f53fbd11a6839f52dbf5040830b2();
421__gen_store_SampleJetton(self);
422return ();
423}
424}
425
426throw(130);
427}
428
429_ supported_interfaces() method_id {
430return (
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() {
439return "ipfs://QmPfyoAvkPUqzx93gq8EBcVccAYXFEbjnqCMrHYtyPUHfE";
440}
441