x
55
parameter (pair (pair :payload (nat %counter) (or :action (pair :transfer (mutez %amount) (contract %dest unit)) (or (option %delegate key_hash) (pair %change_keys (nat %threshold) (list %keys key))))) (list %sigs (option signature)));storage (pair (nat %stored_counter) (pair (nat %threshold) (list %keys key)));code { { { DUP ; CAR ; DIP { CDR } } } ; SWAP ; DUP ; DIP { SWAP } ; DIP { { { DUP ; CAR ; DIP { CDR } } } ; DUP ; SELF ; ADDRESS ; CHAIN_ID ; PAIR ; PAIR ; PACK ; DIP { { { DUP ; CAR @counter ; DIP { CDR } } } ; DIP { SWAP } } ; SWAP } ; { { DUP ; CAR @stored_counter ; DIP { CDR } } } ; DIP { SWAP } ; { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; DIP { SWAP } ; { { DUP ; CAR @threshold ; DIP { CDR @keys } } } ; DIP { PUSH @valid nat 0 ; SWAP ; ITER { DIP { SWAP } ; SWAP ; IF_CONS { { IF_NONE { SWAP ; DROP } { SWAP ; DIP { SWAP ; { DIP { DIP { { DIP { DUP } ; SWAP } } } } ; { { DIP { DIP { DUP } ; SWAP } ; SWAP } ; DIP { CHECK_SIGNATURE } ; SWAP ; IF { DROP } { FAILWITH } } ; PUSH nat 1 ; ADD @valid } } } } { { UNIT ; FAILWITH } } ; SWAP } } ; { { COMPARE ; LE } ; IF {} { { UNIT ; FAILWITH } } } ; DROP ; DROP ; DIP { { { DUP ; CAR ; DIP { CDR } } } ; PUSH nat 1 ; ADD @new_counter ; PAIR } ; NIL operation ; SWAP ; IF_LEFT { { { DUP ; CAR ; DIP { CDR } } } ; UNIT ; TRANSFER_TOKENS ; CONS } { IF_LEFT { SET_DELEGATE ; CONS } { DIP { SWAP ; CAR } ; SWAP ; PAIR ; SWAP } } ; PAIR }