tx · ARiymX3UWrnkSi8wvRc765vTPH627yW5YEp6kru9ZeUH

3N32QbJF1pDejuzw5FM8unvXQXc5zX87Zb2:  -0.01400000 Waves

2020.11.19 17:25 [1272338] smart account 3N32QbJF1pDejuzw5FM8unvXQXc5zX87Zb2 > SELF 0.00000000 Waves

{ "type": 13, "id": "ARiymX3UWrnkSi8wvRc765vTPH627yW5YEp6kru9ZeUH", "fee": 1400000, "feeAssetId": null, "timestamp": 1605795999138, "version": 2, "chainId": 84, "sender": "3N32QbJF1pDejuzw5FM8unvXQXc5zX87Zb2", "senderPublicKey": "2PA1oQvC1quDzHm25JdQxgYwtcgNzQRwiQnxsrZfZkS5", "proofs": [ "e7qr12LaFb272VYkEA3zk6RXWzKxambh32oMDc9z6sy8iLgm2Eu6q1GPV8xWxCaLDL8JysbZsLgfsSz5NkCum9V" ], "script": "base64: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", "height": 1272338, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 9h1uafVJvoW2FUrsSxkAoJFm9Ev218gHdCjjfiaPiATT Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let VOTERS = 3
5+
6+let VOTING = "VOTING"
7+
8+let REVEAL = "REVEAL"
9+
10+let FINISHED = "FINISHED"
11+
12+func getCommitsCount () = {
13+ let count = getInteger(this, "commits_count")
14+ match count {
15+ case count: Int =>
16+ count
17+ case _ =>
18+ 0
19+ }
20+ }
21+
22+
23+func getRevealsCount () = {
24+ let count = getInteger(this, "reveals_count")
25+ match count {
26+ case count: Int =>
27+ count
28+ case _ =>
29+ 0
30+ }
31+ }
32+
33+
34+func getVotingStatus () = {
35+ let status = getString(this, "voting_status")
36+ match status {
37+ case status: String =>
38+ status
39+ case _ =>
40+ VOTING
41+ }
42+ }
43+
44+
45+func voteExists (address) = isDefined(getString(this, ("commit_" + address)))
46+
47+
48+func revealExists (address) = isDefined(getString(this, ("reveal_" + address)))
49+
50+
51+func validateVote (address,vote,salt) = {
52+ let hash = getString(this, ("commit_" + address))
53+ if (!(isDefined(hash)))
54+ then false
55+ else (toBase58String(sha256(toBytes((vote + salt)))) == hash)
56+ }
57+
58+
59+@Callable(i)
60+func commit (hash) = {
61+ let user = toBase58String(i.caller.bytes)
62+ let commitsCount = getCommitsCount()
63+ let nextStatus = if (((commitsCount + 1) == VOTERS))
64+ then REVEAL
65+ else VOTING
66+ if ((commitsCount == VOTERS))
67+ then throw("Max number of voters reached")
68+ else if (voteExists(user))
69+ then throw("User already voted")
70+ else if ((getVotingStatus() != VOTING))
71+ then throw("Voting is disabled")
72+ else [StringEntry(("commit_" + user), hash), IntegerEntry("commits_count", (commitsCount + 1)), StringEntry("voting_status", nextStatus)]
73+ }
74+
75+
76+
77+@Callable(i)
78+func reveal (vote,salt) = {
79+ let user = toBase58String(i.caller.bytes)
80+ let revealsCount = getRevealsCount()
81+ let votingStatus = getVotingStatus()
82+ let nextStatus = if (((revealsCount + 1) == VOTERS))
83+ then FINISHED
84+ else REVEAL
85+ if ((votingStatus == VOTING))
86+ then throw("Voting has not finished yet")
87+ else if ((votingStatus == FINISHED))
88+ then throw("Voting is finished")
89+ else if (revealExists(user))
90+ then throw("You already revealed vote")
91+ else if (!(validateVote(user, vote, salt)))
92+ then throw("Vote is not valid")
93+ else [StringEntry(("reveal_" + user), vote), IntegerEntry("reveals_count", (revealsCount + 1)), StringEntry("voting_status", nextStatus)]
94+ }
95+
96+
97+@Verifier(tx)
98+func verify () = true
99+

github/deemru/w8io/169f3d6 
14.49 ms