open Rte; open Voting; let creator = "0x123"; let voter1 = "0x1001"; let voter2 = "0x1002"; let voter3 = "0x1003"; let other = "0xffff"; module SetupVote = Setup(Voting); open Voting; let print_tally() = { let tally = call(other, () => currentTally()); MyList.map(((name, count)) => Printf.printf("%s: %d\n", name, count), tally); let winner = call(other, () => winnerName()); Printf.printf("Winner: %s\n", winner); }; Printf.printf("Delegate before vote\n"); SetupVote.init(creator, ["Cake", "Beer"]); call(creator, () => giveRightToVote(voter1)); call(creator, () => giveRightToVote(voter2)); call(creator, () => giveRightToVote(voter3)); call(voter3, () => delegate(voter1)); call(voter1, () => vote(1)); call(voter2, () => vote(0)); print_tally(); SetupVote.reset(); Printf.printf("Delegate after vote\n"); SetupVote.init(creator, ["Cake", "Beer"]); call(creator, () => giveRightToVote(voter1)); call(creator, () => giveRightToVote(voter2)); call(creator, () => giveRightToVote(voter3)); call(voter1, () => vote(1)); call(voter3, () => delegate(voter1)); call(voter2, () => vote(0)); print_tally();