x
130
parameter (or
(or %fund
(pair :initiate %initiate (address %participant)
(pair %settings
(pair (bytes %hashed_secret)
(timestamp %refund_time))
(mutez %payoff)))
(bytes :hashed_secret %add))
(or %withdraw (bytes :secret %redeem) (bytes :hashed_secret %refund)));
storage (pair
(big_map bytes
(pair (pair %recipients (address %initiator) (address %participant))
(pair %settings (pair (mutez %amount) (timestamp %refund_time))
(mutez %payoff))))
unit);
code { NIL @operations operation ;
SWAP ;
{ { DUP ; CAR @% ; DIP { CDR } } ; DIP { { DUP ; CAR @% ; DIP { CDR @% } } } } ;
DIP { DUP } ;
IF_LEFT
{ IF_LEFT
{ { { DUP ; CAR @% ; DIP { CDR @% } } } ;
DUP ;
CONTRACT @participant unit ;
{ IF_NONE { { UNIT ; FAILWITH } } {} } ;
DROP ;
SWAP ;
{ { DUP ; CAR ; DIP { CDR @% } } ; { DUP ; CAR @% ; DIP { CDR @% } } } ;
DUP ;
SIZE ;
PUSH nat 32 ;
{ { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ;
DIP { DIP { DUP } ;
SWAP ;
AMOUNT @amount ;
SUB ;
SENDER ;
DUP ;
CONTRACT @initiator unit ;
{ IF_NONE { { UNIT ; FAILWITH } } {} } ;
DROP ;
DIP { { PAIR ; PAIR } ; SWAP } ;
{ PAIR ; PAIR } ;
SOME @xcat ;
SWAP } ;
DUP ;
DIP { MEM ; NOT ; { IF {} { { UNIT ; FAILWITH } } } } }
{ DUP ;
DIP { GET ;
{ IF_NONE { { UNIT ; FAILWITH } } {} } ;
{ { DUP ; CAR @% ; DIP { CDR @% } } } ;
DIP { { { DUP ; CAR ; DIP { CDR @% } } ;
{ DUP ; CAR @% ; DIP { CDR @% } } } ;
SWAP ;
DUP ;
NOW ;
{ { COMPARE ; LT } ; IF {} { { UNIT ; FAILWITH } } } ;
SWAP ;
AMOUNT @amount ;
ADD } ;
{ DIP { PAIR } ; DIP { PAIR } ; PAIR } ;
SOME @xcat } } ;
UPDATE ;
PAIR @new_storage ;
SWAP ;
PAIR }
{ IF_LEFT
{ DUP ;
SIZE ;
PUSH nat 32 ;
{ { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ;
SHA256 ;
SHA256 @hash ;
DUP ;
DIP { SWAP } ;
{ DIP { DIP { GET ;
{ IF_NONE { { UNIT ; FAILWITH } } {} } ;
DUP ;
{ { DUP ; CAR @% ; DIP { CDR @% } } } ;
CDR @% ;
CONTRACT @participant unit ;
{ IF_NONE { { UNIT ; FAILWITH } } {} } ;
SWAP ;
{ CAR ; CAR @% } ;
{ DIP { DIP { SENDER ;
CONTRACT @sender unit ;
{ IF_NONE { { UNIT ; FAILWITH } } {} } ;
SWAP ;
CDR @% ;
{ { DUP ; CAR ; DIP { CDR @% } } ;
{ DUP ; CAR @% ; DIP { CDR @% } } } ;
DROP ;
NOW ;
{ { COMPARE ; LT } ;
IF {} { { UNIT ; FAILWITH } } } ;
DUP ;
PUSH mutez 0 ;
{ COMPARE ;
LT ;
IF
{ UNIT ; TRANSFER_TOKENS ; DIP { SWAP } ; CONS }
{ DROP ; DROP ; SWAP } } } } } ;
UNIT ;
TRANSFER_TOKENS } } } }
{ DUP ;
DIP { GET ;
{ IF_NONE { { UNIT ; FAILWITH } } {} } ;
DUP ;
{ CAR ; CAR @% } ;
CONTRACT @initiator unit ;
{ IF_NONE { { UNIT ; FAILWITH } } {} } ;
SWAP ;
CDR ;
{ { DUP ; CAR ; DIP { CDR @% } } ;
{ DUP ; CAR @% ; DIP { CDR @% } } } ;
SWAP ;
NOW ;
{ { COMPARE ; GE } ; IF {} { { UNIT ; FAILWITH } } } ;
ADD ;
UNIT ;
TRANSFER_TOKENS ;
SWAP ;
{ DIP { DIP { SWAP } } } } } ;
NONE @none (pair (pair address address) (pair (pair mutez timestamp) mutez)) ;
SWAP ;
UPDATE @cleared_map ;
SWAP ;
DIP { SWAP ; DIP { PAIR } } ;
CONS ;
PAIR } }