x
55
{ parameter nat ; storage (pair (pair (nat %accumulator) (address %allowed_pusher)) (timestamp %last_ts)) ; code { UNPAIR ; SELF_ADDRESS ; DROP ; DUP 2 ; CAR ; CDR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "INCORRECT_SENDER" ; FAILWITH } {} ; DUP 2 ; CDR ; NOW ; SUB ; ISNAT ; IF_NONE { PUSH string "TIME_OVERFLOW" ; FAILWITH } {} ; PUSH nat 0 ; DUP 4 ; CAR ; CAR ; COMPARE ; EQ ; IF { DROP ; DUP } { DUP 2 ; MUL } ; DUP 3 ; CAR ; CAR ; ADD ; SWAP ; NOW ; PAIR ; DUP 3 ; CAR ; CAR ; DUP 3 ; PAIR ; PAIR ; EMIT %PUSH (pair (pair (nat %new_acc) (nat %prev_acc)) (timestamp %ts) (nat %value)) ; DUP 3 ; DIG 3 ; CAR ; DIG 3 ; UPDATE 1 ; UPDATE 1 ; NOW ; UPDATE 2 ; NIL operation ; DIG 2 ; CONS ; PAIR } ; view "read" unit (pair (pair (address %origin) (timestamp %ts)) (nat %value_cumulative)) { CDR ; SELF_ADDRESS ; DUP 2 ; CAR ; CAR ; DIG 2 ; CDR ; DIG 2 ; PAIR ; PAIR } }