tx · 6S4UpsrcBHWnVqoEDjhGrCxXFTBkgZGuz5eA7Ux69683 3MpTJ3MDAfkwKDQEtV8CJQN1qPv4S6NE7TP: -0.01000000 Waves 2019.07.16 16:07 [588421] smart account 3MpTJ3MDAfkwKDQEtV8CJQN1qPv4S6NE7TP > SELF 0.00000000 Waves
{ "type": 13, "id": "6S4UpsrcBHWnVqoEDjhGrCxXFTBkgZGuz5eA7Ux69683", "fee": 1000000, "feeAssetId": null, "timestamp": 1563282459624, "version": 1, "sender": "3MpTJ3MDAfkwKDQEtV8CJQN1qPv4S6NE7TP", "senderPublicKey": "GUL5WrhQDsCzpQWv1EmVppYai7Sn4faWvLQ4prP3quqQ", "proofs": [ "5t3fgzAE85Rzr8SgA7VbSKhWZRZmoLnmrG598cuat7xKKncK1D8imw4Bbs54nwBA5sWjEX2KYrSMSCct3ah4UCL7" ], "script": "base64:AAIDAAAAAAAAAAAAAAAyAAAAAAV3YXZlcwAAAAAABfXhAAAAAAAObGlnYUNvbW1pc3Npb24AAAAAAAAAAAQAAAAACnRvdGFsVGVhbXMAAAAAAAAAAAIAAAAABGxpZ2EBAAAAIE3Gc0ub9kEgvJ3N5Yl3UKCqp1XAnx7oebfrT0yHZNoXAAAAAAZvcmFjbGUBAAAAIMZII/KURkmPNNjE4t3niLRwgWWmbpJoyAr+LfzqZyI3AAAAAAlsZWFzZU5vZGUBAAAAIMZII/KURkmPNNjE4t3niLRwgWWmbpJoyAr+LfzqZyI3AAAAABBldmVudEVuZHNBdEJsb2NrAAAAAAAACPrAAAAAABl3aW5uZXJEZWNsYXJhdGlvbkludGVydmFsAAAAAAAAABJIAAAAAA5wYXlvdXRJbnRlcnZhbAAAAAAAAAASSAEAAAAIZ2V0SW50T3IAAAACAAAAA2tleQAAAAdkZWZhdWx0AwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAANrZXkFAAAAB2RlZmF1bHQBAAAABmdldEludAAAAAEAAAADa2V5CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAANrZXkBAAAABnNldEludAAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAADa2V5BQAAAAV2YWx1ZQEAAAAIc2V0Qnl0ZXMAAAACAAAAA2tleQAAAAV2YWx1ZQkBAAAACURhdGFFbnRyeQAAAAIFAAAAA2tleQUAAAAFdmFsdWUBAAAACGdldEJ5dGVzAAAAAQAAAANrZXkJAQAAABFAZXh0ck5hdGl2ZSgxMDUyKQAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAMaXNLZXlEZWZpbmVkAAAAAQAAAANrZXkDAwMJAQAAAAlpc0RlZmluZWQAAAABCQAEHAAAAAIFAAAABHRoaXMFAAAAA2tleQYJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQYJAQAAAAlpc0RlZmluZWQAAAABCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQYJAQAAAAlpc0RlZmluZWQAAAABCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAJdG9Tb2xkS2V5AAAAAQAAAAdhc3NldElkCQABLAAAAAIJAAJYAAAAAQUAAAAHYXNzZXRJZAIAAAAFX1NPTEQBAAAADWdldFNvbGRBbW91bnQAAAABAAAAB2Fzc2V0SWQJAQAAAAhnZXRJbnRPcgAAAAIJAQAAAAl0b1NvbGRLZXkAAAABBQAAAAdhc3NldElkCQAAZQAAAAIICQEAAAAHZXh0cmFjdAAAAAEJAAPsAAAAAQUAAAAHYXNzZXRJZAAAAAhxdWFudGl0eQkAA+sAAAACBQAAAAR0aGlzBQAAAAdhc3NldElkAQAAAA1zZXRTb2xkQW1vdW50AAAAAQAAAAdhc3NldElkCQEAAAAGc2V0SW50AAAAAgkBAAAACXRvU29sZEtleQAAAAEFAAAAB2Fzc2V0SWQJAQAAAA1nZXRTb2xkQW1vdW50AAAAAQUAAAAHYXNzZXRJZAEAAAAOdG9CYXNlUHJpY2VLZXkAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgkAAlgAAAABBQAAAAdhc3NldElkAgAAAAtfQkFTRV9QUklDRQEAAAAMZ2V0QmFzZVByaWNlAAAAAQAAAAZ0ZWFtSWQJAQAAAAZnZXRJbnQAAAABCQEAAAAOdG9CYXNlUHJpY2VLZXkAAAABBQAAAAZ0ZWFtSWQBAAAACHRvT2ZmS2V5AAAAAQAAAAdhc3NldElkCQABLAAAAAIJAAJYAAAAAQUAAAAHYXNzZXRJZAIAAAAEX09GRgEAAAADb2ZmAAAAAQAAAAZ0ZWFtSWQJAQAAAAZzZXRJbnQAAAACCQEAAAAIdG9PZmZLZXkAAAABBQAAAAZ0ZWFtSWQAAAAAAAAAAAEBAAAABWlzT2ZmAAAAAQAAAAZ0ZWFtSWQJAQAAAAhnZXRJbnRPcgAAAAIJAQAAAAh0b09mZktleQAAAAEFAAAABnRlYW1JZAAAAAAAAAAAAAAAAAAPQkFMQU5DRVNOQVBTSE9UAgAAABBCQUxBTkNFX1NOQVBTSE9UAQAAABJnZXRCYWxhbmNlU25hcHNob3QAAAAACQEAAAAIZ2V0SW50T3IAAAACBQAAAA9CQUxBTkNFU05BUFNIT1QJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAR0aGlzAQAAABJzZXRCYWxhbmNlU25hcHNob3QAAAAACQEAAAAGc2V0SW50AAAAAgUAAAAPQkFMQU5DRVNOQVBTSE9UCQEAAAASZ2V0QmFsYW5jZVNuYXBzaG90AAAAAAAAAAAJUFJJWkVQT09MAgAAAApQUklaRV9QT09MAQAAAAxnZXRQcml6ZVBvb2wAAAAACQEAAAAIZ2V0SW50T3IAAAACBQAAAAlQUklaRVBPT0wJAABpAAAAAgkAAGgAAAACCQEAAAASZ2V0QmFsYW5jZVNuYXBzaG90AAAAAAkAAGUAAAACAAAAAAAAAABkBQAAAA5saWdhQ29tbWlzc2lvbgAAAAAAAAAAZAEAAAAMc2V0UHJpemVQb29sAAAAAAkBAAAABnNldEludAAAAAIFAAAACVBSSVpFUE9PTAkBAAAADGdldFByaXplUG9vbAAAAAAAAAAABldJTk5FUgIAAAAGV0lOTkVSAQAAAAlnZXRXaW5uZXIAAAAACQEAAAAIZ2V0Qnl0ZXMAAAABBQAAAAZXSU5ORVIBAAAACXNldFdpbm5lcgAAAAEAAAAGd2lubmVyCQEAAAAIc2V0Qnl0ZXMAAAACBQAAAAZXSU5ORVIFAAAABndpbm5lcgAAAAAJVEVBTVNMRUZUAgAAAApURUFNU19MRUZUAQAAAAxnZXRUZWFtc0xlZnQAAAAACQEAAAAIZ2V0SW50T3IAAAACBQAAAAlURUFNU0xFRlQFAAAACnRvdGFsVGVhbXMBAAAADGRlY1RlYW1zTGVmdAAAAAAJAQAAAAZzZXRJbnQAAAACBQAAAAlURUFNU0xFRlQJAABlAAAAAgkBAAAADGdldFRlYW1zTGVmdAAAAAAAAAAAAAAAAAEAAAAAC1RFQU1DT1VOVEVSAgAAAAxURUFNX0NPVU5URVIBAAAADmdldFRlYW1Db3VudGVyAAAAAAkBAAAACGdldEludE9yAAAAAgUAAAALVEVBTUNPVU5URVIAAAAAAAAAAAABAAAADmluY1RlYW1Db3VudGVyAAAAAAkBAAAABnNldEludAAAAAIFAAAAC1RFQU1DT1VOVEVSCQAAZAAAAAIJAQAAAA5nZXRUZWFtQ291bnRlcgAAAAAAAAAAAAAAAAEAAAAADUJBU0VQUklaRVBPT0wCAAAAD0JBU0VfUFJJ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", "chainId": 84, "height": 588421, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let waves = 100000000 | |
5 | + | ||
6 | + | let ligaCommission = 4 | |
7 | + | ||
8 | + | let totalTeams = 2 | |
9 | + | ||
10 | + | let liga = base58'6EbuPWZCjE4nMM3PJGRxYUbJpY18FtQQ1EauRAfirZ2e' | |
11 | + | ||
12 | + | let oracle = base58'EM1XUpKdct1eE2mgmdvr4VA4raXMKvYKumCbnArtcQ9c' | |
13 | + | ||
14 | + | let leaseNode = base58'EM1XUpKdct1eE2mgmdvr4VA4raXMKvYKumCbnArtcQ9c' | |
15 | + | ||
16 | + | let eventEndsAtBlock = 588480 | |
17 | + | ||
18 | + | let winnerDeclarationInterval = 4680 | |
19 | + | ||
20 | + | let payoutInterval = 4680 | |
21 | + | ||
22 | + | func getIntOr (key,default) = if (isDefined(getInteger(this, key))) | |
23 | + | then getIntegerValue(this, key) | |
24 | + | else default | |
25 | + | ||
26 | + | ||
27 | + | func getInt (key) = getIntegerValue(this, key) | |
28 | + | ||
29 | + | ||
30 | + | func setInt (key,value) = DataEntry(key, value) | |
31 | + | ||
32 | + | ||
33 | + | func setBytes (key,value) = DataEntry(key, value) | |
34 | + | ||
35 | + | ||
36 | + | func getBytes (key) = getBinaryValue(this, key) | |
37 | + | ||
38 | + | ||
39 | + | func isKeyDefined (key) = if (if (if (isDefined(getBinary(this, key))) | |
40 | + | then true | |
41 | + | else isDefined(getString(this, key))) | |
42 | + | then true | |
43 | + | else isDefined(getBoolean(this, key))) | |
44 | + | then true | |
45 | + | else isDefined(getInteger(this, key)) | |
46 | + | ||
47 | + | ||
48 | + | func toSoldKey (assetId) = (toBase58String(assetId) + "_SOLD") | |
49 | + | ||
50 | + | ||
51 | + | func getSoldAmount (assetId) = getIntOr(toSoldKey(assetId), (extract(assetInfo(assetId)).quantity - assetBalance(this, assetId))) | |
52 | + | ||
53 | + | ||
54 | + | func setSoldAmount (assetId) = setInt(toSoldKey(assetId), getSoldAmount(assetId)) | |
55 | + | ||
56 | + | ||
57 | + | func toBasePriceKey (assetId) = (toBase58String(assetId) + "_BASE_PRICE") | |
58 | + | ||
59 | + | ||
60 | + | func getBasePrice (teamId) = getInt(toBasePriceKey(teamId)) | |
61 | + | ||
62 | + | ||
63 | + | func toOffKey (assetId) = (toBase58String(assetId) + "_OFF") | |
64 | + | ||
65 | + | ||
66 | + | func off (teamId) = setInt(toOffKey(teamId), 1) | |
67 | + | ||
68 | + | ||
69 | + | func isOff (teamId) = getIntOr(toOffKey(teamId), 0) | |
70 | + | ||
71 | + | ||
72 | + | let BALANCESNAPSHOT = "BALANCE_SNAPSHOT" | |
73 | + | ||
74 | + | func getBalanceSnapshot () = getIntOr(BALANCESNAPSHOT, wavesBalance(this)) | |
75 | + | ||
76 | + | ||
77 | + | func setBalanceSnapshot () = setInt(BALANCESNAPSHOT, getBalanceSnapshot()) | |
78 | + | ||
79 | + | ||
80 | + | let PRIZEPOOL = "PRIZE_POOL" | |
81 | + | ||
82 | + | func getPrizePool () = getIntOr(PRIZEPOOL, ((getBalanceSnapshot() * (100 - ligaCommission)) / 100)) | |
83 | + | ||
84 | + | ||
85 | + | func setPrizePool () = setInt(PRIZEPOOL, getPrizePool()) | |
86 | + | ||
87 | + | ||
88 | + | let WINNER = "WINNER" | |
89 | + | ||
90 | + | func getWinner () = getBytes(WINNER) | |
91 | + | ||
92 | + | ||
93 | + | func setWinner (winner) = setBytes(WINNER, winner) | |
94 | + | ||
95 | + | ||
96 | + | let TEAMSLEFT = "TEAMS_LEFT" | |
97 | + | ||
98 | + | func getTeamsLeft () = getIntOr(TEAMSLEFT, totalTeams) | |
99 | + | ||
100 | + | ||
101 | + | func decTeamsLeft () = setInt(TEAMSLEFT, (getTeamsLeft() - 1)) | |
102 | + | ||
103 | + | ||
104 | + | let TEAMCOUNTER = "TEAM_COUNTER" | |
105 | + | ||
106 | + | func getTeamCounter () = getIntOr(TEAMCOUNTER, 0) | |
107 | + | ||
108 | + | ||
109 | + | func incTeamCounter () = setInt(TEAMCOUNTER, (getTeamCounter() + 1)) | |
110 | + | ||
111 | + | ||
112 | + | let BASEPRIZEPOOL = "BASE_PRIZE_POOL" | |
113 | + | ||
114 | + | func getBasePrizePool () = getIntOr(BASEPRIZEPOOL, 0) | |
115 | + | ||
116 | + | ||
117 | + | func addBasePrizePool (value) = setInt(BASEPRIZEPOOL, (getBasePrizePool() + value)) | |
118 | + | ||
119 | + | ||
120 | + | let STAGE1 = 1 | |
121 | + | ||
122 | + | let STAGE2 = 2 | |
123 | + | ||
124 | + | let STAGE31 = 31 | |
125 | + | ||
126 | + | let STAGE32 = 32 | |
127 | + | ||
128 | + | let STAGE33 = 33 | |
129 | + | ||
130 | + | let STAGE4 = 4 | |
131 | + | ||
132 | + | let STAGE = "STAGE" | |
133 | + | ||
134 | + | func stage () = getIntOr(STAGE, STAGE1) | |
135 | + | ||
136 | + | ||
137 | + | func goTo (stage) = setInt(STAGE, stage) | |
138 | + | ||
139 | + | ||
140 | + | @Callable(i) | |
141 | + | func stage2 () = if ((stage() != STAGE1)) | |
142 | + | then throw("Invalid current stage.") | |
143 | + | else if ((eventEndsAtBlock >= height)) | |
144 | + | then throw("Event is not yet finished.") | |
145 | + | else WriteSet([goTo(STAGE2), setBalanceSnapshot()]) | |
146 | + | ||
147 | + | ||
148 | + | ||
149 | + | @Callable(i) | |
150 | + | func stage31 (winner) = if ((stage() != STAGE2)) | |
151 | + | then throw("Invalid current stage.") | |
152 | + | else if ((i.callerPublicKey != oracle)) | |
153 | + | then throw("Only oracle could declare the winner.") | |
154 | + | else if (isDefined(toOffKey(winner))) | |
155 | + | then throw("Team that is off cannot be the winner.") | |
156 | + | else WriteSet([goTo(STAGE31), setPrizePool(), setWinner(winner), setSoldAmount(winner)]) | |
157 | + | ||
158 | + | ||
159 | + | ||
160 | + | @Callable(i) | |
161 | + | func stage32 (teamId) = if (if ((stage() != STAGE2)) | |
162 | + | then true | |
163 | + | else (stage() != STAGE32)) | |
164 | + | then throw("Invalid current stage.") | |
165 | + | else if (((eventEndsAtBlock + winnerDeclarationInterval) >= height)) | |
166 | + | then throw("Oracle is still have time to declare a winner.") | |
167 | + | else if (!(isKeyDefined(toBasePriceKey(teamId)))) | |
168 | + | then throw("Team is not found.") | |
169 | + | else if (isDefined(toOffKey(teamId))) | |
170 | + | then throw("Team that is off cannot participate in rollback.") | |
171 | + | else if (isKeyDefined(toSoldKey(teamId))) | |
172 | + | then throw("Team sold amount already set.") | |
173 | + | else WriteSet([goTo(STAGE32), setSoldAmount(teamId), addBasePrizePool((getSoldAmount(teamId) * getBasePrice(teamId))), incTeamCounter()]) | |
174 | + | ||
175 | + | ||
176 | + | ||
177 | + | @Callable(i) | |
178 | + | func stage33 () = if ((stage() != STAGE32)) | |
179 | + | then throw("Invalid current stage.") | |
180 | + | else if ((getTeamCounter() != getTeamsLeft())) | |
181 | + | then throw("There are still teams without sold amount set.") | |
182 | + | else WriteSet([goTo(STAGE33)]) | |
183 | + | ||
184 | + | ||
185 | + | ||
186 | + | @Callable(i) | |
187 | + | func stage4 (recipient) = if ((stage() != STAGE31)) | |
188 | + | then throw("Invalid current stage.") | |
189 | + | else if ((((eventEndsAtBlock + winnerDeclarationInterval) + payoutInterval) >= height)) | |
190 | + | then throw("Payout is not yet finished.") | |
191 | + | else if ((i.callerPublicKey != liga)) | |
192 | + | then throw("Only Liga could set the final stage and hold commission.") | |
193 | + | else ScriptResult(WriteSet([goTo(STAGE4)]), TransferSet([ScriptTransfer(addressFromPublicKey(recipient), wavesBalance(this), unit)])) | |
194 | + | ||
195 | + | ||
196 | + | ||
197 | + | @Callable(i) | |
198 | + | func teamOff (teamId) = if ((stage() != STAGE1)) | |
199 | + | then throw("Invalid current stage.") | |
200 | + | else if ((i.callerPublicKey != oracle)) | |
201 | + | then throw("Only oracle could drop teams out off the game.") | |
202 | + | else if (!(isKeyDefined(toBasePriceKey(teamId)))) | |
203 | + | then throw("Team is not found.") | |
204 | + | else if (isKeyDefined(toOffKey(teamId))) | |
205 | + | then throw("Team is already off") | |
206 | + | else if ((getTeamsLeft() == 1)) | |
207 | + | then throw("There is only 1 team left.") | |
208 | + | else WriteSet([off(teamId), decTeamsLeft()]) | |
209 | + | ||
210 | + | ||
211 | + | ||
212 | + | @Callable(i) | |
213 | + | func rollback () = if ((stage() != STAGE33)) | |
214 | + | then throw("Invalid current stage.") | |
215 | + | else { | |
216 | + | let payment = extract(i.payment) | |
217 | + | let teamId = extract(payment.assetId) | |
218 | + | if (!(isKeyDefined(toBasePriceKey(teamId)))) | |
219 | + | then throw("Team is not found.") | |
220 | + | else { | |
221 | + | let soldAmount = getSoldAmount(teamId) | |
222 | + | let rollback = (((getBalanceSnapshot() * getBasePrizePool()) * payment.amount) / ((getBasePrice(teamId) * soldAmount) * soldAmount)) | |
223 | + | TransferSet([ScriptTransfer(i.caller, rollback, unit)]) | |
224 | + | } | |
225 | + | } | |
226 | + | ||
227 | + | ||
228 | + | ||
229 | + | @Callable(i) | |
230 | + | func payout () = if ((stage() != STAGE31)) | |
231 | + | then throw("Invalid current stage.") | |
232 | + | else { | |
233 | + | let payment = extract(i.payment) | |
234 | + | if ((payment.assetId != getWinner())) | |
235 | + | then throw("You are allowed to get payout for the winner tokens only.") | |
236 | + | else { | |
237 | + | let payout = ((getPrizePool() * payment.amount) / getSoldAmount(getWinner())) | |
238 | + | TransferSet([ScriptTransfer(i.caller, payout, unit)]) | |
239 | + | } | |
240 | + | } | |
241 | + | ||
242 | + | ||
243 | + | @Verifier(x) | |
244 | + | func verifier () = match x { | |
245 | + | case o: Order => | |
246 | + | if (if ((stage() == STAGE1)) | |
247 | + | then (o.price >= getBasePrice(extract(o.assetPair.amountAsset))) | |
248 | + | else false) | |
249 | + | then sigVerify(o.bodyBytes, o.proofs[0], liga) | |
250 | + | else false | |
251 | + | case l: LeaseTransaction => | |
252 | + | if (if ((stage() == STAGE1)) | |
253 | + | then (l.recipient == addressFromPublicKey(leaseNode)) | |
254 | + | else false) | |
255 | + | then (l.amount > (100 * waves)) | |
256 | + | else false | |
257 | + | case cl: LeaseCancelTransaction => | |
258 | + | (stage() != STAGE1) | |
259 | + | case _ => | |
260 | + | false | |
261 | + | } | |
262 | + |
github/deemru/w8io/169f3d6 266.40 ms ◑![]()