BCD

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