forked from cod1ng-studio/TRC20
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtoken.fif
759 lines (759 loc) · 13.3 KB
/
token.fif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
// automatically generated from `/Users/tolyayanot/lite-client/crypto/smartcont/stdlib.fc` `msg_hex_comment.fc` `token.fc`
PROGRAM{
85643 DECLMETHOD str2bin
DECLPROC parse_msg
DECLPROC clone_slice
DECLPROC pack_addr
DECLPROC load_data
DECLPROC store_data
DECLPROC _get_balance
DECLPROC ~set_balance
DECLPROC _get_allowance
DECLPROC ~set_allowance
DECLPROC send_message_back
DECLPROC send_message
DECLPROC ~transfer
DECLPROC ~increase_allowance
DECLPROC process_rollback
DECLPROC recv_internal
DECLPROC recv_external
107853 DECLMETHOD get_name
72444 DECLMETHOD get_symbol
106049 DECLMETHOD get_decimals
122870 DECLMETHOD get_total_supply
112966 DECLMETHOD balance_of
82759 DECLMETHOD allowance
77102 DECLMETHOD ibalance_of
77150 DECLMETHOD iallowance
124838 DECLMETHOD test_recv_external
90191 DECLMETHOD test_recv_internal
str2bin PROC:<{
NEWC
OVER
SBITS
3 RSHIFT#
0 PUSHINT
WHILE:<{
s0 s1 PUSH2
LESS
}>DO<{
s0 s3 XCHG
8 LDU
OVER
48 EQINT
IF:<{
0 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
49 EQINT
IF:<{
1 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
50 EQINT
IF:<{
2 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
51 EQINT
IF:<{
3 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
52 EQINT
IF:<{
4 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
53 EQINT
IF:<{
5 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
54 EQINT
IF:<{
6 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
55 EQINT
IF:<{
7 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
56 EQINT
IF:<{
8 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
57 EQINT
IF:<{
9 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
65 EQINT
IF:<{
10 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
66 EQINT
IF:<{
11 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
67 EQINT
IF:<{
12 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
68 EQINT
IF:<{
13 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
OVER
69 EQINT
IF:<{
14 PUSHINT
s2 POP
s0 s3 XCHG
4 STU
}>ELSE<{
SWAP
70 EQINT
IF:<{
15 PUSHINT
s0 s3 XCHG2
4 STU
s0 s2 XCHG
}>
s0 s2 XCHG
}>
}>
}>
}>
}>
}>
}>
}>
}>
}>
}>
}>
}>
}>
}>
s0 s3 XCHG
INC
s2 s3 XCHG
}>
s2 s3 XCHG
3 BLKDROP
ENDC
CTOS
}>
parse_msg PROC:<{
DUP
SBITS
NEWC
s3 PUSH
0 GTINT
IFJMP:<{
-ROT
LDSLICEX
-ROT
STSLICER
OVER
SREFS
0 GTINT
IF:<{
SWAP
LDREF
DROP
CTOS
STSLICER
}>ELSE<{
NIP
}>
ENDC
CTOS
}>
s3 POP
LDSLICEX
SWAP
str2bin CALLDICT
s1 s2 XCHG
STSLICER
OVER
SREFS
0 GTINT
IF:<{
SWAP
LDREF
DROP
CTOS
str2bin CALLDICT
STSLICER
}>ELSE<{
NIP
}>
ENDC
CTOS
32 LDU
}>
clone_slice PROC:<{
NEWC
SWAP
STSLICER
ENDC
CTOS
}>
pack_addr PROC:<{
SWAP
NEWC
8 STI
SWAP
STSLICER
ENDC
CTOS
}>
load_data PROC:<{
CTOS
8 LDU
SWAP
3 LSHIFT#
LDSLICEX
8 LDU
SWAP
3 LSHIFT#
LDSLICEX
8 LDU
LDGRAMS
LDDICT
LDDICT
1 LDU
ENDS
}>
store_data PROC:<{
s5 PUSH
SBITS
3 RSHIFT#
s7 PUSH
SBITS
3 RSHIFT#
NEWC
8 STU
s0 s8 XCHG2
STSLICER
s1 s7 XCHG
8 STU
s0 s5 XCHG2
STSLICER
s1 s3 XCHG
8 STU
SWAP
STGRAMS
STDICT
STDICT
OVER
STUX
ENDC
c4 POP
}>
_get_balance PROC:<{
SWAP
264 PUSHINT
DICTGET
NULLSWAPIFNOT
IFJMP:<{
LDGRAMS
DROP
}>
DROP
0 PUSHINT
}>
~set_balance PROC:<{
NEWC
SWAP
STGRAMS
s0 s2 XCHG
264 PUSHINT
DICTSETB
}>
_get_allowance PROC:<{
s0 s2 XCHG
264 PUSHINT
DICTGET
NULLSWAPIFNOT
IFJMP:<{
LDDICT
DROP
264 PUSHINT
DICTGET
NULLSWAPIFNOT
IFJMP:<{
LDGRAMS
DROP
}>
DROP
0 PUSHINT
}>
2DROP
0 PUSHINT
}>
~set_allowance PROC:<{
s2 s3 PUSH2
264 PUSHINT
DICTGET
NULLSWAPIFNOT
IF:<{
LDDICT
DROP
}>ELSE<{
DROP
NEWDICT
}>
NEWC
ROT
STGRAMS
-ROT
264 PUSHINT
DICTSETB
NEWC
STDICT
s0 s2 XCHG
264 PUSHINT
DICTSETB
}>
send_message_back PROC:<{
0 PUSHINT
24 PUSHINT
NEWC
6 STU
s0 s5 XCHG2
STSLICER
s4 PUSH
STGRAMS
s1 s4 XCHG
107 STU
s1 s2 XCHG
32 STU
64 STU
32 STU
ENDC
64 PUSHINT
SENDRAWMSG
}>
send_message PROC:<{
0 PUSHINT
4 PUSHINT
24 PUSHINT
NEWC
6 STU
3 STU
s0 s7 XCHG2
STSLICER
s6 PUSH
STGRAMS
s1 s6 XCHG
107 STU
s1 s4 XCHG
32 STU
s1 s2 XCHG
64 STU
SWAP
STSLICER
SWAP
STGRAMS
OVER
SBITS
0 GTINT
IF:<{
NEWC
s2 PUSH
SBITS
s1 s3 XCHG
LDSLICEX
DROP
s1 s2 XCHG
STSLICER
ENDC
SWAP
STREF
}>ELSE<{
NIP
}>
ENDC
64 PUSHINT
SENDRAWMSG
}>
~transfer PROC:<{
2OVER
_get_balance CALLDICT
2DUP
LEQ
100 THROWIFNOT
OVER
SUB
s4 s3 s0 XCHG3
~set_balance CALLDICT
s0 s2 PUSH2
_get_balance CALLDICT
ROT
ADD
s1 s2 XCHG
~set_balance CALLDICT
}>
~increase_allowance PROC:<{
s3 s2 s1 PUSH3
_get_allowance CALLDICT
SWAP
ADD
DUP
-1 GTINT
103 THROWIFNOT
3 -ROLL
s3 PUSH
~set_allowance CALLDICT
SWAP
}>
process_rollback PROC:<{
264 PUSHINT
LDSLICEX
LDGRAMS
DROP
c4 PUSH
load_data CALLDICT
s9 PUSH
536870913 PUSHINT
EQUAL
IF:<{
s9 POP
s9 s3 s6 XCHG3
s1 s7 XCHG
~transfer CALLDICT
}>ELSE<{
s0 s9 XCHG
536870914 PUSHINT
EQUAL
IF:<{
s9 s1 s3 XCHG3
s7 s6 XCHG2
~increase_allowance CALLDICT
DROP
s0 s3 XCHG
}>ELSE<{
s2 s9 XCHG
s6 POP
s6 POP
DROP
}>
s0 s4 XCHG
}>
s0 s1 s6 XCHG3
s3 s3 XCHG2
s0 s5 XCHG
store_data CALLDICT
}>
recv_internal PROC:<{
s2 POP
CTOS
4 LDU
LDMSGADDR
DROP
DUP
REWRITEVARADDR
pack_addr CALLDICT
s3 PUSH
SBITS
0 EQINT
IFJMP:<{
4 BLKDROP
}>
s0 s3 XCHG
32 LDU
OVER
32 PUSHPOW2DEC
EQUAL
IFJMP:<{
s0 s3 XCHG
3 BLKDROP
64 LDU
NIP
32 LDU
process_rollback CALLDICT
}>
s0 s3 XCHG
1 PUSHINT
AND
IFJMP:<{
NIP
SWAP
64 LDU
NIP
process_rollback CALLDICT
}>
DUP
0 EQINT
s3 PUSH
SBITS
0 EQINT
AND
IFJMP:<{
4 BLKDROP
}>
ROT
parse_msg CALLDICT
64 LDU
s2 PUSH
4 GTINT
IFJMP:<{
DROP
s3 POP
DUP
31 PUSHPOW2
LESS
IF:<{
s1 s2 XCHG
32 PUSHPOW2DEC
-ROT
send_message_back CALLDICT
}>ELSE<{
3 BLKDROP
}>
}>
s3 POP
c4 PUSH
load_data CALLDICT
PUSHNULL
0 PUSHINT
s0 s10 PUSH2
1 EQINT
IF:<{
3 BLKDROP
s8 POP
s0 s8 XCHG
264 PUSHINT
LDSLICEX
LDGRAMS
s3 s11 s2 XCPU2
s3 PUSH
~transfer CALLDICT
536870913 PUSHINT
}>ELSE<{
s11 PUSH
2 EQINT
IF:<{
3 BLKDROP
s8 POP
s0 s8 XCHG
264 PUSHINT
LDSLICEX
264 PUSHINT
LDSLICEX
LDGRAMS
OVER
NEGATE
s12 s4 s(-1) XCPUXC
s14 s(-1) PUXC
~increase_allowance CALLDICT
DROP
s4 s3 s2 XC2PU
s5 PUSH
~transfer CALLDICT
536870914 PUSHINT
}>ELSE<{
s11 PUSH
3 EQINT
IF:<{
3 BLKDROP
s8 POP
s0 s8 XCHG
264 PUSHINT
LDSLICEX
s1 s(-1) PUXC
LDGRAMS
s11 s12 s3 PUSH3
_get_allowance CALLDICT
0 EQINT
s2 PUSH
0 EQINT
OR
102 THROWIFNOT
s11 s12 s3 XCPUXC
s12 PUSH
~set_allowance CALLDICT
536870915 PUSHINT
}>ELSE<{
s0 s11 XCHG
4 EQINT
IF:<{
2DROP
s8 POP
s0 s8 XCHG
1 LDU
264 PUSHINT
LDSLICEX
s1 s(-1) PUXC
LDGRAMS
s0 s4 XCHG
IF:<{
NEGATE
}>ELSE<{
}>
s12 PUSH
s3 s12 XCHG
s0 s12 s12 XCHG3
~increase_allowance CALLDICT
s2 s10 XCHG
536870915 PUSHINT
s10 s1 s10 XCHG3
s3 s3 XCHG2
}>
s10 s1 s11 XCHG3
s1 s3 s3 XCHG3
}>
s1 s3 XCHG
s1 s11 XCHG
s1 s4 XCHG
}>
s3 s11 XCHG
s3 s4 XCHG
s2 s3 XCHG
}>
s6 s8 XCHG
5 4 REVERSE
s3 s7 XCHG
s1 s11 s10 XCHG3
store_data CALLDICT
s0 s5 XCHG
s3 s4 XCHG
s0 s3 s3 XCHG3
send_message CALLDICT
}>
recv_external PROC:<{
DROP
c4 PUSH
load_data CALLDICT
0 EQINT
60 THROWIFNOT
ACCEPT
1 PUSHINT
store_data CALLDICT
}>
get_name PROC:<{
c4 PUSH
load_data CALLDICT
6 BLKDROP
clone_slice CALLDICT
}>
get_symbol PROC:<{
c4 PUSH
load_data CALLDICT
s5 s6 XCHG
6 BLKDROP
clone_slice CALLDICT
}>
get_decimals PROC:<{
c4 PUSH
load_data CALLDICT
s4 s6 XCHG
6 BLKDROP
}>
get_total_supply PROC:<{
c4 PUSH
load_data CALLDICT
s3 s6 XCHG
6 BLKDROP
}>
balance_of PROC:<{
c4 PUSH
load_data CALLDICT
s2 s6 XCHG
6 BLKDROP
SWAP
_get_balance CALLDICT
}>
allowance PROC:<{
c4 PUSH
load_data CALLDICT
s1 s6 XCHG
6 BLKDROP
-ROT
_get_allowance CALLDICT
}>
ibalance_of PROC:<{
SWAP
NEWC
8 STI
256 STU
ENDC
CTOS
balance_of CALLDICT
}>
iallowance PROC:<{
s0 s3 XCHG
NEWC
8 STI
s1 s2 XCHG
256 STU
ENDC
CTOS
SWAP
NEWC
8 STI
s1 s2 XCHG
256 STU
ENDC
CTOS
allowance CALLDICT
}>
test_recv_external PROC:<{
recv_external CALLDICT
0 PUSHINT
}>
test_recv_internal PROC:<{
recv_internal CALLDICT
0 PUSHINT
}>
}END>c