x
782
parameter (or
(or
(or
(or (or (address %declare_ownership) (unit %claim_ownership))
(or (unit %pause) (unit %unpause)))
(or (or (address %add_minter) (address %remove_minter))
(or (pair %set_metadata (string %k) (option %d bytes))
(pair %set_token_metadata (nat %tid) (map %tdata string bytes)))))
(or
(or
(or (address %set_permits)
(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))))))
(or
(list %update_operators_for_all (or (address %add_for_all)
(address %remove_for_all)))
(list %do_transfer (pair (address %from_)
(list %txs (pair (address %to_)
(pair (nat %token_id)
(nat %amount))))))))
(or
(or
(list %transfer_gasless (pair
(list %transfer_params (pair
(address %from_)
(list %txs (pair
(address %to_)
(pair
(nat %token_id)
(nat %amount))))))
(key %user_pk)
(signature %user_sig)))
(list %transfer (pair (address %from_)
(list %txs (pair (address %to_)
(pair (nat %token_id)
(nat %amount)))))))
(or
(pair %mint (address %tow)
(list %mint_lines (pair (nat %ml_token_id)
(nat %ml_amount))))
(pair %burn (nat %tid) (nat %nbt))))))
(pair %burn_gasless
(list %bg_lines (pair (nat %bgl_token_id) (nat %bgl_amount)))
(key %bg_user_pk)
(signature %bg_user_sig)));
storage (pair (address %owner) (address %permits) (string %token_metadata_path)
(nat %TOTAL_SUPPLY)
(option %owner_candidate address)
(bool %paused)
(big_map %minters address unit)
(big_map %token_metadata nat
(pair (nat %token_id)
(map %token_info string bytes)))
(big_map %ledger (pair address nat) nat)
(big_map %operator (pair address nat address) unit)
(big_map %operator_for_all (pair address address) unit)
(big_map %metadata string bytes));
code { LAMBDA
(list (pair (address %from_)
(list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount))))))
(option address)
{ PUSH unit Unit ;
DUP 2 ;
IF_CONS
{ DUP ;
GET 1 ;
DUP 3 ;
ITER { DUP ;
GET 1 ;
DUP 3 ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } {} ;
DROP 1 } ;
DUP ;
SOME ;
DIP 1 { DIG 3 ; DROP 1 } ;
DUG 3 ;
DROP 3 }
{ NONE address ; SWAP ; DROP 1 } ;
SWAP ;
DROP 1 } ;
LAMBDA
(pair (big_map (pair address address) unit)
(big_map (pair address nat address) unit)
(list (pair (address %from_)
(list %txs (pair (address %to_)
(pair (nat %token_id) (nat %amount)))))))
bool
{ UNPAIR 3 ;
PUSH unit Unit ;
PUSH bool True ;
DUP 5 ;
ITER { DUP ;
GET 1 ;
DUP 2 ;
GET 2 ;
DUP ;
ITER { DUP 5 ;
IF
{ DUP 3 ;
SENDER ;
COMPARE ;
NEQ ;
IF
{ DUP 8 ;
DUP 4 ;
DUP 3 ;
GET 2 ;
GET 1 ;
PAIR ;
SENDER ;
PAIR ;
MEM ;
IF
{ PUSH bool True }
{ DUP 7 ;
DUP 4 ;
SENDER ;
PAIR ;
MEM ;
IF { PUSH bool True } { PUSH bool False } } }
{ PUSH bool True } ;
IF { PUSH bool True } { PUSH bool False } }
{ PUSH bool False } ;
DIP 1 { DIG 4 ; DROP 1 } ;
DUG 4 ;
DROP 1 } ;
DROP 3 } ;
DUP ;
DIP 1 { SWAP ; DROP 1 } ;
SWAP ;
DROP 1 ;
DUG 3 ;
DROP 3 } ;
LAMBDA
(pair address
(list (pair (address %from_)
(list %txs (pair (address %to_)
(pair (nat %token_id) (nat %amount)))))))
bool
{ UNPAIR ;
PUSH unit Unit ;
PUSH bool True ;
DUP 4 ;
ITER { DUP 2 ;
IF
{ DUP ; GET 1 ; DUP 5 ; COMPARE ; EQ ; IF { PUSH bool True } { PUSH bool False } }
{ PUSH bool False } ;
DIP 1 { SWAP ; DROP 1 } ;
SWAP ;
DROP 1 } ;
DUP ;
DIP 1 { SWAP ; DROP 1 } ;
SWAP ;
DROP 1 ;
DUG 2 ;
DROP 2 } ;
LAMBDA
string
bytes
{ PUSH unit Unit ;
DUP 2 ;
PACK ;
PUSH int 6 ;
DUP 2 ;
SIZE ;
INT ;
SUB ;
ABS ;
DUP 2 ;
DUP 2 ;
PUSH nat 6 ;
SLICE ;
IF_NONE { PUSH string "ERROR_SLICE" ; FAILWITH } {} ;
DUP ;
DIP 1 { DIG 3 ; DROP 1 } ;
DUG 3 ;
DROP 3 ;
SWAP ;
DROP 1 } ;
NIL operation ;
DIG 5 ;
UNPAIR ;
DIP 1 { UNPAIR 12 } ;
IF_LEFT
{ IF_LEFT
{ IF_LEFT
{ IF_LEFT
{ IF_LEFT
{ DUP 2 ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP ;
SOME ;
DIP 1 { DIG 5 ; DROP 1 } ;
DUG 5 ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR }
{ DROP 1 ;
DUP 5 ;
IF_NONE
{ PUSH bool False }
{ SENDER ; DUP 2 ; COMPARE ; EQ ; SWAP ; DROP 1 } ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
SENDER ;
SWAP ;
DROP 1 ;
NONE address ;
DIP 1 { DIG 4 ; DROP 1 } ;
DUG 4 ;
PAIR 12 ;
SWAP ;
PAIR } }
{ IF_LEFT
{ DROP 1 ;
DUP ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP 6 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
PUSH bool True ;
DIP 1 { DIG 5 ; DROP 1 } ;
DUG 5 ;
PAIR 12 ;
SWAP ;
PAIR }
{ DROP 1 ;
DUP ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP 6 ;
NOT ;
IF { PUSH string "CONTRACT_NOT_PAUSED" ; FAILWITH } {} ;
PUSH bool False ;
DIP 1 { DIG 5 ; DROP 1 } ;
DUG 5 ;
PAIR 12 ;
SWAP ;
PAIR } } }
{ IF_LEFT
{ IF_LEFT
{ DUP 2 ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP 7 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
DUP 8 ;
DUP 2 ;
MEM ;
IF
{ PUSH string "minters" ;
PUSH string "KEY_EXISTS" ;
PAIR ;
FAILWITH }
{ DUP 8 ;
PUSH unit Unit ;
SOME ;
DUP 3 ;
UPDATE ;
DIP 1 { DIG 7 ; DROP 1 } ;
DUG 7 } ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR }
{ DUP 2 ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP 7 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
DUP 8 ;
NONE unit ;
DUP 3 ;
UPDATE ;
DIP 1 { DIG 7 ; DROP 1 } ;
DUG 7 ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR } }
{ IF_LEFT
{ UNPAIR ;
SWAP ;
DUP 3 ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP 8 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
DUP 14 ;
DUP 2 ;
DUP 4 ;
UPDATE ;
DIP 1 { DIG 13 ; DROP 1 } ;
DUG 13 ;
DROP 2 ;
PAIR 12 ;
SWAP ;
PAIR }
{ UNPAIR ;
SWAP ;
DUP 3 ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP 8 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
DUP 10 ;
DUP 2 ;
DUP 4 ;
PAIR ;
SOME ;
DUP 4 ;
UPDATE ;
DIP 1 { DIG 9 ; DROP 1 } ;
DUG 9 ;
DROP 2 ;
PAIR 12 ;
SWAP ;
PAIR } } } }
{ IF_LEFT
{ IF_LEFT
{ IF_LEFT
{ DUP 2 ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP 7 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
DUP ;
DIP 1 { DIG 2 ; DROP 1 } ;
DUG 2 ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR }
{ DUP ;
ITER { DUP ;
IF_LEFT
{ SENDER ;
DUP 2 ;
GET 1 ;
GET 0 ;
COMPARE ;
EQ ;
NOT ;
IF
{ PUSH string "CALLER_NOT_OWNER" ; FAILWITH }
{} ;
DUP 13 ;
PUSH unit Unit ;
SOME ;
DUP 3 ;
GET 1 ;
GET 0 ;
DUP 4 ;
GET 2 ;
GET 2 ;
PAIR ;
DUP 4 ;
GET 2 ;
GET 1 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 12 ; DROP 1 } ;
DUG 12 ;
DROP 1 }
{ SENDER ;
DUP 2 ;
GET 1 ;
GET 0 ;
COMPARE ;
EQ ;
NOT ;
IF
{ PUSH string "CALLER_NOT_OWNER" ; FAILWITH }
{} ;
DUP 13 ;
NONE unit ;
DUP 3 ;
GET 1 ;
GET 0 ;
DUP 4 ;
GET 2 ;
GET 2 ;
PAIR ;
DUP 4 ;
GET 2 ;
GET 1 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 12 ; DROP 1 } ;
DUG 12 ;
DROP 1 } ;
DROP 1 } ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR } }
{ IF_LEFT
{ DUP ;
ITER { DUP ;
IF_LEFT
{ DUP 14 ;
PUSH unit Unit ;
SOME ;
SENDER ;
DUP 4 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 13 ; DROP 1 } ;
DUG 13 ;
DROP 1 }
{ DUP 14 ;
NONE unit ;
SENDER ;
DUP 4 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 13 ; DROP 1 } ;
DUG 13 ;
DROP 1 } ;
DROP 1 } ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR }
{ SELF_ADDRESS ;
SENDER ;
COMPARE ;
EQ ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP ;
ITER { DUP ;
GET 1 ;
DUP 2 ;
GET 2 ;
DUP ;
ITER { DUP ;
GET 2 ;
GET 1 ;
DUP 15 ;
DUP 2 ;
DUP 6 ;
PAIR ;
GET ;
IF_NONE
{ NONE nat }
{ DUP ; SOME ; SWAP ; DROP 1 } ;
IF_NONE { PUSH nat 0 } {} ;
DUP 3 ;
GET 2 ;
GET 2 ;
INT ;
DUP 2 ;
INT ;
SUB ;
ISNAT ;
IF_NONE
{ PUSH string "FA2_INSUFFICIENT_BALANCE" ;
FAILWITH }
{} ;
PUSH nat 0 ;
DUP 2 ;
COMPARE ;
EQ ;
IF
{ DUP 17 ;
NONE nat ;
DUP 5 ;
DUP 9 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 16 ; DROP 1 } ;
DUG 16 }
{ DUP 17 ;
DUP 2 ;
SOME ;
DUP 5 ;
DUP 9 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 16 ; DROP 1 } ;
DUG 16 } ;
DUP 17 ;
DUP 4 ;
DUP 6 ;
GET 1 ;
GET 0 ;
PAIR ;
MEM ;
IF
{ DUP 17 ;
DUP 4 ;
DUP 6 ;
GET 1 ;
GET 0 ;
PAIR ;
GET ;
IF_NONE
{ PUSH string "ledger" ;
PUSH string "ASSET_NOT_FOUND" ;
PAIR ;
FAILWITH }
{} ;
DUP 18 ;
DUP 6 ;
GET 2 ;
GET 2 ;
DUP 3 ;
ADD ;
SOME ;
DUP 6 ;
DUP 8 ;
GET 1 ;
GET 0 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 17 ; DROP 1 } ;
DUG 17 ;
DROP 1 }
{ DUP 17 ;
DUP 5 ;
GET 2 ;
GET 2 ;
PUSH nat 0 ;
ADD ;
SOME ;
DUP 5 ;
DUP 7 ;
GET 1 ;
GET 0 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 16 ; DROP 1 } ;
DUG 16 } ;
DROP 4 } ;
DROP 3 } ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR } } }
{ IF_LEFT
{ IF_LEFT
{ DUP ;
ITER { DUP ;
GET 1 ;
DUP 2 ;
GET 3 ;
DUP 3 ;
GET 4 ;
DUP 2 ;
HASH_KEY ;
IMPLICIT_ACCOUNT ;
ADDRESS ;
DUP 21 ;
DUP 5 ;
DUP 3 ;
PAIR ;
EXEC ;
NOT ;
IF { PUSH string "SIGNER_NOT_FROM" ; FAILWITH } {} ;
NIL operation ;
NIL operation ;
DUP 21 ;
ITER { CONS } ;
DUP 10 ;
CONTRACT %check (pair key signature bytes) ;
IF_NONE
{ PUSH string "check" ;
PUSH string "ENTRY_NOT_FOUND" ;
PAIR ;
FAILWITH }
{} ;
PUSH mutez 0 ;
DUP 8 ;
PACK ;
DUP 7 ;
PAIR ;
DUP 8 ;
PAIR ;
TRANSFER_TOKENS ;
CONS ;
ITER { CONS } ;
DIP 1 { DIG 18 ; DROP 1 } ;
DUG 18 ;
NIL operation ;
NIL operation ;
DUP 21 ;
ITER { CONS } ;
SELF_ADDRESS ;
CONTRACT %do_transfer (list (pair address
(list (pair address
(pair nat
nat))))) ;
IF_NONE
{ PUSH string "do_transfer" ;
PUSH string "ENTRY_NOT_FOUND" ;
PAIR ;
FAILWITH }
{} ;
PUSH mutez 0 ;
DUP 8 ;
TRANSFER_TOKENS ;
CONS ;
ITER { CONS } ;
DIP 1 { DIG 18 ; DROP 1 } ;
DUG 18 ;
DROP 5 } ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR }
{ DUP 17 ;
DUP 2 ;
DUP 13 ;
PAIR ;
DUP 14 ;
PAIR ;
EXEC ;
NOT ;
IF
{ DUP 18 ;
DUP 2 ;
EXEC ;
IF_NONE
{}
{ NIL operation ;
NIL operation ;
DUP 17 ;
ITER { CONS } ;
DUP 6 ;
CONTRACT %consume (pair address bytes string) ;
IF_NONE
{ PUSH string "consume" ;
PUSH string "ENTRY_NOT_FOUND" ;
PAIR ;
FAILWITH }
{} ;
PUSH mutez 0 ;
PUSH string "FA2_NOT_OPERATOR" ;
DUP 7 ;
PACK ;
PAIR ;
DUP 6 ;
PAIR ;
TRANSFER_TOKENS ;
CONS ;
ITER { CONS } ;
DIP 1 { DIG 14 ; DROP 1 } ;
DUG 14 ;
DROP 1 } }
{} ;
NIL operation ;
NIL operation ;
DUP 16 ;
ITER { CONS } ;
SELF_ADDRESS ;
CONTRACT %do_transfer (list (pair address
(list (pair address
(pair nat nat))))) ;
IF_NONE
{ PUSH string "do_transfer" ;
PUSH string "ENTRY_NOT_FOUND" ;
PAIR ;
FAILWITH }
{} ;
PUSH mutez 0 ;
DUP 5 ;
TRANSFER_TOKENS ;
CONS ;
ITER { CONS } ;
DIP 1 { DIG 13 ; DROP 1 } ;
DUG 13 ;
DROP 1 ;
PAIR 12 ;
SWAP ;
PAIR } }
{ IF_LEFT
{ UNPAIR ;
SWAP ;
DUP 9 ;
SENDER ;
MEM ;
NOT ;
IF { PUSH string "INVALID_CALLER" ; FAILWITH } {} ;
DUP 8 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
DUP ;
ITER { DUP 12 ;
DUP 2 ;
GET 1 ;
DUP 5 ;
PAIR ;
MEM ;
IF
{ DUP 12 ;
DUP 2 ;
GET 1 ;
DUP 5 ;
PAIR ;
GET ;
IF_NONE
{ PUSH string "ledger" ;
PUSH string "ASSET_NOT_FOUND" ;
PAIR ;
FAILWITH }
{} ;
DUP 13 ;
DUP 3 ;
GET 2 ;
DUP 3 ;
ADD ;
SOME ;
DUP 4 ;
GET 1 ;
DUP 7 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 12 ; DROP 1 } ;
DUG 12 ;
DROP 1 }
{ DUP 12 ;
DUP 2 ;
GET 2 ;
PUSH nat 0 ;
ADD ;
SOME ;
DUP 3 ;
GET 1 ;
DUP 6 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 11 ; DROP 1 } ;
DUG 11 } ;
DROP 1 } ;
DROP 2 ;
PAIR 12 ;
SWAP ;
PAIR }
{ UNPAIR ;
SWAP ;
DUP 11 ;
DUP 3 ;
SENDER ;
PAIR ;
GET ;
IF_NONE { NONE nat } { DUP ; SOME ; SWAP ; DROP 1 } ;
IF_NONE
{ PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH }
{} ;
DUP 2 ;
DUP 2 ;
COMPARE ;
GE ;
NOT ;
IF { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } {} ;
DUP 9 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
DUP 2 ;
DUP 2 ;
COMPARE ;
GT ;
IF
{ DUP 12 ;
DUP 4 ;
SENDER ;
PAIR ;
GET ;
IF_NONE
{ PUSH string "ledger" ;
PUSH string "ASSET_NOT_FOUND" ;
PAIR ;
FAILWITH }
{} ;
DUP 13 ;
PUSH int 0 ;
DUP 5 ;
INT ;
DUP 4 ;
SUB ;
COMPARE ;
GE ;
IF
{ DUP 4 ; INT ; DUP 3 ; SUB ; ABS }
{ PUSH string "NAT_NEG_ASSIGN" ; FAILWITH } ;
SOME ;
DUP 6 ;
SENDER ;
PAIR ;
UPDATE ;
DIP 1 { DIG 12 ; DROP 1 } ;
DUG 12 ;
DROP 1 }
{ DUP 12 ;
NONE nat ;
DUP 5 ;
SENDER ;
PAIR ;
UPDATE ;
DIP 1 { DIG 11 ; DROP 1 } ;
DUG 11 } ;
DROP 3 ;
PAIR 12 ;
SWAP ;
PAIR } } } } }
{ DUP 7 ;
IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ;
DUP ;
GET 1 ;
DUP 2 ;
GET 3 ;
DUP 3 ;
GET 4 ;
DUP 2 ;
HASH_KEY ;
IMPLICIT_ACCOUNT ;
ADDRESS ;
NIL operation ;
NIL operation ;
DUP 20 ;
ITER { CONS } ;
DUP 9 ;
CONTRACT %check (pair key signature bytes) ;
IF_NONE
{ PUSH string "check" ; PUSH string "ENTRY_NOT_FOUND" ; PAIR ; FAILWITH }
{} ;
PUSH mutez 0 ;
DUP 8 ;
PACK ;
DUP 7 ;
PAIR ;
DUP 8 ;
PAIR ;
TRANSFER_TOKENS ;
CONS ;
ITER { CONS } ;
DIP 1 { DIG 17 ; DROP 1 } ;
DUG 17 ;
DUP 4 ;
ITER { DUP ;
GET 1 ;
DUP 16 ;
DUP 2 ;
DUP 5 ;
PAIR ;
GET ;
IF_NONE { NONE nat } { DUP ; SOME ; SWAP ; DROP 1 } ;
IF_NONE { PUSH nat 0 } {} ;
DUP 3 ;
GET 2 ;
INT ;
DUP 2 ;
INT ;
SUB ;
ISNAT ;
IF_NONE { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } {} ;
PUSH nat 0 ;
DUP 2 ;
COMPARE ;
EQ ;
IF
{ DUP 18 ;
NONE nat ;
DUP 5 ;
DUP 8 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 17 ; DROP 1 } ;
DUG 17 }
{ DUP 18 ;
DUP 2 ;
SOME ;
DUP 5 ;
DUP 8 ;
PAIR ;
UPDATE ;
DIP 1 { DIG 17 ; DROP 1 } ;
DUG 17 } ;
DROP 4 } ;
DROP 5 ;
PAIR 12 ;
SWAP ;
PAIR } ;
DIP 1 { DROP 4 } }