x
158
parameter (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)))))
(or
(list %transfer (pair (address %from_)
(list %txs (pair (address %to_)
(pair (nat %token_id) (nat %amount))))))
(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 (nat %last_token_id) (big_map %ledger nat address))
(pair (big_map %metadata string bytes)
(pair
(big_map %operators
(pair (address %owner)
(pair (address %operator) (nat %token_id)))
unit)
(big_map %token_metadata nat
(pair (nat %token_id)
(map %token_info string bytes))))));
code { UNPAIR ;
IF_LEFT
{ NIL operation ;
DUP ;
DUP 3 ;
CDR ;
PUSH mutez 0 ;
DUP 5 ;
CAR ;
MAP { DUP 7 ;
GET 6 ;
DUP 2 ;
CDR ;
MEM ;
IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
DUP ;
CAR ;
DUP 8 ;
CAR ;
CDR ;
DUP 3 ;
CDR ;
GET ;
IF_NONE { PUSH int 370 ; FAILWITH } {} ;
COMPARE ;
EQ ;
IF { PUSH nat 1 } { PUSH nat 0 } ;
SWAP ;
PAIR } ;
DIG 4 ;
DROP ;
DIG 4 ;
DROP ;
TRANSFER_TOKENS ;
CONS }
{ IF_LEFT
{ DUP ;
ITER { DUP ;
CDR ;
ITER { DUP 4 ;
GET 6 ;
DUP 2 ;
GET 3 ;
MEM ;
IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
DUP 2 ;
CAR ;
SENDER ;
COMPARE ;
EQ ;
IF
{ PUSH bool True }
{ DUP 4 ; GET 5 ; DUP 2 ; GET 3 ; SENDER ; DUP 5 ; CAR ; PAIR 3 ; MEM } ;
IF {} { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ;
PUSH nat 0 ;
DUP 2 ;
GET 4 ;
COMPARE ;
GT ;
IF
{ PUSH nat 1 ;
DUP 2 ;
GET 4 ;
COMPARE ;
EQ ;
IF
{ DUP 2 ;
CAR ;
DUP 5 ;
CAR ;
CDR ;
DUP 3 ;
GET 3 ;
GET ;
IF_NONE { PUSH int 377 ; FAILWITH } {} ;
COMPARE ;
EQ }
{ PUSH bool False } ;
IF
{}
{ PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } ;
DIG 3 ;
UNPAIR ;
UNPAIR ;
SWAP ;
DUP 4 ;
CAR ;
SOME ;
DIG 4 ;
GET 3 ;
UPDATE ;
SWAP ;
PAIR ;
PAIR ;
DUG 2 }
{ DROP } } ;
DROP } ;
DROP }
{ DUP ;
ITER { IF_LEFT
{ SENDER ;
DUP 2 ;
CAR ;
COMPARE ;
EQ ;
IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
DIG 2 ;
DUP ;
GET 5 ;
PUSH (option unit) (Some Unit) ;
DIG 3 ;
UPDATE ;
UPDATE 5 ;
SWAP }
{ SENDER ;
DUP 2 ;
CAR ;
COMPARE ;
EQ ;
IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
DIG 2 ;
DUP ;
GET 5 ;
NONE unit ;
DIG 3 ;
UPDATE ;
UPDATE 5 ;
SWAP } } ;
DROP } ;
NIL operation } ;
PAIR }