tx · Cvdixa5EY1A7cosbbifvEEM6cKL7oJe9tak7Kq9MVmVY

3NApQZND35BcskVdo5Ukk7gSyP1148wtktt:  -0.01400000 Waves

2019.09.16 22:06 [679188] smart account 3NApQZND35BcskVdo5Ukk7gSyP1148wtktt > SELF 0.00000000 Waves

{ "type": 13, "id": "Cvdixa5EY1A7cosbbifvEEM6cKL7oJe9tak7Kq9MVmVY", "fee": 1400000, "feeAssetId": null, "timestamp": 1568660779346, "version": 1, "sender": "3NApQZND35BcskVdo5Ukk7gSyP1148wtktt", "senderPublicKey": "Hf6mTifVmE4QjnGG5MrTpZxwegLPYVUkrUnGYGE1hrVh", "proofs": [ "JCRrLXeC6AkTSEKxgGmWQwtFPoaN45P7hj4X2P2R6cdoqYRFBH5dqqCpAEyC8oT8JTTWg1cmuy1kdq7tpVc3zHc" ], "script": "base64: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AA13aW5uZXJBZGRyZXNzBQAAAAlpbmNMZXZlbDICAAAAAmwyBQAAAAR0eGlkBQAAAAl0aW1lc3RhbXAEAAAAByRtYXRjaDIJAQAAAApnZXRSZWZlcmVyAAAAAQUAAAAEcmVmMgMJAAABAAAAAgUAAAAHJG1hdGNoMgIAAAAGU3RyaW5nBAAAAARyZWYzBQAAAAckbWF0Y2gyBAAAAAlpbmNMZXZlbDMJAABpAAAAAgkAAGgAAAACBQAAAAlyZWZBbW91bnQFAAAABmxldmVsMwAAAAAAAAAD6AkABEwAAAACCQEAAAAQYmFsYW5jZUluY3JlbWVudAAAAAIFAAAABHJlZjMFAAAACWluY0xldmVsMwkABEwAAAACCQEAAAAWcmVjb3JkQmFsYW5jZUluY3JlbWVudAAAAAYFAAAABHJlZjMFAAAADXdpbm5lckFkZHJlc3MFAAAACWluY0xldmVsMwIAAAACbDMFAAAABHR4aWQFAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAAQYmFsYW5jZUluY3JlbWVudAAAAAIFAAAADWNoYW5nZUFkZHJlc3MJAABlAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAACXJlZkFtb3VudAUAAAAJaW5jTGV2ZWwxBQAAAAlpbmNMZXZlbDIFAAAACWluY0xldmVsMwkABEwAAAACCQEAAAAWcmVjb3JkQmFsYW5jZUluY3JlbWVudAAAAAYFAAAADWNoYW5nZUFkZHJlc3MFAAAADXdpbm5lckFkZHJlc3MJAABlAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAACXJlZkFtb3VudAUAAAAJaW5jTGV2ZWwxBQAAAAlpbmNMZXZlbDIFAAAACWluY0xldmVsMwIAAAAGY2hhbmdlBQAAAAR0eGlkBQAAAAl0aW1lc3RhbXAFAAAAA25pbAkABEwAAAACCQEAAAAQYmFsYW5jZUluY3JlbWVudAAAAAIFAAAADWNoYW5nZUFkZHJlc3MJAABlAAAAAgkAAGUAAAACBQAAAAlyZWZBbW91bnQFAAAACWluY0xldmVsMQUAAAAJaW5jTGV2ZWwyCQAETAAAAAIJAQAAABZyZWNvcmRCYWxhbmNlSW5jcmVtZW50AAAABgUAAAANY2hhbmdlQWRkcmVzcwUAAAANd2lubmVyQWRkcmVzcwkAAGUAAAACCQAAZQAAAAIFAAAACXJlZkFtb3VudAUAAAAJaW5jTGV2ZWwxBQAAAAlpbmNMZXZlbDICAAAABmNoYW5nZQUAAAAEdHhpZAUAAAAJdGltZXN0YW1wBQAAAANuaWwJAARMAAAAAgkBAAAAEGJhbGFuY2VJbmNyZW1lbnQAAAACBQAAAA1jaGFuZ2VBZGRyZXNzCQAAZQAAAAIFAAAACXJlZkFtb3VudAUAAAAJaW5jTGV2ZWwxCQAETAAAAAIJAQAAABZyZWNvcmRCYWxhbmNlSW5jcmVtZW50AAAABgUAAAANY2hhbmdlQWRkcmVzcwUAAAANd2lubmVyQWRkcmVzcwkAAGUAAAACBQAAAAlyZWZBbW91bnQFAAAACWluY0xldmVsMQIAAAAGY2hhbmdlBQAAAAR0eGlkBQAAAAl0aW1lc3RhbXAFAAAAA25pbAkABEwAAAACCQEAAAAQYmFsYW5jZUluY3JlbWVudAAAAAIFAAAADWNoYW5nZUFkZHJlc3MFAAAACXJlZkFtb3VudAkABEwAAAACCQEAAAAWcmVjb3JkQmFsYW5jZUluY3JlbWVudAAAAAYFAAAADWNoYW5nZUFkZHJlc3MFAAAADXdpbm5lckFkZHJlc3MFAAAACXJlZkFtb3VudAIAAAAGY2hhbmdlBQAAAAR0eGlkBQAAAAl0aW1lc3RhbXAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIIBQAAAAFpAAAAA2ZlZQUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAADXdpbm5lckFkZHJlc3MJAABlAAAAAgUAAAAGYW1vdW50BQAAAAlyZWZBbW91bnQFAAAACmJldEFzc2V0SWQFAAAAA25pbAAAAAFpAQAAAAhkZWxlZ2F0ZQAAAAMAAAAKZGVsZWdhdGVUbwAAABFlbmFibGVBdXRvQXBwcm92ZQAAABBlbmFibGVBdXRvQ2FuY2VsCQEAAAAIcmVwYXlGZWUAAAAFBQAAAAFpCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJZGVsZWdhdGVfBQAAAApkZWxlZ2F0ZVRvAgAAAAhfYWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJZGVsZWdhdGVfBQAAAApkZWxlZ2F0ZVRvAgAAAAxfYXV0b2FwcHJvdmUFAAAAEWVuYWJsZUF1dG9BcHByb3ZlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJZGVsZWdhdGVfBQAAAApkZWxlZ2F0ZVRvAgAAAAtfYXV0b2NhbmNlbAUAAAAQZW5hYmxlQXV0b0NhbmNlbAUAAAADbmlsAAAAAAAAAAAABQAAAAR1bml0BQAAAAR1bml0AAAAAWkBAAAACHdpdGhkcmF3AAAAAAMJAQAAAAEhAAAAAQkBAAAACGNoZWNrRmVlAAAAAQUAAAABaQkAAAIAAAABAgAAAAVlcnJvcgQAAAAFb3duZXIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAEdHhpZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAApiYWxhbmNlS2V5CQABLAAAAAIFAAAABW93bmVyAgAAAAhfYmFsYW5jZQQAAAAGYW1vdW50BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAACmJhbGFuY2VLZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgAAAAAAAAAAAAMJAABmAAAAAgUAAAALbWluV2l0aGRyYXcFAAAABmFtb3VudAkAAAIAAAABCQABLAAAAAICAAAAFk1pbiB3aXRoZHJhdyBhbW91bnQgaXMJAAGkAAAAAQUAAAALbWluV2l0aGRyYXcJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAApiYWxhbmNlS2V5AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAl3aXRoZHJhd18FAAAABW93bmVyAgAAAAFfBQAAAAR0eGlkCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAZhbW91bnQCAAAAAToJAAGkAAAAAQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIJAABkAAAAAgUAAAAGYW1vdW50CAUAAAABaQAAAANmZWUFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAAhyZWdpc3RlcgAAAAIAAAAHcmVmZXJlcgAAAARzYWx0AwkBAAAAASEAAAABCQEAAAAIY2hlY2tGZWUAAAABBQAAAAFpCQAAAgAAAAECAAAABWVycm9yAwkBAAAAAiE9AAAAAgkAAS8AAAACCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQAAAAAAAAAAAMCAAAAAzEyMwkAAAIAAAABAgAAABRwcm9vZiBvZiB3b3JrIGZhaWxlZAQAAAAFb3duZXIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMJAQAAAAlpc0RlZmluZWQAAAABCQEAAAAKZ2V0UmVmZXJlcgAAAAEFAAAABW93bmVyCQAAAgAAAAECAAAAEkFscmVhZHkgcmVnaXN0ZXJlZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAFb3duZXICAAAACF9yZWZlcmVyBQAAAAdyZWZlcmVyCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAHcmVmZXJlcgIAAAAKX3JlZmVycmFsXwUAAAAFb3duZXIFAAAABW93bmVyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCAUAAAABaQAAAANmZWUFAAAABHVuaXQFAAAAA25pbAAAAAB4Cxhy", "chainId": 84, "height": 679188, "spentComplexity": 0 } View: original | compacted Prev: FHpaU7BiMjHXFHPKLNm1S576BA9VqnAVzJVZeRn7x61v Next: 5QZd5pS1AmfQMNMF6apTjNDMSLmQaRu57dc83Q2rzPFq Diff:
OldNewDifferences
207207
208208
209209 @Callable(i)
210-func judgeDexMatch (matchId,txId) = if ((getStringValue(this, (matchId + "_adapter")) != "dex"))
210+func judgeDexMatch (matchId) = if ((getStringValue(this, (matchId + "_adapter")) != "dex"))
211211 then throw("method is only for dex matches")
212212 else if ((getBoolean(this, (matchId + "_judged")) == true))
213213 then throw("already judged")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let betAssetIds = [DataEntry("sportr", "AcTzTgW1QbJK4Qu6hCsUCLjpxUyD3dofv8xq2CAPbzKJ"), DataEntry("dex", "WAVES")]
55
66 let dexAgent = addressFromStringValue("")
77
88 let maxFee = 5000000
99
1010 let minBet = 5000000
1111
1212 let minCreateEvent = 30000000
1313
1414 let minMatchNominal = 5000000
1515
1616 let dexJudgeGraceTs = ((1000 * 60) * 5)
1717
1818 let level1 = 250
1919
2020 let level2 = 150
2121
2222 let level3 = 100
2323
2424 let cashBack = 500
2525
2626 let totalRef = 10
2727
2828 let changeAddress = "3NAxsbHxS63azdAicVvLGsxjAQ9DsK6L4NL"
2929
3030 let minWithdraw = 1000000
3131
3232 func getCallerByDelegate (i,function) = {
3333 let caller = toBase58String(i.caller.bytes)
3434 let callerPrefix = ("delegate_" + caller)
3535 if ((getBoolean(this, ((callerPrefix + "_") + function)) == true))
3636 then match getString(this, (callerPrefix + "_address")) {
3737 case s: String =>
3838 s
3939 case _ =>
4040 caller
4141 }
4242 else caller
4343 }
4444
4545
4646 func checkFee (i) = if ((i.fee > maxFee))
4747 then throw("unreasonable large fee")
4848 else if ((i.feeAssetId != unit))
4949 then throw("fee must be in WAVES")
5050 else true
5151
5252
5353 func repayFee (i,ws,amount,recipient,betAssetId) = if (checkFee(i))
5454 then if (if ((amount > 0))
5555 then isDefined(recipient)
5656 else false)
5757 then ScriptResult(ws, TransferSet([ScriptTransfer(i.caller, i.fee, unit), ScriptTransfer(extract(recipient), amount, betAssetId)]))
5858 else ScriptResult(ws, TransferSet([ScriptTransfer(i.caller, i.fee, unit)]))
5959 else throw("error")
6060
6161
6262 func checkOwner (i,betid) = (getString(this, (betid + "_owner")) == toBase58String(i.caller.bytes))
6363
6464
6565 func getUnspent (betid) = (extract(getInteger(this, (betid + "_amount"))) - extract(getInteger(this, (betid + "_spent"))))
6666
6767
6868 func isDefeated (betid) = {
6969 let defeatStatus = getInteger(this, (betid + "_defeat"))
7070 if ((defeatStatus == 1))
7171 then true
7272 else (defeatStatus == 3)
7373 }
7474
7575
7676 func getReferer (user) = getString(this, (user + "_referer"))
7777
7878
7979 func balanceIncrement (address,inc) = {
8080 let balanceKey = (address + "_balance")
8181 DataEntry(balanceKey, (inc + match getInteger(this, balanceKey) {
8282 case b: Int =>
8383 b
8484 case _ =>
8585 0
8686 }))
8787 }
8888
8989
9090 func recordBalanceIncrement (address,owner,inc,level,txId,timestamp) = DataEntry(((("fund_" + address) + "_") + txId), ((((((owner + ":") + toString(inc)) + ":") + level) + ":") + timestamp))
9191
9292
9393 func getAssetByAdapter (adapter) = {
9494 let assetString = getStringValue(betAssetIds, adapter)
9595 if ((assetString == "WAVES"))
9696 then unit
9797 else fromBase58String(assetString)
9898 }
9999
100100
101101 func getAssetMnemonic (asset) = if ((asset == unit))
102102 then "WAVES"
103103 else toBase58String(extract(asset))
104104
105105
106106 @Callable(i)
107107 func bet (event,subevent,side,odds,adapter) = {
108108 let marketKey = ("market_" + event)
109109 let betAssetId = getAssetByAdapter(adapter)
110110 let owner = toBase58String(i.caller.bytes)
111111 let payment = extract(i.payment)
112112 if ((payment.assetId != betAssetId))
113113 then throw(((("bet must be in asset " + getAssetMnemonic(betAssetId)) + " for adapter ") + adapter))
114114 else if ((minBet > payment.amount))
115115 then throw(("minimum allowed bet is " + toString(minBet)))
116116 else if (if (if ((adapter == "dex"))
117117 then (minCreateEvent > payment.amount)
118118 else false)
119119 then (getBoolean(this, marketKey) == unit)
120120 else false)
121121 then throw(("min amount to create first bet is " + toString(minCreateEvent)))
122122 else if (if ((side != "for"))
123123 then (side != "against")
124124 else false)
125125 then throw("unexpected side")
126126 else {
127127 let betid = (((((("bet_" + event) + "_") + toBase58String(i.caller.bytes)) + "_") + take(toBase58String(i.transactionId), 15)) + "_")
128128 let sequenceKey = ((("seq_" + event) + "_") + subevent)
129129 let sequence = match getInteger(this, sequenceKey) {
130130 case prevS: Int =>
131131 (prevS + 1)
132132 case _ =>
133133 1
134134 }
135135 repayFee(i, WriteSet([DataEntry((betid + "owner"), owner), DataEntry((betid + "event"), event), DataEntry((betid + "subevent"), subevent), DataEntry((betid + "side"), side), DataEntry((betid + "odds"), odds), DataEntry((betid + "amount"), payment.amount), DataEntry((betid + "spent"), 0), DataEntry((betid + "adapter"), adapter), DataEntry((betid + "timestamp"), lastBlock.timestamp), DataEntry((betid + "sequence"), sequence), DataEntry(marketKey, true), DataEntry(sequenceKey, sequence)]), 0, unit, unit)
136136 }
137137 }
138138
139139
140140
141141 @Callable(i)
142142 func cancel (betid) = if ((getString(this, (betid + "_owner")) != getCallerByDelegate(i, "autocancel")))
143143 then throw("must be owner or its delegate to cancel")
144144 else {
145145 let adapter = getStringValue(this, (betid + "_adapter"))
146146 let amount = getIntegerValue(this, (betid + "_amount"))
147147 let spent = getIntegerValue(this, (betid + "_spent"))
148148 let cancelAmount = (amount - spent)
149149 repayFee(i, WriteSet([DataEntry((betid + "_spent"), amount), DataEntry((betid + "_cancel_amount"), cancelAmount), DataEntry((betid + "_cancel_tx"), toBase58String(i.transactionId))]), cancelAmount, i.caller, getAssetByAdapter(adapter))
150150 }
151151
152152
153153
154154 @Callable(i)
155155 func betMatch (betFor,betAgainst) = if ((getString(this, (betFor + "_event")) != getString(this, (betAgainst + "_event"))))
156156 then throw("event id must match")
157157 else if ((getString(this, (betFor + "_subevent")) != getString(this, (betAgainst + "_subevent"))))
158158 then throw("subevent id must match")
159159 else if ((getString(this, (betFor + "_side")) != "for"))
160160 then throw("invalid *for* bet")
161161 else if ((getString(this, (betAgainst + "_side")) != "against"))
162162 then throw("invalid *against* bet")
163163 else {
164164 let adapter = getStringValue(this, (betFor + "_adapter"))
165165 if ((adapter != getStringValue(this, (betAgainst + "_adapter"))))
166166 then throw("bets has different adapters")
167167 else {
168168 let betForOwner = getStringValue(this, (betFor + "_owner"))
169169 let betAgainstOwner = getStringValue(this, (betAgainst + "_owner"))
170170 let eventid = extract(getString(this, (betFor + "_event")))
171171 let matchid = (((((((("match_" + eventid) + "_") + takeRight(betForOwner, 10)) + "_") + takeRight(betAgainstOwner, 10)) + "_") + takeRight(toBase58String(i.transactionId), 10)) + "_")
172172 let odds = extract(getInteger(this, (betFor + "_odds")))
173173 let unspentFor = getUnspent(betFor)
174174 let unspentAgainst = getUnspent(betAgainst)
175175 let maxForNominal = unspentFor
176176 let maxAgainstNominal = ((unspentAgainst * 100) / (odds - 100))
177177 let matchNominal = if ((maxForNominal > maxAgainstNominal))
178178 then maxAgainstNominal
179179 else maxForNominal
180180 if ((minMatchNominal > matchNominal))
181181 then throw("match nominal too low")
182182 else {
183183 let spendFor = matchNominal
184184 let spendAgainst = ((matchNominal * (odds - 100)) / 100)
185185 let newSpentFor = (spendFor + extract(getInteger(this, (betFor + "_spent"))))
186186 let newSpentAgainst = (spendAgainst + extract(getInteger(this, (betAgainst + "_spent"))))
187187 if ((newSpentFor > extract(getInteger(this, (betFor + "_amount")))))
188188 then throw("invalid match")
189189 else if ((newSpentAgainst > extract(getInteger(this, (betAgainst + "_amount")))))
190190 then throw("invalid match")
191191 else repayFee(i, WriteSet([DataEntry((matchid + "amount"), (spendFor + spendAgainst)), DataEntry((matchid + "adapter"), adapter), DataEntry((matchid + "for"), betFor), DataEntry((matchid + "against"), betAgainst), DataEntry((betFor + "_spent"), newSpentFor), DataEntry((betAgainst + "_spent"), newSpentAgainst)]), 0, unit, unit)
192192 }
193193 }
194194 }
195195
196196
197197
198198 @Callable(i)
199199 func approveDefeat (betId,defeat) = if (if (isDefined(getInteger(this, (betId + "_defeat"))))
200200 then (defeat == 2)
201201 else false)
202202 then throw("can't dispute after approve")
203203 else if ((getString(this, (betId + "_owner")) != getCallerByDelegate(i, "autoapprove")))
204204 then throw("must be owner or its delegate to approve")
205205 else repayFee(i, WriteSet([DataEntry((betId + "_defeat"), defeat)]), 0, unit, unit)
206206
207207
208208
209209 @Callable(i)
210-func judgeDexMatch (matchId,txId) = if ((getStringValue(this, (matchId + "_adapter")) != "dex"))
210+func judgeDexMatch (matchId) = if ((getStringValue(this, (matchId + "_adapter")) != "dex"))
211211 then throw("method is only for dex matches")
212212 else if ((getBoolean(this, (matchId + "_judged")) == true))
213213 then throw("already judged")
214214 else {
215215 let betFor = getStringValue(this, (matchId + "_for"))
216216 let betAgainst = getStringValue(this, (matchId + "_for"))
217217 let event = getStringValue(this, (betFor + "_event"))
218218 let eventS = split(event, ":")
219219 let pair = eventS[1]
220220 let eventRate = parseIntValue(eventS[2])
221221 let eventTs = parseIntValue(eventS[3])
222222 let judgeTs = ((eventTs * 1000) + dexJudgeGraceTs)
223223 if ((judgeTs > lastBlock.timestamp))
224224 then throw(("please wait for timestamp " + toString(judgeTs)))
225225 else {
226226 let rateFromAgent = getIntegerValue(dexAgent, (event + "_rate"))
227227 let looserBet = if ((rateFromAgent >= eventRate))
228228 then betAgainst
229229 else betFor
230230 repayFee(i, WriteSet([DataEntry((looserBet + "_defeat"), 1), DataEntry((matchId + "_judged"), true)]), 0, unit, unit)
231231 }
232232 }
233233
234234
235235
236236 @Callable(i)
237237 func payWinner (matchId) = if (!(checkFee(i)))
238238 then throw("error")
239239 else if (isDefined(getInteger(this, (matchId + "_paid"))))
240240 then throw("already paid")
241241 else {
242242 let adapter = getStringValue(this, (matchId + "_adapter"))
243243 let betAssetId = getAssetByAdapter(adapter)
244244 let betForId = extract(getString(this, (matchId + "_for")))
245245 let betAgainstId = extract(getString(this, (matchId + "_against")))
246246 let betForDefeated = isDefeated(betForId)
247247 let betAgainstDefeated = isDefeated(betAgainstId)
248248 if (if (!(betForDefeated))
249249 then !(betAgainstDefeated)
250250 else false)
251251 then throw("no side approved defeat")
252252 else {
253253 let winnerId = if (betForDefeated)
254254 then betAgainstId
255255 else betForId
256256 let winnerAddress = getStringValue(this, (winnerId + "_owner"))
257257 let amount = extract(getInteger(this, (matchId + "_amount")))
258258 let txid = toBase58String(i.transactionId)
259259 let timestamp = toString(lastBlock.timestamp)
260260 let refAmount = ((amount * totalRef) / 1000)
261261 ScriptResult(WriteSet([DataEntry((matchId + "_paid"), toBase58String(i.transactionId)), match getReferer(winnerAddress) {
262262 case ref1: String =>
263263 let incLevel1 = ((refAmount * level1) / 1000)
264264 let incCashBack = ((refAmount * cashBack) / 1000)
265265 [balanceIncrement(winnerAddress, incCashBack), recordBalanceIncrement(winnerAddress, winnerAddress, incCashBack, "cashback", txid, timestamp), balanceIncrement(ref1, incLevel1), recordBalanceIncrement(ref1, winnerAddress, incLevel1, "l1", txid, timestamp), match getReferer(ref1) {
266266 case ref2: String =>
267267 let incLevel2 = ((refAmount * level2) / 1000)
268268 [balanceIncrement(ref2, incLevel2), recordBalanceIncrement(ref2, winnerAddress, incLevel2, "l2", txid, timestamp), match getReferer(ref2) {
269269 case ref3: String =>
270270 let incLevel3 = ((refAmount * level3) / 1000)
271271 [balanceIncrement(ref3, incLevel3), recordBalanceIncrement(ref3, winnerAddress, incLevel3, "l3", txid, timestamp), balanceIncrement(changeAddress, (((refAmount - incLevel1) - incLevel2) - incLevel3)), recordBalanceIncrement(changeAddress, winnerAddress, (((refAmount - incLevel1) - incLevel2) - incLevel3), "change", txid, timestamp)]
272272 case _ =>
273273 [balanceIncrement(changeAddress, ((refAmount - incLevel1) - incLevel2)), recordBalanceIncrement(changeAddress, winnerAddress, ((refAmount - incLevel1) - incLevel2), "change", txid, timestamp)]
274274 }]
275275 case _ =>
276276 [balanceIncrement(changeAddress, (refAmount - incLevel1)), recordBalanceIncrement(changeAddress, winnerAddress, (refAmount - incLevel1), "change", txid, timestamp)]
277277 }]
278278 case _ =>
279279 [balanceIncrement(changeAddress, refAmount), recordBalanceIncrement(changeAddress, winnerAddress, refAmount, "change", txid, timestamp)]
280280 }]), TransferSet([ScriptTransfer(i.caller, i.fee, unit), ScriptTransfer(addressFromStringValue(winnerAddress), (amount - refAmount), betAssetId)]))
281281 }
282282 }
283283
284284
285285
286286 @Callable(i)
287287 func delegate (delegateTo,enableAutoApprove,enableAutoCancel) = repayFee(i, WriteSet([DataEntry((("delegate_" + delegateTo) + "_address"), toBase58String(i.caller.bytes)), DataEntry((("delegate_" + delegateTo) + "_autoapprove"), enableAutoApprove), DataEntry((("delegate_" + delegateTo) + "_autocancel"), enableAutoCancel)]), 0, unit, unit)
288288
289289
290290
291291 @Callable(i)
292292 func withdraw () = if (!(checkFee(i)))
293293 then throw("error")
294294 else {
295295 let owner = toBase58String(i.caller.bytes)
296296 let txid = toBase58String(i.transactionId)
297297 let balanceKey = (owner + "_balance")
298298 let amount = match getInteger(this, balanceKey) {
299299 case b: Int =>
300300 b
301301 case _ =>
302302 0
303303 }
304304 if ((minWithdraw > amount))
305305 then throw(("Min withdraw amount is" + toString(minWithdraw)))
306306 else ScriptResult(WriteSet([DataEntry(balanceKey, 0), DataEntry(((("withdraw_" + owner) + "_") + txid), ((toString(amount) + ":") + toString(lastBlock.timestamp)))]), TransferSet([ScriptTransfer(i.caller, (amount + i.fee), unit)]))
307307 }
308308
309309
310310
311311 @Callable(i)
312312 func register (referer,salt) = if (!(checkFee(i)))
313313 then throw("error")
314314 else if ((take(toBase58String(i.transactionId), 3) != "123"))
315315 then throw("proof of work failed")
316316 else {
317317 let owner = toBase58String(i.caller.bytes)
318318 if (isDefined(getReferer(owner)))
319319 then throw("Already registered")
320320 else ScriptResult(WriteSet([DataEntry((owner + "_referer"), referer), DataEntry(((referer + "_referral_") + owner), owner)]), TransferSet([ScriptTransfer(i.caller, i.fee, unit)]))
321321 }
322322
323323

github/deemru/w8io/873ac7e 
100.89 ms