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 }