BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Bonesy
FA2Ledger
operations (1)Storage Code Interact Tokens Metadata Fork Views Statistics Details
Latest
​x
860
 
1
{ parameter (or
2
              (or
3
                (or
4
                  (list %assert_balances (pair (address %owner)
5
                                              (pair (nat %token_id) (nat %balance))))
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 (pair %burn (address %owner) (pair (nat %token_id) (nat %amount)))
13
                    (unit %confirm_ownership)))
14
              (or
15
                (or
16
                  (or %owner_action
17
                    (or
18
                      (pair %mint (address %owner) (pair (nat %token_id) (nat %amount)))
19
                      (unit %renounce_ownership))
20
                    (address %transfer_ownership))
21
                  (list %transfer (pair (address %from_)
22
                                       (list %txs (pair (address %to_)
23
                                                       (pair (nat %token_id)
24
                                                             (nat %amount)))))))
25
                (list %update_operators (or
26
                                         (pair %add_operator (address %owner)
27
                                                             (pair (address %operator)
28
                                                                   (nat %token_id)))
29
                                         (pair %remove_operator (address %owner)
30
                                                                (pair
31
                                                                  (address %operator)
32
                                                                  (nat %token_id))))))) ;
33
  storage (pair (big_map %metadata string bytes)
34
                (pair (pair %roles (address %owner) (option %pending_owner address))
35
                      (pair (big_map %token_total_supply nat nat)
36
                            (pair (big_map %ledger (pair address nat) nat)
37
                                  (pair
38
                                    (big_map %operators
39
                                      (pair address (pair address nat))
40
                                      unit)
41
                                    (big_map %token_metadata nat
42
                                                             (pair (nat %token_id)
43
                                                                   (map %token_info
44
                                                                     string
45
                                                                     bytes)))))))) ;
46
  code { NIL operation ;
47
         LAMBDA
48
           (pair nat
49
                 (pair (big_map string bytes)
50
                       (pair (pair address (option address))
51
                             (pair (big_map nat nat)
52
                                   (pair (big_map (pair address nat) nat)
53
                                         (pair
54
                                           (big_map (pair address (pair address nat))
55
                                                    unit)
56
                                           (big_map nat (pair nat (map string bytes)))))))))
57
           nat
58
           { UNPAIR ;
59
             SWAP ;
60
             GET 5 ;
61
             SWAP ;
62
             GET ;
63
             IF_NONE { NONE nat } { SOME } ;
64
             IF_NONE { PUSH nat 0 } {} } ;
65
         LAMBDA
66
           (pair address
67
                 (pair nat
68
                       (pair (big_map string bytes)
69
                             (pair (pair address (option address))
70
                                   (pair (big_map nat nat)
71
                                         (pair (big_map (pair address nat) nat)
72
                                               (pair
73
                                                 (big_map
74
                                                   (pair address (pair address nat))
75
                                                   unit)
76
                                                 (big_map nat
77
                                                          (pair nat (map string bytes))))))))))
78
           nat
79
           { UNPAIR 3 ;
80
             DIG 2 ;
81
             GET 7 ;
82
             DUG 2 ;
83
             PAIR ;
84
             GET ;
85
             IF_NONE { NONE nat } { SOME } ;
86
             IF_NONE { PUSH nat 0 } {} } ;
87
         LAMBDA
88
           (pair address
89
                 (pair address
90
                       (pair nat
91
                             (pair (big_map string bytes)
92
                                   (pair (pair address (option address))
93
                                         (pair (big_map nat nat)
94
                                               (pair (big_map (pair address nat) nat)
95
                                                     (pair
96
                                                       (big_map
97
                                                         (pair address
98
                                                               (pair address nat))
99
                                                         unit)
100
                                                       (big_map nat
101
                                                                (pair nat
102
                                                                      (map string bytes)))))))))))
103
           unit
104
           { UNPAIR 4 ;
105
             PUSH bool True ;
106
             DIG 4 ;
107
             GET 9 ;
108
             DIG 4 ;
109
             DUP 5 ;
110
             PAIR ;
111
             DUP 4 ;
112
             PAIR ;
113
             MEM ;
114
             DIG 3 ;
115
             DIG 3 ;
116
             COMPARE ;
117
             EQ ;
118
             OR ;
119
             COMPARE ;
120
             EQ ;
121
             IF {} { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ;
122
             UNIT } ;
123
         LAMBDA
124
           address
125
           unit
126
           { PUSH string "FA2_NOT_OWNER" ;
127
             SWAP ;
128
             SENDER ;
129
             COMPARE ;
130
             EQ ;
131
             IF { DROP } { FAILWITH } ;
132
             UNIT } ;
133
         LAMBDA
134
           (pair nat
135
                 (pair (big_map string bytes)
136
                       (pair (pair address (option address))
137
                             (pair (big_map nat nat)
138
                                   (pair (big_map (pair address nat) nat)
139
                                         (pair
140
                                           (big_map (pair address (pair address nat))
141
                                                    unit)
142
                                           (big_map nat (pair nat (map string bytes)))))))))
143
           unit
144
           { CAR ;
145
             PUSH nat 0 ;
146
             COMPARE ;
147
             EQ ;
148
             IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
149
             UNIT } ;
150
         DIG 6 ;
151
         UNPAIR ;
152
         PUSH string "FA2_DONT_SEND_TEZ" ;
153
         PUSH mutez 0 ;
154
         AMOUNT ;
155
         COMPARE ;
156
         EQ ;
157
         IF { DROP } { FAILWITH } ;
158
         IF_LEFT
159
           { DIG 3 ;
160
             DROP ;
161
             IF_LEFT
162
               { DIG 3 ;
163
                 DROP ;
164
                 DIG 4 ;
165
                 DROP ;
166
                 IF_LEFT
167
                   { DIG 2 ;
168
                     DROP ;
169
                     ITER { PUSH string "FA2_INSUFFICIENT_BALANCE" ;
170
                            DUP 2 ;
171
                            GET 4 ;
172
                            DUP 4 ;
173
                            DUP 4 ;
174
                            GET 3 ;
175
                            DIG 4 ;
176
                            CAR ;
177
                            PAIR 3 ;
178
                            DUP 5 ;
179
                            SWAP ;
180
                            EXEC ;
181
                            COMPARE ;
182
                            GE ;
183
                            IF { DROP } { FAILWITH } } ;
184
                     SWAP ;
185
                     DROP }
186
                   { DIG 4 ;
187
                     DROP ;
188
                     NIL (pair (pair address nat) nat) ;
189
                     DUP 2 ;
190
                     CAR ;
191
                     ITER { DUP 4 ;
192
                            DUP 2 ;
193
                            CDR ;
194
                            PAIR ;
195
                            DUP 6 ;
196
                            SWAP ;
197
                            EXEC ;
198
                            DROP ;
199
                            DUP 4 ;
200
                            DUP 2 ;
201
                            CDR ;
202
                            DUP 3 ;
203
                            CAR ;
204
                            PAIR 3 ;
205
                            DUP 7 ;
206
                            SWAP ;
207
                            EXEC ;
208
                            SWAP ;
209
                            PAIR ;
210
                            CONS } ;
211
                     DIG 3 ;
212
                     DROP ;
213
                     DIG 3 ;
214
                     DROP ;
215
                     NIL operation ;
216
                     DIG 2 ;
217
                     CDR ;
218
                     PUSH mutez 0 ;
219
                     DIG 3 ;
220
                     TRANSFER_TOKENS ;
221
                     CONS ;
222
                     SWAP } }
223
               { IF_LEFT
224
                   { DIG 6 ;
225
                     DROP ;
226
                     SWAP ;
227
                     DUP ;
228
                     DUP 3 ;
229
                     GET 3 ;
230
                     SENDER ;
231
                     DUP 5 ;
232
                     CAR ;
233
                     PAIR 4 ;
234
                     DIG 4 ;
235
                     SWAP ;
236
                     EXEC ;
237
                     DROP ;
238
                     DUP ;
239
                     DUP 3 ;
240
                     GET 3 ;
241
                     PAIR ;
242
                     DIG 3 ;
243
                     SWAP ;
244
                     EXEC ;
245
                     DROP ;
246
                     DUP ;
247
                     DUP 3 ;
248
                     GET 3 ;
249
                     DUP 4 ;
250
                     CAR ;
251
                     PAIR 3 ;
252
                     DIG 3 ;
253
                     SWAP ;
254
                     EXEC ;
255
                     DUP 3 ;
256
                     GET 4 ;
257
                     DUP 2 ;
258
                     COMPARE ;
259
                     GE ;
260
                     IF {} { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } ;
261
                     DUP 3 ;
262
                     GET 4 ;
263
                     SWAP ;
264
                     SUB ;
265
                     ISNAT ;
266
                     IF_NONE { PUSH string "option is None" ; FAILWITH } {} ;
267
                     SWAP ;
268
                     DUP ;
269
                     GET 7 ;
270
                     DUP 3 ;
271
                     DUP 5 ;
272
                     GET 3 ;
273
                     DUP 6 ;
274
                     CAR ;
275
                     PAIR ;
276
                     SWAP ;
277
                     SOME ;
278
                     SWAP ;
279
                     UPDATE ;
280
                     UPDATE 7 ;
281
                     SWAP ;
282
                     DUP 3 ;
283
                     GET 4 ;
284
                     DUP 3 ;
285
                     DUP 5 ;
286
                     GET 3 ;
287
                     PAIR ;
288
                     DIG 5 ;
289
                     SWAP ;
290
                     EXEC ;
291
                     SUB ;
292
                     ISNAT ;
293
                     IF_NONE { PUSH string "option is None" ; FAILWITH } {} ;
294
                     DIG 2 ;
295
                     DUP ;
296
                     GET 5 ;
297
                     DUP 3 ;
298
                     DUP 6 ;
299
                     SWAP ;
300
                     SOME ;
301
                     SWAP ;
302
                     GET 3 ;
303
                     UPDATE ;
304
                     UPDATE 5 ;
305
                     DUG 2 ;
306
                     NIL operation ;
307
                     PUSH int -1 ;
308
                     DUP 6 ;
309
                     GET 4 ;
310
                     INT ;
311
                     MUL ;
312
                     DIG 2 ;
313
                     DUP 6 ;
314
                     GET 3 ;
315
                     NIL (pair address int) ;
316
                     PUSH int -1 ;
317
                     DUP 9 ;
318
                     GET 4 ;
319
                     INT ;
320
                     MUL ;
321
                     DUP 9 ;
322
                     CAR ;
323
                     PAIR ;
324
                     CONS ;
325
                     PAIR 4 ;
326
                     EMIT %total_supply_update (pair
327
                                                 (list (pair (address %owner)
328
                                                            (int %owner_diff)))
329
                                                 (pair (nat %token_id)
330
                                                       (pair (nat %new_total_supply)
331
                                                             (int %diff)))) ;
332
                     CONS ;
333
                     PUSH int -1 ;
334
                     DUP 5 ;
335
                     GET 4 ;
336
                     INT ;
337
                     MUL ;
338
                     DIG 2 ;
339
                     DUP 5 ;
340
                     GET 3 ;
341
                     DIG 5 ;
342
                     CAR ;
343
                     PAIR 4 ;
344
                     EMIT %balance_update (pair (address %owner)
345
                                                (pair (nat %token_id)
346
                                                      (pair (nat %new_balance)
347
                                                            (int %diff)))) ;
348
                     CONS ;
349
                     SWAP }
350
                   { DIG 2 ;
351
                     DROP ;
352
                     DIG 2 ;
353
                     DROP ;
354
                     DIG 2 ;
355
                     DROP ;
356
                     DIG 2 ;
357
                     DROP 2 ;
358
                     PUSH string "NO_PENDING_OWNER" ;
359
                     DUP 2 ;
360
                     GET 3 ;
361
                     CDR ;
362
                     IF_NONE { FAILWITH } { SWAP ; DROP } ;
363
                     PUSH string "INVALID_PENDING_OWNER_ACCESS" ;
364
                     DUP 2 ;
365
                     SENDER ;
366
                     COMPARE ;
367
                     EQ ;
368
                     IF { DROP } { FAILWITH } ;
369
                     SWAP ;
370
                     DUP ;
371
                     GET 3 ;
372
                     DIG 2 ;
373
                     UPDATE 1 ;
374
                     UPDATE 3 ;
375
                     DUP ;
376
                     GET 3 ;
377
                     NONE address ;
378
                     UPDATE 2 ;
379
                     UPDATE 3 } } }
380
           { IF_LEFT
381
               { DIG 3 ;
382
                 DROP ;
383
                 IF_LEFT
384
                   { DIG 3 ;
385
                     DROP ;
386
                     PUSH string "FA2_INVALID_ACCESS" ;
387
                     DUP 3 ;
388
                     GET 3 ;
389
                     CAR ;
390
                     SENDER ;
391
                     COMPARE ;
392
                     EQ ;
393
                     IF { DROP } { FAILWITH } ;
394
                     IF_LEFT
395
                       { IF_LEFT
396
                           { DIG 5 ;
397
                             DROP ;
398
                             SWAP ;
399
                             DUP ;
400
                             DUP 3 ;
401
                             GET 3 ;
402
                             PAIR ;
403
                             DIG 3 ;
404
                             SWAP ;
405
                             EXEC ;
406
                             DROP ;
407
                             DUP 2 ;
408
                             GET 4 ;
409
                             DUP 2 ;
410
                             DUP 4 ;
411
                             GET 3 ;
412
                             DUP 5 ;
413
                             CAR ;
414
                             PAIR 3 ;
415
                             DIG 4 ;
416
                             SWAP ;
417
                             EXEC ;
418
                             ADD ;
419
                             SWAP ;
420
                             DUP ;
421
                             GET 7 ;
422
                             DUP 3 ;
423
                             DUP 5 ;
424
                             GET 3 ;
425
                             DUP 6 ;
426
                             CAR ;
427
                             PAIR ;
428
                             SWAP ;
429
                             SOME ;
430
                             SWAP ;
431
                             UPDATE ;
432
                             UPDATE 7 ;
433
                             SWAP ;
434
                             DUP 3 ;
435
                             GET 4 ;
436
                             DUP 3 ;
437
                             DUP 5 ;
438
                             GET 3 ;
439
                             PAIR ;
440
                             DIG 5 ;
441
                             SWAP ;
442
                             EXEC ;
443
                             ADD ;
444
                             DIG 2 ;
445
                             DUP ;
446
                             GET 5 ;
447
                             DUP 3 ;
448
                             DUP 6 ;
449
                             SWAP ;
450
                             SOME ;
451
                             SWAP ;
452
                             GET 3 ;
453
                             UPDATE ;
454
                             UPDATE 5 ;
455
                             DUG 2 ;
456
                             NIL operation ;
457
                             DUP 5 ;
458
                             GET 4 ;
459
                             INT ;
460
                             DIG 2 ;
461
                             DUP 6 ;
462
                             GET 3 ;
463
                             NIL (pair address int) ;
464
                             DUP 8 ;
465
                             GET 4 ;
466
                             INT ;
467
                             DUP 9 ;
468
                             CAR ;
469
                             PAIR ;
470
                             CONS ;
471
                             PAIR 4 ;
472
                             EMIT %total_supply_update (pair
473
                                                         (list (pair (address %owner)
474
                                                                    (int %owner_diff)))
475
                                                         (pair (nat %token_id)
476
                                                               (pair
477
                                                                 (nat %new_total_supply)
478
                                                                 (int %diff)))) ;
479
                             CONS ;
480
                             DUP 4 ;
481
                             GET 4 ;
482
                             INT ;
483
                             DIG 2 ;
484
                             DUP 5 ;
485
                             GET 3 ;
486
                             DIG 5 ;
487
                             CAR ;
488
                             PAIR 4 ;
489
                             EMIT %balance_update (pair (address %owner)
490
                                                        (pair (nat %token_id)
491
                                                              (pair (nat %new_balance)
492
                                                                    (int %diff)))) ;
493
                             CONS ;
494
                             SWAP }
495
                           { DIG 2 ;
496
                             DROP ;
497
                             DIG 2 ;
498
                             DROP ;
499
                             DIG 2 ;
500
                             DROP 2 ;
501
                             DUP ;
502
                             GET 3 ;
503
                             PUSH address "tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU" ;
504
                             UPDATE 1 ;
505
                             UPDATE 3 } }
506
                       { DIG 2 ;
507
                         DROP ;
508
                         DIG 2 ;
509
                         DROP ;
510
                         DIG 2 ;
511
                         DROP ;
512
                         SWAP ;
513
                         DUP ;
514
                         GET 3 ;
515
                         DIG 2 ;
516
                         SOME ;
517
                         UPDATE 2 ;
518
                         UPDATE 3 } }
519
                   { DIG 5 ;
520
                     DROP ;
521
                     DIG 5 ;
522
                     DROP ;
523
                     SWAP ;
524
                     EMPTY_MAP (pair address nat) nat ;
525
                     NIL operation ;
526
                     DIG 3 ;
527
                     ITER { DUP ;
528
                            CDR ;
529
                            ITER { DUP 5 ;
530
                                   DUP 2 ;
531
                                   GET 3 ;
532
                                   SENDER ;
533
                                   DUP 5 ;
534
                                   CAR ;
535
                                   PAIR 4 ;
536
                                   DUP 8 ;
537
                                   SWAP ;
538
                                   EXEC ;
539
                                   DROP ;
540
                                   DUP 5 ;
541
                                   DUP 2 ;
542
                                   GET 3 ;
543
                                   PAIR ;
544
                                   DUP 7 ;
545
                                   SWAP ;
546
                                   EXEC ;
547
                                   DROP ;
548
                                   DUP 5 ;
549
                                   DUP 2 ;
550
                                   GET 3 ;
551
                                   DUP 4 ;
552
                                   CAR ;
553
                                   PAIR 3 ;
554
                                   DUP 9 ;
555
                                   SWAP ;
556
                                   EXEC ;
557
                                   DUP 2 ;
558
                                   GET 4 ;
559
                                   DUP 2 ;
560
                                   COMPARE ;
561
                                   LT ;
562
                                   IF
563
                                     { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH }
564
                                     {} ;
565
                                   PUSH bool False ;
566
                                   DUP 6 ;
567
                                   DUP 4 ;
568
                                   GET 3 ;
569
                                   DUP 6 ;
570
                                   CAR ;
571
                                   PAIR ;
572
                                   MEM ;
573
                                   COMPARE ;
574
                                   EQ ;
575
                                   IF
576
                                     { DIG 4 ;
577
                                       DUP 2 ;
578
                                       DUP 4 ;
579
                                       GET 3 ;
580
                                       DUP 6 ;
581
                                       CAR ;
582
                                       PAIR ;
583
                                       SWAP ;
584
                                       SOME ;
585
                                       SWAP ;
586
                                       UPDATE ;
587
                                       DUG 4 }
588
                                     {} ;
589
                                   DIG 5 ;
590
                                   DUP ;
591
                                   GET 7 ;
592
                                   DUP 4 ;
593
                                   GET 4 ;
594
                                   DIG 3 ;
595
                                   SUB ;
596
                                   ABS ;
597
                                   DUP 4 ;
598
                                   GET 3 ;
599
                                   DUP 6 ;
600
                                   CAR ;
601
                                   PAIR ;
602
                                   SWAP ;
603
                                   SOME ;
604
                                   SWAP ;
605
                                   UPDATE ;
606
                                   UPDATE 7 ;
607
                                   DUG 4 ;
608
                                   DUP 5 ;
609
                                   DUP 2 ;
610
                                   GET 3 ;
611
                                   DUP 3 ;
612
                                   CAR ;
613
                                   PAIR 3 ;
614
                                   DUP 9 ;
615
                                   SWAP ;
616
                                   EXEC ;
617
                                   PUSH bool False ;
618
                                   DUP 6 ;
619
                                   DUP 4 ;
620
                                   GET 3 ;
621
                                   DUP 5 ;
622
                                   CAR ;
623
                                   PAIR ;
624
                                   MEM ;
625
                                   COMPARE ;
626
                                   EQ ;
627
                                   IF
628
                                     { DIG 4 ;
629
                                       DUP 2 ;
630
                                       DUP 4 ;
631
                                       GET 3 ;
632
                                       DUP 5 ;
633
                                       CAR ;
634
                                       PAIR ;
635
                                       SWAP ;
636
                                       SOME ;
637
                                       SWAP ;
638
                                       UPDATE ;
639
                                       DUG 4 }
640
                                     {} ;
641
                                   DIG 5 ;
642
                                   DUP ;
643
                                   GET 7 ;
644
                                   DUP 4 ;
645
                                   GET 4 ;
646
                                   DIG 3 ;
647
                                   ADD ;
648
                                   DUP 4 ;
649
                                   GET 3 ;
650
                                   DUP 5 ;
651
                                   CAR ;
652
                                   PAIR ;
653
                                   SWAP ;
654
                                   SOME ;
655
                                   SWAP ;
656
                                   UPDATE ;
657
                                   UPDATE 7 ;
658
                                   DUG 4 ;
659
                                   DIG 2 ;
660
                                   DUP 2 ;
661
                                   GET 4 ;
662
                                   DUP 3 ;
663
                                   GET 3 ;
664
                                   DIG 3 ;
665
                                   CAR ;
666
                                   DUP 5 ;
667
                                   CAR ;
668
                                   PAIR 4 ;
669
                                   EMIT %transfer_event (pair (address %from_)
670
                                                              (pair (address %to_)
671
                                                                    (pair
672
                                                                      (nat %token_id)
673
                                                                      (nat %amount)))) ;
674
                                   CONS ;
675
                                   SWAP } ;
676
                            DROP } ;
677
                     DIG 3 ;
678
                     DROP ;
679
                     DIG 3 ;
680
                     DROP ;
681
                     SWAP ;
682
                     ITER { UNPAIR ;
683
                            DUP 4 ;
684
                            DUP 2 ;
685
                            CDR ;
686
                            DUP 3 ;
687
                            CAR ;
688
                            PAIR 3 ;
689
                            DUP 6 ;
690
                            SWAP ;
691
                            EXEC ;
692
                            DIG 2 ;
693
                            DUP 2 ;
694
                            SUB ;
695
                            SWAP ;
696
                            DUP 3 ;
697
                            CDR ;
698
                            DIG 3 ;
699
                            CAR ;
700
                            PAIR 4 ;
701
                            EMIT %balance_update (pair (address %owner)
702
                                                       (pair (nat %token_id)
703
                                                             (pair (nat %new_balance)
704
                                                                   (int %diff)))) ;
705
                            CONS } ;
706
                     DIG 2 ;
707
                     DROP ;
708
                     SWAP } }
709
               { DIG 4 ;
710
                 DROP ;
711
                 DIG 4 ;
712
                 DROP ;
713
                 DIG 4 ;
714
                 DROP ;
715
                 DIG 4 ;
716
                 DROP ;
717
                 SWAP ;
718
                 NIL operation ;
719
                 DIG 2 ;
720
                 ITER { IF_LEFT
721
                          { DUP 3 ;
722
                            DUP 2 ;
723
                            GET 4 ;
724
                            PAIR ;
725
                            DUP 5 ;
726
                            SWAP ;
727
                            EXEC ;
728
                            DROP ;
729
                            DUP ;
730
                            CAR ;
731
                            DUP 6 ;
732
                            SWAP ;
733
                            EXEC ;
734
                            DROP ;
735
                            DIG 2 ;
736
                            DUP ;
737
                            GET 9 ;
738
                            PUSH (option unit) (Some Unit) ;
739
                            DUP 4 ;
740
                            GET 4 ;
741
                            DUP 5 ;
742
                            GET 3 ;
743
                            PAIR ;
744
                            DUP 5 ;
745
                            CAR ;
746
                            PAIR ;
747
                            UPDATE ;
748
                            UPDATE 9 ;
749
                            DUG 2 ;
750
                            SWAP ;
751
                            PUSH bool True ;
752
                            DUP 3 ;
753
                            GET 4 ;
754
                            DUP 4 ;
755
                            GET 3 ;
756
                            DIG 4 ;
757
                            CAR ;
758
                            PAIR 4 ;
759
                            EMIT %operator_update (pair (address %owner)
760
                                                        (pair (address %operator)
761
                                                              (pair (nat %token_id)
762
                                                                    (bool %is_operator)))) }
763
                          { DUP 3 ;
764
                            DUP 2 ;
765
                            GET 4 ;
766
                            PAIR ;
767
                            DUP 5 ;
768
                            SWAP ;
769
                            EXEC ;
770
                            DROP ;
771
                            DUP ;
772
                            CAR ;
773
                            DUP 6 ;
774
                            SWAP ;
775
                            EXEC ;
776
                            DROP ;
777
                            DIG 2 ;
778
                            DUP ;
779
                            GET 9 ;
780
                            DUP 3 ;
781
                            GET 4 ;
782
                            DUP 4 ;
783
                            GET 3 ;
784
                            PAIR ;
785
                            DUP 4 ;
786
                            CAR ;
787
                            PAIR ;
788
                            NONE unit ;
789
                            SWAP ;
790
                            UPDATE ;
791
                            UPDATE 9 ;
792
                            DUG 2 ;
793
                            SWAP ;
794
                            PUSH bool False ;
795
                            DUP 3 ;
796
                            GET 4 ;
797
                            DUP 4 ;
798
                            GET 3 ;
799
                            DIG 4 ;
800
                            CAR ;
801
                            PAIR 4 ;
802
                            EMIT %operator_update (pair (address %owner)
803
                                                        (pair (address %operator)
804
                                                              (pair (nat %token_id)
805
                                                                    (bool %is_operator)))) } ;
806
                        CONS } ;
807
                 DIG 2 ;
808
                 DROP ;
809
                 DIG 2 ;
810
                 DROP ;
811
                 SWAP } } ;
812
         SWAP ;
813
         PAIR } ;
814
  view "owner" unit address { GET 5 ; CAR } ;
815
  view "is_owner" address bool { UNPAIR ; SWAP ; GET 3 ; CAR ; COMPARE ; EQ } ;
816
  view "get_balance" (pair (address %owner) (nat %token_id)) nat
817
        { UNPAIR ;
818
          SWAP ;
819
          GET 7 ;
820
          SWAP ;
821
          GET ;
822
          IF_NONE { NONE nat } { SOME } ;
823
          IF_NONE { PUSH nat 0 } {} } ;
824
  view "get_total_supply" nat nat
825
        { UNPAIR ;
826
          SWAP ;
827
          GET 5 ;
828
          SWAP ;
829
          GET ;
830
          IF_NONE { NONE nat } { SOME } ;
831
          IF_NONE { PUSH nat 0 } {} } ;
832
  view "is_operator" (pair (address %owner) (pair (address %operator) (nat %token_id)))
833
        bool
834
        { UNPAIR ;
835
          DUP ;
836
          GET 3 ;
837
          DUP 2 ;
838
          CAR ;
839
          DIG 3 ;
840
          GET 9 ;
841
          DIG 3 ;
842
          GET 4 ;
843
          DUP 4 ;
844
          PAIR ;
845
          DUP 3 ;
846
          PAIR ;
847
          MEM ;
848
          DUG 2 ;
849
          COMPARE ;
850
          EQ ;
851
          OR } ;
852
  view "get_token_metadata" nat (map string bytes)
853
        { UNPAIR ;
854
          SWAP ;
855
          GET 10 ;
856
          SWAP ;
857
          GET ;
858
          IF_NONE { NONE (pair nat (map string bytes)) } { SOME } ;
859
          IF_NONE { EMPTY_MAP string bytes } { CDR } } ;
860
  view "is_token" nat bool { UNPAIR ; SWAP ; GET 5 ; SWAP ; MEM } }