x
232
parameter (or (or (or (address %setAdminCandidate) (unit %acceptAdminCandidate)) (or (bytes %setMetadataUri) (pair %grantRole (string %irole) (list %iaddrs address)))) (or (or (pair %revokeRole (string %irole) (list %iaddrs address)) (pair %setMintingLimit (nat %id) (nat %lim))) (pair %validateMint (nat %id) (nat %serialNr))));storage (pair (address %admin) (pair (option %adminCandidate address) (pair (map %role string (set address)) (pair (big_map %mintingLimits nat nat) (big_map %metadata string bytes)))));code { LAMBDA (pair (map string (set address)) (pair string address)) bool { UNPAIR 3 ; PUSH unit Unit ; DUP 2 ; DUP 4 ; GET ; IF_NONE { PUSH string "role" ; PUSH string "AssetNotFound" ; PAIR ; FAILWITH } {} ; DUP 5 ; MEM ; SWAP ; DROP ; DUG 3 ; DROP 3 } ; LAMBDA (pair string (pair (map string (set address)) (pair string (lambda (pair (map string (set address)) (pair string address)) bool)))) bool { UNPAIR 4 ; PUSH unit Unit ; DUP 5 ; SENDER ; PUSH string "minter" ; PAIR ; DUP 5 ; PAIR ; EXEC ; IF { PUSH bool True ; SWAP ; DROP } { PUSH string "CALLER_NOT_MINTER" ; FAILWITH } ; DUG 4 ; DROP 4 } ; DIG 2 ; UNPAIR ; DIP { UNPAIR 5 } ; IF_LEFT { IF_LEFT { IF_LEFT { DUP 2 ; SENDER ; COMPARE ; EQ ; NOT ; IF { PUSH string "InvalidCaller" ; FAILWITH } {} ; DUP ; SOME ; DIP { DIG 2 ; DROP } ; DUG 2 ; DROP ; PAIR 5 ; NIL operation ; PAIR } { DROP ; DUP 2 ; IF_NONE { PUSH string "ADMIN_CANDIDATE_NOT_SET" ; FAILWITH } { DUP ; SENDER ; COMPARE ; EQ ; NOT ; IF { PUSH string "CALLER_NOT_ADMIN_CANDIDATE" ; FAILWITH } {} ; DUP ; DIP { DIG 1 ; DROP } ; DUG 1 ; NONE address ; DIP { DIG 2 ; DROP } ; DUG 2 ; DROP } ; PAIR 5 ; NIL operation ; PAIR } } { IF_LEFT { DUP 2 ; SENDER ; COMPARE ; EQ ; NOT ; IF { PUSH string "InvalidCaller" ; FAILWITH } {} ; DIG 5 ; DUP 2 ; SOME ; PUSH string "" ; UPDATE ; DUG 5 ; DROP ; PAIR 5 ; NIL operation ; PAIR } { UNPAIR ; SWAP ; DUP 3 ; SENDER ; COMPARE ; EQ ; NOT ; IF { PUSH string "InvalidCaller" ; FAILWITH } {} ; DUP ; ITER { DUP 6 ; DUP 7 ; DUP 5 ; GET ; IF_NONE { PUSH string "role" ; PUSH string "AssetNotFound" ; PAIR ; FAILWITH } {} ; PUSH bool True ; DUP 4 ; UPDATE ; SOME ; DUP 5 ; UPDATE ; DIP { DIG 5 ; DROP } ; DUG 5 ; DROP } ; DROP 2 ; PAIR 5 ; NIL operation ; PAIR } } } { IF_LEFT { IF_LEFT { UNPAIR ; SWAP ; DUP 3 ; SENDER ; COMPARE ; EQ ; NOT ; IF { PUSH string "InvalidCaller" ; FAILWITH } {} ; DUP ; ITER { DUP 6 ; DUP 7 ; DUP 5 ; GET ; IF_NONE { PUSH string "role" ; PUSH string "AssetNotFound" ; PAIR ; FAILWITH } {} ; PUSH bool False ; DUP 4 ; UPDATE ; SOME ; DUP 5 ; UPDATE ; DIP { DIG 5 ; DROP } ; DUG 5 ; DROP } ; DROP 2 ; PAIR 5 ; NIL operation ; PAIR } { UNPAIR ; SWAP ; DUP 8 ; DUP 10 ; PUSH string "minter" ; PAIR ; DUP 7 ; PAIR ; PUSH string "CALLER_NOT_MINTER" ; PAIR ; EXEC ; NOT ; IF { PUSH string "r0" ; PUSH string "InvalidCondition" ; PAIR ; FAILWITH } {} ; DUP 6 ; DUP 3 ; MEM ; IF { PUSH string "MINTING_LIMIT_ALREADY_SET" ; FAILWITH } {} ; DUP 6 ; DUP 3 ; MEM ; IF { PUSH string "mintingLimits" ; PUSH string "KeyExists" ; PAIR ; FAILWITH } { DUP 6 ; DUP 2 ; SOME ; DUP 4 ; UPDATE ; DIP { DIG 5 ; DROP } ; DUG 5 } ; DROP 2 ; PAIR 5 ; NIL operation ; PAIR } } { UNPAIR ; SWAP ; DUP 6 ; DUP 3 ; MEM ; NOT ; IF { PUSH string "SERIAL_NUMBER_OUT_OF_BOUNDS" ; FAILWITH } {} ; DUP 6 ; DUP 3 ; GET ; IF_NONE { PUSH string "mintingLimits" ; PUSH string "AssetNotFound" ; PAIR ; FAILWITH } {} ; DUP 2 ; COMPARE ; LE ; PUSH nat 0 ; DUP 3 ; COMPARE ; GT ; AND ; NOT ; IF { PUSH string "SERIAL_NUMBER_OUT_OF_BOUNDS" ; FAILWITH } {} ; DROP 2 ; PAIR 5 ; NIL operation ; PAIR } } ; DIP { DROP 2 } }