-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdex.fif
918 lines (918 loc) · 15.3 KB
/
dex.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
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
// automatically generated from `/Users/tolyayanot/lite-client/crypto/smartcont/stdlib.fc` `msg_hex_comment.fc` `dex.fc`
PROGRAM{
85643 DECLMETHOD str2bin
DECLPROC parse_msg
DECLPROC clone_slice
DECLPROC pack_addr
DECLPROC ~load_currency
DECLPROC store_currency
DECLPROC parse_order
DECLPROC store_order
DECLPROC is_gram
DECLPROC get_extra_currency
DECLPROC send_message_back
DECLPROC transfer
DECLPROC find_match_order
DECLPROC try_match_order
DECLPROC insert_order
DECLPROC process_user_msg
DECLPROC recv_internal
DECLPROC recv_external
85143 DECLMETHOD seqno
65641 DECLMETHOD orders
77572 DECLMETHOD my_orders
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_currency PROC:<{
8 LDU
SWAP
IFJMP:<{
264 PUSHINT
LDSLICEX
SWAP
}>
32 LDSLICE
SWAP
}>
store_currency PROC:<{
DUP
SBITS
32 NEQINT
IF:<{
1 PUSHINT
}>ELSE<{
0 PUSHINT
}>
ROT
8 STU
SWAP
STSLICER
}>
parse_order PROC:<{
LDREF
SWAP
CTOS
SWAP
264 PUSHINT
LDSLICEX
LDGRAMS
~load_currency CALLDICT
NIP
s0 s3 XCHG
LDGRAMS
~load_currency CALLDICT
SWAP
1 LDI
32 LDU
DROP
s5 s6 XCHG
s4 s5 XCHG
}>
store_order PROC:<{
NOW
86400 PUSHINT
ADD
NEWC
s0 s4 XCHG2
STGRAMS
ROT
store_currency CALLDICT
1 STI
32 STU
ENDC
NEWC
STREF
s0 s3 XCHG2
STSLICER
SWAP
STGRAMS
SWAP
store_currency CALLDICT
}>
is_gram PROC:<{
DUP
SBITS
32 EQINT
SWAP
32 LDI
DROP
0 EQINT
AND
}>
get_extra_currency PROC:<{
DUP
SBITS
32 NEQINT
IFJMP:<{
DROP
0 PUSHINT
}>
32 LDI
DROP
}>
send_message_back PROC:<{
0 PUSHINT
4 PUSHINT
24 PUSHINT
NEWC
6 STU
3 STU
s0 s6 XCHG2
STSLICER
s0 s4 XCHG2
STGRAMS
s1 s4 XCHG
107 STU
s1 s4 XCHG
32 STU
s1 s2 XCHG
64 STU
32 STU
ENDC
SWAP
SENDRAWMSG
}>
transfer PROC:<{
s2 PUSH
is_gram CALLDICT
s3 PUSH
get_extra_currency CALLDICT
SWAP
IF:<{
4 BLKDROP
0 PUSHINT
4 PUSHINT
24 PUSHINT
NEWC
6 STU
3 STU
s0 s3 XCHG2
STSLICER
SWAP
STGRAMS
107 STU
ENDC
0 PUSHINT
SENDRAWMSG
}>ELSE<{
DUP
IF:<{
2 2 BLKDROP2
NEWDICT
NEWC
s0 s4 XCHG2
STGRAMS
s0 s1 s3 XCHG3
32 PUSHINT
DICTISETB
0 PUSHINT
4 PUSHINT
24 PUSHINT
NEWC
6 STU
3 STU
s0 s4 XCHG2
STSLICER
ROT
STGRAMS
STDICT
106 STU
ENDC
0 PUSHINT
SENDRAWMSG
}>ELSE<{
DROP
1 PUSHINT
0 PUSHINT
4 PUSHINT
24 PUSHINT
NEWC
6 STU
3 STU
s0 s5 XCHG2
STSLICER
ROT
STGRAMS
s1 s3 XCHG
107 STU
s1 s2 XCHG
32 STU
64 STU
ROT
STSLICER
SWAP
STGRAMS
ENDC
0 PUSHINT
SENDRAWMSG
}>
}>
}>
find_match_order PROC:<{
0 PUSHINT
PUSHNULL
-1 PUSHINT
UNTIL:<{
s7 PUSH
64 PUSHINT
DICTUGETNEXT
NULLSWAPIFNOT2
DUP
IF:<{
s0 s2 XCHG
parse_order CALLDICT
DROP
s13 s2 PUXC
EQUAL
s1 s2 XCHG
AND
s11 PUSH
HASHSU
s0 s2 XCHG
HASHSU
s1 s2 XCHG
EQUAL
AND
s9 s2 PUXC
EQUAL
s1 s2 XCHG
AND
s7 PUSH
HASHSU
s0 s2 XCHG
HASHSU
s1 s2 XCHG
EQUAL
AND
IF:<{
s3 POP
s3 POP
s2 PUSH
}>ELSE<{
DROP
}>
}>ELSE<{
s2 POP
}>
SWAP
NOT
s3 PUSH
0 GTINT
OR
}>
DROP
4 2 BLKDROP2
}>
try_match_order PROC:<{
s7 s4 s3 XCPU2
s4 s3 PUSH2
find_match_order CALLDICT
OVER
0 GTINT
IF:<{
s9 PUSH
1 RSHIFT#
s3 s9 XCHG
s5 s4 s0 XCHG3
s8 s(-1) PUXC
transfer CALLDICT
s0 s6 XCHG
1 RSHIFT#
s1 s6 XCHG
s3 s3 s0 XCHG3
s6 s(-1) PUXC
transfer CALLDICT
DUP
0 GTINT
IF:<{
SWAP
64 PUSHINT
DICTUDEL
DROP
}>ELSE<{
DROP
}>
s1 s(-1) PUXC
64 PUSHINT
DICTUDEL
DROP
}>ELSE<{
DROP
s7 s8 XCHG2
7 BLKDROP
}>
SWAP
}>
insert_order PROC:<{
s1 s6 XCHG
0 PUSHINT
s6 PUSH
s6 s5 s2 PU2XC
s6 s10 s(-2) PU2XC
try_match_order CALLDICT
0 EQINT
IF:<{
s0 s6 XCHG
INC
s0 s5 XCHG
-1 PUSHINT
store_order CALLDICT
s0 s0 s2 XCPUXC
64 PUSHINT
DICTUSETB
}>ELSE<{
s0 s5 XCHG
5 BLKDROP
}>
}>
process_user_msg PROC:<{
64 LDU
s5 PUSH
2 GTINT
IFJMP:<{
DROP
2 2 BLKDROP2
s2 PUSH
31 PUSHPOW2
LESS
IF:<{
32 PUSHPOW2DEC
0 PUSHINT
s4 s2 XCHG2
64 PUSHINT
s0 s2 XCHG
send_message_back CALLDICT
}>ELSE<{
3 BLKDROP
}>
}>
c4 PUSH
CTOS
64 LDU
LDDICT
ENDS
s6 PUSH
0 PUSHINT
s9 PUSH
1 EQINT
IF:<{
s0 s4 XCHG
LDGRAMS
~load_currency CALLDICT
SWAP
LDGRAMS
~load_currency CALLDICT
NIP
1 PUSHINT
s3 PUSH
is_gram CALLDICT
IF:<{
DROP
s7 POP
0 PUSHINT
s3 PUSH
1000000000 PUSHINT
ADD
s1 s12 XCHG
GEQ
100 THROWIFNOT
s3 s2 XCPU
SUB
1000000000 PUSHINT
SUB
1 PUSHINT
s4 s7 XCHG2
}>ELSE<{
s12 POP
}>
s2 PUSH
get_extra_currency CALLDICT
DUP
IF:<{
s12 POP
s11 s10 XCHG2
32 PUSHINT
DICTIGET
NULLSWAPIFNOT
DROP
LDGRAMS
DROP
0 PUSHINT
s1 s3 XCPU
GEQ
100 THROWIFNOT
s0 s10 XCHG
}>ELSE<{
DROP
s10 POP
}>
s0 s10 XCHG
0 EQINT
101 THROWIFNOT
s7 PUSH
s5 s7 XCHG
s4 s6 XCHG
s4 s3 s5 XCHG3
s10 s9 s9 XCHG3
insert_order CALLDICT
}>ELSE<{
s7 POP
s7 POP
s7 PUSH
2 EQINT
IF:<{
s0 s2 XCHG
64 LDU
DROP
s0 s2 PUSH2
64 PUSHINT
DICTUGET
NULLSWAPIFNOT
IF:<{
parse_order CALLDICT
2 2 BLKDROP2
NOW
s5 PUSH
HASHSU
s11 PUSH
HASHSU
EQUAL
-ROT
LESS
OR
IF:<{
IF:<{
3 ROLL
s0 s9 PUXC
transfer CALLDICT
}>ELSE<{
3 BLKDROP
s6 POP
}>
s5 s5 XCHG2
64 PUSHINT
DICTUDEL
DROP
}>ELSE<{
5 BLKDROP
s5 POP
}>
}>ELSE<{
2DROP
s5 POP
}>
}>ELSE<{
s2 POP
s5 POP
}>
s1 s3 XCHG
s1 s4 XCHG
}>
SWAP
NEWC
64 STU
STDICT
ENDC
c4 POP
s0 s2 XCHG
IF:<{
2415919104 PUSHINT
1000000000 PUSHINT
s4 s2 XCHG2
2 PUSHINT
s0 s2 XCHG
send_message_back CALLDICT
}>ELSE<{
3 BLKDROP
}>
}>
recv_internal PROC:<{
SWAP
CTOS
4 LDU
LDMSGADDR
SWAP
REWRITEVARADDR
pack_addr CALLDICT
SWAP
LDGRAMS
NIP
LDDICT
DROP
s3 PUSH
SBITS
0 EQINT
IFJMP:<{
5 BLKDROP
}>
s0 s3 XCHG
32 LDU
OVER
0 EQINT
OVER
SBITS
0 EQINT
AND
IFJMP:<{
6 BLKDROP
}>
s0 s3 XCHG
1 PUSHINT
AND
IFJMP:<{
5 BLKDROP
}>
DUP
536870913 PUSHINT
EQUAL
OVER
536870914 PUSHINT
EQUAL
OR
IF:<{
DROP
s2 POP
64 LDU
NIP
264 PUSHINT
LDSLICEX
LDGRAMS
LDREF
DROP
CTOS
LDGRAMS
~load_currency CALLDICT
NIP
c4 PUSH
CTOS
64 LDU
LDDICT
ENDS
s0 s6 XCHG
3 -ROLL
s0 s7 XCHG
insert_order CALLDICT
SWAP
NEWC
64 STU
STDICT
ENDC
c4 POP
}>ELSE<{
ROT
parse_msg CALLDICT
s1 s4 XCHG
s3 s3 s0 XCHG3
process_user_msg CALLDICT
}>
}>
recv_external PROC:<{
2DROP
c4 PUSH
CTOS
64 LDU
LDDICT
ENDS
SWAP
0 EQINT
60 THROWIFNOT
ACCEPT
1 PUSHINT
NEWC
64 STU
STDICT
ENDC
c4 POP
}>
seqno PROC:<{
c4 PUSH
CTOS
64 LDU
LDDICT
NIP
ENDS
}>
orders PROC:<{
c4 PUSH
CTOS
64 LDU
NIP
LDDICT
ENDS
PUSHNULL
-1 PUSHINT
UNTIL:<{
s2 PUSH
64 PUSHINT
DICTUGETNEXT
NULLSWAPIFNOT2
DUP
IF:<{
s0 s2 XCHG
parse_order CALLDICT
DROP
s12 PUSH
SEMPTY
s13 PUSH
HASHSU
s7 PUSH
HASHSU
EQUAL
OR
s12 PUSH
SEMPTY
s13 PUSH
HASHSU
s6 PUSH
HASHSU
EQUAL
OR
s12 PUSH
SEMPTY
s13 PUSH
HASHSU
s5 PUSH
HASHSU
EQUAL
OR
-ROT
AND
SWAP
AND
IF:<{
s0 s5 XCHG
clone_slice CALLDICT
s0 s3 XCHG
clone_slice CALLDICT
s1 s4 XCHG
PAIR
s0 s3 XCHG
clone_slice CALLDICT
PAIR
s1 s2 XCHG
TRIPLE
s2 PUSH
-ROT
TRIPLE
s0 s3 XCHG2
CONS
s0 s2 XCHG
}>ELSE<{
6 BLKDROP
}>
}>ELSE<{
s2 POP
}>
SWAP
NOT
}>
s1 s5 XCHG
5 BLKDROP
}>
my_orders PROC:<{
SWAP
NEWC
8 STI
256 STU
ENDC
CTOS
NEWC
ENDC
CTOS
DUP
orders CALLDICT
}>
test_recv_internal PROC:<{
recv_internal CALLDICT
0 PUSHINT
}>
}END>c