x
56
parameter (or (unit %default) (pair %main (pair :payload (nat %counter) (or :action (lambda %operation unit (list operation)) (pair %change_keys (nat %threshold) (list %keys key)))) (list %sigs (option signature))));storage (pair (nat %stored_counter) (pair (nat %threshold) (list %keys key)));code { UNPAIR ; IF_LEFT { DROP ; NIL operation ; PAIR } { PUSH mutez 0 ; AMOUNT ; { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; SWAP ; DUP ; DIP { SWAP } ; DIP { UNPAIR ; DUP ; SELF ; ADDRESS ; CHAIN_ID ; PAIR ; PAIR ; PACK ; DIP { UNPAIR @counter ; DIP { SWAP } } ; SWAP } ; UNPAIR @stored_counter ; DIP { SWAP } ; { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ; DIP { SWAP } ; UNPAIR @threshold @keys ; DIP { PUSH @valid nat 0 ; SWAP ; ITER { DIP { SWAP } ; SWAP ; IF_CONS { { IF_NONE { SWAP ; DROP } { SWAP ; DIP { SWAP ; { DIP 2 { { { DUP 2 } } } } ; { { DUP 3 } ; DIP { CHECK_SIGNATURE } ; SWAP ; IF { DROP } { FAILWITH } } ; PUSH nat 1 ; ADD @valid } } } } { { UNIT ; FAILWITH } } ; SWAP } } ; { { COMPARE ; LE } ; IF {} { { UNIT ; FAILWITH } } } ; IF_CONS { { UNIT ; FAILWITH } } {} ; DROP ; DIP { UNPAIR ; PUSH nat 1 ; ADD @new_counter ; PAIR } ; IF_LEFT { UNIT ; EXEC } { DIP { CAR } ; SWAP ; PAIR ; NIL operation } ; PAIR } }