BCD

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