BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Vortex QUIPU-XTZ DEX
Delegatable
operations (27.6K)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
718
1104
 
1
parameter (or
2
            (or
3
              (or
4
                (or
5
                  (pair %addLiquidity (address %owner) (nat %minLqtMinted)
6
                                      (nat %maxTokensDeposited)
7
                                      (timestamp %deadline))
8
                  (unit %default))
9
                (or
10
                  (pair %removeLiquidity (address %to) (nat %lqtBurned)
11
                                         (mutez %minXtzWithdrawn)
12
                                         (nat %minTokensWithdrawn)
13
                                         (timestamp %deadline))
14
                  (pair %setBaker (option %baker key_hash) (bool %freezeBaker))))
15
              (or (or (address %setLqtAddress) (address %setManager))
16
                  (or
17
                    (pair %tokenToToken (address %outputDexterContract)
18
                                        (nat %minTokensBought)
19
                                        (address %to)
20
                                        (nat %tokensSold)
21
                                        (timestamp %deadline))
22
                    (pair %tokenToXtz (address %to) (nat %tokensSold)
23
                                      (mutez %minXtzBought)
24
                                      (timestamp %deadline)))))
25
            (or (or (address %updateReserve) (unit %updateTokenPool))
26
                (or (list %updateTokenPoolInternal (pair (pair address nat) nat))
27
                    (pair %xtzToToken (address %to) (nat %minTokensBought)
28
                                      (timestamp %deadline)))));
29
storage (pair (nat %tokenPool) (mutez %xtzPool) (nat %lqtTotal)
30
              (bool %selfIsUpdatingTokenPool)
31
              (bool %freezeBaker)
32
              (address %manager)
33
              (address %tokenAddress)
34
              (nat %tokenId)
35
              (address %lqtAddress)
36
              (big_map %history string nat)
37
              (big_map %user_investments address
38
                                         (pair
39
                                           (pair
40
                                             (or %direction (unit %aDD) (unit %rEMOVE))
41
                                             (nat %token))
42
                                           (mutez %xtz)))
43
              (address %reserve));
