ligo/src/test/contracts/vote.mligo
2020-03-02 18:01:56 +01:00

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)