BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Hardware Store
FA2Ledger
operations (196)Storage Code Interact Tokens Metadata Fork Statistics Details
Latest
​x
794
1438
 
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 420 ; 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 426 ; 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 427 ; 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 236 ; 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 261 ; 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 279 ; FAILWITH } {} ;
523
                                             NONE nat ;
524
                                             SWAP ;
525
                                             DUP ;
526
                                             DUG 2 ;
527
                                             NONE nat ;
528
                                             MEM ;
529
                                             IF
530
                                               { DIG 3 ; DROP ; DIG 3 ; DROP }
531
                                               { DROP ;
532
                                                 DIG 2 ;
533
                                                 DROP ;
534
                                                 DIG 2 ;
535
                                                 DROP ;
536
                                                 SWAP ;
537
                                                 DUP ;
538
                                                 DUG 2 ;
539
                                                 CDR ;
540
                                                 SOME ;
541
                                                 SWAP ;
542
                                                 DUP ;
543
                                                 DUG 2 ;
544
                                                 SWAP ;
545
                                                 DUP ;
546
                                                 DUG 2 ;
547
                                                 MEM ;
548
                                                 IF
549
                                                   {}
550
                                                   { PUSH string "OE_REDEEM_MISTMATCH_ID" ;
551
                                                     FAILWITH } } ;
552
                                             DIG 5 ;
553
                                             DUP 4 ;
554
                                             CAR ;
555
                                             CONTRACT %transfer (list (pair
556
                                                                       (address %from_)
557
                                                                       (list %txs (pair
558
                                                                                   (address %to_)
559
                                                                                   (pair
560
                                                                                     (nat %token_id)
561
                                                                                     (nat %amount)))))) ;
562
                                             IF_NONE { PUSH int 490 ; FAILWITH } {} ;
563
                                             PUSH mutez 0 ;
564
                                             NIL (pair address
565
                                                       (list (pair address (pair nat nat)))) ;
566
                                             NIL (pair address (pair nat nat)) ;
567
                                             DIG 6 ;
568
                                             DIG 6 ;
569
                                             GET ;
570
                                             IF_NONE { PUSH int 294 ; FAILWITH } {} ;
571
                                             DIG 6 ;
572
                                             CDR ;
573
                                             PUSH address 0x0000b28066369a8ed09ba9d3d47f19598440266013f0 ;
574
                                             PAIR 3 ;
575
                                             CONS ;
576
                                             SENDER ;
577
                                             PAIR ;
578
                                             CONS ;
579
                                             TRANSFER_TOKENS ;
580
                                             CONS ;
581
                                             DUG 2 }
582
                                           { PUSH string "OE_MISSING_BURN" ; FAILWITH } } ;
583
                                  PUSH nat 1 ;
584
                                  ADD ;
585
                                  DUP ;
586
                                  DUP 3 ;
587
                                  COMPARE ;
588
                                  GT } ;
589
                           DROP 2 ;
590
                           SWAP ;
591
                           DROP }
592
                         { NIL operation } ;
593
                       PUSH mutez 0 ;
594
                       DUP 5 ;
595
                       GET 3 ;
596
                       CDR ;
597
                       COMPARE ;
598
                       GT ;
599
                       IF
600
                         { DUP 4 ;
601
                           GET 3 ;
602
                           CDR ;
603
                           DUP 6 ;
604
                           CAR ;
605
                           CAR ;
606
                           MUL ;
607
                           AMOUNT ;
608
                           COMPARE ;
609
                           EQ ;
610
                           IF {} { PUSH string "OE_WRONG_AMOUNT" ; FAILWITH } ;
611
                           DUP 4 ;
612
                           GET 5 ;
613
                           CAR ;
614
                           ITER { DUP 5 ;
615
                                  GET 5 ;
616
                                  CDR ;
617
                                  SWAP ;
618
                                  DUP ;
619
                                  DUG 2 ;
620
                                  CDR ;
621
                                  AMOUNT ;
622
                                  MUL ;
623
                                  EDIV ;
624
                                  IF_NONE { PUSH int 306 ; FAILWITH } {} ;
625
                                  CAR ;
626
                                  DUP ;
627
                                  PUSH mutez 0 ;
628
                                  COMPARE ;
629
                                  LT ;
630
                                  IF
631
                                    { DUG 2 ;
632
                                      CAR ;
633
                                      CONTRACT unit ;
634
                                      IF_NONE { PUSH int 310 ; FAILWITH } {} ;
635
                                      DIG 2 ;
636
                                      UNIT ;
637
                                      TRANSFER_TOKENS ;
638
                                      CONS }
639
                                    { DROP 2 } } }
