x
254
{ parameter (or (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))))) (list %transfer (pair (address %from_) (list %txs (pair (address %to_) (nat %token_id) (nat %amount)))))) (or (map %update_metadata string bytes) (list %update_operators (or (pair %add_operator (address %owner) (address %operator) (nat %token_id)) (pair %remove_operator (address %owner) (address %operator) (nat %token_id)))))) ; storage (pair (big_map %ledger address nat) (big_map %operators address (set address)) (nat %total_supply) (big_map %metadata string bytes) (big_map %token_metadata nat (pair (nat %token_id) (map %token_info string bytes))) (address %admin)) ; code { LAMBDA nat unit { PUSH nat 0 ; SWAP ; COMPARE ; EQ ; IF { UNIT } { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } } ; SWAP ; UNPAIR ; IF_LEFT { IF_LEFT { DUP 2 ; NIL operation ; DUP 3 ; CDR ; PUSH mutez 0 ; NIL (pair (pair address nat) nat) ; DIG 5 ; CAR ; ITER { SWAP ; DUP 2 ; CDR ; DUP 9 ; SWAP ; EXEC ; DROP ; DUP 7 ; CAR ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH nat 0 } {} ; DIG 2 ; PAIR ; CONS } ; DIG 5 ; DIG 6 ; DROP 2 ; TRANSFER_TOKENS ; CONS } { DUP 2 ; DUP 3 ; CAR ; DIG 2 ; ITER { SWAP ; PUSH string "FA2_NOT_OPERATOR" ; DUP 5 ; GET 3 ; DUP 4 ; CAR ; GET ; IF_NONE { EMPTY_SET address } {} ; SENDER ; MEM ; SENDER ; DUP 5 ; CAR ; COMPARE ; EQ ; OR ; IF { DROP } { FAILWITH } ; DUP 2 ; CDR ; ITER { SWAP ; DUP 2 ; GET 3 ; DUP 7 ; SWAP ; EXEC ; DROP ; DUP ; PUSH string "FA2_INSUFFICIENT_BALANCE" ; DUP 4 ; GET 4 ; PUSH nat 0 ; DIG 4 ; DUP 7 ; CAR ; GET ; IF_NONE {} { SWAP ; DROP } ; SUB ; ISNAT ; IF_NONE { FAILWITH } { SWAP ; DROP } ; DUP 4 ; CAR ; SWAP ; SOME ; SWAP ; UPDATE ; DUP ; DUP 3 ; GET 4 ; PUSH nat 0 ; DIG 3 ; DUP 5 ; CAR ; GET ; IF_NONE {} { SWAP ; DROP } ; ADD ; DIG 2 ; CAR ; SWAP ; SOME ; SWAP ; UPDATE } ; SWAP ; DROP } ; DIG 2 ; DIG 3 ; DROP 2 ; UPDATE 1 ; NIL operation } } { IF_LEFT { DIG 2 ; DROP ; SWAP ; DUP ; GET 10 ; PUSH string "SENDER_NOT_ADMIN" ; SENDER ; DIG 2 ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; DUP ; GET 9 ; DIG 2 ; PUSH nat 0 ; PAIR ; SOME ; PUSH nat 0 ; UPDATE ; UPDATE 9 } { DUP 2 ; DIG 2 ; GET 3 ; DIG 2 ; ITER { IF_LEFT { PUSH bool True } { PUSH bool False } ; SWAP ; DUP ; GET 4 ; DUP 6 ; SWAP ; EXEC ; DROP ; PUSH string "FA2_NOT_OWNER" ; DUP 2 ; CAR ; SENDER ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; EMPTY_SET address ; DUP 4 ; DUP 3 ; CAR ; GET ; IF_NONE {} { SWAP ; DROP } ; DIG 2 ; DUP 3 ; GET 3 ; UPDATE ; DIG 2 ; SWAP ; DIG 2 ; CAR ; SWAP ; SOME ; SWAP ; UPDATE } ; DIG 2 ; DROP ; UPDATE 3 } ; NIL operation } ; PAIR } ; view "get_balance" (pair (address %owner) (nat %token_id)) nat { UNPAIR ; PUSH nat 0 ; DUP 2 ; CDR ; COMPARE ; EQ ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; SWAP ; CAR ; SWAP ; CAR ; GET ; IF_NONE { PUSH nat 0 } {} } ; view "total_supply" nat nat { UNPAIR ; PUSH nat 0 ; SWAP ; COMPARE ; EQ ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; GET 5 } ; view "all_tokens" unit (list nat) { DROP ; NIL nat ; PUSH nat 0 ; CONS } ; view "is_operator" (pair (address %owner) (address %operator) (nat %token_id)) bool { UNPAIR ; PUSH nat 0 ; DUP 2 ; GET 4 ; COMPARE ; EQ ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; SWAP ; GET 3 ; DUP 2 ; CAR ; GET ; IF_NONE { EMPTY_SET address } {} ; SWAP ; GET 3 ; MEM } ; view "token_metadata" nat (pair (nat %token_id) (map %token_info string bytes)) { UNPAIR ; PUSH nat 0 ; DUP 2 ; COMPARE ; EQ ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; SWAP ; GET 9 ; SWAP ; GET ; IF_NONE { PUSH string "NO_METADATA_PROVIDED" ; FAILWITH } {} } }