tx · DLTz1Qb6hDXU7QSTRxJAvFzLMG9H63RZVbaV8NVCdKzB

3NAgDPRKu4nLeJ3i3xC8DSZZqwT5CKf8PGQ:  -0.01400000 Waves

2020.11.19 17:03 [1272318] smart account 3NAgDPRKu4nLeJ3i3xC8DSZZqwT5CKf8PGQ > SELF 0.00000000 Waves

{ "type": 13, "id": "DLTz1Qb6hDXU7QSTRxJAvFzLMG9H63RZVbaV8NVCdKzB", "fee": 1400000, "feeAssetId": null, "timestamp": 1605794630387, "version": 2, "chainId": 84, "sender": "3NAgDPRKu4nLeJ3i3xC8DSZZqwT5CKf8PGQ", "senderPublicKey": "5Vh9W9uREKoRpCAFBf3i6pb52MLDfj6gWRwNNpKcKuFa", "proofs": [ "557evRCdhK6ML2SzxFijwKxCEhBCB5xA89biW2uZ36xEYhCYJXwSoE95zWaVye2Jt8T9jnzkL3JPCqpkk3NGUjSg" ], "script": "base64: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", "height": 1272318, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DmDbGFEcV1c4NrnEhfs2uxx7iK66mTwGqrUANsT6iGHR Next: BQub7TLUt1FQJm7x4QupP6hWsUDzncCZPChW7RqnZ51H Diff:
OldNewDifferences
77
88 let REVEAL = "REVEAL"
99
10+let FINISHED = "FINISHED"
11+
1012 func getCommitsCount () = {
1113 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")
1225 match count {
1326 case count: Int =>
1427 count
3245 func voteExists (address) = isDefined(getString(this, ("commit_" + address)))
3346
3447
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+
3559 @Callable(i)
3660 func commit (hash) = {
3761 let user = toBase58String(i.caller.bytes)
4973 }
5074
5175
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+
5297 @Verifier(tx)
5398 func verify () = true
5499
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VOTERS = 3
55
66 let VOTING = "VOTING"
77
88 let REVEAL = "REVEAL"
99
10+let FINISHED = "FINISHED"
11+
1012 func getCommitsCount () = {
1113 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")
1225 match count {
1326 case count: Int =>
1427 count
1528 case _ =>
1629 0
1730 }
1831 }
1932
2033
2134 func getVotingStatus () = {
2235 let status = getString(this, "voting_status")
2336 match status {
2437 case status: String =>
2538 status
2639 case _ =>
2740 VOTING
2841 }
2942 }
3043
3144
3245 func voteExists (address) = isDefined(getString(this, ("commit_" + address)))
3346
3447
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+
3559 @Callable(i)
3660 func commit (hash) = {
3761 let user = toBase58String(i.caller.bytes)
3862 let commitsCount = getCommitsCount()
3963 let nextStatus = if (((commitsCount + 1) == VOTERS))
4064 then REVEAL
4165 else VOTING
4266 if ((commitsCount == VOTERS))
4367 then throw("Max number of voters reached")
4468 else if (voteExists(user))
4569 then throw("User already voted")
4670 else if ((getVotingStatus() != VOTING))
4771 then throw("Voting is disabled")
4872 else [StringEntry(("commit_" + user), hash), IntegerEntry("commits_count", (commitsCount + 1)), StringEntry("voting_status", nextStatus)]
4973 }
5074
5175
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+
5297 @Verifier(tx)
5398 func verify () = true
5499

github/deemru/w8io/169f3d6 
30.87 ms