640
                         {} ;
641
                       DUP 4 ;
642
                       CAR ;
643
                       GET 3 ;
644
                       IF_NONE
645
                         { DIG 2 ; DROP ; DIG 2 ; DROP }
646
                         { DIG 4 ;
647
                           DROP ;
648
                           DUP ;
649
                           DUG 2 ;
650
                           CAR ;
651
                           CONTRACT %enforce_conditions (list (pair
652
                                                               (pair (nat %amount)
653
                                                                     (address %claimer))
654
                                                               (pair
655
                                                                 (bytes %condition_id)
656
                                                                 (pair
657
                                                                   (option %extra bytes)
658
                                                                   (pair %token
659
                                                                     (address %address)
660
                                                                     (nat %token_id)))))) ;
661
                           IF_NONE { PUSH int 27 ; FAILWITH } {} ;
662
                           PUSH mutez 0 ;
663
                           NIL (pair (pair nat address)
664
                                     (pair bytes
665
                                           (pair (option bytes) (pair address nat)))) ;
666
                           DUP 8 ;
667
                           GET 6 ;
668
                           SELF_ADDRESS ;
669
                           PAIR ;
670
                           DUP 9 ;
671
                           GET 3 ;
672
                           PAIR ;
673
                           DIG 5 ;
674
                           CDR ;
675
                           PAIR ;
676
                           DIG 6 ;
677
                           DUP 8 ;
678
                           CAR ;
679
                           CAR ;
680
                           PAIR ;
681
                           PAIR ;
682
                           CONS ;
683
                           TRANSFER_TOKENS ;
684
                           CONS } ;
685
                       DUP 4 ;
686
                       UNPAIR ;
687
                       UNPAIR ;
688
                       SWAP ;
689
                       UNPAIR ;
690
                       SWAP ;
691
                       UNPAIR ;
692
                       SWAP ;
693
                       DUP 8 ;
694
                       CAR ;
695
                       CAR ;
696
                       DIG 9 ;
697
                       CAR ;
698
                       GET 6 ;
699
                       DUP 9 ;
700
                       GET ;
701
                       IF_NONE { PUSH nat 0 } {} ;
702
                       ADD ;
703
                       SOME ;
704
                       DIG 7 ;
705
                       UPDATE ;
706
                       SWAP ;
707
                       PAIR ;
708
                       SWAP ;
709
                       PAIR ;
710
                       SWAP ;
711
                       PAIR ;
712
                       PAIR ;
713
                       DUP ;
714
                       GET 7 ;
715
                       DUP ;
716
                       DUP 5 ;
717
                       GET 6 ;
718
                       DUP ;
719
                       DUG 2 ;
720
                       GET ;
721
                       IF_NONE { PUSH int 333 ; FAILWITH } {} ;
722
                       DUP 6 ;
723
                       CAR ;
724
                       CAR ;
725
                       ADD ;
726
                       SOME ;
727
                       SWAP ;
728
                       UPDATE ;
729
                       UPDATE 7 ;
730
                       DUP ;
731
                       DUG 3 ;
732
                       GET 3 ;
733
                       CAR ;
734
                       DUP 3 ;
735
                       GET 6 ;
736
                       MEM ;
737
                       IF
