BCD

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