BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • USDT/TEZ Target FlatYouves
Delegatable
operations (185K)Storage Code Interact Tokens Fork Views Statistics Details
Latest
​x
735
1331
 
1
{ parameter (or
2
              (or
3
                (or
4
                  (or
5
                    (or (unit %acceptAdminProposal)
6
                        (pair %addLiquidity (address %owner)
7
                                            (pair (nat %minLqtMinted)
8
                                                  (pair (nat %maxTokensDeposited)
9
                                                        (timestamp %deadline)))))
10
                    (or
11
                      (pair %addLiquidityInternal
12
                        (pair (address %owner)
13
                              (pair (nat %minLqtMinted)
14
                                    (pair (nat %maxTokensDeposited)
15
                                          (timestamp %deadline))))
16
                        address)
17
                      (pair %cashToToken (address %to)
18
                                         (pair (nat %minTokensBought)
19
                                               (timestamp %deadline)))))
20
                  (or
21
                    (or
22
                      (pair %cashToTokenInternal
23
                        (pair (address %to)
24
                              (pair (nat %minTokensBought) (timestamp %deadline)))
25
                        address)
26
                      (pair %changeFee (nat %numerator) (nat %denominator)))
27
                    (or (unit %default) (contract %fetchLqtTokenPriceInCash nat))))
28
                (or
29
                  (or
30
                    (or (contract %fetchLqtTokenPriceInToken nat)
31
                        (pair %fetchLqtTokenPriceInternal (contract nat)
32
                                                          (or (unit %cash) (unit %token))))
33
                    (or (address %proposeNewAdmin)
34
                        (pair %removeLiquidity (address %to)
35
                                               (pair (nat %lqtBurned)
36
                                                     (pair (nat %minCashWithdrawn)
37
                                                           (pair
38
                                                             (nat %minTokensWithdrawn)
39
                                                             (timestamp %deadline)))))))
40
                  (or
41
                    (or
42
                      (pair %removeLiquidityInternal
43
                        (pair (address %to)
44
                              (pair (nat %lqtBurned)
45
                                    (pair (nat %minCashWithdrawn)
46
                                          (pair (nat %minTokensWithdrawn)
47
                                                (timestamp %deadline)))))
48
                        address)
49
                      (option %setDelegate key_hash))
50
                    (or (address %setLqtAddress) (address %setRewardRecipient)))))
51
              (or
52
                (or
53
                  (or (address %setTargetOracle)
54
                      (pair %tokenToCash (address %to)
55
                                         (pair (nat %tokensSold)
56
                                               (pair (nat %minCashBought)
57
                                                     (timestamp %deadline)))))
58
                  (or
59
                    (pair %tokenToCashInternal
60
                      (pair (address %to)
61
                            (pair (nat %tokensSold)
62
                                  (pair (nat %minCashBought) (timestamp %deadline))))
63
                      address)
64
                    (unit %updatePools)))
65
                (list %updateTokenPoolInternal (pair (pair address nat) nat)))) ;
66
  storage (pair (address %tokenAddress)
67
                (pair (nat %tokenId)
68
                      (pair (nat %tokenPool)
69
                            (pair (nat %tokenMultiplier)
70
                                  (pair (nat %cashPool)
71
                                        (pair (nat %cashMultiplier)
72
                                              (pair (address %admin)
73
                                                    (pair (address %proposedAdmin)
74
                                                          (pair (nat %lqtTotal)
75
                                                                (pair
76
                                                                  (address %lqtAddress)
77
                                                                  (pair
78
                                                                    (address %rewardRecipient)
79
                                                                    (pair
80
                                                                      (nat %pendingPoolUpdates)
81
                                                                      (pair
82
                                                                        (pair %feeRatio
83
                                                                          (nat %numerator)
84
                                                                          (nat %denominator))
85
                                                                        (address %targetPriceOracle)))))))))))))) ;
86
  code { LAMBDA
87
           (pair nat nat)
88
           (pair nat nat)
89
           { UNPAIR ;
90
             DUP 2 ;
91
             DUP 2 ;
92
             ADD ;
93
             DUG 2 ;
94
             SUB ;
95
             DUP 2 ;
96
             DUP 3 ;
97
             MUL ;
98
             DUP ;
99
             MUL ;
100
             DUP ;
101
             MUL ;
102
             DIG 2 ;
103
             DUP 2 ;
104
             EDIV ;
105
             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
106
             CAR ;
107
             DUP 3 ;
108
             DUP 4 ;
109
             MUL ;
110
             DUP ;
111
             MUL ;
112
             DUP ;
113
             MUL ;
114
             PUSH int 0 ;
115
             DUP 5 ;
116
             COMPARE ;
117
             EQ ;
118
             IF
119
               { DIG 3 ; DROP ; PUSH int 0 }
120
               { DIG 3 ; DUP 2 ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR } ;
121
             SWAP ;
122
             DIG 3 ;
123
             SUB ;
124
             ISNAT ;
125
             IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
126
             DUG 2 ;
127
             ADD ;
128
             ISNAT ;
129
             IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
130
             PUSH nat 8 ;
131
             MUL ;
132
             SWAP ;
133
             PAIR } ;
134
         LAMBDA
135
           (pair (lambda (pair nat nat) (pair nat nat))
136
                 (pair (pair (pair nat nat) (pair int nat)) (pair nat nat)))
137
           nat
138
           { UNPAIR ;
139
             SWAP ;
140
             LEFT nat ;
141
             LOOP_LEFT { PUSH int 0 ;
142
                         DUP 2 ;
143
                         CAR ;
144
                         CDR ;
145
                         CAR ;
146
                         COMPARE ;
147
                         EQ ;
148
                         IF
149
                           { CAR ;
150
                             CAR ;
151
                             CDR ;
152
                             RIGHT (pair (pair (pair nat nat) (pair int nat))
153
                                         (pair nat nat)) }
154
                           { DUP ;
155
                             CAR ;
156
                             CAR ;
157
                             CDR ;
158
                             DUP 2 ;
159
                             CDR ;
160
                             CDR ;
161
                             SUB ;
162
                             ISNAT ;
163
                             IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
164
                             DUP 2 ;
165
                             CAR ;
166
                             CAR ;
167
                             CAR ;
168
                             DUP 3 ;
169
                             CDR ;
170
                             CAR ;
171
                             ADD ;
172
                             PAIR ;
173
                             DUP 3 ;
174
                             SWAP ;
175
                             EXEC ;
176
                             UNPAIR ;
177
                             DUP 3 ;
178
                             CAR ;
179
                             CDR ;
180
                             CDR ;
181
                             SWAP ;
182
                             SUB ;
183
                             ISNAT ;
184
                             IF_NONE
185
                               { DROP ; PUSH nat 2 ; FAILWITH }
186
                               { EDIV ;
187
                                 IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
188
                                 CAR ;
189
                                 DUP 2 ;
190
                                 CAR ;
191
                                 CAR ;
192
                                 CDR ;
193
                                 ADD } ;
194
                             DUP 2 ;
195
                             CDR ;
196
                             DUP 3 ;
197
                             CAR ;
198
                             CDR ;
199
                             DIG 2 ;
200
                             DUP 4 ;
201
                             CAR ;
202
                             CAR ;
203
                             CAR ;
204
                             PAIR ;
205
                             PAIR ;
206
                             PAIR ;
207
                             DUP ;
208
                             CDR ;
209
                             DUP 2 ;
210
                             CAR ;
211
                             CDR ;
212
                             CDR ;
213
                             PUSH int 1 ;
214
                             DIG 4 ;
215
                             CAR ;
216
                             CDR ;
217
                             CAR ;
218
                             SUB ;
219
                             PAIR ;
220
                             DIG 2 ;
221
                             CAR ;
222
                             CAR ;
223
                             PAIR ;
224
                             PAIR ;
225
                             LEFT nat } } ;
226
             SWAP ;
227
             DROP } ;
228
         DUP 2 ;
229
         APPLY ;
230
         DIG 2 ;
231
         UNPAIR ;
232
         IF_LEFT
233
           { IF_LEFT
234
               { IF_LEFT
235
                   { DIG 2 ;
236
                     DIG 3 ;
237
                     DROP 2 ;
238
                     IF_LEFT
239
                       { IF_LEFT
240
                           { DROP ;
241
                             DUP ;
242
                             GET 15 ;
243
                             SENDER ;
244
                             COMPARE ;
245
                             NEQ ;
246
                             IF
247
                               { DROP ; PUSH nat 27 ; FAILWITH }
248
                               { DUP ; GET 15 ; UPDATE 13 ; NIL operation ; PAIR } }
249
                           { SELF %updatePools ;
250
                             SELF %addLiquidityInternal ;
251
                             SWAP ;
252
                             PUSH mutez 0 ;
253
                             UNIT ;
254
                             TRANSFER_TOKENS ;
255
                             SENDER ;
256
                             DIG 3 ;
257
                             PAIR ;
258
                             AMOUNT ;
259
                             DIG 3 ;
260
                             SWAP ;
261
                             DIG 2 ;
262
                             TRANSFER_TOKENS ;
263
                             DIG 2 ;
264
                             NIL operation ;
265
                             DIG 2 ;
266
                             CONS ;
267
                             DIG 2 ;
268
                             CONS ;
269
                             PAIR } }
270
                       { IF_LEFT
271
                           { UNPAIR ;
272
                             UNPAIR 4 ;
273
                             AMOUNT ;
274
                             PUSH mutez 1 ;
275
                             SWAP ;
276
                             EDIV ;
277
                             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
278
                             CAR ;
279
                             PUSH nat 0 ;
280
                             DUP 8 ;
281
                             GET 23 ;
282
                             COMPARE ;
283
                             GT ;
284
                             IF
285
                               { DROP 7 ; PUSH nat 6 ; FAILWITH }
286
                               { DIG 4 ;
287
                                 NOW ;
288
                                 COMPARE ;
289
                                 GE ;
290
                                 IF
291
                                   { DROP 6 ; PUSH nat 3 ; FAILWITH }
292
                                   { SELF_ADDRESS ;
293
                                     SENDER ;
294
                                     COMPARE ;
295
                                     NEQ ;
296
                                     IF
297
                                       { DROP 6 ; PUSH nat 36 ; FAILWITH }
298
                                       { DUP ;
299
                                         DUP 7 ;
300
                                         GET 9 ;
301
                                         SUB ;
302
                                         ISNAT ;
303
                                         IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
304
                                         DUP ;
305
                                         DUP 8 ;
306
                                         GET 17 ;
307
                                         DUP 4 ;
308
                                         MUL ;
309
                                         EDIV ;
310
                                         IF_NONE
311
                                           { PUSH string "DIV by 0" ; FAILWITH }
312
                                           {} ;
313
                                         CAR ;
314
                                         SWAP ;
315
                                         DUP 8 ;
316
                                         GET 5 ;
317
                                         DIG 3 ;
318
                                         MUL ;
319
                                         SWAP ;
320
                                         INT ;
321
                                         SWAP ;
322
                                         NEG ;
323
                                         EDIV ;
324
                                         IF_NONE
325
                                           { PUSH string "DIV by 0" ; FAILWITH }
326
                                           {} ;
327
                                         CAR ;
328
                                         ABS ;
329
                                         DIG 4 ;
330
                                         DUP 2 ;
331
                                         COMPARE ;
332
                                         GT ;
333
                                         IF
334
                                           { DROP 6 ; PUSH nat 4 ; FAILWITH }
335
                                           { DIG 3 ;
336
                                             DUP 3 ;
337
                                             COMPARE ;
338
                                             LT ;
339
                                             IF
340
                                               { DROP 5 ; PUSH nat 5 ; FAILWITH }
341
                                               { DUP 5 ;
342
                                                 DUP 3 ;
343
                                                 DUP 7 ;
344
                                                 GET 17 ;
345
                                                 ADD ;
346
                                                 UPDATE 17 ;
347
                                                 DUP 2 ;
348
                                                 DIG 6 ;
349
                                                 GET 5 ;
350
                                                 ADD ;
351
                                                 UPDATE 5 ;
352
                                                 SWAP ;
353
                                                 SELF_ADDRESS ;
354
                                                 DIG 5 ;
355
                                                 DUP 4 ;
356
                                                 DUP ;
357
                                                 CAR ;
358
                                                 CONTRACT %transfer (list (pair address
359
                                                                               (list (pair
360
                                                                                      address
361
                                                                                      (pair
362
                                                                                        nat
363
                                                                                        nat))))) ;
364
                                                 IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
365
                                                 PUSH mutez 0 ;
366
                                                 NIL (pair address
367
                                                           (list (pair address
368
                                                                      (pair nat nat)))) ;
369
                                                 NIL (pair address (pair nat nat)) ;
370
                                                 DIG 7 ;
371
                                                 DIG 5 ;
372
                                                 GET 3 ;
373
                                                 PAIR ;
374
                                                 DIG 6 ;
375
                                                 PAIR ;
376
                                                 CONS ;
377
                                                 DIG 4 ;
378
                                                 PAIR ;
379
                                                 CONS ;
380
                                                 TRANSFER_TOKENS ;
381
                                                 DIG 2 ;
382
                                                 INT ;
383
                                                 DIG 3 ;
384
                                                 DUP 4 ;
385
                                                 GET 19 ;
386
                                                 CONTRACT %mintOrBurn (pair
387
                                                                        (int %quantity)
388
                                                                        (address %target)) ;
389
                                                 IF_NONE { PUSH nat 12 ; FAILWITH } {} ;
390
                                                 PUSH mutez 0 ;
391
                                                 DIG 2 ;
392
                                                 DIG 3 ;
393
                                                 PAIR ;
394
                                                 TRANSFER_TOKENS ;
395
                                                 DIG 2 ;
396
                                                 NIL operation ;
397
                                                 DIG 2 ;
398
                                                 CONS ;
399
                                                 DIG 2 ;
400
                                                 CONS ;
401
                                                 PAIR } } } } } }
402
                           { SELF %updatePools ;
403
                             SELF %cashToTokenInternal ;
404
                             SWAP ;
405
                             PUSH mutez 0 ;
406
                             UNIT ;
407
                             TRANSFER_TOKENS ;
408
                             SENDER ;
409
                             DIG 3 ;
410
                             PAIR ;
411
                             AMOUNT ;
412
                             DIG 3 ;
413
                             SWAP ;
414
                             DIG 2 ;
415
                             TRANSFER_TOKENS ;
416
                             DIG 2 ;
417
                             NIL operation ;
418
                             DIG 2 ;
419
                             CONS ;
420
                             DIG 2 ;
421
                             CONS ;
422
                             PAIR } } }
423
                   { IF_LEFT
424
                       { IF_LEFT
425
                           { CAR ;
426
                             UNPAIR 3 ;
427
                             AMOUNT ;
428
                             PUSH mutez 1 ;
429
                             SWAP ;
430
                             EDIV ;
431
                             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
432
                             CAR ;
433
                             PUSH nat 0 ;
434
                             DUP 6 ;
435
                             GET 23 ;
436
                             COMPARE ;
437
                             GT ;
438
                             IF
439
                               { DROP 7 ; PUSH nat 6 ; FAILWITH }
440
                               { DIG 3 ;
441
                                 NOW ;
442
                                 COMPARE ;
443
                                 GE ;
444
                                 IF
445
                                   { DROP 6 ; PUSH nat 3 ; FAILWITH }
446
                                   { SELF_ADDRESS ;
447
                                     SENDER ;
448
                                     COMPARE ;
449
                                     NEQ ;
450
                                     IF
451
                                       { DROP 6 ; PUSH nat 36 ; FAILWITH }
452
                                       { DUP ;
453
                                         DUP 5 ;
454
                                         GET 9 ;
455
                                         SUB ;
456
                                         ISNAT ;
457
                                         IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
458
                                         DUP 5 ;
459
                                         GET 26 ;
460
                                         UNIT ;
461
                                         VIEW "get_token_price_in_cash" nat ;
462
                                         IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
463
                                         PUSH nat 1000000 ;
464
                                         DUP 7 ;
465
                                         GET 11 ;
466
                                         MUL ;
467
                                         SWAP ;
468
                                         DUP 7 ;
469
                                         GET 7 ;
470
                                         MUL ;
471
                                         DUP 2 ;
472
                                         DIG 3 ;
473
                                         MUL ;
474
                                         DUP 2 ;
475
                                         DUP 8 ;
476
                                         GET 5 ;
477
                                         MUL ;
478
                                         DUP ;
479
                                         DUP 3 ;
480
                                         PAIR ;
481
                                         DIG 10 ;
482
                                         SWAP ;
483
                                         EXEC ;
484
                                         CAR ;
485
                                         DIG 3 ;
486
                                         DIG 2 ;
487
                                         DIG 3 ;
488
                                         PAIR ;
489
                                         DIG 2 ;
490
                                         PUSH int 5 ;
491
                                         PAIR ;
492
                                         PUSH nat 0 ;
493
                                         DIG 4 ;
494
                                         DIG 5 ;
495
                                         MUL ;
496
                                         PAIR ;
497
                                         PAIR ;
498
                                         PAIR ;
499
                                         DIG 5 ;
500
                                         SWAP ;
501
                                         EXEC ;
502
                                         EDIV ;
503
                                         IF_NONE
504
                                           { PUSH string "DIV by 0" ; FAILWITH }
505
                                           {} ;
506
                                         CAR ;
507
                                         DUP 4 ;
508
                                         GET 25 ;
509
                                         CDR ;
510
                                         DUP 2 ;
511
                                         DUP 6 ;
512
                                         GET 25 ;
513
                                         CAR ;
514
                                         MUL ;
515
                                         EDIV ;
516
                                         IF_NONE
517
                                           { PUSH string "DIV by 0" ; FAILWITH }
518
                                           {} ;
519
                                         CAR ;
520
                                         DIG 3 ;
521
                                         DUP 2 ;
522
                                         COMPARE ;
523
                                         LT ;
524
                                         IF { DROP ; PUSH nat 18 ; FAILWITH } {} ;
525
                                         PUSH int 2 ;
526
                                         DUP 2 ;
527
                                         DIG 3 ;
528
                                         SUB ;
529
                                         EDIV ;
530
                                         IF_NONE
531
                                           { PUSH string "DIV by 0" ; FAILWITH }
532
                                           {} ;
533
                                         CAR ;
534
                                         ISNAT ;
535
                                         IF_NONE { PUSH nat 19 ; FAILWITH } {} ;
536
                                         DUP ;
537
                                         DUP 3 ;
538
                                         ADD ;
539
                                         DUP 5 ;
540
                                         GET 5 ;
541
                                         SUB ;
542
                                         ISNAT ;
543
                                         IF_NONE { PUSH nat 19 ; FAILWITH } {} ;
544
                                         DIG 4 ;
545
                                         SWAP ;
546
                                         UPDATE 5 ;
547
                                         DIG 2 ;
548
                                         DIG 3 ;
549
                                         SELF_ADDRESS ;
550
                                         DUP 4 ;
551
                                         DUP ;
552
                                         CAR ;
553
                                         CONTRACT %transfer (list (pair address
554
                                                                       (list (pair
555
                                                                              address
556
                                                                              (pair nat
557
                                                                                    nat))))) ;
558
                                         IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
559
                                         PUSH mutez 0 ;
560
                                         NIL (pair address
561
                                                   (list (pair address (pair nat nat)))) ;
562
                                         NIL (pair address (pair nat nat)) ;
563
                                         DIG 7 ;
564
                                         DIG 5 ;
565
                                         GET 3 ;
566
                                         PAIR ;
567
                                         DIG 6 ;
568
                                         PAIR ;
569
                                         CONS ;
570
                                         DIG 4 ;
571
                                         PAIR ;
572
                                         CONS ;
573
                                         TRANSFER_TOKENS ;
574
                                         DIG 2 ;
575
                                         DUP 3 ;
576
                                         GET 21 ;
577
                                         SELF_ADDRESS ;
578
                                         DUP 5 ;
579
                                         DUP ;
580
                                         CAR ;
581
                                         CONTRACT %transfer (list (pair address
582
                                                                       (list (pair
583
                                                                              address
584
                                                                              (pair nat
585
                                                                                    nat))))) ;
586
                                         IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
587
                                         PUSH mutez 0 ;
588
                                         NIL (pair address
589
                                                   (list (pair address (pair nat nat)))) ;
590
                                         NIL (pair address (pair nat nat)) ;
591
                                         DIG 7 ;
592
                                         DIG 5 ;
593
                                         GET 3 ;
594
                                         PAIR ;
595
                                         DIG 6 ;
596
                                         PAIR ;
597
                                         CONS ;
598
                                         DIG 4 ;
599
                                         PAIR ;
600
                                         CONS ;
601
                                         TRANSFER_TOKENS ;
602
                                         DIG 2 ;
603
                                         NIL operation ;
604
                                         DIG 2 ;
605
                                         CONS ;
606
                                         DIG 2 ;
607
                                         CONS ;
608
                                         PAIR } } } }
609
                           { DIG 2 ;
610
                             DIG 3 ;
611
                             DROP 2 ;
612
                             DUP 2 ;
613
                             GET 13 ;
614
                             SENDER ;
615
                             COMPARE ;
616
                             NEQ ;
617
                             IF
618
                               { DROP 2 ; PUSH nat 26 ; FAILWITH }
619
                               { UPDATE 25 ; NIL operation ; PAIR } } }
620
                       { DIG 2 ;
621
                         DIG 3 ;
622
                         DROP 2 ;
623
                         IF_LEFT
624
                           { DROP ; NIL operation ; PAIR }
625
                           { PUSH mutez 0 ;
626
                             AMOUNT ;
627
                             COMPARE ;
628
                             GT ;
629
                             IF
630
                               { DROP 2 ; PUSH nat 10 ; FAILWITH }
631
                               { SELF %updatePools ;
632
                                 SELF %fetchLqtTokenPriceInternal ;
633
                                 SWAP ;
634
                                 PUSH mutez 0 ;
635
                                 UNIT ;
636
                                 TRANSFER_TOKENS ;
637
                                 SWAP ;
638
                                 PUSH mutez 0 ;
639
                                 UNIT ;
640
                                 LEFT unit ;
641
                                 DIG 4 ;
642
                                 PAIR ;
643
                                 TRANSFER_TOKENS ;
644
                                 DIG 2 ;
645
                                 NIL operation ;
646
                                 DIG 2 ;
647
                                 CONS ;
648
                                 DIG 2 ;
649
                                 CONS ;
650
                                 PAIR } } } } }
651
               { DIG 2 ;
652
                 DIG 3 ;
653
                 DROP 2 ;
654
                 IF_LEFT
655
                   { IF_LEFT
656
                       { IF_LEFT
657
                           { PUSH mutez 0 ;
658
                             AMOUNT ;
659
                             COMPARE ;
660
                             GT ;
661
                             IF
662
                               { DROP 2 ; PUSH nat 10 ; FAILWITH }
663
                               { SELF %updatePools ;
664
                                 SELF %fetchLqtTokenPriceInternal ;
665
                                 SWAP ;
666
                                 PUSH mutez 0 ;
667
                                 UNIT ;
668
                                 TRANSFER_TOKENS ;
669
                                 SWAP ;
670
                                 PUSH mutez 0 ;
671
                                 UNIT ;
672
                                 RIGHT unit ;
673
                                 DIG 4 ;
674
                                 PAIR ;
675
                                 TRANSFER_TOKENS ;
676
                                 DIG 2 ;
677
                                 NIL operation ;
678
                                 DIG 2 ;
679
                                 CONS ;
680
                                 DIG 2 ;
681
                                 CONS ;
682
                                 PAIR } }
683
                           { UNPAIR ;
684
                             SELF_ADDRESS ;
685
                             SENDER ;
686
                             COMPARE ;
687
                             NEQ ;
688
                             IF
689
                               { DROP 3 ; PUSH nat 36 ; FAILWITH }
690
                               { SWAP ;
691
                                 IF_LEFT
692
                                   { DROP ;
693
                                     DUP 2 ;
694
                                     GET 26 ;
695
                                     UNIT ;
696
                                     VIEW "get_token_price_in_cash" nat ;
697
                                     IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
698
                                     DUP 3 ;
699
                                     GET 7 ;
700
                                     DUP 4 ;
701
                                     GET 5 ;
702
                                     MUL ;
703
                                     MUL ;
704
                                     PUSH nat 1000000 ;
705
                                     DUP 4 ;
706
                                     GET 11 ;
707
                                     DUP 5 ;
708
                                     GET 9 ;
709
                                     MUL ;
710
                                     MUL ;
711
                                     DUP 4 ;
712
                                     GET 17 ;
713
                                     SWAP ;
714
                                     DIG 2 ;
715
                                     ADD ;
716
                                     SWAP ;
717
                                     INT ;
718
                                     SWAP ;
719
                                     NEG ;
720
                                     EDIV ;
721
                                     IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
722
                                     CAR }
723
                                   { DROP ;
724
                                     DUP 2 ;
725
                                     GET 26 ;
726
                                     UNIT ;
727
                                     VIEW "get_cash_price_in_token" nat ;
728
                                     IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
729
                                     PUSH nat 1000000 ;
730
                                     DUP 4 ;
731
                                     GET 7 ;
732
                                     DUP 5 ;
733
                                     GET 5 ;
734
                                     MUL ;
735
                                     MUL ;
736
                                     SWAP ;
737
                                     DUP 4 ;
738
                                     GET 11 ;
739
                                     DUP 5 ;
740
                                     GET 9 ;
741
                                     MUL ;
742
                                     MUL ;
743
                                     DUP 4 ;
744
                                     GET 17 ;
745
                                     SWAP ;
746
                                     DIG 2 ;
747
                                     ADD ;
748
                                     SWAP ;
749
                                     INT ;
750
                                     SWAP ;
751
                                     NEG ;
752
                                     EDIV ;
753
                                     IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
754
                                     CAR } ;
755
                                 ABS ;
756
                                 SWAP ;
757
                                 PUSH mutez 0 ;
758
                                 DIG 2 ;
759
                                 TRANSFER_TOKENS ;
760
                                 SWAP ;
761
                                 NIL operation ;
762
                                 DIG 2 ;
763
                                 CONS ;
764
                                 PAIR } } }
765
                       { IF_LEFT
766
                           { DUP 2 ;
767
                             GET 13 ;
768
                             SENDER ;
769
                             COMPARE ;
770
                             NEQ ;
771
                             IF
772
                               { DROP 2 ; PUSH nat 26 ; FAILWITH }
773
                               { UPDATE 15 ; NIL operation ; PAIR } }
774
                           { PUSH mutez 0 ;
775
                             AMOUNT ;
776
                             COMPARE ;
777
                             GT ;
778
                             IF
779
                               { DROP 2 ; PUSH nat 10 ; FAILWITH }
780
                               { SELF %updatePools ;
781
                                 SELF %removeLiquidityInternal ;
782
                                 SWAP ;
783
                                 PUSH mutez 0 ;
784
                                 UNIT ;
785
                                 TRANSFER_TOKENS ;
786
                                 SENDER ;
787
                                 DIG 3 ;
788
                                 PAIR ;
789
                                 DIG 2 ;
790
                                 PUSH mutez 0 ;
791
                                 DIG 2 ;
792
                                 TRANSFER_TOKENS ;
793
                                 DIG 2 ;
794
                                 NIL operation ;
795
                                 DIG 2 ;
796
                                 CONS ;
797
                                 DIG 2 ;
798
                                 CONS ;
799
                                 PAIR } } } }
800
                   { IF_LEFT
801
                       { IF_LEFT
802
                           { UNPAIR ;
803
                             UNPAIR 5 ;
804
                             PUSH nat 0 ;
805
                             DUP 8 ;
806
                             GET 23 ;
807
                             COMPARE ;
808
                             GT ;
809
                             IF
810
                               { DROP 7 ; PUSH nat 6 ; FAILWITH }
811
                               { DIG 4 ;
812
                                 NOW ;
813
                                 COMPARE ;
814
                                 GE ;
815
                                 IF
816
                                   { DROP 6 ; PUSH nat 3 ; FAILWITH }
817
                                   { SELF_ADDRESS ;
818
                                     SENDER ;
819
                                     COMPARE ;
820
                                     NEQ ;
821
                                     IF
822
                                       { DROP 6 ; PUSH nat 36 ; FAILWITH }
823
                                       { DUP 6 ;
824
                                         GET 17 ;
825
                                         DUP 7 ;
826
                                         GET 9 ;
827
                                         DUP 4 ;
828
                                         MUL ;
829
                                         EDIV ;
830
                                         IF_NONE
831
                                           { PUSH string "DIV by 0" ; FAILWITH }
832
                                           {} ;
833
                                         CAR ;
834
                                         DUP 7 ;
835
                                         GET 17 ;
836
                                         DUP 8 ;
837
                                         GET 5 ;
838
                                         DUP 5 ;
839
                                         MUL ;
840
                                         EDIV ;
841
                                         IF_NONE
842
                                           { PUSH string "DIV by 0" ; FAILWITH }
843
                                           {} ;
844
                                         CAR ;
845
                                         DIG 4 ;
846
                                         DUP 3 ;
847
                                         COMPARE ;
848
                                         LT ;
849
                                         IF
850
                                           { DROP 7 ; PUSH nat 11 ; FAILWITH }
851
                                           { DIG 4 ;
852
                                             DUP 2 ;
853
                                             COMPARE ;
854
                                             LT ;
855
                                             IF
856
                                               { DROP 6 ; PUSH nat 13 ; FAILWITH }
857
                                               { DUP 4 ;
858
                                                 DUP 7 ;
859
                                                 GET 17 ;
860
                                                 SUB ;
861
                                                 ISNAT ;
862
                                                 IF_NONE { PUSH nat 14 ; FAILWITH } {} ;
863
                                                 DUP 2 ;
864
                                                 DUP 8 ;
865
                                                 GET 5 ;
866
                                                 SUB ;
867
                                                 ISNAT ;
868
                                                 IF_NONE { PUSH nat 15 ; FAILWITH } {} ;
869
                                                 DUP 4 ;
870
                                                 DUP 9 ;
871
                                                 GET 9 ;
872
                                                 SUB ;
873
                                                 ISNAT ;
874
                                                 IF_NONE { PUSH nat 16 ; FAILWITH } {} ;
875
                                                 DIG 6 ;
876
                                                 PUSH int 0 ;
877
                                                 SUB ;
878
                                                 DIG 7 ;
879
                                                 DUP 9 ;
880
                                                 GET 19 ;
881
                                                 CONTRACT %mintOrBurn (pair
882
                                                                        (int %quantity)
883
                                                                        (address %target)) ;
884
                                                 IF_NONE { PUSH nat 12 ; FAILWITH } {} ;
885
                                                 PUSH mutez 0 ;
886
                                                 DIG 2 ;
887
                                                 DIG 3 ;
888
                                                 PAIR ;
889
                                                 TRANSFER_TOKENS ;
890
                                                 DIG 4 ;
891
                                                 DUP 7 ;
892
                                                 SELF_ADDRESS ;
893
                                                 DUP 10 ;
894
                                                 DUP ;
895
                                                 CAR ;
896
                                                 CONTRACT %transfer (list (pair address
897
                                                                               (list (pair
898
                                                                                      address
899
                                                                                      (pair
900
                                                                                        nat
901
                                                                                        nat))))) ;
902
                                                 IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
903
                                                 PUSH mutez 0 ;
904
                                                 NIL (pair address
905
                                                           (list (pair address
906
                                                                      (pair nat nat)))) ;
907
                                                 NIL (pair address (pair nat nat)) ;
908
                                                 DIG 7 ;
909
                                                 DIG 5 ;
910
                                                 GET 3 ;
911
                                                 PAIR ;
912
                                                 DIG 6 ;
913
                                                 PAIR ;
914
                                                 CONS ;
915
                                                 DIG 4 ;
916
                                                 PAIR ;
917
                                                 CONS ;
918
                                                 TRANSFER_TOKENS ;
919
                                                 PUSH mutez 1 ;
920
                                                 DIG 6 ;
921
                                                 MUL ;
922
                                                 DIG 6 ;
923
                                                 CONTRACT unit ;
924
                                                 IF_NONE { PUSH nat 35 ; FAILWITH } {} ;
925
                                                 SWAP ;
926
                                                 UNIT ;
927
                                                 TRANSFER_TOKENS ;
928
                                                 DIG 6 ;
929
                                                 DIG 4 ;
930
                                                 UPDATE 9 ;
931
                                                 DIG 5 ;
932
                                                 UPDATE 17 ;
933
                                                 DIG 4 ;
934
                                                 UPDATE 5 ;
935
                                                 NIL operation ;
936
                                                 DIG 2 ;
937
                                                 CONS ;
938
                                                 DIG 2 ;
939
                                                 CONS ;
940
                                                 DIG 2 ;
941
                                                 CONS ;
942
                                                 PAIR } } } } } }
943
                           { DUP 2 ;
944
                             GET 13 ;
945
                             SENDER ;
946
                             COMPARE ;
947
                             NEQ ;
948
                             IF
949
                               { DROP 2 ; PUSH nat 26 ; FAILWITH }
950
                               { SWAP ; NIL operation ; DIG 2 ; SET_DELEGATE ; CONS ; PAIR } } }
951
                       { IF_LEFT
952
                           { PUSH address "tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU" ;
953
                             DUP 3 ;
954
                             GET 19 ;
955
                             COMPARE ;
956
                             NEQ ;
957
                             IF
958
                               { DROP 2 ; PUSH nat 24 ; FAILWITH }
959
                               { UPDATE 19 ; NIL operation ; PAIR } }
960
                           { DUP 2 ;
961
                             GET 13 ;
962
                             SENDER ;
963
                             COMPARE ;
964
                             NEQ ;
965
                             IF
966
                               { DROP 2 ; PUSH nat 26 ; FAILWITH }
967
                               { UPDATE 21 ; NIL operation ; PAIR } } } } } }
968
           { IF_LEFT
969
               { IF_LEFT
970
                   { DIG 2 ;
971
                     DIG 3 ;
972
                     DROP 2 ;
973
                     IF_LEFT
974
                       { DUP 2 ;
975
                         GET 13 ;
976
                         SENDER ;
977
                         COMPARE ;
978
                         NEQ ;
979
                         IF
980
                           { DROP 2 ; PUSH nat 26 ; FAILWITH }
981
                           { UPDATE 26 ; NIL operation ; PAIR } }
982
                       { PUSH mutez 0 ;
983
                         AMOUNT ;
984
                         COMPARE ;
985
                         GT ;
986
                         IF
987
                           { DROP 2 ; PUSH nat 10 ; FAILWITH }
988
                           { SELF %updatePools ;
989
                             SELF %tokenToCashInternal ;
990
                             SWAP ;
991
                             PUSH mutez 0 ;
992
                             UNIT ;
993
                             TRANSFER_TOKENS ;
994
                             SENDER ;
995
                             DIG 3 ;
996
                             PAIR ;
997
                             DIG 2 ;
998
                             PUSH mutez 0 ;
999
                             DIG 2 ;
1000
                             TRANSFER_TOKENS ;
1001
                             DIG 2 ;
1002
                             NIL operation ;
1003
                             DIG 2 ;
1004
                             CONS ;
1005
                             DIG 2 ;
1006
                             CONS ;
1007
                             PAIR } } }
1008
                   { IF_LEFT
1009
                       { UNPAIR ;
1010
                         UNPAIR 4 ;
1011
                         PUSH nat 0 ;
1012
                         DUP 7 ;
1013
                         GET 23 ;
1014
                         COMPARE ;
1015
                         GT ;
1016
                         IF
1017
                           { DROP 8 ; PUSH nat 6 ; FAILWITH }
1018
                           { DIG 3 ;
1019
                             NOW ;
1020
                             COMPARE ;
1021
                             GE ;
1022
                             IF
1023
                               { DROP 7 ; PUSH nat 3 ; FAILWITH }
1024
                               { SELF_ADDRESS ;
1025
                                 SENDER ;
1026
                                 COMPARE ;
1027
                                 NEQ ;
1028
                                 IF
1029
                                   { DROP 7 ; PUSH nat 36 ; FAILWITH }
1030
                                   { DUP 5 ;
1031
                                     GET 26 ;
1032
                                     UNIT ;
1033
                                     VIEW "get_token_price_in_cash" nat ;
1034
                                     IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
1035
                                     PUSH nat 1000000 ;
1036
                                     DUP 7 ;
1037
                                     GET 11 ;
1038
                                     MUL ;
1039
                                     SWAP ;
1040
                                     DUP 7 ;
1041
                                     GET 7 ;
1042
                                     MUL ;
1043
                                     DUP ;
1044
                                     DUP 8 ;
1045
                                     GET 5 ;
1046
                                     MUL ;
1047
                                     DUP 3 ;
1048
                                     DUP 9 ;
1049
                                     GET 9 ;
1050
                                     MUL ;
1051
                                     DUP ;
1052
                                     DUP 3 ;
1053
                                     PAIR ;
1054
                                     DIG 11 ;
1055
                                     SWAP ;
1056
                                     EXEC ;
1057
                                     CAR ;
1058
                                     DIG 4 ;
1059
                                     DIG 2 ;
1060
                                     DIG 3 ;
1061
                                     PAIR ;
1062
                                     DIG 2 ;
1063
                                     PUSH int 5 ;
1064
                                     PAIR ;
1065
                                     PUSH nat 0 ;
1066
                                     DIG 4 ;
1067
                                     DUP 7 ;
1068
                                     MUL ;
1069
                                     PAIR ;
1070
                                     PAIR ;
1071
                                     PAIR ;
1072
                                     DIG 7 ;
1073
                                     SWAP ;
1074
                                     EXEC ;
1075
                                     EDIV ;
1076
                                     IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1077
                                     CAR ;
1078
                                     DUP 6 ;
1079
                                     GET 25 ;
1080
                                     CDR ;
1081
                                     DUP 2 ;
1082
                                     DUP 8 ;
1083
                                     GET 25 ;
1084
                                     CAR ;
1085
                                     MUL ;
1086
                                     EDIV ;
1087
                                     IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1088
                                     CAR ;
1089
                                     DIG 4 ;
1090
                                     DUP 2 ;
1091
                                     COMPARE ;
1092
                                     LT ;
1093
                                     IF { DROP ; PUSH nat 8 ; FAILWITH } {} ;
1094
                                     PUSH int 2 ;
1095
                                     DUP 2 ;
1096
                                     DIG 3 ;
1097
                                     SUB ;
1098
                                     EDIV ;
1099
                                     IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1100
                                     CAR ;
1101
                                     ISNAT ;
1102
                                     IF_NONE { PUSH nat 1 ; FAILWITH } {} ;
1103
                                     PUSH mutez 1 ;
1104
                                     DUP 3 ;
1105
                                     MUL ;
1106
                                     PUSH mutez 1 ;
1107
                                     DUP 3 ;
1108
                                     MUL ;
1109
                                     DUP 6 ;
1110
                                     SELF_ADDRESS ;
1111
                                     DIG 8 ;
1112
                                     DUP 10 ;
1113
                                     DUP ;
1114
                                     CAR ;
1115
                                     CONTRACT %transfer (list (pair address
1116
                                                                   (list (pair address
1117
                                                                              (pair nat
1118
                                                                                    nat))))) ;
1119
                                     IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
1120
                                     PUSH mutez 0 ;
1121
                                     NIL (pair address
1122
                                               (list (pair address (pair nat nat)))) ;
1123
                                     NIL (pair address (pair nat nat)) ;
1124
                                     DIG 7 ;
1125
                                     DIG 5 ;
1126
                                     GET 3 ;
1127
                                     PAIR ;
1128
                                     DIG 6 ;
1129
                                     PAIR ;
1130
                                     CONS ;
1131
                                     DIG 4 ;
1132
                                     PAIR ;
1133
                                     CONS ;
1134
                                     TRANSFER_TOKENS ;
1135
                                     DIG 5 ;
1136
                                     CONTRACT unit ;
1137
                                     IF_NONE { PUSH nat 35 ; FAILWITH } {} ;
1138
                                     DIG 3 ;
1139
                                     UNIT ;
1140
                                     TRANSFER_TOKENS ;
1141
                                     DIG 3 ;
1142
                                     DIG 4 ;
1143
                                     ADD ;
1144
                                     DUP 6 ;
1145
                                     GET 9 ;
1146
                                     SUB ;
1147
                                     ISNAT ;
1148
                                     IF_NONE { PUSH nat 1 ; FAILWITH } {} ;
1149
                                     DUP 6 ;
1150
                                     DIG 5 ;
1151
                                     DIG 6 ;
1152
                                     GET 5 ;
1153
                                     ADD ;
1154
                                     UPDATE 5 ;
1155
                                     SWAP ;
1156
                                     UPDATE 9 ;
1157
                                     PUSH mutez 0 ;
1158
                                     DUP 5 ;
1159
                                     COMPARE ;
1160
                                     GT ;
1161
                                     IF
1162
                                       { DUP ;
1163
                                         GET 21 ;
1164
                                         CONTRACT unit ;
1165
                                         IF_NONE { PUSH nat 35 ; FAILWITH } {} ;
1166
                                         DIG 4 ;
1167
                                         UNIT ;
1168
                                         TRANSFER_TOKENS ;
1169
                                         SWAP ;
1170
                                         NIL operation ;
1171
                                         DIG 2 ;
1172
                                         CONS }
1173
                                       { DIG 3 ; DROP ; NIL operation } ;
1174
                                     DIG 2 ;
1175
                                     CONS ;
1176
                                     DIG 2 ;
1177
                                     CONS ;
1178
                                     PAIR } } } }
1179
                       { DIG 2 ;
1180
                         DIG 3 ;
1181
                         DROP 3 ;
1182
                         SELF_ADDRESS ;
1183
                         SENDER ;
1184
                         COMPARE ;
1185
                         NEQ ;
1186
                         SOURCE ;
1187
                         SENDER ;
1188
                         COMPARE ;
1189
                         NEQ ;
1190
                         AND ;
1191
                         IF
1192
                           { DROP ; PUSH nat 25 ; FAILWITH }
1193
                           { PUSH mutez 0 ;
1194
                             AMOUNT ;
1195
                             COMPARE ;
1196
                             GT ;
1197
                             IF
1198
                               { DROP ; PUSH nat 10 ; FAILWITH }
1199
                               { SELF %updateTokenPoolInternal ;
1200
                                 DUP 2 ;
1201
                                 CAR ;
1202
                                 CONTRACT %balance_of (pair (list (pair address nat))
1203
                                                            (contract (list (pair
1204
                                                                            (pair
1205
                                                                              address
1206
                                                                              nat)
1207
                                                                            nat)))) ;
1208
                                 IF_NONE { PUSH nat 28 ; FAILWITH } {} ;
1209
                                 PUSH mutez 0 ;
1210
                                 DIG 2 ;
1211
                                 NIL (pair address nat) ;
1212
                                 DUP 5 ;
1213
                                 GET 3 ;
1214
                                 SELF_ADDRESS ;
1215
                                 PAIR ;
1216
                                 CONS ;
1217
                                 PAIR ;
1218
                                 TRANSFER_TOKENS ;
1219
                                 SWAP ;
1220
                                 BALANCE ;
1221
                                 PUSH mutez 1 ;
1222
                                 SWAP ;
1223
                                 EDIV ;
1224
                                 IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1225
                                 CAR ;
1226
                                 UPDATE 9 ;
1227
                                 PUSH nat 1 ;
1228
                                 UPDATE 23 ;
1229
                                 NIL operation ;
1230
                                 DIG 2 ;
1231
                                 CONS ;
1232
                                 PAIR } } } } }
1233
               { DIG 2 ;
1234
                 DIG 3 ;
1235
                 DROP 2 ;
1236
                 DUP 2 ;
1237
                 CAR ;
1238
                 SENDER ;
1239
                 COMPARE ;
1240
                 NEQ ;
1241
                 PUSH nat 0 ;
1242
                 DUP 4 ;
1243
                 GET 23 ;
1244
                 COMPARE ;
1245
                 EQ ;
1246
                 OR ;
1247
                 IF
1248
                   { DROP 2 ; PUSH nat 29 ; FAILWITH }
1249
                   { IF_CONS { SWAP ; DROP ; CDR } { PUSH nat 30 ; FAILWITH } ;
1250
                     PUSH nat 1 ;
1251
                     DUP 3 ;
1252
                     GET 23 ;
1253
                     SUB ;
1254
                     ISNAT ;
1255
                     IF_NONE { PUSH nat 38 ; FAILWITH } {} ;
1256
                     DUG 2 ;
1257
                     UPDATE 5 ;
1258
                     SWAP ;
1259
                     UPDATE 23 ;
1260
                     NIL operation ;
1261
                     PAIR } } } } ;
1262
  view "tokensPool" unit nat { CDR ; GET 5 } ;
1263
  view "cashPool" unit nat { CDR ; GET 9 } ;
1264
  view "liquidityTotal" unit nat { CDR ; GET 17 } ;
1265
  view "lazyLqtPriceInCash" unit nat
1266
        { CDR ;
1267
          DUP ;
1268
          GET 26 ;
1269
          UNIT ;
1270
          VIEW "get_token_price_in_cash" nat ;
1271
          IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
1272
          DUP 2 ;
1273
          GET 7 ;
1274
          DUP 3 ;
1275
          GET 5 ;
1276
          MUL ;
1277
          MUL ;
1278
          PUSH nat 1000000 ;
1279
          DUP 3 ;
1280
          GET 11 ;
1281
          DUP 4 ;
1282
          GET 9 ;
1283
          MUL ;
1284
          MUL ;
1285
          DIG 2 ;
1286
          GET 17 ;
1287
          SWAP ;
1288
          DIG 2 ;
1289
          ADD ;
1290
          SWAP ;
1291
          INT ;
1292
          SWAP ;
1293
          NEG ;
1294
          EDIV ;
1295
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1296
          CAR ;
1297
          ABS } ;
1298
  view "lazyLqtPriceInToken" unit nat
1299
        { CDR ;
1300
          DUP ;
1301
          GET 26 ;
1302
          UNIT ;
1303
          VIEW "get_cash_price_in_token" nat ;
1304
          IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
1305
          PUSH nat 1000000 ;
1306
          DUP 3 ;
1307
          GET 7 ;
1308
          DUP 4 ;
1309
          GET 5 ;
1310
          MUL ;
1311
          MUL ;
1312
          SWAP ;
1313
          DUP 3 ;
1314
          GET 11 ;
1315
          DUP 4 ;
1316
          GET 9 ;
1317
          MUL ;
1318
          MUL ;
1319
          DIG 2 ;
1320
          GET 17 ;
1321
          SWAP ;
1322
          DIG 2 ;
1323
          ADD ;
1324
          SWAP ;
1325
          INT ;
1326
          SWAP ;
1327
          NEG ;
1328
          EDIV ;
1329
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1330
          CAR ;
1331
          ABS } }