x
83
parameter (list (sapling_transaction 8));
storage (pair (address %fa1_2_contract) (sapling_state %state 8));
code { UNPAIR ;
PUSH mutez 0 ;
AMOUNT ;
COMPARE ;
GT ;
IF
{ DROP 2 ; PUSH string "UNEXPECTED_XTZ_AMOUNT" ; FAILWITH }
{ DUP 2 ;
CAR ;
CONTRACT %transfer (pair (address %from) (address %to) (nat %value)) ;
IF_NONE
{ DROP 2 ; PUSH string "%TRANSFER_DOESNT_EXIST" ; FAILWITH }
{ DIG 2 ;
NIL operation ;
PAIR ;
DIG 2 ;
ITER { SWAP ;
UNPAIR ;
DUP 2 ;
CDR ;
DIG 3 ;
SAPLING_VERIFY_UPDATE ;
IF_NONE
{ DROP 2 ; PUSH string "INVALID_SAPLING_TX" ; FAILWITH }
{ UNPAIR ;
SWAP ;
UNPAIR ;
PUSH int 0 ;
DUP 2 ;
COMPARE ;
GT ;
IF
{ DIG 2 ;
UNPACK key_hash ;
IF_NONE
{ DROP 4 ;
PUSH string "UNABLE_TO_UNPACK_RECIPIENT" ;
FAILWITH }
{ IMPLICIT_ACCOUNT ;
ADDRESS ;
SWAP ;
ABS ;
SWAP ;
SELF_ADDRESS ;
PAIR 3 ;
DIG 3 ;
DIG 2 ;
UPDATE 2 ;
DIG 2 ;
DUP 4 ;
PUSH mutez 0 ;
DIG 4 ;
TRANSFER_TOKENS ;
CONS ;
PAIR } }
{ DIG 2 ;
UNPACK key_hash ;
IF_NONE
{ PUSH int 0 ;
DUP 2 ;
COMPARE ;
LT ;
IF
{ ABS ;
SELF_ADDRESS ;
SENDER ;
PAIR 3 ;
DIG 3 ;
DIG 2 ;
UPDATE 2 ;
DIG 2 ;
DUP 4 ;
PUSH mutez 0 ;
DIG 4 ;
TRANSFER_TOKENS ;
CONS }
{ DROP ; DIG 2 ; SWAP ; UPDATE 2 ; SWAP } ;
PAIR }
{ DROP 5 ; PUSH string "UNEXPECTED_RECIPIENT" ; FAILWITH } } } } ;
SWAP ;
DROP } } }