tx · 7gDaa6rCUSg8zWrnD5TEzTLm4iQFUbXYd1WfJ6ujTBgp

3MwwjunorC2aAiHETPpC43VPAcBEX7kFGFT:  -0.01400000 Waves

2019.07.30 10:41 [608545] smart account 3MwwjunorC2aAiHETPpC43VPAcBEX7kFGFT > SELF 0.00000000 Waves

{ "type": 13, "id": "7gDaa6rCUSg8zWrnD5TEzTLm4iQFUbXYd1WfJ6ujTBgp", "fee": 1400000, "feeAssetId": null, "timestamp": 1564472515513, "version": 1, "sender": "3MwwjunorC2aAiHETPpC43VPAcBEX7kFGFT", "senderPublicKey": "EXzRUBMhcmZ8qxjSu1oy26eo6d3oKbrcYQo8GzGbCgtn", "proofs": [ "2VcmQi4rFqXGvPrR7L4JuV8NPceicMGykVGSPp1egVY9YuQGPUbrqSwEgVvq6kLsjsiHmgfHXCqQdPoYNr1Gdxc9" ], "script": "base64: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", "chainId": 84, "height": 608545, "spentComplexity": 0 } View: original | compacted Prev: DftZ64mSyxyBrsHp98tVdpzU5HFrX8pG4acLNWqicAYE Next: 2c8i4tCjTJKLaHo6HfgLSvFZWp3qm4LUMdbxQxaNsFBi Diff:
OldNewDifferences
3333 then true
3434 else (defeatStatus == 3)
3535 }
36+
37+
38+@Callable(i)
39+func test () = TransferSet([ScriptTransfer(i.caller, i.fee, i.feeAssetId)])
40+
3641
3742
3843 @Callable(i)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let betAssetId = base58'33kV5hRVtgEGpYqhp9wQn2g9hP1fNWSYGCzzYk1T9Hyg'
55
66 let maxFee = 5000000
77
88 let minBet = 5000000
99
1010 let minMatchNominal = 5000000
1111
1212 func checkFee (i) = if ((i.fee > maxFee))
1313 then throw("unreasonable large fee")
1414 else if ((i.feeAssetId != unit))
1515 then throw("fee must be in WAVES")
1616 else true
1717
1818
1919 func repayFee (i,ws,amount) = if (checkFee(i))
2020 then ScriptResult(ws, TransferSet([ScriptTransfer(i.caller, i.fee, unit)]))
2121 else throw("error")
2222
2323
2424 func checkOwner (i,betid) = (getString(this, (betid + "_owner")) == toBase58String(i.caller.bytes))
2525
2626
2727 func getUnspent (betid) = (extract(getInteger(this, (betid + "_amount"))) - extract(getInteger(this, (betid + "_spent"))))
2828
2929
3030 func isDefeated (betid) = {
3131 let defeatStatus = getInteger(this, (betid + "_defeat"))
3232 if ((defeatStatus == 1))
3333 then true
3434 else (defeatStatus == 3)
3535 }
36+
37+
38+@Callable(i)
39+func test () = TransferSet([ScriptTransfer(i.caller, i.fee, i.feeAssetId)])
40+
3641
3742
3843 @Callable(i)
3944 func bet (event,subevent,side,odds) = {
4045 let owner = toBase58String(i.caller.bytes)
4146 let payment = extract(i.payment)
4247 if ((payment.assetId != betAssetId))
4348 then throw(("bet must be in asset " + toBase58String(betAssetId)))
4449 else if ((minBet > payment.amount))
4550 then throw(("minimum allowed bet is " + toString(minBet)))
4651 else if (if ((side != "for"))
4752 then (side != "against")
4853 else false)
4954 then throw("unexpected side")
5055 else {
5156 let betid = (((("bet_" + event) + "_") + toBase58String(i.transactionId)) + "_")
5257 let sequence = match getInteger(this, ((("seq_" + event) + "_") + subevent)) {
5358 case prevS: Int =>
5459 (prevS + 1)
5560 case _ =>
5661 1
5762 }
5863 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 + "timestamp"), lastBlock.timestamp), DataEntry((betid + "sequence"), sequence)]), 0)
5964 }
6065 }
6166
6267
6368
6469 @Callable(i)
6570 func cancel (betid) = if (!(checkOwner(i, betid)))
6671 then throw("permission denied")
6772 else {
6873 let amount = extract(getInteger(this, (betid + "_amount")))
6974 let spent = extract(getInteger(this, (betid + "_spent")))
7075 let cancelAmount = (amount - spent)
7176 repayFee(i, WriteSet([DataEntry((betid + "_spent"), amount), DataEntry((betid + "_cancel_amount"), cancelAmount)]), cancelAmount)
7277 }
7378
7479
7580
7681 @Callable(i)
7782 func betMatch (betFor,betAgainst) = if ((getString(this, (betFor + "_event")) != getString(this, (betAgainst + "_event"))))
7883 then throw("event id must match")
7984 else if ((getString(this, (betFor + "_subevent")) != getString(this, (betAgainst + "_subevent"))))
8085 then throw("subevent id must match")
8186 else if ((getString(this, (betFor + "_side")) != "for"))
8287 then throw("invalid *for* bet")
8388 else if ((getString(this, (betAgainst + "_side")) != "against"))
8489 then throw("invalid *against* bet")
8590 else {
8691 let eventid = extract(getString(this, (betFor + "_event")))
8792 let matchid = (((((((("match_" + betFor) + "_") + betAgainst) + "_") + eventid) + "_") + toBase58String(i.transactionId)) + "_")
8893 let odds = extract(getInteger(this, (betFor + "_odds")))
8994 let unspentFor = getUnspent(betFor)
9095 let unspentAgainst = getUnspent(betAgainst)
9196 let maxForNominal = unspentFor
9297 let maxAgainstNominal = ((unspentAgainst * 100) / odds)
9398 let matchNominal = if ((maxForNominal > maxAgainstNominal))
9499 then maxAgainstNominal
95100 else maxForNominal
96101 if ((minMatchNominal > matchNominal))
97102 then throw("match nominal too low")
98103 else {
99104 let spendFor = matchNominal
100105 let spendAgainst = ((matchNominal * odds) / 100)
101106 let newSpentFor = (spendFor + unspentFor)
102107 let newSpentAgainst = (spendAgainst + unspentAgainst)
103108 if ((newSpentFor > extract(getInteger(this, (betFor + "_amount")))))
104109 then throw("invalid match")
105110 else if ((newSpentAgainst > extract(getInteger(this, (betAgainst + "_amount")))))
106111 then throw("invalid match")
107112 else repayFee(i, WriteSet([DataEntry((matchid + "amount"), (spendFor + spendAgainst)), DataEntry((matchid + "for"), betFor), DataEntry((matchid + "against"), betAgainst), DataEntry((betFor + "_spent"), newSpentFor), DataEntry((betAgainst + "_spent"), newSpentAgainst)]), 0)
108113 }
109114 }
110115
111116
112117
113118 @Callable(i)
114119 func approveDefeat (betId,defeat) = if (if (isDefined(getInteger(this, (betId + "_defeat"))))
115120 then (defeat == 2)
116121 else false)
117122 then throw("can't dispute after approve")
118123 else repayFee(i, WriteSet([DataEntry((betId + "_defeat"), defeat)]), 0)
119124
120125
121126
122127 @Callable(i)
123128 func payWinner (matchId) = if (isDefined(getInteger(this, (matchId + "_paid"))))
124129 then throw("already paid")
125130 else {
126131 let betForId = extract(getString(this, (matchId + "_for")))
127132 let betAgainstId = extract(getString(this, (matchId + "_against")))
128133 let betForDefeated = isDefeated(betForId)
129134 let betAgainstDefeated = isDefeated(betAgainstId)
130135 if (if (!(betForDefeated))
131136 then !(betAgainstDefeated)
132137 else false)
133138 then throw("no side approved defeat")
134139 else {
135140 let winnerId = if (betForDefeated)
136141 then betAgainstId
137142 else betForId
138143 let winnerAddress = getString(this, (winnerId + "_owner"))
139144 if ((winnerAddress != toBase58String(i.caller.bytes)))
140145 then throw("paywinner() should be called by winner only")
141146 else {
142147 let amount = extract(getInteger(this, (matchId + "_amount")))
143148 repayFee(i, WriteSet([DataEntry((matchId + "_paid"), amount)]), amount)
144149 }
145150 }
146151 }
147152
148153

github/deemru/w8io/169f3d6 
29.07 ms