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:
Old | New | Differences | |
---|---|---|---|
4 | 4 | let mainDAOContract = addressFromStringValue("3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV") | |
5 | 5 | ||
6 | 6 | 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 | + | ||
7 | 15 | ||
8 | 16 | func getVotesFromCaller (publicKey) = match getInteger(mainDAOContract, ("dao_user_" + publicKey)) { | |
9 | 17 | case i: Int => | |
56 | 64 | let currentYesVotes = getCurrentYesVotesForId(voteId) | |
57 | 65 | let votesFromCaller = getVotesFromCaller(callerPublicKey) | |
58 | 66 | let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey) | |
67 | + | let voteEndHeight = getVoteEndHeight(voteId) | |
59 | 68 | if ((currentYesVotes == -1)) | |
60 | 69 | 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)] | |
64 | 75 | } | |
65 | 76 | ||
66 | 77 | ||
71 | 82 | let currentNoVotes = getCurrentNoVotesForId(voteId) | |
72 | 83 | let votesFromCaller = getVotesFromCaller(callerPublicKey) | |
73 | 84 | let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey) | |
85 | + | let voteEndHeight = getVoteEndHeight(voteId) | |
74 | 86 | if ((currentNoVotes == -1)) | |
75 | 87 | 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)] | |
79 | 93 | } | |
80 | 94 | ||
81 | 95 | ||
97 | 111 | case _ => | |
98 | 112 | 0 | |
99 | 113 | } | |
114 | + | let voteEndHeight = getVoteEndHeight(voteId) | |
100 | 115 | if (if ((currentYesVotes == -1)) | |
101 | 116 | then true | |
102 | 117 | else (currentNoVotes == -1)) | |
103 | 118 | 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)] | |
105 | 122 | } | |
106 | 123 | ||
107 | 124 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let mainDAOContract = addressFromStringValue("3N9tKixzqTYWnEXQxrDQ5pBTGvQd6sFsvmV") | |
5 | 5 | ||
6 | 6 | 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 | + | ||
7 | 15 | ||
8 | 16 | func getVotesFromCaller (publicKey) = match getInteger(mainDAOContract, ("dao_user_" + publicKey)) { | |
9 | 17 | case i: Int => | |
10 | 18 | i | |
11 | 19 | case _ => | |
12 | 20 | -1 | |
13 | 21 | } | |
14 | 22 | ||
15 | 23 | ||
16 | 24 | func getAlreadyVoted (voteId,publicKey) = match getBoolean(this, (((voteId + "_") + publicKey) + "_voted")) { | |
17 | 25 | case b: Boolean => | |
18 | 26 | b | |
19 | 27 | case _ => | |
20 | 28 | false | |
21 | 29 | } | |
22 | 30 | ||
23 | 31 | ||
24 | 32 | func getCurrentYesVotesForId (voteId) = match getInteger(this, (voteId + "_yes")) { | |
25 | 33 | case i: Int => | |
26 | 34 | i | |
27 | 35 | case _ => | |
28 | 36 | -1 | |
29 | 37 | } | |
30 | 38 | ||
31 | 39 | ||
32 | 40 | func getCurrentNoVotesForId (voteId) = match getInteger(this, (voteId + "_no")) { | |
33 | 41 | case i: Int => | |
34 | 42 | i | |
35 | 43 | case _ => | |
36 | 44 | -1 | |
37 | 45 | } | |
38 | 46 | ||
39 | 47 | ||
40 | 48 | @Callable(i) | |
41 | 49 | func registerVote (title,desc,link) = { | |
42 | 50 | let callerPublicKey = toBase58String(i.callerPublicKey) | |
43 | 51 | let voteId = toBase58String(i.transactionId) | |
44 | 52 | let endBlock = (height + 7200) | |
45 | 53 | let votingPower = getVotesFromCaller(callerPublicKey) | |
46 | 54 | if ((voteInitiateThreshold > votingPower)) | |
47 | 55 | then throw("User has not been active enough on the platform!") | |
48 | 56 | 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)] | |
49 | 57 | } | |
50 | 58 | ||
51 | 59 | ||
52 | 60 | ||
53 | 61 | @Callable(i) | |
54 | 62 | func yes (voteId) = { | |
55 | 63 | let callerPublicKey = toBase58String(i.callerPublicKey) | |
56 | 64 | let currentYesVotes = getCurrentYesVotesForId(voteId) | |
57 | 65 | let votesFromCaller = getVotesFromCaller(callerPublicKey) | |
58 | 66 | let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey) | |
67 | + | let voteEndHeight = getVoteEndHeight(voteId) | |
59 | 68 | if ((currentYesVotes == -1)) | |
60 | 69 | 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)] | |
64 | 75 | } | |
65 | 76 | ||
66 | 77 | ||
67 | 78 | ||
68 | 79 | @Callable(i) | |
69 | 80 | func no (voteId) = { | |
70 | 81 | let callerPublicKey = toBase58String(i.callerPublicKey) | |
71 | 82 | let currentNoVotes = getCurrentNoVotesForId(voteId) | |
72 | 83 | let votesFromCaller = getVotesFromCaller(callerPublicKey) | |
73 | 84 | let alreadyVoted = getAlreadyVoted(voteId, callerPublicKey) | |
85 | + | let voteEndHeight = getVoteEndHeight(voteId) | |
74 | 86 | if ((currentNoVotes == -1)) | |
75 | 87 | 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)] | |
79 | 93 | } | |
80 | 94 | ||
81 | 95 | ||
82 | 96 | ||
83 | 97 | @Callable(i) | |
84 | 98 | func retractVote (voteId) = { | |
85 | 99 | let callerPublicKey = toBase58String(i.callerPublicKey) | |
86 | 100 | let currentNoVotes = getCurrentNoVotesForId(voteId) | |
87 | 101 | let currentYesVotes = getCurrentYesVotesForId(voteId) | |
88 | 102 | let noVotesFromCaller = match getInteger(this, (((voteId + "_") + callerPublicKey) + "_no")) { | |
89 | 103 | case n: Int => | |
90 | 104 | n | |
91 | 105 | case _ => | |
92 | 106 | 0 | |
93 | 107 | } | |
94 | 108 | let yesVotesFromCaller = match getInteger(this, (((voteId + "_") + callerPublicKey) + "_yes")) { | |
95 | 109 | case n: Int => | |
96 | 110 | n | |
97 | 111 | case _ => | |
98 | 112 | 0 | |
99 | 113 | } | |
114 | + | let voteEndHeight = getVoteEndHeight(voteId) | |
100 | 115 | if (if ((currentYesVotes == -1)) | |
101 | 116 | then true | |
102 | 117 | else (currentNoVotes == -1)) | |
103 | 118 | 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)] | |
105 | 122 | } | |
106 | 123 | ||
107 | 124 | ||
108 | 125 | @Verifier(tx) | |
109 | 126 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
110 | 127 |
github/deemru/w8io/169f3d6 29.91 ms ◑![]()