BCD

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