tx · HpfAiSgj3fx9gMje7X7CJ6xg2HdiT96vSP6BS9TN75Ej 3P2mH5mhQqgjXNZuNNabjJdkEJ9CWsFy9yj: -0.01000000 Waves 2023.05.11 09:41 [3638337] smart account 3P2mH5mhQqgjXNZuNNabjJdkEJ9CWsFy9yj > SELF 0.00000000 Waves
{ "type": 13, "id": "HpfAiSgj3fx9gMje7X7CJ6xg2HdiT96vSP6BS9TN75Ej", "fee": 1000000, "feeAssetId": null, "timestamp": 1683787298777, "version": 2, "chainId": 87, "sender": "3P2mH5mhQqgjXNZuNNabjJdkEJ9CWsFy9yj", "senderPublicKey": "94C4GHd1nYV5KUVJLPE4kf27mrY2yRc4nSLDujToBzga", "proofs": [ "5cRYRFQ7T5bjhov6nfpdX9328GpJiif1pvaEKm5GKJmvrxmqHhDbmf3v3ux9RUKga8nFJuWtcN1tveK7Jpf6WD7h" ], "script": "base64:AAIFAAAAAAAAABQIAhIHCgUBAQEICBIDCgEEEgASAAAAABgAAAAADGFkbWluUHViS2V5MQEAAAAgd669PD3rrdKQ/IJwTd7gu9aExkLSCOPWIeosKwi85SsAAAAADGFkbWluUHViS2V5MgEAAAAgd669PD3rrdKQ/IJwTd7gu9aExkLSCOPWIeosKwi85SsAAAAADGFkbWluUHViS2V5MwEAAAAgd669PD3rrdKQ/IJwTd7gu9aExkLSCOPWIeosKwi85SsAAAAAFGFkbWluUHViS2V5U3RhcnRTdG9wAQAAACB3rr08Peut0pD8gnBN3uC71oTGQtII49Yh6iwrCLzlKwAAAAAJa2V5QWN0aXZlAgAAAAZhY3RpdmUAAAAACGtleUNhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAARa2V5VXNlclZPVEVBbW91bnQCAAAADF9WT1RFX2Ftb3VudAAAAAALa2V5VXNlclZPVEUCAAAABV9WT1RFAAAAAAxrZXlUb3RhbFZPVEUCAAAAEl90b3RhbF9WT1RFX2Ftb3VudAAAAAANa2V5Vm90ZU51bWJlcgIAAAAMdm90ZV9zZXNzaW9uAAAAAAxrZXlWb3RlU3RhcnQCAAAAEXZvdGVfc3RhcnRfaGVpZ2h0AAAAAAprZXlWb3RlRW5kAgAAAA92b3RlX2VuZF9oZWlnaHQAAAAACmtleVZvdGVZZXMCAAAAC195ZXNfYW1vdW50AAAAAAlrZXlWb3RlTm8CAAAACl9ub19hbW91bnQAAAAAEWtleVVzZXJFTk5PTG9ja2VkAgAAAAxfRU5OT19hbW91bnQAAAAAC2tleVZvdGVOYW1lAgAAAAl2b3RlX25hbWUAAAAAEmtleVZvdGVEZXNjcmlwdGlvbgIAAAAQdm90ZV9kZXNjcmlwdGlvbgAAAAAIaXNBY3RpdmUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAAJa2V5QWN0aXZlBgAAAAAJc3Rha2VEYXRhCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABAQAAACDJxyCCGGPk89xsFxmaDibmd1jcSfgQ8HxDeftk0Ox5KgEAAAARZ2V0VXNlckVOTk9Mb2NrZWQAAAABAAAABHVzZXIJAQAAAAt2YWx1ZU9yRWxz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", "height": 3638337, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: DVyuf1YAmGbvzkgRpjrwqYaibHCBpV5fs8Fu3vR3meQ1 Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let adminPubKey1 = base58'94C4GHd1nYV5KUVJLPE4kf27mrY2yRc4nSLDujToBzga' | |
5 | + | ||
6 | + | let adminPubKey2 = base58'94C4GHd1nYV5KUVJLPE4kf27mrY2yRc4nSLDujToBzga' | |
7 | + | ||
8 | + | let adminPubKey3 = base58'94C4GHd1nYV5KUVJLPE4kf27mrY2yRc4nSLDujToBzga' | |
9 | + | ||
10 | + | let adminPubKeyStartStop = base58'94C4GHd1nYV5KUVJLPE4kf27mrY2yRc4nSLDujToBzga' | |
11 | + | ||
12 | + | let keyActive = "active" | |
13 | + | ||
14 | + | let keyCause = "shutdown_cause" | |
15 | + | ||
16 | + | let keyUserVOTEAmount = "_VOTE_amount" | |
17 | + | ||
18 | + | let keyUserVOTE = "_VOTE" | |
19 | + | ||
20 | + | let keyTotalVOTE = "_total_VOTE_amount" | |
21 | + | ||
22 | + | let keyVoteNumber = "vote_session" | |
23 | + | ||
24 | + | let keyVoteStart = "vote_start_height" | |
25 | + | ||
26 | + | let keyVoteEnd = "vote_end_height" | |
27 | + | ||
28 | + | let keyVoteYes = "_yes_amount" | |
29 | + | ||
30 | + | let keyVoteNo = "_no_amount" | |
31 | + | ||
32 | + | let keyUserENNOLocked = "_ENNO_amount" | |
33 | + | ||
34 | + | let keyVoteName = "vote_name" | |
35 | + | ||
36 | + | let keyVoteDescription = "vote_description" | |
37 | + | ||
38 | + | let isActive = valueOrElse(getBoolean(this, keyActive), true) | |
39 | + | ||
40 | + | let stakeData = addressFromPublicKey(base58'Eaf4FwUufqN2GjEDu6h1w8UT5zB58jCghAoQRg1H3Pv1') | |
41 | + | ||
42 | + | func getUserENNOLocked (user) = valueOrElse(getInteger(stakeData, (toString(user) + keyUserENNOLocked)), 0) | |
43 | + | ||
44 | + | ||
45 | + | func getUserVoteAmount (user,session) = valueOrElse(getInteger(this, (((toString(user) + keyUserVOTEAmount) + "_") + session)), 0) | |
46 | + | ||
47 | + | ||
48 | + | func getUserVote (user,session) = valueOrElse(getBoolean(this, (((toString(user) + keyUserVOTE) + "_") + session)), false) | |
49 | + | ||
50 | + | ||
51 | + | func getVal (key) = valueOrElse(getInteger(this, key), 0) | |
52 | + | ||
53 | + | ||
54 | + | func suspend (cause) = [BooleanEntry(keyActive, false), StringEntry(keyCause, cause)] | |
55 | + | ||
56 | + | ||
57 | + | @Callable(i) | |
58 | + | func initVote (session,start,end,voteName,voteDescription) = if (!(isActive)) | |
59 | + | then throw("DApp is inactive at this moment") | |
60 | + | else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey))) | |
61 | + | then throw("Only admin can call this function") | |
62 | + | else [IntegerEntry(keyVoteNumber, session), IntegerEntry(((keyVoteStart + "_") + toString(session)), start), IntegerEntry(((keyVoteEnd + "_") + toString(session)), end), IntegerEntry((toString(session) + keyVoteYes), 0), IntegerEntry((toString(session) + keyVoteNo), 0), IntegerEntry((toString(session) + keyTotalVOTE), 0), StringEntry(((keyVoteName + "_") + toString(session)), voteName), StringEntry(((keyVoteDescription + "_") + toString(session)), voteDescription)] | |
63 | + | ||
64 | + | ||
65 | + | ||
66 | + | @Callable(i) | |
67 | + | func vote (vote) = if (!(isActive)) | |
68 | + | then throw("DApp is inactive at this moment") | |
69 | + | else { | |
70 | + | let session = toString(getVal(keyVoteNumber)) | |
71 | + | let start = getVal(((keyVoteStart + "_") + session)) | |
72 | + | let end = getVal(((keyVoteEnd + "_") + session)) | |
73 | + | if ((start > height)) | |
74 | + | then throw(((("Voting has not started yet. Start: " + toString(start)) + "Height: ") + toString(height))) | |
75 | + | else if ((height > end)) | |
76 | + | then throw(((("Voting has already ended. End: " + toString(end)) + "Height: ") + toString(height))) | |
77 | + | else { | |
78 | + | let totalYes = getVal((session + keyVoteYes)) | |
79 | + | let totalNo = getVal((session + keyVoteNo)) | |
80 | + | let userVoteAmount = getUserVoteAmount(i.caller, session) | |
81 | + | let userVote = getUserVote(i.caller, session) | |
82 | + | let userENNOLocked = getUserENNOLocked(i.caller) | |
83 | + | let userENNOVotedNew = userENNOLocked | |
84 | + | if ((0 > userENNOVotedNew)) | |
85 | + | then throw("Vote must be more than 0") | |
86 | + | else if (if ((vote != userVote)) | |
87 | + | then (userVoteAmount > 0) | |
88 | + | else false) | |
89 | + | then throw("Please use change my vote option the update your vote") | |
90 | + | else if ((userVoteAmount == userENNOLocked)) | |
91 | + | then throw("You have already voted. Stake more enno to update voting") | |
92 | + | else { | |
93 | + | let newTotalYesVoted = (totalYes + (if ((vote == true)) | |
94 | + | then (userENNOLocked - userVoteAmount) | |
95 | + | else 0)) | |
96 | + | let newTotalNoVoted = (totalNo + (if ((vote == false)) | |
97 | + | then (userENNOLocked - userVoteAmount) | |
98 | + | else 0)) | |
99 | + | [IntegerEntry((((toString(i.caller) + keyUserVOTEAmount) + "_") + session), userENNOLocked), BooleanEntry((((toString(i.caller) + keyUserVOTE) + "_") + session), vote), IntegerEntry((session + keyVoteYes), newTotalYesVoted), IntegerEntry((session + keyVoteNo), newTotalNoVoted), IntegerEntry((session + keyTotalVOTE), (newTotalNoVoted + newTotalYesVoted))] | |
100 | + | } | |
101 | + | } | |
102 | + | } | |
103 | + | ||
104 | + | ||
105 | + | ||
106 | + | @Callable(i) | |
107 | + | func changeVote () = if (!(isActive)) | |
108 | + | then throw("DApp is inactive at this moment") | |
109 | + | else { | |
110 | + | let session = toString(getVal(keyVoteNumber)) | |
111 | + | let start = getVal(((keyVoteStart + "_") + session)) | |
112 | + | let end = getVal(((keyVoteEnd + "_") + session)) | |
113 | + | if ((start > height)) | |
114 | + | then throw(((("Voting has not started yet. Start: " + toString(start)) + "Height: ") + toString(height))) | |
115 | + | else if ((height > end)) | |
116 | + | then throw(((("Voting has already ended. End: " + toString(end)) + "Height: ") + toString(height))) | |
117 | + | else { | |
118 | + | let totalYes = getVal((session + keyVoteYes)) | |
119 | + | let totalNo = getVal((session + keyVoteNo)) | |
120 | + | let userVoteAmount = getUserVoteAmount(i.caller, session) | |
121 | + | let userVote = getUserVote(i.caller, session) | |
122 | + | let userENNOLocked = getUserENNOLocked(i.caller) | |
123 | + | let userENNOVotedNew = userENNOLocked | |
124 | + | if ((userVoteAmount == 0)) | |
125 | + | then throw("You do not have any vote to change") | |
126 | + | else if ((0 > userENNOVotedNew)) | |
127 | + | then throw("Vote must be more than 0") | |
128 | + | else { | |
129 | + | let newTotalYesVoted = (totalYes - (if ((userVote == true)) | |
130 | + | then userVoteAmount | |
131 | + | else -(userVoteAmount))) | |
132 | + | let newTotalNoVoted = (totalNo + (if ((userVote == true)) | |
133 | + | then userVoteAmount | |
134 | + | else -(userVoteAmount))) | |
135 | + | [IntegerEntry((((toString(i.caller) + keyUserVOTEAmount) + "_") + session), userVoteAmount), BooleanEntry((((toString(i.caller) + keyUserVOTE) + "_") + session), !(userVote)), IntegerEntry((session + keyVoteYes), newTotalYesVoted), IntegerEntry((session + keyVoteNo), newTotalNoVoted), IntegerEntry((session + keyTotalVOTE), (newTotalNoVoted + newTotalYesVoted))] | |
136 | + | } | |
137 | + | } | |
138 | + | } | |
139 | + | ||
140 | + | ||
141 | + | ||
142 | + | @Callable(i) | |
143 | + | func shutdown () = if (!(isActive)) | |
144 | + | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, keyCause), "the cause wasn't specified"))) | |
145 | + | else if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminPubKeyStartStop], i.callerPublicKey))) | |
146 | + | then throw("Only admin can call this function") | |
147 | + | else suspend("Paused by admin") | |
148 | + | ||
149 | + | ||
150 | + | @Verifier(tx) | |
151 | + | func verify () = match tx { | |
152 | + | case d: DataTransaction => | |
153 | + | sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
154 | + | case _ => | |
155 | + | let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1)) | |
156 | + | then 1 | |
157 | + | else 0 | |
158 | + | let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2)) | |
159 | + | then 1 | |
160 | + | else 0 | |
161 | + | let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3)) | |
162 | + | then 1 | |
163 | + | else 0 | |
164 | + | (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2) | |
165 | + | } | |
166 | + |
github/deemru/w8io/3ef1775 25.94 ms ◑