x
202
parameter (or
(or
(or (pair %approve (address %spender) (nat %value))
(pair %getAllowance
(pair %request (address %owner) (address %spender))
(contract %callback nat)))
(or (pair %getBalance (address %owner) (contract %callback nat))
(pair %getTotalSupply (unit %request) (contract %callback nat))))
(or (pair %mintOrBurn (int %quantity) (address %target))
(pair %transfer (address %from) (address %to) (nat %value))));
storage (pair (big_map %tokens address nat)
(big_map %allowances (pair (address %owner) (address %spender)) nat)
(address %admin)
(nat %total_supply)
(big_map %metadata string bytes)
(big_map %token_metadata nat
(pair (nat %token_id)
(map %token_info string bytes))));
code { UNPAIR ;
PUSH mutez 0 ;
AMOUNT ;
COMPARE ;
NEQ ;
IF { PUSH string "DontSendTez" ; FAILWITH } {} ;
IF_LEFT
{ IF_LEFT
{ IF_LEFT
{ DUP 2 ;
GET 3 ;
DUP 2 ;
CAR ;
SENDER ;
PAIR ;
PUSH nat 0 ;
DUP 4 ;
CDR ;
COMPARE ;
GT ;
PUSH nat 0 ;
DUP 4 ;
DUP 4 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
COMPARE ;
GT ;
AND ;
IF { PUSH string "UnsafeAllowanceChange" ; FAILWITH } {} ;
DIG 3 ;
DIG 3 ;
CDR ;
DIG 3 ;
PUSH nat 0 ;
DUP 3 ;
COMPARE ;
EQ ;
IF { SWAP ; DROP ; NONE nat } { SWAP ; SOME } ;
DIG 3 ;
UPDATE ;
UPDATE 3 ;
NIL operation }
{ DUP 2 ;
NIL operation ;
DUP 3 ;
CDR ;
PUSH mutez 0 ;
DIG 5 ;
GET 3 ;
DIG 5 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
TRANSFER_TOKENS ;
CONS } }
{ IF_LEFT
{ DUP 2 ;
NIL operation ;
DUP 3 ;
CDR ;
PUSH mutez 0 ;
DIG 5 ;
CAR ;
DIG 5 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
TRANSFER_TOKENS }
{ DUP 2 ; NIL operation ; DIG 2 ; CDR ; PUSH mutez 0 ; DIG 4 ; GET 7 ; TRANSFER_TOKENS } ;
CONS } }
{ IF_LEFT
{ DUP 2 ;
GET 5 ;
SENDER ;
COMPARE ;
NEQ ;
IF { PUSH string "OnlyAdmin" ; FAILWITH } {} ;
DUP ;
CAR ;
DUP 3 ;
CAR ;
DUP 3 ;
CDR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
ADD ;
ISNAT ;
IF_NONE
{ PUSH string "Cannot burn more than the target's balance." ; FAILWITH }
{} ;
DUP 2 ;
CAR ;
DUP 4 ;
GET 7 ;
ADD ;
ABS ;
DUP 4 ;
DIG 4 ;
CAR ;
PUSH nat 0 ;
DUP 5 ;
COMPARE ;
EQ ;
IF { DIG 3 ; DROP ; NONE nat } { DIG 3 ; SOME } ;
DIG 4 ;
CDR ;
UPDATE ;
UPDATE 1 ;
SWAP ;
UPDATE 7 }
{ DUP 2 ;
GET 3 ;
DUP 3 ;
CAR ;
DUP 3 ;
CAR ;
SENDER ;
COMPARE ;
EQ ;
IF
{ SWAP }
{ SENDER ;
DUP 4 ;
CAR ;
PAIR ;
DUP 4 ;
GET 4 ;
DUP 4 ;
DUP 3 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
SUB ;
ISNAT ;
IF_NONE { PUSH string "NotEnoughAllowance" ; FAILWITH } {} ;
DIG 3 ;
PUSH nat 0 ;
DUP 3 ;
COMPARE ;
EQ ;
IF { SWAP ; DROP ; NONE nat } { SWAP ; SOME } ;
DIG 2 ;
UPDATE } ;
DUP 3 ;
GET 4 ;
DUP 3 ;
DUP 5 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
SUB ;
ISNAT ;
IF_NONE { PUSH string "NotEnoughBalance" ; FAILWITH } {} ;
DIG 2 ;
PUSH nat 0 ;
DUP 3 ;
COMPARE ;
EQ ;
IF { SWAP ; DROP ; NONE nat } { SWAP ; SOME } ;
DUP 4 ;
CAR ;
UPDATE ;
DUP 3 ;
GET 4 ;
DUP 2 ;
DUP 5 ;
GET 3 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
ADD ;
DIG 4 ;
DIG 2 ;
PUSH nat 0 ;
DUP 4 ;
COMPARE ;
EQ ;
IF { DIG 2 ; DROP ; NONE nat } { DIG 2 ; SOME } ;
DIG 4 ;
GET 3 ;
UPDATE ;
UPDATE 1 ;
SWAP ;
UPDATE 3 } ;
NIL operation } ;
PAIR }