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 }