BCD

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