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 } }