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 } {} } }