50 lines
1.2 KiB
Plaintext
50 lines
1.2 KiB
Plaintext
type storage = {
|
|
title : string;
|
|
yea : nat;
|
|
nay : nat;
|
|
voters : address set;
|
|
start_time : timestamp;
|
|
finish_time : timestamp
|
|
}
|
|
|
|
type return = operation list * storage
|
|
|
|
type vote = Yea | Nay
|
|
|
|
type reset = {
|
|
title : string;
|
|
start_time : timestamp;
|
|
finish_time : timestamp
|
|
}
|
|
|
|
type parameter =
|
|
| Vote of vote
|
|
| Reset of reset
|
|
|
|
let reset (reset, _ : reset * storage) : return =
|
|
([] : operation list),
|
|
{title = reset.title;
|
|
yea = 0n;
|
|
nay = 0n;
|
|
voters = (Set.empty : address set);
|
|
start_time = reset.start_time;
|
|
finish_time = reset.finish_time}
|
|
|
|
let vote (vote, store : vote * storage) : return =
|
|
let now = Tezos.now in
|
|
(* let _ =
|
|
assert (now >= store.start_time && store.finish_time > now) in *)
|
|
let addr = Tezos.sender in
|
|
(* let _ = assert (not Set.mem addr store.voters) in *)
|
|
let store =
|
|
match vote with
|
|
Yea -> {store with yea = store.yea + 1n}
|
|
| Nay -> {store with nay = store.nay + 1n}
|
|
in ([] : operation list),
|
|
{store with voters = Set.add addr store.voters}
|
|
|
|
let main (action, store : parameter * storage) : return =
|
|
match action with
|
|
| Vote v -> vote (v, store)
|
|
| Reset r -> reset (r, store)
|