tx · HgNctPLGZ5HWN36sGXcU1XAVqvrvHiUDjCYBosZ6zt6p

3MriS1yLhFcKRAM51jDyNAdusa6bCWrTCYj:  -0.05000000 Waves

2024.02.14 14:01 [2975798] smart account 3MriS1yLhFcKRAM51jDyNAdusa6bCWrTCYj > SELF 0.00000000 Waves

{ "type": 13, "id": "HgNctPLGZ5HWN36sGXcU1XAVqvrvHiUDjCYBosZ6zt6p", "fee": 5000000, "feeAssetId": null, "timestamp": 1707908482075, "version": 2, "chainId": 84, "sender": "3MriS1yLhFcKRAM51jDyNAdusa6bCWrTCYj", "senderPublicKey": "CgjXoHPsstPW1WBAcTeBgjKtLSNFmLbQ7pLJ19JzkCy9", "proofs": [ "QG8wdgnzpP4SJ3p8g27UZnu66eLd6KcNivmMCojXn9Vfsz1rBevkarzQarDgjPpFHMjXriDKUVHqi76M9eMaD92" ], "script": "base64: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", "height": 2975798, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 89M6nn5Tu9uL2j6m7rJFuEGPoRLmtP8FMeCiMK9PY5WQ Next: none Diff:
OldNewDifferences
44 let mainDAOContract = addressFromStringValue("3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV")
55
66 let voteInitiateThreshold = 100000000
7+
8+func getVoteEndHeight (voteId) = match getInteger(this, (voteId + "_endHeight")) {
9+ case i: Int =>
10+ i
11+ case _ =>
12+ -1
13+}
14+
715
816 func getVotesFromCaller (publicKey) = match getInteger(mainDAOContract, ("dao_user_" + publicKey)) {
917 case i: Int =>
5664 let currentYesVotes = getCurrentYesVotesForId(voteId)
5765 let votesFromCaller = getVotesFromCaller(callerPublicKey)
5866 let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey)
67+ let voteEndHeight = getVoteEndHeight(voteId)
5968 if ((currentYesVotes == -1))
6069 then throw("Vote not found!")
61- else if (alreadyVoted)
62- then throw("Address already voted!")
63- else [IntegerEntry((voteId + "_yes"), (currentYesVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)]
70+ else if ((height > voteEndHeight))
71+ then throw("Vote no longer active!")
72+ else if (alreadyVoted)
73+ then throw("Address already voted!")
74+ else [IntegerEntry((voteId + "_yes"), (currentYesVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)]
6475 }
6576
6677
7182 let currentNoVotes = getCurrentNoVotesForId(voteId)
7283 let votesFromCaller = getVotesFromCaller(callerPublicKey)
7384 let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey)
85+ let voteEndHeight = getVoteEndHeight(voteId)
7486 if ((currentNoVotes == -1))
7587 then throw("Vote not found!")
76- else if (alreadyVoted)
77- then throw("Address already voted!")
78- else [IntegerEntry((voteId + "_no"), (currentNoVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)]
88+ else if ((height > voteEndHeight))
89+ then throw("Vote no longer active!")
90+ else if (alreadyVoted)
91+ then throw("Address already voted!")
92+ else [IntegerEntry((voteId + "_no"), (currentNoVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)]
7993 }
8094
8195
97111 case _ =>
98112 0
99113 }
114+ let voteEndHeight = getVoteEndHeight(voteId)
100115 if (if ((currentYesVotes == -1))
101116 then true
102117 else (currentNoVotes == -1))
103118 then throw("No active vote for this vote id!")
104- else [IntegerEntry((voteId + "_no"), (currentNoVotes - noVotesFromCaller)), IntegerEntry((voteId + "_yes"), (currentYesVotes - yesVotesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), 0), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), 0), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), false)]
119+ else if ((height > voteEndHeight))
120+ then throw("Vote no longer active!")
121+ else [IntegerEntry((voteId + "_no"), (currentNoVotes - noVotesFromCaller)), IntegerEntry((voteId + "_yes"), (currentYesVotes - yesVotesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), 0), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), 0), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), false)]
105122 }
106123
107124
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let mainDAOContract = addressFromStringValue("3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV")
55
66 let voteInitiateThreshold = 100000000
7+
8+func getVoteEndHeight (voteId) = match getInteger(this, (voteId + "_endHeight")) {
9+ case i: Int =>
10+ i
11+ case _ =>
12+ -1
13+}
14+
715
816 func getVotesFromCaller (publicKey) = match getInteger(mainDAOContract, ("dao_user_" + publicKey)) {
917 case i: Int =>
1018 i
1119 case _ =>
1220 -1
1321 }
1422
1523
1624 func getAlreadyVoted (voteId,publicKey) = match getBoolean(this, (((voteId + "_") + publicKey) + "_voted")) {
1725 case b: Boolean =>
1826 b
1927 case _ =>
2028 false
2129 }
2230
2331
2432 func getCurrentYesVotesForId (voteId) = match getInteger(this, (voteId + "_yes")) {
2533 case i: Int =>
2634 i
2735 case _ =>
2836 -1
2937 }
3038
3139
3240 func getCurrentNoVotesForId (voteId) = match getInteger(this, (voteId + "_no")) {
3341 case i: Int =>
3442 i
3543 case _ =>
3644 -1
3745 }
3846
3947
4048 @Callable(i)
4149 func registerVote (title,desc,link) = {
4250 let callerPublicKey = toBase58String(i.callerPublicKey)
4351 let voteId = toBase58String(i.transactionId)
4452 let endBlock = (height + 7200)
4553 let votingPower = getVotesFromCaller(callerPublicKey)
4654 if ((voteInitiateThreshold > votingPower))
4755 then throw("User has not been active enough on the platform!")
4856 else [IntegerEntry((voteId + "_endHeight"), endBlock), StringEntry((voteId + "_title"), title), StringEntry((voteId + "_description"), desc), StringEntry((voteId + "_link"), link), StringEntry((voteId + "_initiator"), callerPublicKey), IntegerEntry((voteId + "_yes"), 0), IntegerEntry((voteId + "_no"), 0)]
4957 }
5058
5159
5260
5361 @Callable(i)
5462 func yes (voteId) = {
5563 let callerPublicKey = toBase58String(i.callerPublicKey)
5664 let currentYesVotes = getCurrentYesVotesForId(voteId)
5765 let votesFromCaller = getVotesFromCaller(callerPublicKey)
5866 let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey)
67+ let voteEndHeight = getVoteEndHeight(voteId)
5968 if ((currentYesVotes == -1))
6069 then throw("Vote not found!")
61- else if (alreadyVoted)
62- then throw("Address already voted!")
63- else [IntegerEntry((voteId + "_yes"), (currentYesVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)]
70+ else if ((height > voteEndHeight))
71+ then throw("Vote no longer active!")
72+ else if (alreadyVoted)
73+ then throw("Address already voted!")
74+ else [IntegerEntry((voteId + "_yes"), (currentYesVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)]
6475 }
6576
6677
6778
6879 @Callable(i)
6980 func no (voteId) = {
7081 let callerPublicKey = toBase58String(i.callerPublicKey)
7182 let currentNoVotes = getCurrentNoVotesForId(voteId)
7283 let votesFromCaller = getVotesFromCaller(callerPublicKey)
7384 let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey)
85+ let voteEndHeight = getVoteEndHeight(voteId)
7486 if ((currentNoVotes == -1))
7587 then throw("Vote not found!")
76- else if (alreadyVoted)
77- then throw("Address already voted!")
78- else [IntegerEntry((voteId + "_no"), (currentNoVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)]
88+ else if ((height > voteEndHeight))
89+ then throw("Vote no longer active!")
90+ else if (alreadyVoted)
91+ then throw("Address already voted!")
92+ else [IntegerEntry((voteId + "_no"), (currentNoVotes + votesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), votesFromCaller), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), true)]
7993 }
8094
8195
8296
8397 @Callable(i)
8498 func retractVote (voteId) = {
8599 let callerPublicKey = toBase58String(i.callerPublicKey)
86100 let currentNoVotes = getCurrentNoVotesForId(voteId)
87101 let currentYesVotes = getCurrentYesVotesForId(voteId)
88102 let noVotesFromCaller = match getInteger(this, (((voteId + "_") + callerPublicKey) + "_no")) {
89103 case n: Int =>
90104 n
91105 case _ =>
92106 0
93107 }
94108 let yesVotesFromCaller = match getInteger(this, (((voteId + "_") + callerPublicKey) + "_yes")) {
95109 case n: Int =>
96110 n
97111 case _ =>
98112 0
99113 }
114+ let voteEndHeight = getVoteEndHeight(voteId)
100115 if (if ((currentYesVotes == -1))
101116 then true
102117 else (currentNoVotes == -1))
103118 then throw("No active vote for this vote id!")
104- else [IntegerEntry((voteId + "_no"), (currentNoVotes - noVotesFromCaller)), IntegerEntry((voteId + "_yes"), (currentYesVotes - yesVotesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), 0), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), 0), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), false)]
119+ else if ((height > voteEndHeight))
120+ then throw("Vote no longer active!")
121+ else [IntegerEntry((voteId + "_no"), (currentNoVotes - noVotesFromCaller)), IntegerEntry((voteId + "_yes"), (currentYesVotes - yesVotesFromCaller)), IntegerEntry((((voteId + "_") + callerPublicKey) + "_no"), 0), IntegerEntry((((voteId + "_") + callerPublicKey) + "_yes"), 0), BooleanEntry((((voteId + "_") + callerPublicKey) + "_voted"), false)]
105122 }
106123
107124
108125 @Verifier(tx)
109126 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
110127

github/deemru/w8io/6500d08 
38.53 ms