x
505
{ parameter (or (or (unit %accept_administrator) (or (pair %balance_of (list %requests (pair (address %owner) (nat %token_id))) (contract %callback (list (pair (pair %request (address %owner) (nat %token_id)) (nat %balance))))) (nat %mint))) (or (or (pair %set_metadata (string %k) (bytes %v)) (list %transfer (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount))))))) (or (address %transfer_administrator) (list %update_operators (or (pair %add_operator (address %owner) (pair (address %operator) (nat %token_id))) (pair %remove_operator (address %owner) (pair (address %operator) (nat %token_id)))))))) ; storage (pair (pair (pair (address %administrator) (nat %counter)) (pair (big_map %ledger (pair address nat) nat) (pair (big_map %metadata string bytes) (big_map %operators (pair (address %owner) (pair (address %operator) (nat %token_id))) unit)))) (pair (pair (option %proposed_administrator address) (big_map %supply nat nat)) (pair (big_map %token_data nat (map string bytes)) (pair (big_map %token_metadata nat (pair (nat %token_id) (map %token_info string bytes))) (big_map %token_royalties nat (pair (pair %minter (address %address) (nat %royalties)) (pair %creator (address %address) (nat %royalties)))))))) ; code { UNPAIR ; IF_LEFT { IF_LEFT { DROP ; DUP ; GET 3 ; CAR ; IF_NONE { PUSH string "FA_NO_NEW_ADMIN" ; FAILWITH } {} ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FA_NOT_PROPOSED_ADMIN" ; FAILWITH } ; UNPAIR ; UNPAIR ; CDR ; SENDER ; PAIR ; PAIR ; SWAP ; UNPAIR ; CDR ; NONE address ; PAIR ; PAIR ; SWAP ; PAIR ; NIL operation } { IF_LEFT { NIL operation ; DUP ; DUP 3 ; CDR ; PUSH mutez 0 ; DUP 5 ; CAR ; MAP { DUP 7 ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; CDR ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 7 ; CAR ; GET 3 ; SWAP ; DUP ; CDR ; SWAP ; DUP ; DUG 3 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SWAP ; PAIR } ; DIG 4 ; DROP ; DIG 4 ; DROP ; TRANSFER_TOKENS ; CONS } { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CDR ; DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; DUP 6 ; SOME ; DUP 6 ; SENDER ; PAIR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DIG 5 ; SOME ; DIG 5 ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; PUSH nat 1 ; ADD ; SWAP ; PAIR ; PAIR ; PAIR ; NIL operation } } } { IF_LEFT { IF_LEFT { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP 6 ; CDR ; SOME ; DIG 6 ; CAR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR } { DUP ; ITER { DUP ; CDR ; ITER { DUP ; GET 3 ; DUP 5 ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 3 ; CAR ; DUP ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 6 ; CAR ; GET 6 ; DUP 3 ; SENDER ; DUP 4 ; PAIR 3 ; MEM } ; IF {} { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ; PUSH nat 0 ; DUP 4 ; GET 4 ; COMPARE ; GT ; IF { DUP 6 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; DUP 7 ; GET 4 ; DIG 10 ; CAR ; GET 3 ; DUP 8 ; DUP 8 ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; SOME ; DUP 7 ; DIG 6 ; PAIR ; UPDATE ; PAIR ; SWAP ; PAIR ; PAIR ; DUP ; DUG 5 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; DUP 6 ; GET 4 ; DIG 9 ; CAR ; GET 3 ; DUP 7 ; DUP 9 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DIG 5 ; DIG 6 ; CAR ; PAIR ; UPDATE ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 } { DROP 3 } } ; DROP } ; DROP } } { IF_LEFT { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CDR ; DIG 3 ; SOME ; PAIR ; PAIR ; SWAP ; PAIR } { DUP ; ITER { IF_LEFT { DUP 3 ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; GET 4 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FA2_SENDER_IS_NOT_OWNER" ; FAILWITH } ; DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; PUSH (option unit) (Some Unit) ; DIG 6 ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } { DUP 3 ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; GET 4 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "FA2_SENDER_IS_NOT_OWNER" ; FAILWITH } ; DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; NONE unit ; DIG 6 ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } } ; DROP } } ; NIL operation } ; PAIR } ; view "all_tokens" unit (list nat) { UNPAIR ; NIL nat ; DUP 3 ; CAR ; CAR ; CDR ; PUSH nat 0 ; DUP ; DUP 3 ; COMPARE ; GT ; LOOP { DUP ; DIG 3 ; SWAP ; CONS ; DUG 2 ; PUSH nat 1 ; ADD ; DUP ; DUP 3 ; COMPARE ; GT } ; DROP 2 ; SWAP ; DROP ; SWAP ; DROP ; NIL nat ; SWAP ; ITER { CONS } } ; view "count_tokens" unit nat { CDR ; CAR ; CAR ; CDR } ; view "get_balance" (pair (address %owner) (nat %token_id)) nat { UNPAIR ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; CDR ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; SWAP ; CAR ; GET 3 ; SWAP ; GET ; IF_NONE { PUSH nat 0 } {} } ; view "is_operator" (pair (address %owner) (pair (address %operator) (nat %token_id))) bool { UNPAIR ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; GET 4 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; SWAP ; CAR ; GET 6 ; SWAP ; MEM } ; view "token_data" nat (map string bytes) { UNPAIR ; SWAP ; GET 5 ; SWAP ; GET ; IF_NONE { PUSH int 383 ; FAILWITH } {} } ; view "token_exists" nat bool { UNPAIR ; SWAP ; CAR ; CAR ; CDR ; COMPARE ; GT } ; view "token_metadata" nat (pair (nat %token_id) (map %token_info string bytes)) { UNPAIR ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; SWAP ; GET 7 ; SWAP ; GET ; IF_NONE { PUSH int 373 ; FAILWITH } {} } ; view "token_royalties" nat (pair (pair %minter (address %address) (nat %royalties)) (pair %creator (address %address) (nat %royalties))) { UNPAIR ; SWAP ; GET 8 ; SWAP ; GET ; IF_NONE { PUSH int 393 ; FAILWITH } {} } ; view "total_supply" nat nat { UNPAIR ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; SWAP ; GET 3 ; CDR ; SWAP ; GET ; IF_NONE { PUSH nat 0 } {} } }