x
165
parameter (or
(pair %claim (nat %amount) (timestamp %from) (bool %airdrop)
(list %proof (or (bytes %left) (bytes %right))))
(unit %finalize_airdrop));
storage (pair (bytes %root_hash) (address %token_contract) (nat %token_id)
(address %treasury_address)
(timestamp %airdrop_cutoff)
(nat %remaining_airdrop_tokens)
(big_map %claimed
(pair (address %owner) (timestamp %from) (bool %airdrop))
unit));
code { LAMBDA
(pair (pair address nat) bytes address nat address timestamp nat
(big_map (pair address timestamp bool) unit))
operation
{ UNPAIR ;
UNPAIR ;
DUP 3 ;
GET 3 ;
CONTRACT %transfer (list (pair (address %from_)
(list %txs (pair (address %to_) (nat %token_id)
(nat %amount))))) ;
IF_NONE { PUSH string "MISSING_ENTRYPOINT" ; FAILWITH } {} ;
NIL (pair address (list (pair address nat nat))) ;
NIL (pair address nat nat) ;
DIG 4 ;
DIG 5 ;
GET 5 ;
DIG 5 ;
PAIR 3 ;
CONS ;
SELF_ADDRESS ;
PAIR ;
CONS ;
SWAP ;
PUSH mutez 0 ;
DIG 2 ;
TRANSFER_TOKENS } ;
SWAP ;
UNPAIR ;
PUSH mutez 0 ;
AMOUNT ;
COMPARE ;
GT ;
IF { PUSH string "AMOUNT_NOT_ZERO" ; FAILWITH } {} ;
IF_LEFT
{ NOW ;
DUP 3 ;
GET 9 ;
COMPARE ;
LE ;
DUP 2 ;
GET 5 ;
AND ;
IF { PUSH string "AIRDROP_ENDED" ; FAILWITH } {} ;
NOW ;
DUP 2 ;
GET 3 ;
COMPARE ;
GE ;
IF { PUSH string "CLAIM_NOT_AVAILABLE" ; FAILWITH } {} ;
SENDER ;
DUP 2 ;
GET 5 ;
DUP 3 ;
GET 3 ;
DUP 4 ;
CAR ;
PAIR 4 ;
DUP ;
GET 5 ;
DUP 2 ;
GET 3 ;
DUP 3 ;
GET 6 ;
PAIR 3 ;
DUP 2 ;
PACK ;
PUSH bytes 0x00 ;
CONCAT ;
SHA3 ;
DIG 3 ;
GET 6 ;
ITER { IF_LEFT { CONCAT } { SWAP ; CONCAT } ; PUSH bytes 0x01 ; CONCAT ; SHA3 } ;
DUP 4 ;
CAR ;
COMPARE ;
EQ ;
IF {} { PUSH string "INVALID_PROOF" ; FAILWITH } ;
DUP 3 ;
GET 12 ;
DUP 2 ;
MEM ;
IF { PUSH string "ALREADY_CLAIMED" ; FAILWITH } {} ;
DUP 2 ;
CAR ;
DUP 4 ;
GET 11 ;
COMPARE ;
LT ;
DUP 3 ;
GET 5 ;
AND ;
IF { PUSH string "NOT_ENOUGH_TOKENS" ; FAILWITH } {} ;
DUP 3 ;
DUP 4 ;
GET 12 ;
UNIT ;
SOME ;
DIG 3 ;
UPDATE ;
UPDATE 12 ;
DUP 2 ;
GET 5 ;
IF
{ DUP 2 ;
CAR ;
DIG 3 ;
GET 11 ;
SUB ;
ISNAT ;
IF_NONE { PUSH string "NOT_A_NAT" ; FAILWITH } {} }
{ DIG 2 ; GET 11 } ;
UPDATE 11 ;
DUP ;
DUP 3 ;
CAR ;
DIG 3 ;
GET 6 ;
PAIR ;
PAIR ;
DIG 2 ;
SWAP ;
EXEC ;
SWAP }
{ DROP ;
NOW ;
DUP 2 ;
GET 9 ;
COMPARE ;
GT ;
IF { PUSH string "AIRDROP_ONGOING" ; FAILWITH } {} ;
PUSH nat 0 ;
DUP 2 ;
GET 11 ;
COMPARE ;
LE ;
IF { PUSH string "NOT_ENOUGH_TOKENS" ; FAILWITH } {} ;
DUP ;
DUP 2 ;
GET 11 ;
DUP 3 ;
GET 7 ;
PAIR ;
PAIR ;
DIG 2 ;
SWAP ;
EXEC ;
SWAP ;
PUSH nat 0 ;
UPDATE 11 } ;
NIL operation ;
DIG 2 ;
CONS ;
PAIR }