x
422
parameter (or
(or
(or (pair %transfer (address :from) (address :to) (nat :value))
(pair %approve (address :spender) (nat :value)))
(or (pair %approveCAS (address :spender) (nat :value) (nat :expected))
(or
(pair %getAllowance
(pair %viewParam (address :owner) (address :spender))
(contract %viewCallbackTo nat))
(pair %getBalance (address :owner %viewParam)
(contract %viewCallbackTo nat)))))
(or
(or
(pair %getTotalSupply (unit %viewParam) (contract %viewCallbackTo nat))
(or (bool %setPause) (address %setAdministrator)))
(or
(pair %getAdministrator (unit %viewParam)
(contract %viewCallbackTo address))
(or (pair %mint (address :to) (nat :value))
(pair %burn (address :from) (nat :value))))));
storage (pair (big_map %ledger address (nat :balance))
(big_map %approvals (pair (address :owner) (address :spender)) nat)
(pair %fields (address %admin) (bool %paused) (nat %totalSupply)));
code { CAST (pair
(or
(or (or (pair address address nat) (pair address nat))
(or (pair address nat nat)
(or (pair (pair address address) (contract nat))
(pair address (contract nat)))))
(or (or (pair unit (contract nat)) (or bool address))
(or (pair unit (contract address))
(or (pair address nat) (pair address nat)))))
(big_map address nat)
(big_map (pair address address) nat)
address
bool
nat) ;
NIL operation ;
SWAP ;
UNPAIR ;
DIP { UNPAIR ; DIP { UNPAIR } ; DIP { DIP { UNPAIR ; DIP { UNPAIR } } } } ;
DUP ;
IF_LEFT
{ IF_LEFT
{ IF_LEFT
{ DUP 6 ;
DUP ;
IF
{ UNIT ; PUSH string "TokenOperationsArePaused" ; PAIR ; FAILWITH }
{} ;
DUP 2 ;
CDR ;
CAR ;
DUP 3 ;
CAR ;
DUP 4 ;
CDR ;
CDR ;
DUP 2 ;
SENDER ;
COMPARE ;
NEQ ;
IF
{ DUP 5 ;
CAR ;
DUP 6 ;
CDR ;
CDR ;
DUP 10 ;
DUP ;
DUP 4 ;
DIP { SENDER } ;
PAIR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP ;
DUP 4 ;
PAIR ;
DUP 4 ;
DUP 3 ;
SUB ;
ISNAT ;
IF_NONE
{ DUP ; PUSH string "NotEnoughAllowance" ; PAIR ; FAILWITH }
{ DUP 14 ;
DUP 7 ;
DIP { SENDER } ;
PAIR ;
DUP 2 ;
DUP 4 ;
DUP ;
INT ;
EQ ;
IF { DROP ; NONE nat } { SOME } ;
DUP 3 ;
UPDATE ;
DIP 16 { DROP } ;
DUG 15 ;
DROP ;
DROP 2 } ;
DROP ;
DROP 2 ;
DROP 2 }
{} ;
DUP 7 ;
DUP ;
DUP 4 ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 3 ;
DUP 2 ;
SUB ;
ISNAT ;
IF_NONE
{ DUP ; DUP 4 ; PAIR ; PUSH string "NotEnoughBalance" ; PAIR ; FAILWITH }
{} ;
PUSH nat 0 ;
DUP 2 ;
COMPARE ;
EQ ;
IF { NONE nat } { DUP ; SOME } ;
DUP 4 ;
DUP 2 ;
DUP 8 ;
UPDATE ;
DIP 11 { DROP } ;
DUG 10 ;
DUP 15 ;
DUP 6 ;
DUP 2 ;
SUB ;
ISNAT ;
IF_NONE
{ PUSH string "Unexpected: Negative total supply" ; FAILWITH }
{} ;
DUP ;
DIP 17 { DROP } ;
DUG 16 ;
DROP 2 ;
DUP 11 ;
PUSH nat 0 ;
DUP 7 ;
COMPARE ;
NEQ ;
IF
{ DUP ;
DUP 9 ;
GET ;
IF_NONE { DUP 6 } { DUP ; DUP 8 ; ADD ; SWAP ; DROP } ;
DUP 2 ;
DUP 2 ;
SOME ;
DUP 11 ;
UPDATE ;
DIP 13 { DROP } ;
DUG 12 ;
DUP 17 ;
DUP 8 ;
DUP 2 ;
ADD ;
DIP 18 { DROP } ;
DUG 17 ;
DROP 2 }
{} ;
DROP 2 ;
DROP 2 ;
DROP 2 ;
DROP 2 ;
DROP 2 }
{ DUP 6 ;
DUP ;
IF
{ UNIT ; PUSH string "TokenOperationsArePaused" ; PAIR ; FAILWITH }
{} ;
DUP 2 ;
CAR ;
DUP 3 ;
CDR ;
DUP 7 ;
DUP ;
DUP 4 ;
SENDER ;
PAIR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
PUSH nat 0 ;
DUP 4 ;
COMPARE ;
NEQ ;
PUSH nat 0 ;
DUP 3 ;
COMPARE ;
NEQ ;
AND ;
IF
{ DUP ; PUSH string "UnsafeAllowanceChange" ; PAIR ; FAILWITH }
{} ;
DUP 9 ;
DUP 5 ;
SENDER ;
PAIR ;
DUP 2 ;
DUP 6 ;
DUP ;
INT ;
EQ ;
IF { DROP ; NONE nat } { SOME } ;
DUP 3 ;
UPDATE ;
DIP 11 { DROP } ;
DUG 10 ;
DROP 2 ;
DROP 2 ;
DROP 2 ;
DROP 2 } }
{ IF_LEFT
{ DUP 6 ;
DUP ;
IF
{ UNIT ; PUSH string "TokenOperationsArePaused" ; PAIR ; FAILWITH }
{} ;
DUP 2 ;
CAR ;
DUP 3 ;
CDR ;
CAR ;
DUP 4 ;
CDR ;
CDR ;
DUP 8 ;
DUP ;
DUP 5 ;
SENDER ;
PAIR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 3 ;
DUP 2 ;
PAIR ;
DUP 2 ;
DUP 5 ;
COMPARE ;
NEQ ;
IF { DUP ; PUSH string "AllowanceMismatch" ; PAIR ; FAILWITH } {} ;
DUP 11 ;
DUP 7 ;
SENDER ;
PAIR ;
DUP 2 ;
DUP 8 ;
DUP ;
INT ;
EQ ;
IF { DROP ; NONE nat } { SOME } ;
DUP 3 ;
UPDATE ;
DIP 13 { DROP } ;
DUG 12 ;
DROP 2 ;
DROP 2 ;
DROP 2 ;
DROP 2 ;
DROP 2 }
{ IF_LEFT
{ DUP 4 ;
DUP ;
DUP 3 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 3 ;
CDR ;
AMOUNT ;
DUP 3 ;
TRANSFER_TOKENS ;
DUG 9 ;
DIP 9 { CONS } ;
DROP ;
DROP 2 }
{ DUP 3 ;
DUP ;
DUP 3 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 3 ;
CDR ;
AMOUNT ;
DUP 3 ;
TRANSFER_TOKENS ;
DUG 9 ;
DIP 9 { CONS } ;
DROP ;
DROP 2 } } } }
{ IF_LEFT
{ IF_LEFT
{ DUP 7 ; DUP 2 ; CDR ; AMOUNT ; DUP 3 ; TRANSFER_TOKENS ; DUG 8 ; DIP 8 { CONS } ; DROP 2 }
{ IF_LEFT
{ DUP 5 ;
DUP ;
SENDER ;
COMPARE ;
NEQ ;
IF
{ UNIT ; PUSH string "SenderIsNotAdmin" ; PAIR ; FAILWITH }
{} ;
DUP 2 ;
DIP 7 { DROP } ;
DUG 6 ;
DROP 2 }
{ DUP 5 ;
DUP ;
SENDER ;
COMPARE ;
NEQ ;
IF
{ UNIT ; PUSH string "SenderIsNotAdmin" ; PAIR ; FAILWITH }
{} ;
DUP 2 ;
DIP 6 { DROP } ;
DUG 5 ;
DROP 2 } } }
{ IF_LEFT
{ DUP 5 ; DUP 2 ; CDR ; AMOUNT ; DUP 3 ; TRANSFER_TOKENS ; DUG 8 ; DIP 8 { CONS } ; DROP 2 }
{ IF_LEFT
{ DUP 5 ;
DUP ;
SENDER ;
COMPARE ;
NEQ ;
IF
{ UNIT ; PUSH string "SenderIsNotAdmin" ; PAIR ; FAILWITH }
{} ;
DUP 4 ;
PUSH nat 0 ;
DUP 4 ;
CDR ;
COMPARE ;
NEQ ;
IF
{ DUP ;
DUP 4 ;
CAR ;
GET ;
IF_NONE
{ DUP 3 ; CDR }
{ DUP ; DUP 5 ; CDR ; ADD ; SWAP ; DROP } ;
DUP 2 ;
DUP 2 ;
SOME ;
DUP 6 ;
CAR ;
UPDATE ;
DIP 6 { DROP } ;
DUG 5 ;
DUP 10 ;
DUP 5 ;
CDR ;
DUP 2 ;
ADD ;
DIP 11 { DROP } ;
DUG 10 ;
DROP 2 }
{} ;
DROP ;
DROP 2 }
{ DUP 5 ;
DUP ;
SENDER ;
COMPARE ;
NEQ ;
IF
{ UNIT ; PUSH string "SenderIsNotAdmin" ; PAIR ; FAILWITH }
{} ;
DUP 4 ;
DUP ;
DUP 4 ;
CAR ;
GET ;
IF_NONE { PUSH nat 0 } {} ;
DUP 4 ;
CDR ;
DUP 2 ;
SUB ;
ISNAT ;
IF_NONE
{ DUP ; DUP 5 ; CDR ; PAIR ; PUSH string "NotEnoughBalance" ; PAIR ; FAILWITH }
{} ;
PUSH nat 0 ;
DUP 2 ;
COMPARE ;
EQ ;
IF { NONE nat } { DUP ; SOME } ;
DUP 4 ;
DUP 2 ;
DUP 8 ;
CAR ;
UPDATE ;
DIP 8 { DROP } ;
DUG 7 ;
DUP 12 ;
DUP 7 ;
CDR ;
DUP 2 ;
SUB ;
ISNAT ;
IF_NONE
{ PUSH string "Unexpected: Negative total supply" ; FAILWITH }
{} ;
DUP ;
DIP 14 { DROP } ;
DUG 13 ;
DROP 2 ;
DROP 2 ;
DROP 2 ;
DROP 2 } } } } ;
DROP ;
DIP { DIP { DIP { PAIR } ; PAIR } } ;
DIP { PAIR } ;
PAIR ;
SWAP ;
PAIR }