x
332
parameter (or (or (pair %initiate (pair (pair (bytes %hashedSecret) (address %participant)) (pair (nat %payoffAmount) (timestamp %refundTime))) (pair (pair (address %tokenAddress) (nat %tokenId)) (nat %totalAmount))) (bytes %redeem)) (bytes %refund));storage (big_map bytes (pair (pair (pair (address %initiator) (address %participant)) (pair (nat %payoffAmount) (timestamp %refundTime))) (pair (pair (address %tokenAddress) (nat %tokenId)) (nat %totalAmount))));code { UNPAIR ; AMOUNT ; PUSH mutez 0 ; COMPARE ; NEQ ; IF { PUSH string "this contract does not accept tez" ; FAILWITH } {} ; IF_LEFT { IF_LEFT { DUP ; CDR ; CDR ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; CAR ; COMPARE ; GT ; IF { PUSH string "payoff amount exceeds the total" ; FAILWITH } {} ; NOW ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; CDR ; COMPARE ; LE ; IF { PUSH string "refund time has already come" ; FAILWITH } {} ; DUP ; CAR ; CAR ; CAR ; SIZE ; PUSH nat 32 ; COMPARE ; NEQ ; IF { PUSH string "hash size doesn't equal 32 bytes" ; FAILWITH } {} ; DUP ; CAR ; CAR ; CDR ; SOURCE ; COMPARE ; EQ ; IF { PUSH string "SOURCE cannot act as participant" ; FAILWITH } {} ; DUP ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF { PUSH string "SENDER cannot act as participant" ; FAILWITH } {} ; DUP ; CDR ; CDR ; SWAP ; DUP ; DUG 2 ; CDR ; CAR ; CDR ; DUP 3 ; CDR ; CAR ; CAR ; PAIR ; PAIR ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; CDR ; DUP 3 ; CAR ; CDR ; CAR ; PAIR ; DUP 3 ; CAR ; CAR ; CDR ; SENDER ; PAIR ; PAIR ; PAIR ; DUP 3 ; DUP 3 ; CAR ; CAR ; CAR ; GET ; IF_NONE { UNIT ; DIG 3 ; DIG 2 ; DUP 4 ; CAR ; CAR ; CAR ; SWAP ; SOME ; SWAP ; UPDATE } { DROP 2 ; PUSH string "swap for this hash is already initiated" ; FAILWITH } ; SWAP ; DROP ; SWAP ; DUP ; DUG 2 ; CDR ; CAR ; CAR ; CONTRACT %transfer (list (pair address (list (pair address (pair nat nat))))) ; IF_NONE { PUSH string "expected transfer entrypoint" ; FAILWITH } {} ; DUP 3 ; CDR ; CDR ; SELF_ADDRESS ; SENDER ; PAIR ; DIG 4 ; CDR ; CAR ; CDR ; DIG 3 ; DIG 2 ; UNPAIR ; DIG 2 ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 7 ; DIG 7 ; PAIR ; DIG 6 ; PAIR ; CONS ; DIG 4 ; PAIR ; CONS ; TRANSFER_TOKENS ; SWAP ; NIL operation } { DUP ; SIZE ; PUSH nat 32 ; COMPARE ; NEQ ; IF { PUSH string "secret size doesn't equal 32 bytes" ; FAILWITH } {} ; SHA256 ; SHA256 ; SWAP ; DUP ; DUG 2 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH string "no swap for such hash" ; FAILWITH } {} ; DUP ; CAR ; CDR ; CDR ; NOW ; COMPARE ; GE ; IF { PUSH string "refund time has already come" ; FAILWITH } {} ; DUP ; CDR ; CAR ; CAR ; CONTRACT %transfer (list (pair address (list (pair address (pair nat nat))))) ; IF_NONE { PUSH string "expected transfer entrypoint" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; CAR ; DUP 3 ; CDR ; CDR ; SUB ; ABS ; DUP 3 ; CAR ; CAR ; CDR ; SELF_ADDRESS ; PAIR ; DUP 4 ; CDR ; CAR ; CDR ; DUP 4 ; DIG 2 ; UNPAIR ; DIG 2 ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 7 ; DIG 7 ; PAIR ; DIG 6 ; PAIR ; CONS ; DIG 4 ; PAIR ; CONS ; TRANSFER_TOKENS ; DUP 3 ; CAR ; CDR ; CAR ; PUSH nat 0 ; SWAP ; DUP ; DUG 2 ; COMPARE ; GT ; IF { NIL operation ; SWAP ; SENDER ; SELF_ADDRESS ; PAIR ; DIG 5 ; CDR ; CAR ; CDR ; DIG 5 ; DIG 2 ; UNPAIR ; DIG 2 ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 7 ; DIG 7 ; PAIR ; DIG 6 ; PAIR ; CONS ; DIG 4 ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } { DIG 2 ; DIG 3 ; DROP 3 ; NIL operation } ; DIG 3 ; DIG 3 ; NONE (pair (pair (pair address address) (pair nat timestamp)) (pair (pair address nat) nat)) ; SWAP ; UPDATE ; SWAP } } { SWAP ; DUP ; DUG 2 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH string "no swap for such hash" ; FAILWITH } {} ; DUP ; CAR ; CDR ; CDR ; NOW ; COMPARE ; LT ; IF { PUSH string "refund time hasn't come" ; FAILWITH } {} ; DUP ; CDR ; CAR ; CAR ; CONTRACT %transfer (list (pair address (list (pair address (pair nat nat))))) ; IF_NONE { PUSH string "expected transfer entrypoint" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; CDR ; CDR ; DUP 3 ; CAR ; CAR ; CAR ; SELF_ADDRESS ; PAIR ; DIG 3 ; CDR ; CAR ; CDR ; DIG 3 ; DIG 2 ; UNPAIR ; DIG 2 ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 7 ; DIG 7 ; PAIR ; DIG 6 ; PAIR ; CONS ; DIG 4 ; PAIR ; CONS ; TRANSFER_TOKENS ; DUG 2 ; NONE (pair (pair (pair address address) (pair nat timestamp)) (pair (pair address nat) nat)) ; SWAP ; UPDATE ; NIL operation } ; DIG 2 ; CONS ; PAIR }