738
                         { DIG 2 ;
739
                           UNPAIR ;
740
                           SWAP ;
741
                           UNPAIR ;
742
                           UNPAIR ;
743
                           DUP ;
744
                           DIG 6 ;
745
                           GET 6 ;
746
                           DUP ;
747
                           DUG 2 ;
748
                           GET ;
749
                           IF_NONE { PUSH int 339 ; FAILWITH } {} ;
750
                           PUSH bool True ;
751
                           UPDATE 2 ;
752
                           SOME ;
753
                           SWAP ;
754
                           UPDATE ;
755
                           PAIR ;
756
                           PAIR ;
757
                           SWAP ;
758
                           PAIR ;
759
                           SWAP }
760
                         { DIG 2 ;
761
                           UNPAIR ;
762
                           SWAP ;
763
                           UNPAIR ;
764
                           UNPAIR ;
765
                           PUSH (option (pair bool bool)) (Some (Pair False True)) ;
766
                           DIG 6 ;
767
                           GET 6 ;
768
                           UPDATE ;
769
                           PAIR ;
770
                           PAIR ;
771
                           SWAP ;
772
                           PAIR ;
773
                           SWAP } } }
774
                 { IF_LEFT
775
                     { SWAP ;
776
                       DUP ;
777
                       DUG 2 ;
778
                       CAR ;
779
                       CAR ;
780
                       CAR ;
781
                       SENDER ;
782
                       COMPARE ;
783
                       EQ ;
784
                       IF
785
                         { PUSH bool True }
786
                         { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
787
                       IF {} { PUSH string "FA2_NOT_MANAGER" ; FAILWITH } ;
788
                       PUSH nat 0 ;
789
                       DUP 3 ;
790
                       GET 7 ;
791
                       DUP 3 ;
792
                       CAR ;
793
                       GET ;
794
                       IF_NONE { PUSH int 179 ; FAILWITH } {} ;
795
                       COMPARE ;
796
                       EQ ;
797
                       IF {} { PUSH string "OE_TOKEN_EXISTS" ; FAILWITH } ;
798
                       DUP ;
799
                       GET 9 ;
800
                       ITER { DUP ;
801
                              SIZE ;
802
                              PUSH nat 0 ;
803
                              COMPARE ;
804
                              LT ;
805
                              IF {} { PUSH string "OE_NO_BURN_OPT" ; FAILWITH } ;
806
                              DUP ;
807
                              ITER { CDR ;
808
                                     SIZE ;
809
                                     PUSH nat 0 ;
810
                                     COMPARE ;
811
                                     LT ;
812
                                     IF
813
                                       {}
814
                                       { PUSH string "OE_BURN_OPT_EMPTY" ; FAILWITH } } ;
815
                              DROP } ;
816
                       SWAP ;
817
                       DUP ;
818
                       DUG 2 ;
819
                       GET 8 ;
820
                       SWAP ;
821
                       DUP ;
822
                       DUG 2 ;
823
                       CAR ;
824
                       MEM ;
825
                       IF {} { PUSH string "OE_TOKEN_N_EXISTS" ; FAILWITH } ;
826
                       DUP ;
827
                       GET 15 ;
828
                       CDR ;
829
                       PUSH nat 0 ;
830
                       COMPARE ;
831
                       LT ;
832
                       IF {} { PUSH string "OE_NO_TOTAL" ; FAILWITH } ;
833
                       PUSH nat 0 ;
834
                       SWAP ;
835
                       DUP ;
836
                       DUG 2 ;
837
                       GET 15 ;
838
                       CAR ;
839
                       ITER { CDR ; ADD } ;
840
                       SWAP ;
841
                       DUP ;
842
                       DUG 2 ;
843
                       GET 15 ;
844
                       CDR ;
845
                       COMPARE ;
846
                       EQ ;
847
                       IF {} { PUSH string "OE_SHARE_MISMATCH" ; FAILWITH } ;
848
                       DUP ;
849
                       GET 3 ;
850
                       SWAP ;
851
                       DUP ;
852
                       DUG 2 ;
853
                       GET 5 ;
854
                       SUB ;
855
                       PUSH int 300 ;
856
                       SWAP ;
857
                       COMPARE ;
858
                       GE ;
859
                       IF {} { PUSH string "OE_AT_LEAST_300" ; FAILWITH } ;
860
                       SWAP ;
861
                       UNPAIR ;
862
                       UNPAIR ;
863
                       SWAP ;
864
                       UNPAIR ;
865
                       DIG 4 ;
866
                       DUP ;
867
                       GET 3 ;
868
                       SWAP ;
869
                       DUP ;
870
                       DUG 6 ;
871
                       GET 15 ;
872
                       PAIR ;
873
                       DIG 5 ;
874
                       DUP ;
875
                       GET 7 ;
876
                       SWAP ;
877
                       DUP ;
878
                       DUG 7 ;
879
                       GET 11 ;
880
                       PAIR ;
881
                       PAIR ;
882
                       DIG 5 ;
883
                       DUP ;
884
                       GET 5 ;
885
                       SWAP ;
886
                       DUP ;
887
                       DUG 7 ;
888
                       GET 16 ;
889
                       PAIR ;
890
                       DIG 6 ;
891
                       DUP ;
892
                       GET 9 ;
893
                       SWAP ;
894
                       DUP ;
895
                       DUG 8 ;
896
                       GET 13 ;
897
                       PAIR ;
898
                       PAIR ;
899
                       PAIR ;
900
                       SOME ;
901
                       DIG 5 ;
902
                       CAR ;
903
                       UPDATE ;
904
                       PAIR ;
905
                       SWAP ;
906
                       PAIR ;
907
                       PAIR }
908
                     { SWAP ;
909
                       DUP ;
910
                       DUG 2 ;
911
                       CAR ;
912
                       CAR ;
913
                       CAR ;
914
                       SENDER ;
915
                       COMPARE ;
916
                       EQ ;
917
                       IF
918
                         { PUSH bool True }
919
                         { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
920
                       IF {} { PUSH string "FA2_NOT_MANAGER" ; FAILWITH } ;
921
                       PUSH nat 1 ;
922
                       DUP 3 ;
923
                       CAR ;
924
                       GET 5 ;
925
                       ADD ;
926
                       DIG 2 ;
927
                       DUP ;
928
                       GET 8 ;
929
                       DIG 3 ;
930
                       DUP 4 ;
931
                       PAIR ;
932
                       SOME ;
933
                       DUP 4 ;
934
                       UPDATE ;
935
                       UPDATE 8 ;
936
                       DUP ;
937
                       GET 7 ;
938
                       PUSH (option nat) (Some 0) ;
939
                       DIG 3 ;
940
                       UPDATE ;
941
                       UPDATE 7 ;
942
                       UNPAIR ;
943
                       UNPAIR ;
944
                       SWAP ;
945
                       UNPAIR ;
946
                       SWAP ;
947
                       UNPAIR ;
948
                       PUSH nat 1 ;
949
                       ADD ;
950
                       PAIR ;
951
                       SWAP ;
952
                       PAIR ;
953
                       SWAP ;
954
                       PAIR ;
955
                       PAIR } ;
956
                   NIL operation } } }
