tx · DGxmP9smFpAk59CCaD8tXhWrtPUw68uthKYCKrPQiFxB

3MyJoBjw9nC4uhgWULVJUaEZEL6z9As7Yfq:  -0.00900000 Waves

2022.07.07 13:26 [2129147] smart account 3MyJoBjw9nC4uhgWULVJUaEZEL6z9As7Yfq > SELF 0.00000000 Waves

{ "type": 13, "id": "DGxmP9smFpAk59CCaD8tXhWrtPUw68uthKYCKrPQiFxB", "fee": 900000, "feeAssetId": null, "timestamp": 1657189664651, "version": 2, "chainId": 84, "sender": "3MyJoBjw9nC4uhgWULVJUaEZEL6z9As7Yfq", "senderPublicKey": "6E1saVK6whrqLsuLBQRGg6smask3XK5nkfiAWyGd3pEm", "proofs": [ "49gEb7eLXzyXQR7Kbvy8eF2UjS8tapbTFoNssJQ153p8B5PdCTLJazjcA7C2xse2NLGdduFJNCY7N7pxQU3JNgy5" ], "script": "base64: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", "height": 2129147, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HKSGuDY5KHHzZ9iM8GaE7V1QX6RBNb2bTajt11wHR9WH Next: ghoHbqxVaDGFUWyUFrY8KcVxd2XYcCNfKrSW6Ax1uuT Diff:
OldNewDifferences
3333 func getTotalNoKey (id) = (id + totalNoSuffix)
3434
3535
36-func getVoteStatus (id) = {
37- let statusKey = getStatusKey(id)
38- let status = getString(this, statusKey)
39- status
40- }
36+func getVoteStatus (id) = getString(this, getStatusKey(id))
4137
4238
4339 func getRepaymentKey (id,address) = (((repaymentPrefix + id) + "_") + toString(address))
4440
4541
46-func getStartHeight (id) = {
47- let result = match getInteger(this, getOpenKey(id)) {
48- case n: Int =>
49- n
50- case _ =>
51- -1
52- }
53- result
54- }
42+func getStartHeight (id) = match getInteger(this, getOpenKey(id)) {
43+ case n: Int =>
44+ n
45+ case _ =>
46+ -1
47+}
5548
5649
57-func getRefundAmount (id,address) = {
58- let repaymentKey = getRepaymentKey(id, address)
59- let result = match getInteger(this, repaymentKey) {
60- case n: Int =>
61- n
62- case _ =>
63- -1
64- }
65- result
66- }
50+func getRefundAmount (id,address) = match getInteger(this, getRepaymentKey(id, address)) {
51+ case n: Int =>
52+ n
53+ case _ =>
54+ -1
55+}
6756
6857
6958 @Callable(i)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VOTING_BLOCKS = 100
55
66 let VOTE_CLOSED = "CLOSED"
77
88 let VOTE_OPENED = "OPEN"
99
1010 let DYZ_ASSET_ID = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j'
1111
1212 let MIN_DYZ_AMOUNT = 100000000
1313
1414 let statusKeyPrefix = "status_"
1515
1616 let openKeyPrefix = "open_"
1717
1818 let totalYesSuffix = "_total_yes"
1919
2020 let totalNoSuffix = "_total_no"
2121
2222 let repaymentPrefix = "repayment_"
2323
2424 func getStatusKey (id) = (statusKeyPrefix + id)
2525
2626
2727 func getOpenKey (id) = (openKeyPrefix + id)
2828
2929
3030 func getTotalYesKey (id) = (id + totalYesSuffix)
3131
3232
3333 func getTotalNoKey (id) = (id + totalNoSuffix)
3434
3535
36-func getVoteStatus (id) = {
37- let statusKey = getStatusKey(id)
38- let status = getString(this, statusKey)
39- status
40- }
36+func getVoteStatus (id) = getString(this, getStatusKey(id))
4137
4238
4339 func getRepaymentKey (id,address) = (((repaymentPrefix + id) + "_") + toString(address))
4440
4541
46-func getStartHeight (id) = {
47- let result = match getInteger(this, getOpenKey(id)) {
48- case n: Int =>
49- n
50- case _ =>
51- -1
52- }
53- result
54- }
42+func getStartHeight (id) = match getInteger(this, getOpenKey(id)) {
43+ case n: Int =>
44+ n
45+ case _ =>
46+ -1
47+}
5548
5649
57-func getRefundAmount (id,address) = {
58- let repaymentKey = getRepaymentKey(id, address)
59- let result = match getInteger(this, repaymentKey) {
60- case n: Int =>
61- n
62- case _ =>
63- -1
64- }
65- result
66- }
50+func getRefundAmount (id,address) = match getInteger(this, getRepaymentKey(id, address)) {
51+ case n: Int =>
52+ n
53+ case _ =>
54+ -1
55+}
6756
6857
6958 @Callable(i)
7059 func openVote (id) = {
7160 let startHeightKey = getOpenKey(id)
7261 let alreadyVoting = getStartHeight(id)
7362 if ((alreadyVoting != -1))
7463 then throw("Vote already ongoing for id!")
7564 else {
7665 let statusKey = getStatusKey(id)
7766 [StringEntry(statusKey, VOTE_OPENED), IntegerEntry(startHeightKey, height)]
7867 }
7968 }
8069
8170
8271
8372 @Callable(i)
8473 func closeVote (id) = {
8574 let currentStartHeight = getStartHeight(id)
8675 if ((currentStartHeight == -1))
8776 then throw("No vote found for id!")
8877 else if (((currentStartHeight + VOTING_BLOCKS) > height))
8978 then throw("Vote can not be closed yet!")
9079 else {
9180 let statusKey = getStatusKey(id)
9281 [StringEntry(statusKey, VOTE_CLOSED)]
9382 }
9483 }
9584
9685
9786
9887 @Callable(i)
9988 func claim (id) = {
10089 let startHeight = getStartHeight(id)
10190 if ((startHeight == -1))
10291 then throw("No vote started for this id!")
10392 else if (((startHeight + VOTING_BLOCKS) >= height))
10493 then throw("You can only claim after vote ends!")
10594 else {
10695 let caller = i.caller
10796 let repayAmount = getRefundAmount(id, caller)
10897 let statusKey = getStatusKey(id)
10998 let repaymentKey = getRepaymentKey(id, caller)
11099 if ((repayAmount > 0))
111100 then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID), StringEntry(statusKey, VOTE_CLOSED), IntegerEntry(repaymentKey, 0)]
112101 else throw("Nothing to claim!")
113102 }
114103 }
115104
116105
117106
118107 @Callable(i)
119108 func vote (id,vote) = if ((size(i.payments) != 1))
120109 then throw("One payment in DZY needs to be attached")
121110 else {
122111 let payment = value(i.payments[0])
123112 let caller = i.caller
124113 let amount = payment.amount
125114 if (!(isDefined(payment.assetId)))
126115 then throw("Payment in Waves not allowed!")
127116 else {
128117 let assetId = toBase58String(value(payment.assetId))
129118 if ((getRefundAmount(id, caller) != -1))
130119 then throw("Only one vote per id per address!")
131120 else if ((assetId != toBase58String(DYZ_ASSET_ID)))
132121 then throw("payment in DZY necessary!")
133122 else if ((amount != MIN_DYZ_AMOUNT))
134123 then throw("payment amount wrong!")
135124 else {
136125 let repaymentKey = getRepaymentKey(id, caller)
137126 let voteStatus = getVoteStatus(id)
138127 if ((voteStatus == VOTE_CLOSED))
139128 then throw("vote closed!")
140129 else {
141130 let openHeight = match getInteger(this, getOpenKey(id)) {
142131 case a: Int =>
143132 a
144133 case _ =>
145134 0
146135 }
147136 if ((height > (openHeight + VOTING_BLOCKS)))
148137 then throw("voting ended!")
149138 else {
150139 let newEntry = if ((vote == "yes"))
151140 then {
152141 let yesVoteKey = getTotalYesKey(id)
153142 let yesVotesSoFar = match getInteger(this, yesVoteKey) {
154143 case a: Int =>
155144 a
156145 case _ =>
157146 0
158147 }
159148 let newYesVotes = (yesVotesSoFar + 1)
160149 [IntegerEntry(yesVoteKey, newYesVotes), IntegerEntry(repaymentKey, amount)]
161150 }
162151 else if ((vote == "no"))
163152 then {
164153 let noVoteKey = getTotalNoKey(id)
165154 let noVotesSoFar = match getInteger(this, noVoteKey) {
166155 case a: Int =>
167156 a
168157 case _ =>
169158 0
170159 }
171160 let newNoVotes = (noVotesSoFar + 1)
172161 [IntegerEntry(noVoteKey, newNoVotes), IntegerEntry(repaymentKey, amount)]
173162 }
174163 else nil
175164 newEntry
176165 }
177166 }
178167 }
179168 }
180169 }
181170
182171
183172 @Verifier(tx)
184173 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
185174

github/deemru/w8io/169f3d6 
36.21 ms