44
code { UNPAIR ;
45
       IF_LEFT
46
         { IF_LEFT
47
             { IF_LEFT
48
                 { IF_LEFT
49
                     { UNPAIR 4 ;
50
                       DUP 5 ;
51
                       GET 7 ;
52
                       IF
53
                         { DROP 5 ; PUSH nat 2 ; FAILWITH }
54
                         { DIG 3 ;
55
                           NOW ;
56
                           COMPARE ;
57
                           GE ;
58
                           IF
59
                             { DROP 4 ; PUSH nat 3 ; FAILWITH }
60
                             { PUSH mutez 1 ;
61
                               DUP 5 ;
62
                               GET 3 ;
63
                               EDIV ;
64
                               IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
65
                               CAR ;
66
                               AMOUNT ;
67
                               PUSH mutez 1 ;
68
                               SWAP ;
69
                               EDIV ;
70
                               IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
71
                               CAR ;
72
                               SWAP ;
73
                               DUP ;
74
                               DUG 2 ;
75
                               DUP 7 ;
76
                               GET 5 ;
77
                               DUP 3 ;
78
                               MUL ;
79
                               EDIV ;
80
                               IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
81
                               CAR ;
82
                               DUP 7 ;
83
                               CAR ;
84
                               DIG 2 ;
85
                               MUL ;
86
                               DIG 2 ;
87
                               SWAP ;
88
                               EDIV ;
89
                               IF_NONE
90
                                 { PUSH string "DIV by 0" ; FAILWITH }
91
                                 { UNPAIR ;
92
                                   PUSH nat 0 ;
93
                                   DIG 2 ;
94
                                   COMPARE ;
95
                                   EQ ;
96
                                   IF {} { PUSH nat 1 ; ADD } } ;
97
                               DIG 4 ;
98
                               SWAP ;
99
                               DUP ;
100
                               DUG 2 ;
101
                               COMPARE ;
102
                               GT ;
103
                               IF
104
                                 { DROP 5 ; PUSH nat 4 ; FAILWITH }
105
                                 { DIG 3 ;
106
                                   DUP 3 ;
107
                                   COMPARE ;
108
                                   LT ;
109
                                   IF
110
                                     { DROP 4 ; PUSH nat 5 ; FAILWITH }
111
                                     { DUP 4 ;
112
                                       DUP 3 ;
113
                                       DUP 6 ;
114
                                       GET 5 ;
115
                                       ADD ;
116
                                       UPDATE 5 ;
117
                                       SWAP ;
118
                                       DUP ;
119
                                       DUG 2 ;
120
                                       DUP 6 ;
121
                                       CAR ;
122
                                       ADD ;
123
                                       UPDATE 1 ;
124
                                       AMOUNT ;
125
                                       DIG 5 ;
126
                                       GET 3 ;
127
                                       ADD ;
128
                                       UPDATE 3 ;
129
                                       DUP ;
130
                                       GET 19 ;
131
                                       SWAP ;
132
                                       DUP ;
133
                                       DUG 2 ;
134
                                       CAR ;
135
                                       SOME ;
136
                                       PUSH string "tokenPool" ;
137
                                       UPDATE ;
138
                                       PUSH mutez 1 ;
139
                                       DUP 3 ;
140
                                       GET 3 ;
141
                                       EDIV ;
142
                                       IF_NONE
143
                                         { PUSH string "DIV by 0" ; FAILWITH }
144
                                         {} ;
145
                                       CAR ;
146
                                       SOME ;
147
                                       PUSH string "xtzPool" ;
148
                                       UPDATE ;
149
                                       SWAP ;
150
                                       DUP ;
151
                                       DUG 2 ;
152
                                       GET 21 ;
153
                                       AMOUNT ;
154
                                       DUP 5 ;
155
                                       PUSH unit Unit ;
156
                                       LEFT unit ;
157
                                       PAIR ;
158
                                       PAIR ;
159
                                       SOME ;
160
                                       SENDER ;
161
                                       UPDATE ;
162
                                       DUP 3 ;
163
                                       DIG 2 ;
164
                                       DIG 3 ;
165
                                       CAR ;
166
                                       SOME ;
167
                                       PUSH string "tokenPool" ;
168
                                       UPDATE ;
169
                                       UPDATE 19 ;
170
                                       SWAP ;
171
                                       UPDATE 21 ;
172
                                       DUP ;
173
                                       SENDER ;
174
                                       SELF_ADDRESS ;
175
                                       DIG 4 ;
176
                                       SWAP ;
177
                                       PAIR ;
178
                                       SWAP ;
179
                                       PAIR ;
180
                                       SWAP ;
181
                                       PAIR ;
182
                                       UNPAIR 4 ;
183
                                       DUP ;
184
                                       GET 13 ;
185
                                       CONTRACT %transfer (list (pair address
186
                                                                     (list (pair address
187
                                                                                (pair
188
                                                                                  nat
189
                                                                                  nat))))) ;
190
                                       IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
191
                                       PUSH mutez 0 ;
192
                                       NIL (pair address
193
                                                 (list (pair address (pair nat nat)))) ;
194
                                       NIL (pair address (pair nat nat)) ;
195
                                       DIG 7 ;
196
                                       DIG 5 ;
197
                                       GET 15 ;
198
                                       PAIR ;
199
                                       DIG 6 ;
200
                                       PAIR ;
201
                                       CONS ;
202
                                       DIG 4 ;
203
                                       PAIR ;
204
                                       CONS ;
205
                                       TRANSFER_TOKENS ;
206
                                       SWAP ;
207
                                       DUP ;
208
                                       DUG 2 ;
209
                                       GET 17 ;
210
                                       CONTRACT %mintOrBurn (pair (int %quantity)
211
                                                                  (address %target)) ;
212
                                       IF_NONE { PUSH nat 12 ; FAILWITH } {} ;
213
                                       PUSH mutez 0 ;
214
                                       DIG 4 ;
215
                                       INT ;
216
                                       DIG 5 ;
217
                                       SWAP ;
218
                                       PAIR ;
219
                                       TRANSFER_TOKENS ;
220
                                       DIG 2 ;
221
                                       NIL operation ;
222
                                       DIG 2 ;
223
                                       CONS ;
224
                                       DIG 2 ;
225
                                       CONS ;
226
                                       PAIR } } } } }
227
                     { DROP ;
228
                       DUP ;
229
                       GET 7 ;
230
                       IF
231
                         { DROP ; PUSH nat 2 ; FAILWITH }
232
                         { DUP ; AMOUNT ; DIG 2 ; GET 3 ; ADD ; UPDATE 3 ; NIL operation ; PAIR } } }
233
                 { IF_LEFT
234
                     { UNPAIR 5 ;
235
                       DUP 6 ;
236
                       GET 7 ;
237
                       IF
238
                         { DROP 6 ; PUSH nat 2 ; FAILWITH }
239
                         { DIG 4 ;
240
                           NOW ;
241
                           COMPARE ;
242
                           GE ;
243
                           IF
244
                             { DROP 5 ; PUSH nat 3 ; FAILWITH }
245
                             { PUSH mutez 0 ;
246
                               AMOUNT ;
247
                               COMPARE ;
248
                               GT ;
249
                               IF
250
                                 { DROP 5 ; PUSH nat 10 ; FAILWITH }
251
                                 { DUP 5 ;
252
                                   GET 5 ;
253
                                   PUSH mutez 1 ;
254
                                   DUP 7 ;
255
                                   GET 3 ;
256
                                   EDIV ;
257
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
258
                                   CAR ;
259
                                   DUP 4 ;
260
                                   MUL ;
261
                                   EDIV ;
262
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
263
                                   CAR ;
264
                                   PUSH mutez 1 ;
265
                                   SWAP ;
266
                                   MUL ;
267
                                   DUP 6 ;
268
                                   GET 5 ;
269
                                   DUP 7 ;
270
                                   CAR ;
271
                                   DUP 5 ;
272
                                   MUL ;
273
                                   EDIV ;
274
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
275
                                   CAR ;
276
                                   DIG 4 ;
277
                                   DUP 3 ;
278
                                   COMPARE ;
279
                                   LT ;
280
                                   IF
281
                                     { DROP 6 ; PUSH nat 11 ; FAILWITH }
282
                                     { DIG 4 ;
283
                                       SWAP ;
284
                                       DUP ;
285
                                       DUG 2 ;
286
                                       COMPARE ;
287
                                       LT ;
288
                                       IF
289
                                         { DROP 5 ; PUSH nat 13 ; FAILWITH }
290
                                         { DUP 4 ;
291
                                           DUP 6 ;
292
                                           GET 5 ;
293
                                           SUB ;
294
                                           ISNAT ;
295
                                           IF_NONE { PUSH nat 14 ; FAILWITH } {} ;
296
                                           SWAP ;
297
                                           DUP ;
298
                                           DUG 2 ;
299
                                           DUP 7 ;
300
                                           CAR ;
301
                                           SUB ;
302
                                           ISNAT ;
303
                                           IF_NONE { PUSH nat 15 ; FAILWITH } {} ;
304
                                           DUP 7 ;
305
                                           SENDER ;
306
                                           DIG 7 ;
307
                                           PUSH int 0 ;
308
                                           SUB ;
309
                                           SWAP ;
310
                                           PAIR ;
311
                                           SWAP ;
312
                                           PAIR ;
313
                                           UNPAIR 3 ;
314
                                           GET 17 ;
315
                                           CONTRACT %mintOrBurn (pair (int %quantity)
316
                                                                      (address %target)) ;
317
                                           IF_NONE { PUSH nat 12 ; FAILWITH } {} ;
318
                                           PUSH mutez 0 ;
319
                                           DIG 3 ;
320
                                           DIG 3 ;
321
                                           SWAP ;
322
                                           PAIR ;
323
                                           TRANSFER_TOKENS ;
324
                                           DUP 7 ;
325
                                           SELF_ADDRESS ;
326
                                           DUP 8 ;
327
                                           DUP 7 ;
328
                                           SWAP ;
329
                                           PAIR ;
330
                                           SWAP ;
331
                                           PAIR ;
332
                                           SWAP ;
333
                                           PAIR ;
334
                                           UNPAIR 4 ;
335
                                           DUP ;
336
                                           GET 13 ;
337
                                           CONTRACT %transfer (list (pair address
338
                                                                         (list (pair
339
                                                                                address
340
                                                                                (pair
341
                                                                                  nat
342
                                                                                  nat))))) ;
343
                                           IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
344
                                           PUSH mutez 0 ;
345
                                           NIL (pair address
346
                                                     (list (pair address (pair nat nat)))) ;
347
                                           NIL (pair address (pair nat nat)) ;
348
                                           DIG 7 ;
349
                                           DIG 5 ;
350
                                           GET 15 ;
351
                                           PAIR ;
352
                                           DIG 6 ;
353
                                           PAIR ;
354
                                           CONS ;
355
                                           DIG 4 ;
356
                                           PAIR ;
357
                                           CONS ;
358
                                           TRANSFER_TOKENS ;
359
                                           DIG 6 ;
360
                                           CONTRACT unit ;
361
                                           IF_NONE { PUSH nat 9 ; FAILWITH } {} ;
362
                                           DUP 7 ;
363
                                           PUSH unit Unit ;
364
                                           TRANSFER_TOKENS ;
365
                                           DUP 8 ;
366
                                           DUP 8 ;
367
                                           DIG 9 ;
368
                                           GET 3 ;
369
                                           SUB ;
370
                                           UPDATE 3 ;
371
                                           DIG 5 ;
372
                                           UPDATE 5 ;
373
                                           DIG 4 ;
374
                                           UPDATE 1 ;
375
                                           DUP ;
376
                                           GET 19 ;
377
                                           SWAP ;
378
                                           DUP ;
379
                                           DUG 2 ;
380
                                           CAR ;
381
                                           SOME ;
382
                                           PUSH string "tokenPool" ;
383
                                           UPDATE ;
384
                                           PUSH mutez 1 ;
385
                                           DUP 3 ;
386
                                           GET 3 ;
387
                                           EDIV ;
388
                                           IF_NONE
389
                                             { PUSH string "DIV by 0" ; FAILWITH }
390
                                             {} ;
391
                                           CAR ;
392
                                           SOME ;
393
                                           PUSH string "xtzPool" ;
394
                                           UPDATE ;
395
                                           SWAP ;
396
                                           DUP ;
397
                                           DUG 2 ;
398
                                           GET 21 ;
399
                                           DIG 7 ;
400
                                           DIG 7 ;
401
                                           PUSH unit Unit ;
402
                                           RIGHT unit ;
403
                                           PAIR ;
404
                                           PAIR ;
405
                                           SOME ;
406
                                           SENDER ;
407
                                           UPDATE ;
408
                                           DUG 2 ;
409
                                           UPDATE 19 ;
410
                                           SWAP ;
411
                                           UPDATE 21 ;
412
                                           NIL operation ;
413
                                           DIG 2 ;
414
                                           CONS ;
415
                                           DIG 2 ;
416
                                           CONS ;
417
                                           DIG 2 ;
418
                                           CONS ;
419
                                           PAIR } } } } } }
420
                     { UNPAIR ;
421
                       DUP 3 ;
422
                       GET 7 ;
423
                       IF
424
                         { DROP 3 ; PUSH nat 2 ; FAILWITH }
425
                         { PUSH mutez 0 ;
426
                           AMOUNT ;
427
                           COMPARE ;
428
                           GT ;
429
                           IF
430
                             { DROP 3 ; PUSH nat 10 ; FAILWITH }
431
                             { DUP 3 ;
432
                               GET 11 ;
433
                               SENDER ;
434
                               COMPARE ;
435
                               NEQ ;
436
                               IF
437
                                 { DROP 3 ; PUSH nat 20 ; FAILWITH }
438
                                 { DUP 3 ;
439
                                   GET 9 ;
440
                                   IF
441
                                     { DROP 3 ; PUSH nat 22 ; FAILWITH }
442
                                     { DUG 2 ;
443
                                       UPDATE 9 ;
444
                                       NIL operation ;
445
                                       DIG 2 ;
446
                                       SET_DELEGATE ;
447
                                       CONS ;
448
                                       PAIR } } } } } } }
449
             { IF_LEFT
450
                 { IF_LEFT
451
                     { SWAP ;
452
                       DUP ;
453
                       DUG 2 ;
454
                       GET 7 ;
455
                       IF
456
                         { DROP 2 ; PUSH nat 2 ; FAILWITH }
457
                         { PUSH mutez 0 ;
458
                           AMOUNT ;
459
                           COMPARE ;
460
                           GT ;
461
                           IF
462
                             { DROP 2 ; PUSH nat 10 ; FAILWITH }
463
                             { SWAP ;
464
                               DUP ;
465
                               DUG 2 ;
466
                               GET 11 ;
467
                               SENDER ;
468
                               COMPARE ;
469
                               NEQ ;
470
                               IF
471
                                 { DROP 2 ; PUSH nat 23 ; FAILWITH }
472
                                 { PUSH address "tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU" ;
473
                                   DUP 3 ;
474
                                   GET 17 ;
475
                                   COMPARE ;
476
                                   NEQ ;
477
                                   IF
478
                                     { DROP 2 ; PUSH nat 24 ; FAILWITH }
479
                                     { UPDATE 17 ; NIL operation ; PAIR } } } } }
480
                     { SWAP ;
481
                       DUP ;
482
                       DUG 2 ;
483
                       GET 7 ;
484
                       IF
485
                         { DROP 2 ; PUSH nat 2 ; FAILWITH }
486
                         { PUSH mutez 0 ;
487
                           AMOUNT ;
488
                           COMPARE ;
489
                           GT ;
490
                           IF
491
                             { DROP 2 ; PUSH nat 10 ; FAILWITH }
492
                             { SWAP ;
493
                               DUP ;
494
                               DUG 2 ;
495
                               GET 11 ;
496
                               SENDER ;
497
                               COMPARE ;
498
                               NEQ ;
499
                               IF
500
                                 { DROP 2 ; PUSH nat 21 ; FAILWITH }
501
                                 { UPDATE 11 ; NIL operation ; PAIR } } } } }
502
                 { IF_LEFT
503
                     { UNPAIR 5 ;
504
                       CONTRACT %xtzToToken (pair (address %to)
505
                                                  (pair (nat %minTokensBought)
506
                                                        (timestamp %deadline))) ;
507
                       IF_NONE { PUSH nat 31 ; FAILWITH } {} ;
508
                       DUP 6 ;
509
                       GET 7 ;
510
                       IF
511
                         { DROP 6 ; PUSH nat 2 ; FAILWITH }
512
                         { PUSH mutez 0 ;
513
                           AMOUNT ;
514
                           COMPARE ;
515
                           GT ;
516
                           IF
517
                             { DROP 6 ; PUSH nat 10 ; FAILWITH }
518
                             { DUP 5 ;
519
                               NOW ;
520
                               COMPARE ;
521
                               GE ;
522
                               IF
523
                                 { DROP 6 ; PUSH nat 3 ; FAILWITH }
524
                                 { PUSH nat 9972 ;
525
                                   DUP 5 ;
526
                                   MUL ;
527
                                   PUSH nat 10000 ;
528
                                   DUP 8 ;
529
                                   CAR ;
530
                                   MUL ;
531
                                   ADD ;
532
                                   PUSH mutez 1 ;
533
                                   DUP 8 ;
534
                                   GET 3 ;
535
                                   EDIV ;
536
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
537
                                   CAR ;
538
                                   PUSH nat 9972 ;
539
                                   DUP 7 ;
540
                                   MUL ;
541
                                   MUL ;
542
                                   EDIV ;
543
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
544
                                   CAR ;
545
                                   PUSH mutez 1 ;
546
                                   SWAP ;
547
                                   MUL ;
548
                                   PUSH nat 3 ;
549
                                   DUP 6 ;
550
                                   MUL ;
551
                                   PUSH nat 10000 ;
552
                                   DUP 9 ;
553
                                   CAR ;
554
                                   MUL ;
555
                                   ADD ;
556
                                   PUSH mutez 1 ;
557
                                   DUP 9 ;
558
                                   GET 3 ;
559
                                   EDIV ;
560
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
561
                                   CAR ;
562
                                   PUSH nat 3 ;
563
                                   DUP 8 ;
564
                                   MUL ;
565
                                   MUL ;
566
                                   EDIV ;
567
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
568
                                   CAR ;
569
                                   PUSH mutez 1 ;
570
                                   SWAP ;
571
                                   MUL ;
572
                                   DUP 6 ;
573
                                   DUP 9 ;
574
                                   CAR ;
575
                                   ADD ;
576
                                   PUSH mutez 1 ;
577
                                   DUP 10 ;
578
                                   GET 3 ;
579
                                   EDIV ;
580
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
581
                                   CAR ;
582
                                   DUP 8 ;
583
                                   MUL ;
584
                                   EDIV ;
585
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
586
                                   CAR ;
587
                                   PUSH mutez 1 ;
588
                                   SWAP ;
589
                                   MUL ;
590
                                   DUP 7 ;
591
                                   DUP 10 ;
592
                                   CAR ;
593
                                   ADD ;
594
                                   DUP 3 ;
595
                                   DUP 5 ;
596
                                   DUP 12 ;
597
                                   GET 3 ;
598
                                   SUB ;
599
                                   SUB ;
600
                                   DUP 11 ;
601
                                   GET 19 ;
602
                                   DUP 3 ;
603
                                   SOME ;
604
                                   PUSH string "tokenPool" ;
605
                                   UPDATE ;
606
                                   PUSH mutez 1 ;
607
                                   DUP 3 ;
608
                                   EDIV ;
609
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
610
                                   CAR ;
611
                                   SOME ;
612
                                   PUSH string "xtzPool" ;
613
                                   UPDATE ;
614
                                   PUSH mutez 1 ;
615
                                   DIG 4 ;
616
                                   EDIV ;
617
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
618
                                   CAR ;
619
                                   SOME ;
620
                                   PUSH string "xtzVolume" ;
621
                                   UPDATE ;
622
                                   DIG 10 ;
623
                                   DIG 3 ;
624
                                   UPDATE 1 ;
625
                                   DIG 2 ;
626
                                   UPDATE 3 ;
627
                                   SWAP ;
628
                                   UPDATE 19 ;
629
                                   DUP ;
630
                                   SENDER ;
631
                                   SELF_ADDRESS ;
632
                                   DIG 9 ;
633
                                   SWAP ;
634
                                   PAIR ;
635
                                   SWAP ;
636
                                   PAIR ;
637
                                   SWAP ;
638
                                   PAIR ;
639
                                   UNPAIR 4 ;
640
                                   DUP ;
641
                                   GET 13 ;
642
                                   CONTRACT %transfer (list (pair address
643
                                                                 (list (pair address
644
                                                                            (pair nat
645
                                                                                  nat))))) ;
646
                                   IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
647
                                   PUSH mutez 0 ;
648
                                   NIL (pair address
649
                                             (list (pair address (pair nat nat)))) ;
650
                                   NIL (pair address (pair nat nat)) ;
651
                                   DIG 7 ;
652
                                   DIG 5 ;
653
                                   GET 15 ;
654
                                   PAIR ;
655
                                   DIG 6 ;
656
                                   PAIR ;
657
                                   CONS ;
658
                                   DIG 4 ;
659
                                   PAIR ;
660
                                   CONS ;
661
                                   TRANSFER_TOKENS ;
662
                                   DIG 4 ;
663
                                   DIG 4 ;
664
                                   DIG 6 ;
665
                                   DIG 6 ;
666
                                   DIG 7 ;
667
                                   SWAP ;
668
                                   PAIR ;
669
                                   SWAP ;
670
                                   PAIR ;
671
                                   TRANSFER_TOKENS ;
672
                                   DUP 3 ;
673
                                   GET 22 ;
674
                                   CONTRACT unit ;
675
                                   IF_NONE { PUSH nat 9 ; FAILWITH } {} ;
676
                                   DUP 5 ;
677
                                   PUSH unit Unit ;
678
                                   TRANSFER_TOKENS ;
679
                                   DIG 3 ;
680
                                   PUSH mutez 0 ;
681
                                   DIG 5 ;
682
                                   COMPARE ;
683
                                   EQ ;
684
                                   IF
685
                                     { SWAP ; DROP ; NIL operation ; DIG 2 ; CONS ; DIG 2 ; CONS }
686
                                     { NIL operation ; DIG 2 ; CONS ; DIG 2 ; CONS ; DIG 2 ; CONS } ;
687
                                   PAIR } } } }
688
                     { UNPAIR 4 ;
689
                       DUP 5 ;
690
                       GET 7 ;
691
                       IF
692
                         { DROP 5 ; PUSH nat 2 ; FAILWITH }
693
                         { DIG 3 ;
694
                           NOW ;
695
                           COMPARE ;
696
                           GE ;
697
                           IF
698
                             { DROP 4 ; PUSH nat 3 ; FAILWITH }
699
                             { PUSH mutez 0 ;
700
                               AMOUNT ;
701
                               COMPARE ;
702
                               GT ;
703
                               IF
704
                                 { DROP 4 ; PUSH nat 10 ; FAILWITH }
705
                                 { PUSH nat 9972 ;
706
                                   DUP 3 ;
707
                                   MUL ;
708
                                   PUSH nat 10000 ;
709
                                   DUP 6 ;
710
                                   CAR ;
711
                                   MUL ;
712
                                   ADD ;
713
                                   PUSH mutez 1 ;
714
                                   DUP 6 ;
715
                                   GET 3 ;
716
                                   EDIV ;
717
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
718
                                   CAR ;
719
                                   PUSH nat 9972 ;
720
                                   DUP 5 ;
721
                                   MUL ;
722
                                   MUL ;
723
                                   EDIV ;
724
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
725
                                   CAR ;
726
                                   PUSH mutez 1 ;
727
                                   SWAP ;
728
                                   MUL ;
729
                                   DIG 3 ;
730
                                   SWAP ;
731
                                   DUP ;
732
                                   DUG 2 ;
733
                                   COMPARE ;
734
                                   LT ;
735
                                   IF { DROP ; PUSH nat 8 ; FAILWITH } {} ;
736
                                   PUSH nat 3 ;
737
                                   DUP 4 ;
738
                                   MUL ;
739
                                   PUSH nat 10000 ;
740
                                   DUP 6 ;
741
                                   CAR ;
742
                                   MUL ;
743
                                   ADD ;
744
                                   PUSH mutez 1 ;
745
                                   DUP 6 ;
746
                                   GET 3 ;
747
                                   EDIV ;
748
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
749
                                   CAR ;
750
                                   PUSH nat 3 ;
751
                                   DUP 6 ;
752
                                   MUL ;
753
                                   MUL ;
754
                                   EDIV ;
755
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
756
                                   CAR ;
757
                                   PUSH mutez 1 ;
758
                                   SWAP ;
759
                                   MUL ;
760
                                   DUP 4 ;
761
                                   DUP 6 ;
762
                                   CAR ;
763
                                   ADD ;
764
                                   PUSH mutez 1 ;
765
                                   DUP 7 ;
766
                                   GET 3 ;
767
                                   EDIV ;
768
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
769
                                   CAR ;
770
                                   DUP 6 ;
771
                                   MUL ;
772
                                   EDIV ;
773
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
774
                                   CAR ;
775
                                   PUSH mutez 1 ;
776
                                   SWAP ;
777
                                   MUL ;
778
                                   DUP 6 ;
779
                                   SENDER ;
780
                                   SELF_ADDRESS ;
781
                                   DUP 8 ;
782
                                   SWAP ;
783
                                   PAIR ;
784
                                   SWAP ;
785
                                   PAIR ;
786
                                   SWAP ;
787
                                   PAIR ;
788
                                   UNPAIR 4 ;
789
                                   DUP ;
790
                                   GET 13 ;
791
                                   CONTRACT %transfer (list (pair address
792
                                                                 (list (pair address
793
                                                                            (pair nat
794
                                                                                  nat))))) ;
795
                                   IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
796
                                   PUSH mutez 0 ;
797
                                   NIL (pair address
798
                                             (list (pair address (pair nat nat)))) ;
799
                                   NIL (pair address (pair nat nat)) ;
800
                                   DIG 7 ;
801
                                   DIG 5 ;
802
                                   GET 15 ;
803
                                   PAIR ;
804
                                   DIG 6 ;
805
                                   PAIR ;
806
                                   CONS ;
807
                                   DIG 4 ;
808
                                   PAIR ;
809
                                   CONS ;
810
                                   TRANSFER_TOKENS ;
811
                                   DIG 4 ;
812
                                   CONTRACT unit ;
813
                                   IF_NONE { PUSH nat 9 ; FAILWITH } {} ;
814
                                   DUP 5 ;
815
                                   PUSH unit Unit ;
816
                                   TRANSFER_TOKENS ;
817
                                   DUP 7 ;
818
                                   GET 22 ;
819
                                   CONTRACT unit ;
820
                                   IF_NONE { PUSH nat 9 ; FAILWITH } {} ;
821
                                   DUP 5 ;
822
                                   PUSH unit Unit ;
823
                                   TRANSFER_TOKENS ;
824
                                   DIG 6 ;
825
                                   DUP 8 ;
826
                                   CAR ;
827
                                   ADD ;
828
                                   DUP 6 ;
829
                                   DIG 7 ;
830
                                   DUP 9 ;
831
                                   GET 3 ;
832
                                   SUB ;
833
                                   SUB ;
834
                                   DUP 8 ;
835
                                   GET 19 ;
836
                                   DUP 3 ;
837
                                   SOME ;
838
                                   PUSH string "tokenPool" ;
839
                                   UPDATE ;
840
                                   PUSH mutez 1 ;
841
                                   DUP 3 ;
842
                                   EDIV ;
843
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
844
                                   CAR ;
845
                                   SOME ;
846
                                   PUSH string "xtzPool" ;
847
                                   UPDATE ;
848
                                   PUSH mutez 1 ;
849
                                   DIG 7 ;
850
                                   EDIV ;
851
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
852
                                   CAR ;
853
                                   SOME ;
854
                                   PUSH string "xtzVolume" ;
855
                                   UPDATE ;
856
                                   DIG 7 ;
857
                                   DIG 3 ;
858
                                   UPDATE 1 ;
859
                                   DIG 2 ;
860
                                   UPDATE 3 ;
861
                                   SWAP ;
862
                                   UPDATE 19 ;
863
                                   PUSH mutez 0 ;
864
                                   DIG 5 ;
865
                                   COMPARE ;
866
                                   EQ ;
867
                                   IF
868
                                     { SWAP ; DROP ; NIL operation ; DIG 2 ; CONS ; DIG 2 ; CONS }
869
                                     { NIL operation ; DIG 2 ; CONS ; DIG 2 ; CONS ; DIG 2 ; CONS } ;
870
                                   PAIR } } } } } } }
871
         { IF_LEFT
872
             { IF_LEFT
873
                 { SWAP ;
874
                   DUP ;
875
                   DUG 2 ;
876
                   GET 22 ;
877
                   SENDER ;
878
                   COMPARE ;
879
                   NEQ ;
880
                   IF
881
                     { DROP 2 ; PUSH nat 40 ; FAILWITH }
882
                     { UPDATE 22 ; NIL operation ; PAIR } }
883
                 { DROP ;
884
                   SOURCE ;
885
                   SENDER ;
886
                   COMPARE ;
887
                   NEQ ;
888
                   IF
889
                     { DROP ; PUSH nat 25 ; FAILWITH }
890
                     { PUSH mutez 0 ;
891
                       AMOUNT ;
892
                       COMPARE ;
893
                       GT ;
894
                       IF
895
                         { DROP ; PUSH nat 10 ; FAILWITH }
896
                         { DUP ;
897
                           GET 7 ;
898
                           IF
899
                             { DROP ; PUSH nat 33 ; FAILWITH }
900
                             { SELF %updateTokenPoolInternal ;
901
                               SWAP ;
902
                               DUP ;
903
                               DUG 2 ;
904
                               GET 13 ;
905
                               CONTRACT %balance_of (pair (list (pair address nat))
906
                                                          (contract (list (pair
907
                                                                          (pair address
908
                                                                                nat)
909
                                                                          nat)))) ;
910
                               IF_NONE { PUSH nat 28 ; FAILWITH } {} ;
911
                               PUSH mutez 0 ;
912
                               DIG 2 ;
913
                               NIL (pair address nat) ;
914
                               DUP 5 ;
915
                               GET 15 ;
916
                               SELF_ADDRESS ;
917
                               PAIR ;
918
                               CONS ;
919
                               PAIR ;
920
                               TRANSFER_TOKENS ;
921
                               SWAP ;
922
                               PUSH bool True ;
923
                               UPDATE 7 ;
924
                               NIL operation ;
925
                               DIG 2 ;
926
                               CONS ;
927
                               PAIR } } } } }
928
             { IF_LEFT
929
                 { SWAP ;
930
                   DUP ;
931
                   DUG 2 ;
932
                   GET 13 ;
933
                   SENDER ;
934
                   COMPARE ;
935
                   NEQ ;
936
                   DUP 3 ;
937
                   GET 7 ;
938
                   NOT ;
939
                   OR ;
940
                   IF
941
                     { DROP 2 ; PUSH nat 29 ; FAILWITH }
942
                     { PUSH mutez 0 ;
943
                       AMOUNT ;
944
                       COMPARE ;
945
                       GT ;
946
                       IF
947
                         { DROP 2 ; PUSH nat 10 ; FAILWITH }
948
                         { IF_CONS { SWAP ; DROP ; CDR } { PUSH nat 32 ; FAILWITH } ;
949
                           UPDATE 1 ;
950
                           PUSH bool False ;
951
                           UPDATE 7 ;
952
                           NIL operation ;
953
                           PAIR } } }
954
                 { UNPAIR 3 ;
955
                   DUP 4 ;
956
                   GET 7 ;
957
                   IF
958
                     { DROP 4 ; PUSH nat 2 ; FAILWITH }
959
                     { DIG 2 ;
960
                       NOW ;
961
                       COMPARE ;
962
                       GE ;
963
                       IF
964
                         { DROP 3 ; PUSH nat 3 ; FAILWITH }
965
                         { PUSH mutez 1 ;
966
                           DUP 4 ;
967
                           GET 3 ;
968
                           EDIV ;
969
                           IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
970
                           CAR ;
971
                           AMOUNT ;
972
                           PUSH mutez 1 ;
973
                           SWAP ;
974
                           EDIV ;
975
                           IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
976
                           CAR ;
977
                           PUSH nat 9972 ;
978
                           SWAP ;
979
                           DUP ;
980
                           DUG 2 ;
981
                           MUL ;
982
                           PUSH nat 10000 ;
983
                           DIG 3 ;
984
                           MUL ;
985
                           ADD ;
986
                           DUP 5 ;
987
                           CAR ;
988
                           PUSH nat 9972 ;
989
                           DUP 4 ;
990
                           MUL ;
991
                           MUL ;
992
                           EDIV ;
993
                           IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
994
                           CAR ;
995
                           DIG 3 ;
996
                           SWAP ;
997
                           DUP ;
998
                           DUG 2 ;
999
                           COMPARE ;
1000
                           LT ;
1001
                           IF { DROP ; PUSH nat 18 ; FAILWITH } {} ;
1002
                           PUSH nat 10000 ;
1003
                           PUSH nat 3 ;
1004
                           DUP 4 ;
1005
                           MUL ;
1006
                           EDIV ;
1007
                           IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1008
                           CAR ;
1009
                           PUSH mutez 1 ;
1010
                           SWAP ;
1011
                           MUL ;
1012
                           SWAP ;
1013
                           DUP ;
1014
                           DUG 2 ;
1015
                           DUP 6 ;
1016
                           CAR ;
1017
                           SUB ;
1018
                           ISNAT ;
1019
                           IF_NONE { PUSH nat 19 ; FAILWITH } {} ;
1020
                           SWAP ;
1021
                           DUP ;
1022
                           DUG 2 ;
1023
                           AMOUNT ;
1024
                           DUP 8 ;
1025
                           GET 3 ;
1026
                           ADD ;
1027
                           SUB ;
1028
                           DIG 6 ;
1029
                           SWAP ;
1030
                           UPDATE 3 ;
1031
                           SWAP ;
1032
                           UPDATE 1 ;
1033
                           DUP ;
1034
                           GET 19 ;
1035
                           SWAP ;
1036
                           DUP ;
1037
                           DUG 2 ;
1038
                           CAR ;
1039
                           SOME ;
1040
                           PUSH string "tokenPool" ;
1041
                           UPDATE ;
1042
                           PUSH mutez 1 ;
1043
                           DUP 3 ;
1044
                           GET 3 ;
1045
                           EDIV ;
1046
                           IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1047
                           CAR ;
1048
                           SOME ;
1049
                           PUSH string "xtzPool" ;
1050
                           UPDATE ;
1051
                           DIG 4 ;
1052
                           SOME ;
1053
                           PUSH string "xtzVolume" ;
1054
                           UPDATE ;
1055
                           UPDATE 19 ;
1056
                           DUP ;
1057
                           SELF_ADDRESS ;
1058
                           DIG 5 ;
1059
                           DIG 5 ;
1060
                           SWAP ;
1061
                           PAIR ;
1062
                           SWAP ;
1063
                           PAIR ;
1064
                           SWAP ;
1065
                           PAIR ;
1066
                           UNPAIR 4 ;
1067
                           DUP ;
1068
                           GET 13 ;
1069
                           CONTRACT %transfer (list (pair address
1070
                                                         (list (pair address
1071
                                                                    (pair nat nat))))) ;
1072
                           IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
1073
                           PUSH mutez 0 ;
1074
                           NIL (pair address (list (pair address (pair nat nat)))) ;
1075
                           NIL (pair address (pair nat nat)) ;
1076
                           DIG 7 ;
1077
                           DIG 5 ;
1078
                           GET 15 ;
1079
                           PAIR ;
1080
                           DIG 6 ;
1081
                           PAIR ;
1082
                           CONS ;
1083
                           DIG 4 ;
1084
                           PAIR ;
1085
                           CONS ;
1086
                           TRANSFER_TOKENS ;
1087
                           SWAP ;
1088
                           DUP ;
1089
                           DUG 2 ;
1090
                           GET 22 ;
1091
                           CONTRACT unit ;
1092
                           IF_NONE { PUSH nat 9 ; FAILWITH } {} ;
1093
                           DUP 4 ;
1094
                           PUSH unit Unit ;
1095
                           TRANSFER_TOKENS ;
1096
                           DIG 2 ;
1097
                           PUSH mutez 0 ;
1098
                           DIG 4 ;
1099
                           COMPARE ;
1100
                           EQ ;
1101
                           IF
1102
                             { SWAP ; DROP ; NIL operation ; DIG 2 ; CONS }
1103
                             { NIL operation ; DIG 2 ; CONS ; DIG 2 ; CONS } ;
1104
                           PAIR } } } } } }