957
         { IF_LEFT
958
             { IF_LEFT
959
                 { IF_LEFT
960
                     { SWAP ;
961
                       DUP ;
962
                       DUG 2 ;
963
                       CAR ;
964
                       CAR ;
965
                       CAR ;
966
                       SENDER ;
967
                       COMPARE ;
968
                       EQ ;
969
                       IF
970
                         { PUSH bool True }
971
                         { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
972
                       IF {} { PUSH string "FA2_NOT_MANAGER" ; FAILWITH } ;
973
                       SWAP ;
974
                       DUP ;
975
                       DUG 2 ;
976
                       GET 8 ;
977
                       SWAP ;
978
                       DUP ;
979
                       DUG 2 ;
980
                       GET 4 ;
981
                       MEM ;
982
                       IF {} { PUSH string "OE_TOKEN_MISSING" ; FAILWITH } ;
983
                       SWAP ;
984
                       DUP ;
985
                       DUG 2 ;
986
                       GET 3 ;
987
                       CAR ;
988
                       SWAP ;
989
                       DUP ;
990
                       DUG 2 ;
991
                       GET 4 ;
992
                       GET ;
993
                       IF_NONE { PUSH (pair bool bool) (Pair False False) } {} ;
994
                       DUP ;
995
                       CAR ;
996
                       IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; CAR } ;
997
                       UPDATE 1 ;
998
                       DUP ;
999
                       CDR ;
1000
                       IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; GET 3 } ;
1001
                       UPDATE 2 ;
1002
                       DIG 2 ;
1003
                       UNPAIR ;
1004
                       SWAP ;
1005
                       UNPAIR ;
1006
                       UNPAIR ;
1007
                       DIG 4 ;
1008
                       SOME ;
1009
                       DIG 5 ;
1010
                       GET 4 ;
1011
                       UPDATE ;
1012
                       PAIR ;
1013
                       PAIR ;
1014
                       SWAP ;
1015
                       PAIR }
1016
                     { SWAP ;
1017
                       DUP ;
1018
                       DUG 2 ;
1019
                       CAR ;
1020
                       CAR ;
1021
                       CAR ;
1022
                       SENDER ;
1023
                       COMPARE ;
1024
                       EQ ;
1025
                       IF
1026
                         { PUSH bool True }
1027
                         { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
1028
                       IF {} { PUSH string "FA2_NOT_MANAGER" ; FAILWITH } ;
1029
                       SWAP ;
1030
                       DUP ;
1031
                       DUG 2 ;
1032
                       GET 8 ;
1033
                       SWAP ;
1034
                       DUP ;
1035
                       DUG 2 ;
1036
                       CDR ;
1037
                       MEM ;
1038
                       IF {} { PUSH string "OE_TOKEN_N_EXTIST" ; FAILWITH } ;
1039
                       SWAP ;
1040
                       DUP ;
1041
                       DUG 2 ;
1042
                       GET 3 ;
1043
                       CAR ;
1044
                       SWAP ;
1045
                       DUP ;
1046
                       DUG 2 ;
1047
                       CDR ;
1048
                       MEM ;
1049
                       IF
1050
                         { SWAP ;
1051
                           DUP ;
1052
                           DUG 2 ;
1053
                           GET 3 ;
1054
                           CAR ;
1055
                           SWAP ;
1056
                           DUP ;
1057
                           DUG 2 ;
1058
                           CDR ;
1059
                           GET ;
1060
                           IF_NONE { PUSH int 452 ; FAILWITH } {} ;
1061
                           CDR ;
1062
                           NOT }
1063
                         { PUSH bool True } ;
1064
                       IF {} { PUSH string "OE_MINT_LOCKED" ; FAILWITH } ;
1065
                       SWAP ;
1066
                       DUP ;
1067
                       DUG 2 ;
1068
                       CAR ;
1069
                       GET 3 ;
1070
                       SWAP ;
1071
                       DUP ;
1072
                       DUG 2 ;
1073
                       CDR ;
1074
                       MEM ;
1075
                       IF
1076
                         { NOW ;
1077
                           DUP 3 ;
1078
                           CAR ;
1079
                           GET 3 ;
1080
                           DUP 3 ;
1081
                           CDR ;
1082
                           GET ;
1083
                           IF_NONE { PUSH int 459 ; FAILWITH } {} ;
1084
                           CAR ;
1085
                           GET 4 ;
1086
                           COMPARE ;
1087
                           LT }
1088
                         { PUSH bool True } ;
1089
                       IF {} { PUSH string "OE_TOKEN_CONFIGURED_FOR_SALE" ; FAILWITH } ;
1090
                       PUSH nat 0 ;
1091
                       SWAP ;
1092
                       DUP ;
1093
                       DUG 2 ;
1094
                       CAR ;
1095
                       ITER { DUP 4 ;
1096
                              UNPAIR ;
1097
                              UNPAIR ;
1098
                              SWAP ;
1099
                              UNPAIR ;
1100
                              SWAP ;
1101
                              UNPAIR ;
1102
                              SWAP ;
1103
                              DUP 6 ;
1104
                              CAR ;
1105
                              DIG 9 ;
1106
                              CAR ;
1107
                              GET 6 ;
1108
                              DUP 10 ;
1109
                              CDR ;
1110
                              DUP 9 ;
1111
                              CDR ;
1112
                              PAIR ;
1113
                              GET ;
1114
                              IF_NONE { PUSH nat 0 } {} ;
1115
                              ADD ;
1116
                              SOME ;
1117
                              DUP 9 ;
1118
                              CDR ;
1119
                              DUP 8 ;
1120
                              CDR ;
1121
                              PAIR ;
1122
                              UPDATE ;
1123
                              SWAP ;
1124
                              PAIR ;
1125
                              SWAP ;
1126
                              PAIR ;
1127
                              SWAP ;
1128
                              PAIR ;
1129
                              PAIR ;
1130
                              DUG 3 ;
1131
                              CAR ;
1132
                              ADD } ;
1133
                       DUP 3 ;
1134
                       GET 7 ;
1135
                       DUP 3 ;
1136
                       CDR ;
1137
                       GET ;
1138
                       IF_NONE { PUSH nat 0 } {} ;
1139
                       DIG 3 ;
1140
                       DUP ;
1141
                       GET 7 ;
1142
                       DIG 3 ;
1143
                       DIG 3 ;
1144
                       ADD ;
1145
                       SOME ;
1146
                       DIG 3 ;
1147
                       CDR ;
1148
                       UPDATE ;
1149
                       UPDATE 7 } }
1150
                 { IF_LEFT
1151
                     { SWAP ;
1152
                       DUP ;
1153
                       DUG 2 ;
1154
                       CAR ;
1155
                       CAR ;
1156
                       CAR ;
1157
                       SENDER ;
1158
                       COMPARE ;
1159
                       EQ ;
1160
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
1161
                       SWAP ;
1162
                       UNPAIR ;
1163
                       SWAP ;
1164
                       UNPAIR ;
1165
                       UNPAIR ;
1166
                       SWAP ;
1167
                       UNPAIR ;
1168
                       NONE unit ;
1169
                       DIG 6 ;
1170
                       UPDATE ;
1171
                       PAIR ;
1172
                       SWAP ;
1173
                       PAIR ;
1174
                       PAIR ;
1175
                       SWAP ;
1176
                       PAIR }
1177
                     { SWAP ;
1178
                       DUP ;
1179
                       DUG 2 ;
1180
                       CAR ;
1181
                       CAR ;
1182
                       CAR ;
1183
                       SENDER ;
1184
                       COMPARE ;
1185
                       EQ ;
1186
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
1187
                       SWAP ;
1188
                       UNPAIR ;
1189
                       UNPAIR ;
1190
                       CDR ;
1191
                       DIG 3 ;
1192
                       PAIR ;
1193
                       PAIR ;
1194
                       PAIR } } }
1195
             { IF_LEFT
1196
                 { IF_LEFT
1197
                     { SWAP ;
1198
                       DUP ;
1199
                       DUG 2 ;
1200
                       CAR ;
1201
                       CAR ;
1202
                       CAR ;
1203
                       SENDER ;
1204
                       COMPARE ;
1205
                       EQ ;
1206
                       IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ;
1207
                       SWAP ;
1208
                       UNPAIR ;
1209
                       SWAP ;
1210
                       UNPAIR ;
1211
                       UNPAIR ;
1212
                       SWAP ;
1213
                       CAR ;
1214
                       DIG 4 ;
1215
                       SWAP ;
1216
                       PAIR ;
1217
                       SWAP ;
1218
                       PAIR ;
1219
                       PAIR ;
1220
                       SWAP ;
1221
                       PAIR }
1222
                     { DUP ;
1223
                       ITER { DUP ;
1224
                              CDR ;
1225
                              ITER { DUP 4 ;
1226
                                     GET 8 ;
1227
                                     SWAP ;
1228
                                     DUP ;
1229
                                     DUG 2 ;
1230
                                     GET 3 ;
1231
                                     MEM ;
1232
                                     IF
1233
                                       {}
1234
                                       { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
1235
                                     SWAP ;
1236
                                     DUP ;
1237
                                     DUG 2 ;
1238
                                     CAR ;
1239
                                     SENDER ;
1240
                                     COMPARE ;
1241
                                     EQ ;
1242
                                     IF
1243
                                       { PUSH bool True }
1244
                                       { DUP 4 ;
1245
                                         GET 5 ;
1246
                                         SWAP ;
1247
                                         DUP ;
1248
                                         DUG 2 ;
1249
                                         GET 3 ;
1250
                                         SENDER ;
1251
                                         DUP 5 ;
1252
                                         CAR ;
1253
                                         PAIR 3 ;
1254
                                         MEM } ;
1255
                                     IF
1256
                                       {}
1257
                                       { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ;
1258
                                     DUP ;
1259
                                     GET 4 ;
1260
                                     PUSH nat 0 ;
1261
                                     COMPARE ;
1262
                                     LT ;
1263
                                     IF
1264
                                       { DUP 4 ;
1265
                                         UNPAIR ;
1266
                                         UNPAIR ;
1267
                                         SWAP ;
1268
                                         UNPAIR ;
1269
                                         SWAP ;
1270
                                         UNPAIR ;
1271
                                         SWAP ;
1272
                                         DUP 6 ;
1273
                                         GET 4 ;
1274
                                         DIG 9 ;
1275
                                         CAR ;
1276
                                         GET 6 ;
1277
                                         DUP 8 ;
1278
                                         GET 3 ;
1279
                                         DUP 10 ;
1280
                                         CAR ;
1281
                                         PAIR ;
1282
                                         GET ;
1283
                                         IF_NONE { PUSH nat 0 } {} ;
1284
                                         SUB ;
1285
                                         ISNAT ;
1286
                                         IF_NONE
1287
                                           { PUSH string "FA2_INSUFFICIENT_BALANCE" ;
1288
                                             FAILWITH }
1289
                                           {} ;
1290
                                         SOME ;
1291
                                         DUP 7 ;
1292
                                         GET 3 ;
1293
                                         DUP 9 ;
1294
                                         CAR ;
1295
                                         PAIR ;
1296
                                         UPDATE ;
1297
                                         SWAP ;
1298
                                         PAIR ;
1299
                                         SWAP ;
1300
                                         PAIR ;
1301
                                         SWAP ;
1302
                                         PAIR ;
1303
                                         PAIR ;
1304
                                         DUP ;
1305
                                         DUG 4 ;
1306
                                         UNPAIR ;
1307
                                         UNPAIR ;
1308
                                         SWAP ;
1309
                                         UNPAIR ;
1310
                                         SWAP ;
1311
                                         UNPAIR ;
1312
                                         SWAP ;
1313
                                         DUP 6 ;
1314
                                         GET 4 ;
1315
                                         DIG 9 ;
1316
                                         CAR ;
1317
                                         GET 6 ;
1318
                                         DIG 7 ;
1319
                                         DUP ;
1320
                                         GET 3 ;
1321
                                         SWAP ;
1322
                                         DUP ;
1323
                                         DUG 9 ;
1324
                                         CAR ;
1325
                                         PAIR ;
1326
                                         GET ;
1327
                                         IF_NONE { PUSH nat 0 } {} ;
1328
                                         ADD ;
1329
                                         SOME ;
1330
                                         DIG 6 ;
1331
                                         DUP ;
1332
                                         GET 3 ;
1333
                                         SWAP ;
1334
                                         CAR ;
1335
                                         PAIR ;
1336
                                         UPDATE ;
1337
                                         SWAP ;
1338
                                         PAIR ;
1339
                                         SWAP ;
1340
                                         PAIR ;
1341
                                         SWAP ;
1342
                                         PAIR ;
1343
                                         PAIR ;
1344
                                         DUG 2 }
1345
                                       { DROP } } ;
1346
                              DROP } ;
1347
                       DROP } }
1348
                 { IF_LEFT
1349
                     { DUP ;
1350
                       ITER { IF_LEFT
1351
                                { DUP ;
1352
                                  CAR ;
1353
                                  SENDER ;
1354
                                  COMPARE ;
1355
                                  EQ ;
1356
                                  IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
1357
                                  DIG 2 ;
1358
                                  DUP ;
1359
                                  GET 5 ;
1360
                                  PUSH (option unit) (Some Unit) ;
1361
                                  DIG 3 ;
1362
                                  UPDATE ;
1363
                                  UPDATE 5 ;
1364
                                  SWAP }
1365
                                { DUP ;
1366
                                  CAR ;
1367
                                  SENDER ;
1368
                                  COMPARE ;
1369
                                  EQ ;
1370
                                  IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
1371
                                  DIG 2 ;
1372
                                  DUP ;
1373
                                  GET 5 ;
1374
                                  NONE unit ;
1375
                                  DIG 3 ;
1376
                                  UPDATE ;
1377
                                  UPDATE 5 ;
1378
                                  SWAP } } ;
1379
                       DROP }
1380
                     { SWAP ;
1381
                       DUP ;
1382
                       DUG 2 ;
1383
                       CAR ;
1384
                       CAR ;
1385
                       CAR ;
1386
                       SENDER ;
1387
                       COMPARE ;
1388
                       EQ ;
1389
                       IF
1390
                         { PUSH bool True }
1391
                         { SWAP ; DUP ; DUG 2 ; GET 3 ; GET 3 ; SENDER ; MEM } ;
1392
                       IF {} { PUSH string "FA2_NOT_MANAGER" ; FAILWITH } ;
1393
                       DUP ;
1394
                       ITER { DUP 3 ;
1395
                              GET 3 ;
1396
                              CAR ;
1397
                              SWAP ;
1398
                              DUP ;
1399
                              DUG 2 ;
1400
                              CAR ;
1401
                              MEM ;
1402
                              IF
1403
                                { DUP 3 ;
1404
                                  GET 3 ;
1405
                                  CAR ;
1406
                                  SWAP ;
1407
                                  DUP ;
1408
                                  DUG 2 ;
1409
                                  CAR ;
1410
                                  GET ;
1411
                                  IF_NONE { PUSH int 357 ; FAILWITH } {} ;
1412
                                  CAR ;
1413
                                  NOT }
1414
                                { PUSH bool True } ;
1415
                              IF {} { PUSH string "OE_TOKEN_LOCKED" ; FAILWITH } ;
1416
                              DIG 2 ;
1417
                              DUP ;
1418
                              GET 8 ;
1419
                              DIG 2 ;
1420
                              DUP ;
1421
                              CDR ;
1422
                              SWAP ;
1423
                              DUP ;
1424
                              DUG 4 ;
1425
                              CAR ;
1426
                              PAIR ;
1427
                              SOME ;
1428
                              DIG 3 ;
1429
                              CAR ;
1430
                              UPDATE ;
1431
                              UPDATE 8 ;
1432
                              SWAP } ;
1433
                       DROP } } } ;
1434
           NIL operation } ;
1435
       NIL operation ;
1436
       SWAP ;
1437
       ITER { CONS } ;
1438
       PAIR }