x
107
parameter (or (option %delegate key_hash) (or (unit %default) (or (or %edit_depositor (bool %allow_any) (pair %allow_account bool address)) (pair %withdraw mutez (contract unit)))));storage (pair (address %admin) (pair (pair %handle (nat %id) (address %owner)) (or %depositors (unit %any) (set %whitelist address))));code { UNPAIR ; IF_LEFT { PUSH string "TEZ_IN_TRANSACTION_DISALLOWED" ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; PUSH string "ONLY_OWNER_CAN_CALL" ; DUP 3 ; GET 3 ; CDR ; SENDER ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; NIL operation ; SWAP ; SET_DELEGATE ; CONS } { IF_LEFT { DROP ; DUP ; GET 4 ; IF_LEFT { DROP ; PUSH bool True } { SENDER ; MEM } ; DUP 2 ; GET 3 ; CDR ; SENDER ; COMPARE ; EQ ; OR ; IF {} { PUSH string "UNAUTHORIZED_DEPOSITOR" ; FAILWITH } ; DUP ; CAR ; CONTRACT %register_oven_deposit (pair (pair %handle (nat %id) (address %owner)) (mutez %amount)) ; IF_NONE { PUSH string "MISSING_DEPOSIT_ENTRYPOINT" ; FAILWITH } {} ; DUP 2 ; NIL operation ; DIG 2 ; PUSH mutez 0 ; AMOUNT ; DIG 5 ; GET 3 ; PAIR ; TRANSFER_TOKENS ; CONS } { IF_LEFT { PUSH string "TEZ_IN_TRANSACTION_DISALLOWED" ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; PUSH string "ONLY_OWNER_CAN_CALL" ; DUP 3 ; GET 3 ; CDR ; SENDER ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; IF_LEFT { IF { UNIT ; LEFT (set address) } { EMPTY_SET address ; RIGHT unit } } { UNPAIR ; DUP 3 ; GET 4 ; IF_LEFT { DROP 3 ; PUSH string "SET_ANY_OFF_FIRST" ; FAILWITH } { SWAP ; IF { PUSH bool True ; DIG 2 ; UPDATE } { PUSH bool False ; DIG 2 ; UPDATE } ; RIGHT unit } } ; UPDATE 4 ; NIL operation } { PUSH string "ONLY_MAIN_CONTRACT_CAN_CALL" ; DUP 3 ; CAR ; SENDER ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; SWAP ; NIL operation ; DUP 3 ; CDR ; DIG 3 ; CAR ; UNIT ; TRANSFER_TOKENS ; CONS } } } ; PAIR }