BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • NFTimbre #1
FA2Ledger
operations (952K)Storage Code Interact Tokens Metadata Fork Statistics Details
Latest
​x
833
 
1
parameter (or
2
            (or
3
              (or
4
                (or
5
                  (pair %balance_of
6
                    (list %requests (pair (address %owner) (nat %token_id)))
7
                    (contract %callback (list (pair
8
                                              (pair %request (address %owner)
9
                                                             (nat %token_id))
10
                                              (nat %balance)))))
11
                  (address %declare_ownership))
12
                (or (unit %claim_ownership) (address %set_permits)))
13
              (or (or (address %add_coowner) (address %remove_coowner))
14
                  (or (address %set_minter) (unit %set_mint_completed))))
15
            (or
16
              (or (or (unit %pause) (unit %unpause))
17
                  (or (pair %set_metadata (string %k) (option %d bytes))
18
                      (pair %set_token_metadata (nat %tid) (map %tdata string bytes))))
19
              (or
20
                (or
21
                  (or
22
                    (list %update_operators (or
23
                                             (pair %add_operator (address %owner)
24
                                                                 (pair
25
                                                                   (address %operator)
26
                                                                   (nat %token_id)))
27
                                             (pair %remove_operator (address %owner)
28
                                                                    (pair
29
                                                                      (address %operator)
30
                                                                      (nat %token_id)))))
31
                    (string %set_token_metadata_path))
32
                  (or (nat %drop)
33
                      (list %do_transfer (pair (address %from_)
34
                                              (list %txs (pair (address %to_)
35
                                                              (pair (nat %token_id)
36
                                                                    (nat %amount))))))))
37
                (or
38
                  (or
39
                    (list %transfer (pair (address %from_)
40
                                         (list %txs (pair (address %to_)
41
                                                         (pair (nat %token_id)
42
                                                               (nat %amount))))))
43
                    (list %transfer_gasless (pair
44
                                             (list %transfer_params (pair
45
                                                                     (address %from_)
46
                                                                     (list %txs (pair
47
                                                                                 (address %to_)
48
                                                                                 (pair
49
                                                                                   (nat %token_id)
50
                                                                                   (nat %amount))))))
51
                                             (pair (key %user_pk) (signature %user_sig)))))
52
                  (or (nat %burn)
53
                      (pair %burn_gasless (list %bg_token_id nat)
54
                                          (pair (key %bg_user_pk)
55
                                                (signature %bg_user_sig))))))));
56
storage (pair (address %owner)
57
              (pair (address %minter)
58
                    (pair (address %permits)
59
                          (pair (string %token_metadata_path)
60
                                (pair (nat %next_token_id)
61
                                      (pair (bool %mint_completed)
62
                                            (pair (set %coowners address)
63
                                                  (pair
64
                                                    (option %owner_candidate address)
65
                                                    (pair (bool %paused)
66
                                                          (pair
67
                                                            (big_map %token_metadata nat
68
                                                                                     (pair
69
                                                                                       (nat %token_id)
70
                                                                                       (map %token_info
71
                                                                                         string
72
                                                                                         bytes)))
73
                                                            (pair
74
                                                              (big_map %ledger nat
75
                                                                               address)
76
                                                              (pair
77
                                                                (set %operator (pair
78
                                                                                address
79
                                                                                (pair
80
                                                                                  nat
81
                                                                                  address)))
82
                                                                (pair
83
                                                                  (big_map %operator_for_all
84
                                                                    (pair address
85
                                                                          address)
86
                                                                    unit)
87
                                                                  (big_map %metadata
88
                                                                    string
89
                                                                    bytes))))))))))))));
