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:
OldNewDifferences
77
88 let VOTE_OPENED = "OPEN"
99
10-let DYZ_ASSET_ID = "G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j"
11-
12-let DYZ_ASSET_ID_BYTES = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j'
10+let DYZ_ASSET_ID = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j'
1311
1412 let MIN_DYZ_AMOUNT = 100000000
1513
110108 let statusKey = getStatusKey(id)
111109 let repaymentKey = getRepaymentKey(id, caller)
112110 if ((repayAmount > 0))
113- then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID_BYTES), StringEntry(statusKey, VOTE_CLOSED), IntegerEntry(repaymentKey, 0)]
111+ then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID), StringEntry(statusKey, VOTE_CLOSED), IntegerEntry(repaymentKey, 0)]
114112 else throw("Nothing to claim!")
115113 }
116114 }
130128 let assetId = toBase58String(value(payment.assetId))
131129 if ((getRefundAmount(id, caller) != -1))
132130 then throw("Only one vote per id per address!")
133- else if ((assetId != DYZ_ASSET_ID))
131+ else if ((assetId != toBase58String(DYZ_ASSET_ID)))
134132 then throw("payment in DZY necessary!")
135133 else if ((amount != MIN_DYZ_AMOUNT))
136134 then throw("payment amount wrong!")
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
10-let DYZ_ASSET_ID = "G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j"
11-
12-let DYZ_ASSET_ID_BYTES = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j'
10+let DYZ_ASSET_ID = base58'G2Pb7CMztps7XEVGCiUuJkLiS3ZCo69APQNbJs2nz21j'
1311
1412 let MIN_DYZ_AMOUNT = 100000000
1513
1614 let statusKeyPrefix = "status_"
1715
1816 let openKeyPrefix = "open_"
1917
2018 let totalYesSuffix = "_total_yes"
2119
2220 let totalNoSuffix = "_total_no"
2321
2422 let repaymentPrefix = "repayment_"
2523
2624 func getStatusKey (id) = (statusKeyPrefix + id)
2725
2826
2927 func getOpenKey (id) = (openKeyPrefix + id)
3028
3129
3230 func getTotalYesKey (id) = (id + totalYesSuffix)
3331
3432
3533 func getTotalNoKey (id) = (id + totalNoSuffix)
3634
3735
3836 func getVoteStatus (id) = {
3937 let statusKey = getStatusKey(id)
4038 let status = getString(this, statusKey)
4139 status
4240 }
4341
4442
4543 func getRepaymentKey (id,address) = (((repaymentPrefix + id) + "_") + toString(address))
4644
4745
4846 func getStartHeight (id) = {
4947 let result = match getInteger(this, getOpenKey(id)) {
5048 case n: Int =>
5149 n
5250 case _ =>
5351 -1
5452 }
5553 result
5654 }
5755
5856
5957 func getRefundAmount (id,address) = {
6058 let repaymentKey = getRepaymentKey(id, address)
6159 let result = match getInteger(this, repaymentKey) {
6260 case n: Int =>
6361 n
6462 case _ =>
6563 -1
6664 }
6765 result
6866 }
6967
7068
7169 @Callable(i)
7270 func openVote (id) = {
7371 let startHeightKey = getOpenKey(id)
7472 let alreadyVoting = getStartHeight(id)
7573 if ((alreadyVoting != -1))
7674 then throw("Vote already ongoing for id!")
7775 else {
7876 let statusKey = getStatusKey(id)
7977 [StringEntry(statusKey, VOTE_OPENED), IntegerEntry(startHeightKey, height)]
8078 }
8179 }
8280
8381
8482
8583 @Callable(i)
8684 func closeVote (id) = {
8785 let currentStartHeight = getStartHeight(id)
8886 if ((currentStartHeight == -1))
8987 then throw("No vote found for id!")
9088 else if (((currentStartHeight + VOTING_BLOCKS) > height))
9189 then throw("Vote can not be closed yet!")
9290 else {
9391 let statusKey = getStatusKey(id)
9492 [StringEntry(statusKey, VOTE_CLOSED)]
9593 }
9694 }
9795
9896
9997
10098 @Callable(i)
10199 func claim (id) = {
102100 let startHeight = getStartHeight(id)
103101 if ((startHeight == -1))
104102 then throw("No vote started for this id!")
105103 else if (((startHeight + VOTING_BLOCKS) >= height))
106104 then throw("You can only claim after vote ends!")
107105 else {
108106 let caller = i.caller
109107 let repayAmount = getRefundAmount(id, caller)
110108 let statusKey = getStatusKey(id)
111109 let repaymentKey = getRepaymentKey(id, caller)
112110 if ((repayAmount > 0))
113- then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID_BYTES), StringEntry(statusKey, VOTE_CLOSED), IntegerEntry(repaymentKey, 0)]
111+ then [ScriptTransfer(caller, repayAmount, DYZ_ASSET_ID), StringEntry(statusKey, VOTE_CLOSED), IntegerEntry(repaymentKey, 0)]
114112 else throw("Nothing to claim!")
115113 }
116114 }
117115
118116
119117
120118 @Callable(i)
121119 func vote (id,vote) = if ((size(i.payments) != 1))
122120 then throw("One payment in DZY needs to be attached")
123121 else {
124122 let payment = value(i.payments[0])
125123 let caller = i.caller
126124 let amount = payment.amount
127125 if (!(isDefined(payment.assetId)))
128126 then throw("Payment in Waves not allowed!")
129127 else {
130128 let assetId = toBase58String(value(payment.assetId))
131129 if ((getRefundAmount(id, caller) != -1))
132130 then throw("Only one vote per id per address!")
133- else if ((assetId != DYZ_ASSET_ID))
131+ else if ((assetId != toBase58String(DYZ_ASSET_ID)))
134132 then throw("payment in DZY necessary!")
135133 else if ((amount != MIN_DYZ_AMOUNT))
136134 then throw("payment amount wrong!")
137135 else {
138136 let repaymentKey = getRepaymentKey(id, caller)
139137 let voteStatus = getVoteStatus(id)
140138 if ((voteStatus == VOTE_CLOSED))
141139 then throw("vote closed!")
142140 else {
143141 let openHeight = match getInteger(this, getOpenKey(id)) {
144142 case a: Int =>
145143 a
146144 case _ =>
147145 0
148146 }
149147 if ((height > (openHeight + VOTING_BLOCKS)))
150148 then throw("voting ended!")
151149 else {
152150 let newEntry = if ((vote == "yes"))
153151 then {
154152 let yesVoteKey = getTotalYesKey(id)
155153 let yesVotesSoFar = match getInteger(this, yesVoteKey) {
156154 case a: Int =>
157155 a
158156 case _ =>
159157 0
160158 }
161159 let newYesVotes = (yesVotesSoFar + 1)
162160 [IntegerEntry(yesVoteKey, newYesVotes), IntegerEntry(repaymentKey, amount)]
163161 }
164162 else if ((vote == "no"))
165163 then {
166164 let noVoteKey = getTotalNoKey(id)
167165 let noVotesSoFar = match getInteger(this, noVoteKey) {
168166 case a: Int =>
169167 a
170168 case _ =>
171169 0
172170 }
173171 let newNoVotes = (noVotesSoFar + 1)
174172 [IntegerEntry(noVoteKey, newNoVotes), IntegerEntry(repaymentKey, amount)]
175173 }
176174 else nil
177175 newEntry
178176 }
179177 }
180178 }
181179 }
182180 }
183181
184182
185183 @Verifier(tx)
186184 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
187185

github/deemru/w8io/169f3d6 
39.21 ms