tx · HKSGuDY5KHHzZ9iM8GaE7V1QX6RBNb2bTajt11wHR9WH 3MyJoBjw9nC4uhgWULVJUaEZEL6z9As7Yfq: -0.00900000 Waves 2022.07.07 13:20 [2129142] smart account 3MyJoBjw9nC4uhgWULVJUaEZEL6z9As7Yfq > SELF 0.00000000 Waves
{ "type": 13, "id": "HKSGuDY5KHHzZ9iM8GaE7V1QX6RBNb2bTajt11wHR9WH", "fee": 900000, "feeAssetId": null, "timestamp": 1657189224123, "version": 2, "chainId": 84, "sender": "3MyJoBjw9nC4uhgWULVJUaEZEL6z9As7Yfq", "senderPublicKey": "6E1saVK6whrqLsuLBQRGg6smask3XK5nkfiAWyGd3pEm", "proofs": [ "2f23CwtVDGZskA2m7opc8JyvDjncE2axCUFxsqPjNrZVUUJwtqMFtNtLwJEDaCgyM3AxzPr92mhXhsQSSi64QKX9" ], "script": "base64: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", "height": 2129142, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AKPdUQeZZYT9dLSz5UwqCb7jEY3ibnXR68DGsPqmJhWq Next: DGxmP9smFpAk59CCaD8tXhWrtPUw68uthKYCKrPQiFxB Diff:
Old | New | Differences | |
---|---|---|---|
7 | 7 | ||
8 | 8 | let VOTE_OPENED = "OPEN" | |
9 | 9 | ||
10 | - | let DYZ_ASSET_ID = "G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j" | |
11 | - | ||
12 | - | let DYZ_ASSET_ID_BYTES = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j' | |
10 | + | let DYZ_ASSET_ID = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j' | |
13 | 11 | ||
14 | 12 | let MIN_DYZ_AMOUNT = 100000000 | |
15 | 13 | ||
110 | 108 | let statusKey = getStatusKey(id) | |
111 | 109 | let repaymentKey = getRepaymentKey(id, caller) | |
112 | 110 | if ((repayAmount > 0)) | |
113 | - | then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID | |
111 | + | then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID), StringEntry(statusKey, VOTE_CLOSED), IntegerEntry(repaymentKey, 0)] | |
114 | 112 | else throw("Nothing to claim!") | |
115 | 113 | } | |
116 | 114 | } | |
130 | 128 | let assetId = toBase58String(value(payment.assetId)) | |
131 | 129 | if ((getRefundAmount(id, caller) != -1)) | |
132 | 130 | then throw("Only one vote per id per address!") | |
133 | - | else if ((assetId != DYZ_ASSET_ID)) | |
131 | + | else if ((assetId != toBase58String(DYZ_ASSET_ID))) | |
134 | 132 | then throw("payment in DZY necessary!") | |
135 | 133 | else if ((amount != MIN_DYZ_AMOUNT)) | |
136 | 134 | then throw("payment amount wrong!") |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let VOTING_BLOCKS = 100 | |
5 | 5 | ||
6 | 6 | let VOTE_CLOSED = "CLOSED" | |
7 | 7 | ||
8 | 8 | let VOTE_OPENED = "OPEN" | |
9 | 9 | ||
10 | - | let DYZ_ASSET_ID = "G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j" | |
11 | - | ||
12 | - | let DYZ_ASSET_ID_BYTES = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j' | |
10 | + | let DYZ_ASSET_ID = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j' | |
13 | 11 | ||
14 | 12 | let MIN_DYZ_AMOUNT = 100000000 | |
15 | 13 | ||
16 | 14 | let statusKeyPrefix = "status_" | |
17 | 15 | ||
18 | 16 | let openKeyPrefix = "open_" | |
19 | 17 | ||
20 | 18 | let totalYesSuffix = "_total_yes" | |
21 | 19 | ||
22 | 20 | let totalNoSuffix = "_total_no" | |
23 | 21 | ||
24 | 22 | let repaymentPrefix = "repayment_" | |
25 | 23 | ||
26 | 24 | func getStatusKey (id) = (statusKeyPrefix + id) | |
27 | 25 | ||
28 | 26 | ||
29 | 27 | func getOpenKey (id) = (openKeyPrefix + id) | |
30 | 28 | ||
31 | 29 | ||
32 | 30 | func getTotalYesKey (id) = (id + totalYesSuffix) | |
33 | 31 | ||
34 | 32 | ||
35 | 33 | func getTotalNoKey (id) = (id + totalNoSuffix) | |
36 | 34 | ||
37 | 35 | ||
38 | 36 | func getVoteStatus (id) = { | |
39 | 37 | let statusKey = getStatusKey(id) | |
40 | 38 | let status = getString(this, statusKey) | |
41 | 39 | status | |
42 | 40 | } | |
43 | 41 | ||
44 | 42 | ||
45 | 43 | func getRepaymentKey (id,address) = (((repaymentPrefix + id) + "_") + toString(address)) | |
46 | 44 | ||
47 | 45 | ||
48 | 46 | func getStartHeight (id) = { | |
49 | 47 | let result = match getInteger(this, getOpenKey(id)) { | |
50 | 48 | case n: Int => | |
51 | 49 | n | |
52 | 50 | case _ => | |
53 | 51 | -1 | |
54 | 52 | } | |
55 | 53 | result | |
56 | 54 | } | |
57 | 55 | ||
58 | 56 | ||
59 | 57 | func getRefundAmount (id,address) = { | |
60 | 58 | let repaymentKey = getRepaymentKey(id, address) | |
61 | 59 | let result = match getInteger(this, repaymentKey) { | |
62 | 60 | case n: Int => | |
63 | 61 | n | |
64 | 62 | case _ => | |
65 | 63 | -1 | |
66 | 64 | } | |
67 | 65 | result | |
68 | 66 | } | |
69 | 67 | ||
70 | 68 | ||
71 | 69 | @Callable(i) | |
72 | 70 | func openVote (id) = { | |
73 | 71 | let startHeightKey = getOpenKey(id) | |
74 | 72 | let alreadyVoting = getStartHeight(id) | |
75 | 73 | if ((alreadyVoting != -1)) | |
76 | 74 | then throw("Vote already ongoing for id!") | |
77 | 75 | else { | |
78 | 76 | let statusKey = getStatusKey(id) | |
79 | 77 | [StringEntry(statusKey, VOTE_OPENED), IntegerEntry(startHeightKey, height)] | |
80 | 78 | } | |
81 | 79 | } | |
82 | 80 | ||
83 | 81 | ||
84 | 82 | ||
85 | 83 | @Callable(i) | |
86 | 84 | func closeVote (id) = { | |
87 | 85 | let currentStartHeight = getStartHeight(id) | |
88 | 86 | if ((currentStartHeight == -1)) | |
89 | 87 | then throw("No vote found for id!") | |
90 | 88 | else if (((currentStartHeight + VOTING_BLOCKS) > height)) | |
91 | 89 | then throw("Vote can not be closed yet!") | |
92 | 90 | else { | |
93 | 91 | let statusKey = getStatusKey(id) | |
94 | 92 | [StringEntry(statusKey, VOTE_CLOSED)] | |
95 | 93 | } | |
96 | 94 | } | |
97 | 95 | ||
98 | 96 | ||
99 | 97 | ||
100 | 98 | @Callable(i) | |
101 | 99 | func claim (id) = { | |
102 | 100 | let startHeight = getStartHeight(id) | |
103 | 101 | if ((startHeight == -1)) | |
104 | 102 | then throw("No vote started for this id!") | |
105 | 103 | else if (((startHeight + VOTING_BLOCKS) >= height)) | |
106 | 104 | then throw("You can only claim after vote ends!") | |
107 | 105 | else { | |
108 | 106 | let caller = i.caller | |
109 | 107 | let repayAmount = getRefundAmount(id, caller) | |
110 | 108 | let statusKey = getStatusKey(id) | |
111 | 109 | let repaymentKey = getRepaymentKey(id, caller) | |
112 | 110 | if ((repayAmount > 0)) | |
113 | - | then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID | |
111 | + | then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID), StringEntry(statusKey, VOTE_CLOSED), IntegerEntry(repaymentKey, 0)] | |
114 | 112 | else throw("Nothing to claim!") | |
115 | 113 | } | |
116 | 114 | } | |
117 | 115 | ||
118 | 116 | ||
119 | 117 | ||
120 | 118 | @Callable(i) | |
121 | 119 | func vote (id,vote) = if ((size(i.payments) != 1)) | |
122 | 120 | then throw("One payment in DZY needs to be attached") | |
123 | 121 | else { | |
124 | 122 | let payment = value(i.payments[0]) | |
125 | 123 | let caller = i.caller | |
126 | 124 | let amount = payment.amount | |
127 | 125 | if (!(isDefined(payment.assetId))) | |
128 | 126 | then throw("Payment in Waves not allowed!") | |
129 | 127 | else { | |
130 | 128 | let assetId = toBase58String(value(payment.assetId)) | |
131 | 129 | if ((getRefundAmount(id, caller) != -1)) | |
132 | 130 | then throw("Only one vote per id per address!") | |
133 | - | else if ((assetId != DYZ_ASSET_ID)) | |
131 | + | else if ((assetId != toBase58String(DYZ_ASSET_ID))) | |
134 | 132 | then throw("payment in DZY necessary!") | |
135 | 133 | else if ((amount != MIN_DYZ_AMOUNT)) | |
136 | 134 | then throw("payment amount wrong!") | |
137 | 135 | else { | |
138 | 136 | let repaymentKey = getRepaymentKey(id, caller) | |
139 | 137 | let voteStatus = getVoteStatus(id) | |
140 | 138 | if ((voteStatus == VOTE_CLOSED)) | |
141 | 139 | then throw("vote closed!") | |
142 | 140 | else { | |
143 | 141 | let openHeight = match getInteger(this, getOpenKey(id)) { | |
144 | 142 | case a: Int => | |
145 | 143 | a | |
146 | 144 | case _ => | |
147 | 145 | 0 | |
148 | 146 | } | |
149 | 147 | if ((height > (openHeight + VOTING_BLOCKS))) | |
150 | 148 | then throw("voting ended!") | |
151 | 149 | else { | |
152 | 150 | let newEntry = if ((vote == "yes")) | |
153 | 151 | then { | |
154 | 152 | let yesVoteKey = getTotalYesKey(id) | |
155 | 153 | let yesVotesSoFar = match getInteger(this, yesVoteKey) { | |
156 | 154 | case a: Int => | |
157 | 155 | a | |
158 | 156 | case _ => | |
159 | 157 | 0 | |
160 | 158 | } | |
161 | 159 | let newYesVotes = (yesVotesSoFar + 1) | |
162 | 160 | [IntegerEntry(yesVoteKey, newYesVotes), IntegerEntry(repaymentKey, amount)] | |
163 | 161 | } | |
164 | 162 | else if ((vote == "no")) | |
165 | 163 | then { | |
166 | 164 | let noVoteKey = getTotalNoKey(id) | |
167 | 165 | let noVotesSoFar = match getInteger(this, noVoteKey) { | |
168 | 166 | case a: Int => | |
169 | 167 | a | |
170 | 168 | case _ => | |
171 | 169 | 0 | |
172 | 170 | } | |
173 | 171 | let newNoVotes = (noVotesSoFar + 1) | |
174 | 172 | [IntegerEntry(noVoteKey, newNoVotes), IntegerEntry(repaymentKey, amount)] | |
175 | 173 | } | |
176 | 174 | else nil | |
177 | 175 | newEntry | |
178 | 176 | } | |
179 | 177 | } | |
180 | 178 | } | |
181 | 179 | } | |
182 | 180 | } | |
183 | 181 | ||
184 | 182 | ||
185 | 183 | @Verifier(tx) | |
186 | 184 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
187 | 185 |
github/deemru/w8io/169f3d6 39.21 ms ◑