90
code { LAMBDA
91
         nat
92
         string
93
         { PUSH unit Unit ;
94
           PUSH nat 0 ;
95
           DUP 3 ;
96
           COMPARE ;
97
           GT ;
98
           IF
99
             { PUSH string "" ;
100
               EMPTY_MAP nat string ;
101
               PUSH string "9" ;
102
               SOME ;
103
               PUSH nat 9 ;
104
               UPDATE ;
105
               PUSH string "8" ;
106
               SOME ;
107
               PUSH nat 8 ;
108
               UPDATE ;
109
               PUSH string "7" ;
110
               SOME ;
111
               PUSH nat 7 ;
112
               UPDATE ;
113
               PUSH string "6" ;
114
               SOME ;
115
               PUSH nat 6 ;
116
               UPDATE ;
117
               PUSH string "5" ;
118
               SOME ;
119
               PUSH nat 5 ;
120
               UPDATE ;
121
               PUSH string "4" ;
122
               SOME ;
123
               PUSH nat 4 ;
124
               UPDATE ;
125
               PUSH string "3" ;
126
               SOME ;
127
               PUSH nat 3 ;
128
               UPDATE ;
129
               PUSH string "2" ;
130
               SOME ;
131
               PUSH nat 2 ;
132
               UPDATE ;
133
               PUSH string "1" ;
134
               SOME ;
135
               PUSH nat 1 ;
136
               UPDATE ;
137
               PUSH string "0" ;
138
               SOME ;
139
               PUSH nat 0 ;
140
               UPDATE ;
141
               PUSH nat 0 ;
142
               DUP 5 ;
143
               COMPARE ;
144
               GT ;
145
               LOOP { PUSH nat 10 ;
146
                      DUP 5 ;
147
                      EDIV ;
148
                      IF_NONE { PUSH string "DIV_BY_ZERO" ; FAILWITH } {} ;
149
                      DUP 3 ;
150
                      DUP 3 ;
151
                      DUP 3 ;
152
                      CDR ;
153
                      GET ;
154
                      IF_NONE { PUSH string "NOT_FOUND" ; FAILWITH } {} ;
155
                      CONCAT ;
156
                      DIP { DIG 2 ; DROP } ;
157
                      DUG 2 ;
158
                      DUP ;
159
                      CAR ;
160
                      DIP { DIG 4 ; DROP } ;
161
                      DUG 4 ;
162
                      DROP ;
163
                      PUSH nat 0 ;
164
                      DUP 5 ;
165
                      COMPARE ;
166
                      GT } ;
167
               DUP 2 ;
168
               DIP { DIG 2 ; DROP } ;
169
               DUG 2 ;
170
               DROP 2 }
171
             { PUSH string "0" ; SWAP ; DROP } ;
172
           DUG 1 ;
173
           DROP } ;
174
       LAMBDA
175
         (pair string string)
176
         bytes
177
         { UNPAIR 2 ;
178
           PUSH unit Unit ;
179
           DUP 3 ;
180
           PACK ;
181
           PUSH int 6 ;
182
           DUP 2 ;
183
           SIZE ;
184
           INT ;
185
           SUB ;
186
           ABS ;
187
           DUP 2 ;
188
           DUP 2 ;
189
           PUSH nat 6 ;
190
           SLICE ;
191
           IF_NONE { PUSH string "ERROR_SLICE" ; FAILWITH } {} ;
192
           DUP ;
193
           DIP { DIG 3 ; DROP } ;
194
           DUG 3 ;
195
           DROP 3 ;
196
           DUG 2 ;
197
           DROP 2 } ;
198
       LAMBDA
199
         (pair (big_map (pair address address) unit)
200
               (pair (set (pair address (pair nat address)))
201
                     (list (pair (address %from_)
202
                                (list %txs (pair (address %to_)
203
                                                (pair (nat %token_id) (nat %amount))))))))
204
         bool
205
         { UNPAIR 3 ;
206
           PUSH unit Unit ;
207
           PUSH bool True ;
208
           DUP 5 ;
209
           ITER { DUP ;
210
                  CAR ;
211
                  DUP 2 ;
212
                  CDR ;
213
                  DUP ;
214
                  ITER { DUP 5 ;
215
                         IF
216
                           { DUP 3 ;
217
                             SENDER ;
218
                             COMPARE ;
219
                             NEQ ;
220
                             IF
221
                               { DUP 8 ;
222
                                 DUP 4 ;
223
                                 DUP 3 ;
224
                                 CDR ;
225
                                 CAR ;
226
                                 PAIR ;
227
                                 SENDER ;
228
                                 PAIR ;
229
                                 MEM ;
230
                                 IF
231
                                   { PUSH bool True }
232
                                   { DUP 7 ;
233
                                     DUP 4 ;
234
                                     SENDER ;
235
                                     PAIR ;
236
                                     MEM ;
237
                                     IF { PUSH bool True } { PUSH bool False } } }
238
                               { PUSH bool True } ;
239
                             IF { PUSH bool True } { PUSH bool False } }
240
                           { PUSH bool False } ;
241
                         DIP { DIG 4 ; DROP } ;
242
                         DUG 4 ;
243
                         DROP } ;
244
                  DROP 3 } ;
245
           DUP ;
246
           DIP { DIG 1 ; DROP } ;
247
           DUG 1 ;
248
           DROP ;
249
           DUG 3 ;
250
           DROP 3 } ;
251
       LAMBDA
252
         (pair address
253
               (list (pair (address %from_)
254
                          (list %txs (pair (address %to_)
255
                                          (pair (nat %token_id) (nat %amount)))))))
256
         bool
257
         { UNPAIR 2 ;
258
           PUSH unit Unit ;
259
           PUSH bool True ;
260
           DUP 4 ;
261
           ITER { DUP 2 ;
262
                  IF
263
                    { DUP ; CAR ; DUP 5 ; COMPARE ; EQ ; IF { PUSH bool True } { PUSH bool False } }
264
                    { PUSH bool False } ;
265
                  DIP { DIG 1 ; DROP } ;
266
                  DUG 1 ;
267
                  DROP } ;
268
           DUP ;
269
           DIP { DIG 1 ; DROP } ;
270
           DUG 1 ;
271
           DROP ;
272
           DUG 2 ;
273
           DROP 2 } ;
274
       NIL operation ;
275
       DIG 5 ;
276
       UNPAIR ;
277
       DIP { UNPAIR 14 } ;
278
       IF_LEFT
279
         { IF_LEFT
280
             { IF_LEFT
281
                 { IF_LEFT
282
                     { UNPAIR ;
283
                       NIL operation ;
284
                       NIL operation ;
285
                       DUP 19 ;
286
                       ITER { CONS } ;
287
                       DUP 4 ;
288
                       AMOUNT ;
289
                       DUP 5 ;
290
                       MAP { DUP 18 ;
291
                             DUP 2 ;
292
                             CDR ;
293
                             GET ;
294
                             IF_NONE
295
                               { PUSH nat 0 }
296
                               { DUP 2 ;
297
                                 CAR ;
298
                                 DUP 2 ;
299
                                 COMPARE ;
300
                                 EQ ;
301
                                 IF { PUSH nat 1 } { PUSH nat 0 } ;
302
                                 SWAP ;
303
                                 DROP } ;
304
                             DUP 2 ;
305
                             PAIR ;
306
                             SWAP ;
307
                             DROP } ;
308
                       TRANSFER_TOKENS ;
309
                       CONS ;
310
                       ITER { CONS } ;
311
                       DIP { DIG 16 ; DROP } ;
312
                       DUG 16 ;
313
                       DROP 2 ;
314
                       PAIR 14 ;
315
                       DIG 1 ;
316
                       PAIR }
317
                     { DUP 2 ;
318
                       SENDER ;
319
                       COMPARE ;
320
                       EQ ;
321
                       IF
322
                         { PUSH bool True }
323
                         { DUP 8 ; SENDER ; MEM ; IF { PUSH bool True } { PUSH bool False } } ;
324
                       NOT ;
325
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
326
                       DUP ;
327
                       SOME ;
328
                       DIP { DIG 8 ; DROP } ;
329
                       DUG 8 ;
330
                       DROP ;
331
                       PAIR 14 ;
332
                       DIG 1 ;
333
                       PAIR } }
334
                 { IF_LEFT
335
                     { DROP ;
336
                       DUP 8 ;
337
                       IF_NONE
338
                         { PUSH bool False }
339
                         { SENDER ; DUP 2 ; COMPARE ; EQ ; SWAP ; DROP } ;
340
                       NOT ;
341
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
342
                       SENDER ;
343
                       SWAP ;
344
                       DROP ;
345
                       NONE address ;
346
                       DIP { DIG 7 ; DROP } ;
347
                       DUG 7 ;
348
                       PAIR 14 ;
349
                       DIG 1 ;
350
                       PAIR }
351
                     { DUP 2 ;
352
                       SENDER ;
353
                       COMPARE ;
354
                       EQ ;
355
                       NOT ;
356
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
357
                       DUP ;
358
                       DIP { DIG 3 ; DROP } ;
359
                       DUG 3 ;
360
                       DROP ;
361
                       PAIR 14 ;
362
                       DIG 1 ;
363
                       PAIR } } }
364
             { IF_LEFT
365
                 { IF_LEFT
366
                     { DUP 2 ;
367
                       SENDER ;
368
                       COMPARE ;
369
                       EQ ;
370
                       NOT ;
371
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
372
                       DUP 10 ;
373
                       IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
374
                       DUP 8 ;
375
                       DUP 2 ;
376
                       MEM ;
377
                       IF
378
                         { PUSH string "coowners" ; PUSH string "KEY_EXISTS" ; PAIR ; FAILWITH }
379
                         { DUP 8 ; PUSH bool True ; DUP 3 ; UPDATE ; DIP { DIG 7 ; DROP } ; DUG 7 } ;
380
                       DROP ;
381
                       PAIR 14 ;
382
                       DIG 1 ;
383
                       PAIR }
384
                     { DUP 2 ;
385
                       SENDER ;
386
                       COMPARE ;
387
                       EQ ;
388
                       NOT ;
389
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
390
                       DUP 10 ;
391
                       IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
392
                       DUP 8 ;
393
                       PUSH bool False ;
394
                       DUP 3 ;
395
                       UPDATE ;
396
                       DIP { DIG 7 ; DROP } ;
397
                       DUG 7 ;
398
                       DROP ;
399
                       PAIR 14 ;
400
                       DIG 1 ;
401
                       PAIR } }
402
                 { IF_LEFT
403
                     { DUP 2 ;
404
                       SENDER ;
405
                       COMPARE ;
406
                       EQ ;
407
                       NOT ;
408
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
409
                       DUP ;
410
                       DIP { DIG 2 ; DROP } ;
411
                       DUG 2 ;
412
                       DROP ;
413
                       PAIR 14 ;
414
                       DIG 1 ;
415
                       PAIR }
416
                     { DROP ;
417
                       DUP ;
418
                       SENDER ;
419
                       COMPARE ;
420
                       EQ ;
421
                       NOT ;
422
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
423
                       PUSH bool True ;
424
                       DIP { DIG 5 ; DROP } ;
425
                       DUG 5 ;
426
                       PAIR 14 ;
427
                       DIG 1 ;
428
                       PAIR } } } }
429
         { IF_LEFT
430
             { IF_LEFT
431
                 { IF_LEFT
432
                     { DROP ;
433
                       DUP ;
434
                       SENDER ;
435
                       COMPARE ;
436
                       EQ ;
437
                       NOT ;
438
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
439
                       DUP 9 ;
440
                       IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
441
                       PUSH bool True ;
442
                       DIP { DIG 8 ; DROP } ;
443
                       DUG 8 ;
444
                       PAIR 14 ;
445
                       DIG 1 ;
446
                       PAIR }
447
                     { DROP ;
448
                       DUP ;
449
                       SENDER ;
450
                       COMPARE ;
451
                       EQ ;
452
                       NOT ;
453
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
454
                       DUP 9 ;
455
                       NOT ;
456
                       IF { PUSH string "CONTRACT_NOT_PAUSED" ; FAILWITH } {} ;
457
                       PUSH bool False ;
458
                       DIP { DIG 8 ; DROP } ;
459
                       DUG 8 ;
460
                       PAIR 14 ;
461
                       DIG 1 ;
462
                       PAIR } }
463
                 { IF_LEFT
464
                     { UNPAIR ;
465
                       SWAP ;
466
                       DUP 3 ;
467
                       SENDER ;
468
                       COMPARE ;
469
                       EQ ;
470
                       NOT ;
471
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
472
                       DUP 11 ;
473
                       IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
474
                       DUP 16 ;
475
                       DUP 2 ;
476
                       DUP 4 ;
477
                       UPDATE ;
478
                       DIP { DIG 15 ; DROP } ;
479
                       DUG 15 ;
480
                       DROP 2 ;
481
                       PAIR 14 ;
482
                       DIG 1 ;
483
                       PAIR }
484
                     { UNPAIR ;
485
                       SWAP ;
486
                       DUP 3 ;
487
                       SENDER ;
488
                       COMPARE ;
489
                       EQ ;
490
                       IF
491
                         { PUSH bool True }
492
                         { DUP 4 ;
493
                           SENDER ;
494
                           COMPARE ;
495
                           EQ ;
496
                           IF { PUSH bool True } { PUSH bool False } } ;
497
                       NOT ;
498
                       IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
499
                       DUP 11 ;
500
                       IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
501
                       DUP 12 ;
502
                       DUP 13 ;
503
                       DUP 4 ;
504
                       GET ;
505
                       IF_NONE
506
                         { PUSH string "token_metadata" ;
507
                           PUSH string "ASSET_NOT_FOUND" ;
508
                           PAIR ;
509
                           FAILWITH }
510
                         {} ;
511
                       UNPAIR ;
512
                       DROP ;
513
                       DUP 4 ;
514
                       SWAP ;
515
                       DROP ;
516
                       DUP 3 ;
517
                       SWAP ;
518
                       PAIR ;
519
                       SOME ;
520
                       DUP 4 ;
521
                       UPDATE ;
522
                       DIP { DIG 11 ; DROP } ;
523
                       DUG 11 ;
524
                       DROP 2 ;
525
                       PAIR 14 ;
526
                       DIG 1 ;
527
                       PAIR } } }
528
             { IF_LEFT
529
                 { IF_LEFT
530
                     { IF_LEFT
531
                         { DUP 10 ;
532
                           IF
533
                             { PUSH string "fa2_r1" ;
534
                               PUSH string "INVALID_CONDITION" ;
535
                               PAIR ;
536
                               FAILWITH }
537
                             {} ;
538
                           DUP ;
539
                           ITER { DUP ;
540
                                  IF_LEFT
541
                                    { SENDER ;
542
                                      DUP 2 ;
543
                                      CAR ;
544
                                      COMPARE ;
545
                                      EQ ;
546
                                      NOT ;
547
                                      IF
548
                                        { PUSH string "CALLER_NOT_OWNER" ; FAILWITH }
549
                                        {} ;
550
                                      DUP 15 ;
551
                                      PUSH bool True ;
552
                                      DUP 3 ;
553
                                      CAR ;
554
                                      DUP 4 ;
555
                                      CDR ;
556
                                      CDR ;
557
                                      PAIR ;
558
                                      DUP 4 ;
559
                                      CDR ;
560
                                      CAR ;
561
                                      PAIR ;
562
                                      UPDATE ;
563
                                      DIP { DIG 14 ; DROP } ;
564
                                      DUG 14 ;
565
                                      DROP }
566
                                    { SENDER ;
567
                                      DUP 2 ;
568
                                      CAR ;
569
                                      COMPARE ;
570
                                      EQ ;
571
                                      NOT ;
572
                                      IF
573
                                        { PUSH string "CALLER_NOT_OWNER" ; FAILWITH }
574
                                        {} ;
575
                                      DUP 15 ;
576
                                      PUSH bool False ;
577
                                      DUP 3 ;
578
                                      CAR ;
579
                                      DUP 4 ;
580
                                      CDR ;
581
                                      CDR ;
582
                                      PAIR ;
583
                                      DUP 4 ;
584
                                      CDR ;
585
                                      CAR ;
586
                                      PAIR ;
587
                                      UPDATE ;
588
                                      DIP { DIG 14 ; DROP } ;
589
                                      DUG 14 ;
590
                                      DROP } ;
591
                                  DROP } ;
592
                           DROP ;
593
                           PAIR 14 ;
594
                           DIG 1 ;
595
                           PAIR }
596
                         { DUP 2 ;
597
                           SENDER ;
598
                           COMPARE ;
599
                           EQ ;
600
                           IF
601
                             { PUSH bool True }
602
                             { DUP 3 ;
603
                               SENDER ;
604
                               COMPARE ;
605
                               EQ ;
606
                               IF { PUSH bool True } { PUSH bool False } } ;
607
                           NOT ;
608
                           IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
609
                           DUP 10 ;
610
                           IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
611
                           DUP ;
612
                           DIP { DIG 4 ; DROP } ;
613
                           DUG 4 ;
614
                           DROP ;
615
                           PAIR 14 ;
616
                           DIG 1 ;
617
                           PAIR } }
618
                     { IF_LEFT
619
                         { DUP 3 ;
620
                           SENDER ;
621
                           COMPARE ;
622
                           EQ ;
623
                           IF
624
                             { PUSH bool True }
625
                             { DUP 2 ;
626
                               SENDER ;
627
                               COMPARE ;
628
                               EQ ;
629
                               IF { PUSH bool True } { PUSH bool False } } ;
630
                           NOT ;
631
                           IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
632
                           DUP 7 ;
633
                           IF { PUSH string "MINT_COMPLETED" ; FAILWITH } {} ;
634
                           DUP 10 ;
635
                           IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
636
                           PUSH nat 201 ;
637
                           DUP 2 ;
638
                           COMPARE ;
639
                           LT ;
640
                           NOT ;
641
                           IF { PUSH string "LIST_SIZE_EXCEDEED" ; FAILWITH } {} ;
642
                           PUSH nat 0 ;
643
                           DUP 2 ;
644
                           DUP 2 ;
645
                           COMPARE ;
646
                           LT ;
647
                           LOOP { DUP 13 ;
648
                                  DUP 8 ;
649
                                  MEM ;
650
                                  IF
651
                                    { PUSH string "ledger" ;
652
                                      PUSH string "KEY_EXISTS" ;
653
                                      PAIR ;
654
                                      FAILWITH }
655
                                    { DUP 13 ;
656
                                      DUP 5 ;
657
                                      SOME ;
658
                                      DUP 9 ;
659
                                      UPDATE ;
660
                                      DIP { DIG 12 ; DROP } ;
661
                                      DUG 12 } ;
662
                                  PUSH string ".json" ;
663
                                  DUP 22 ;
664
                                  DUP 9 ;
665
                                  EXEC ;
666
                                  DUP 8 ;
667
                                  CONCAT ;
668
                                  CONCAT ;
669
                                  EMPTY_MAP string bytes ;
670
                                  DUP 22 ;
671
                                  DUP 3 ;
672
                                  PUSH string "ERROR_SLICE" ;
673
                                  PAIR ;
674
                                  EXEC ;
675
                                  SOME ;
676
                                  PUSH string "" ;
677
                                  UPDATE ;
678
                                  DUP 14 ;
679
                                  DUP 10 ;
680
                                  MEM ;
681
                                  IF
682
                                    { PUSH string "token_metadata" ;
683
                                      PUSH string "KEY_EXISTS" ;
684
                                      PAIR ;
685
                                      FAILWITH }
686
                                    { DUP 14 ;
687
                                      DUP 2 ;
688
                                      DUP 11 ;
689
                                      PAIR ;
690
                                      SOME ;
691
                                      DUP 11 ;
692
                                      UPDATE ;
693
                                      DIP { DIG 13 ; DROP } ;
694
                                      DUG 13 } ;
695
                                  PUSH nat 1 ;
696
                                  DUP 10 ;
697
                                  ADD ;
698
                                  DIP { DIG 8 ; DROP } ;
699
                                  DUG 8 ;
700
                                  PUSH nat 1 ;
701
                                  DUP 4 ;
702
                                  ADD ;
703
                                  DIP { DIG 2 ; DROP } ;
704
                                  DUG 2 ;
705
                                  DROP 2 ;
706
                                  DUP 2 ;
707
                                  DUP 2 ;
708
                                  COMPARE ;
709
                                  LT } ;
710
                           DROP 2 ;
711
                           PAIR 14 ;
712
                           DIG 1 ;
713
                           PAIR }
714
                         { SELF_ADDRESS ;
715
                           SENDER ;
716
                           COMPARE ;
717
                           EQ ;
718
                           NOT ;
719
                           IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
720
                           DUP ;
721
                           ITER { DUP ;
722
                                  CAR ;
723
                                  DUP 2 ;
724
                                  CDR ;
725
                                  DUP ;
726
                                  ITER { DUP ;
727
                                         CDR ;
728
                                         CAR ;
729
                                         DUP 17 ;
730
                                         DUP 2 ;
731
                                         GET ;
732
                                         IF_NONE
733
                                           { NONE address }
734
                                           { DUP ; SOME ; SWAP ; DROP } ;
735
                                         IF_NONE
736
                                           { PUSH string "FA2_TOKEN_UNDEFINED" ;
737
                                             FAILWITH }
738
                                           {} ;
739
                                         DUP 5 ;
740
                                         DUP 2 ;
741
                                         COMPARE ;
742
                                         EQ ;
743
                                         IF
744
                                           { PUSH nat 1 ;
745
                                             DUP 4 ;
746
                                             CDR ;
747
                                             CDR ;
748
                                             COMPARE ;
749
                                             EQ ;
750
                                             IF { PUSH bool True } { PUSH bool False } }
751
                                           { PUSH bool False } ;
752
                                         NOT ;
753
                                         IF
754
                                           { PUSH string "FA2_INSUFFICIENT_BALANCE" ;
755
                                             FAILWITH }
756
                                           {} ;
757
                                         DUP 18 ;
758
                                         DUP 4 ;
759
                                         CAR ;
760
                                         SOME ;
761
                                         DUP 4 ;
762
                                         UPDATE ;
763
                                         DIP { DIG 17 ; DROP } ;
764
                                         DUG 17 ;
765
                                         DROP 3 } ;
766
                                  DROP 3 } ;
767
                           DROP ;
768
                           PAIR 14 ;
769
                           DIG 1 ;
770
                           PAIR } } }
771
                 { IF_LEFT
772
                     { IF_LEFT
773
                         { DUP 10 ;
774
                           IF
775
                             { PUSH string "fa2_r4" ;
776
                               PUSH string "INVALID_CONDITION" ;
777
                               PAIR ;
778
                               FAILWITH }
779
                             {} ;
780
                           DUP 18 ;
781
                           DUP 2 ;
782
                           DUP 15 ;
783
                           PAIR ;
784
                           DUP 16 ;
785
                           PAIR ;
786
                           EXEC ;
787
                           NOT ;
788
                           IF { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } {} ;
789
                           NIL operation ;
790
                           NIL operation ;
791
                           DUP 18 ;
792
                           ITER { CONS } ;
793
                           SELF_ADDRESS ;
794
                           CONTRACT %do_transfer (list (pair address
795
                                                            (list (pair address
796
                                                                       (pair nat nat))))) ;
797
                           IF_NONE
798
                             { PUSH string "do_transfer" ;
799
                               PUSH string "ENTRY_NOT_FOUND" ;
800
                               PAIR ;
801
                               FAILWITH }
802
                             {} ;
803
                           PUSH mutez 0 ;
804
                           DUP 5 ;
805
                           TRANSFER_TOKENS ;
806
                           CONS ;
807
                           ITER { CONS } ;
808
                           DIP { DIG 15 ; DROP } ;
809
                           DUG 15 ;
810
                           DROP ;
811
                           PAIR 14 ;
812
                           DIG 1 ;
813
                           PAIR }
814
                         { DUP 10 ;
815
                           IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
816
                           DUP ;
817
                           ITER { DUP ;
818
                                  CAR ;
819
                                  DUP 2 ;
820
                                  CDR ;
821
                                  CAR ;
822
                                  DUP 3 ;
823
                                  CDR ;
824
                                  CDR ;
825
                                  DUP 2 ;
826
                                  HASH_KEY ;
827
                                  IMPLICIT_ACCOUNT ;
828
                                  ADDRESS ;
829
                                  DUP 22 ;
830
                                  DUP 5 ;
831
                                  DUP 3 ;
832
                                  PAIR ;
833
                                  EXEC ;
834
                                  NOT ;
835
                                  IF { PUSH string "SIGNER_NOT_FROM" ; FAILWITH } {} ;
836
                                  NIL operation ;
837
                                  NIL operation ;
838
                                  DUP 23 ;
839
                                  ITER { CONS } ;
840
                                  DUP 11 ;
841
                                  CONTRACT %check (pair key (pair signature bytes)) ;
842
                                  IF_NONE
843
                                    { PUSH string "check" ;
844
                                      PUSH string "ENTRY_NOT_FOUND" ;
845
                                      PAIR ;
846
                                      FAILWITH }
847
                                    {} ;
848
                                  PUSH mutez 0 ;
849
                                  DUP 8 ;
850
                                  PACK ;
851
                                  DUP 7 ;
852
                                  PAIR ;
853
                                  DUP 8 ;
854
                                  PAIR ;
855
                                  TRANSFER_TOKENS ;
856
                                  CONS ;
857
                                  ITER { CONS } ;
858
                                  DIP { DIG 20 ; DROP } ;
859
                                  DUG 20 ;
860
                                  NIL operation ;
861
                                  NIL operation ;
862
                                  DUP 23 ;
863
                                  ITER { CONS } ;
864
                                  SELF_ADDRESS ;
865
                                  CONTRACT %do_transfer (list (pair address
866
                                                                   (list (pair address
867
                                                                              (pair nat
868
                                                                                    nat))))) ;
869
                                  IF_NONE
870
                                    { PUSH string "do_transfer" ;
871
                                      PUSH string "ENTRY_NOT_FOUND" ;
872
                                      PAIR ;
873
                                      FAILWITH }
874
                                    {} ;
875
                                  PUSH mutez 0 ;
876
                                  DUP 8 ;
877
                                  TRANSFER_TOKENS ;
878
                                  CONS ;
879
                                  ITER { CONS } ;
880
                                  DIP { DIG 20 ; DROP } ;
881
                                  DUG 20 ;
882
                                  DROP 5 } ;
883
                           DROP ;
884
                           PAIR 14 ;
885
                           DIG 1 ;
886
                           PAIR } }
887
                     { IF_LEFT
888
                         { DUP 12 ;
889
                           DUP 2 ;
890
                           GET ;
891
                           IF_NONE { NONE address } { DUP ; SOME ; SWAP ; DROP } ;
892
                           IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ;
893
                           SENDER ;
894
                           DUP 2 ;
895
                           COMPARE ;
896
                           EQ ;
897
                           NOT ;
898
                           IF { PUSH string "CALLER_NOT_OWNER" ; FAILWITH } {} ;
899
                           DUP 11 ;
900
                           IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
901
                           DUP 13 ;
902
                           NONE address ;
903
                           DUP 4 ;
904
                           UPDATE ;
905
                           DIP { DIG 12 ; DROP } ;
906
                           DUG 12 ;
907
                           DUP 12 ;
908
                           NONE (pair nat (map string bytes)) ;
909
                           DUP 4 ;
910
                           UPDATE ;
911
                           DIP { DIG 11 ; DROP } ;
912
                           DUG 11 ;
913
                           DROP 2 ;
914
                           PAIR 14 ;
915
                           DIG 1 ;
916
                           PAIR }
917
                         { DUP 10 ;
918
                           IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
919
                           DUP ;
920
                           CAR ;
921
                           DUP 2 ;
922
                           CDR ;
923
                           CAR ;
924
                           DUP 3 ;
925
                           CDR ;
926
                           CDR ;
927
                           DUP 2 ;
928
                           HASH_KEY ;
929
                           IMPLICIT_ACCOUNT ;
930
                           ADDRESS ;
931
                           NIL operation ;
932
                           NIL operation ;
933
                           DUP 22 ;
934
                           ITER { CONS } ;
935
                           DUP 10 ;
936
                           CONTRACT %check (pair key (pair signature bytes)) ;
937
                           IF_NONE
938
                             { PUSH string "check" ;
939
                               PUSH string "ENTRY_NOT_FOUND" ;
940
                               PAIR ;
941
                               FAILWITH }
942
                             {} ;
943
                           PUSH mutez 0 ;
944
                           DUP 8 ;
945
                           PACK ;
946
                           DUP 7 ;
947
                           PAIR ;
948
                           DUP 8 ;
949
                           PAIR ;
950
                           TRANSFER_TOKENS ;
951
                           CONS ;
952
                           ITER { CONS } ;
953
                           DIP { DIG 19 ; DROP } ;
954
                           DUG 19 ;
955
                           DUP 4 ;
956
                           ITER { DUP 17 ;
957
                                  DUP 2 ;
958
                                  GET ;
959
                                  IF_NONE
960
                                    { NONE address }
961
                                    { DUP ; SOME ; SWAP ; DROP } ;
962
                                  IF_NONE
963
                                    { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH }
964
                                    {} ;
965
                                  DUP 3 ;
966
                                  DUP 2 ;
967
                                  COMPARE ;
968
                                  EQ ;
969
                                  NOT ;
970
                                  IF { PUSH string "CALLER_NOT_OWNER" ; FAILWITH } {} ;
971
                                  DUP 18 ;
972
                                  NONE address ;
973
                                  DUP 4 ;
974
                                  UPDATE ;
975
                                  DIP { DIG 17 ; DROP } ;
976
                                  DUG 17 ;
977
                                  DUP 17 ;
978
                                  NONE (pair nat (map string bytes)) ;
979
                                  DUP 4 ;
980
                                  UPDATE ;
981
                                  DIP { DIG 16 ; DROP } ;
982
                                  DUG 16 ;
983
                                  DROP 2 } ;
984
                           DROP 5 ;
985
                           PAIR 14 ;
986
                           DIG 1 ;
987
                           PAIR } } } } } ;
988
       DIP { DROP 4 } }