tx · mAptgyzAfN8Z9oQRqpJTK8ExFKvXW9GzG8usmdagT1n

3N7Wiiso7vo69pqWfLtpzT3tbzMUGahqpgo:  -0.01400000 Waves

2019.08.20 12:48 [639285] smart account 3N7Wiiso7vo69pqWfLtpzT3tbzMUGahqpgo > SELF 0.00000000 Waves

{ "type": 13, "id": "mAptgyzAfN8Z9oQRqpJTK8ExFKvXW9GzG8usmdagT1n", "fee": 1400000, "feeAssetId": null, "timestamp": 1566294492052, "version": 1, "sender": "3N7Wiiso7vo69pqWfLtpzT3tbzMUGahqpgo", "senderPublicKey": "5GQSFwNMkJFTT3FeLT3KENqoSr42yiJP3Av5qAYq1F7f", "proofs": [ "2RsNZ7BCcsyVxwAdUP5bCJFona1Fh4fpYiif8DPKmHxXRQDG5MbakJro2M1AnhsUXNK8PMNpcj9KgGvn5M8TV1HA" ], "script": "base64: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", "chainId": 84, "height": 639285, "spentComplexity": 0 } View: original | compacted Prev: 2DWcmwM6WGVFHZd4Z5gVSEoZuZyg9JWCUynbMoXW8wMv Next: E4BJZkamUbFKBquCZ65xeoTShLjgxhTWBrA8EicRCEbN Diff:
OldNewDifferences
109109 let contestCurrNumber = getNumByKey("contest_currentnumber")
110110 let contestStartHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_startheight"))
111111 let contestFinishHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_finishheight"))
112- let contestBetCounter = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betcounter"))
113112 let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
114113 let contestCurrBetCost = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betcost"))
115- let thisBetId = (contestBetCounter + 1)
116114 let contestStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
117- let existingBetBetId = getNumByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)))
118- let existingBetAccount = getBetAccount(existingBetBetId)
115+ let existingBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)))
119116 if ((height > (contestFinishHeight - (2 * 1440))))
120117 then throw("You cannot bet anymore at this height.")
121118 else if ((contestCurrStatus != RUNNING))
127124 else if (if ((existingBetAccount != NONE))
128125 then (existingBetAccount != account)
129126 else false)
130- then throw(((((("Another user: " + existingBetAccount) + " did bet already on rate: ") + toString(currencyValue)) + " betID:") + toString(existingBetBetId)))
131- else WriteSet([DataEntry((((("bet_" + toString(contestCurrNumber)) + "_") + toString(thisBetId)) + "_owner"), account), DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), thisBetId), DataEntry((("contest_" + toString(contestCurrNumber)) + "_betcounter"), thisBetId)])
127+ then throw(((("Another user: " + existingBetAccount) + " did bet already on rate: ") + toString(currencyValue)))
128+ else WriteSet([DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), account)])
132129 }
133130
134131
137134 func closecontest () = {
138135 let currencyRate = getExtWAVESUSDCurrencyRate()
139136 let contestCurrNumber = getNumByKey("contest_currentnumber")
140- let winningBetBetId = getNumByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyRate)))
141- let winningBetAccount = getBetAccount(winningBetBetId)
137+ let winningBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyRate)))
142138 let contestFinishHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_finishheight"))
143139 let account = toBase58String(i.caller.bytes)
144140 let balance = wavesBalance(this)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RUNNING = "RUNNING"
55
66 let CLOSED = "CLOSED"
77
88 let CANCELED = "CANCELED"
99
1010 let DAPPOWNER = "3N7Wiiso7vo69pqWfLtpzT3tbzMUGahqpgo"
1111
1212 let ORACLEWALLET = "3NAcoeWdUTWn8csXJPG47v1Fjtjcfqxb5tu"
1313
1414 let WLTBURNWALLET = "3MpCbDDjkSrfS1XkPpm71iZj5DQ1RpBRRht"
1515
1616 let WAVESKITWALLET = "3MqPpbWPRsZFoT9X74qWocU4BpypGEPhiCn"
1717
1818 let WAVES = "WAVES"
1919
2020 let NONE = "NONE"
2121
2222 let FEE = 900000
2323
2424 let WLT = base58'7KAXNTswj6947a6cVpGhVrh1utWpLcjwf8AFpWCtuMT7'
2525
2626 func getNumByKey (key) = {
2727 let num = match getInteger(this, key) {
2828 case a: Int =>
2929 a
3030 case _ =>
3131 0
3232 }
3333 num
3434 }
3535
3636
3737 func getStrByKey (key) = {
3838 let str = match getString(this, key) {
3939 case a: String =>
4040 a
4141 case _ =>
4242 NONE
4343 }
4444 str
4545 }
4646
4747
4848 func getContestStatus () = {
4949 let contestCurrNumber = getNumByKey("contest_currentnumber")
5050 getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
5151 }
5252
5353
5454 func getBetAccount (betId) = {
5555 let contestCurrNumber = getNumByKey("contest_currentnumber")
5656 getStrByKey((((("bet_" + toString(contestCurrNumber)) + "_") + toString(betId)) + "_owner"))
5757 }
5858
5959
6060 func getExtWAVESUSDCurrencyRate () = {
6161 let oracleAddress = extract(addressFromString(ORACLEWALLET))
6262 let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_2") {
6363 case a: Int =>
6464 a
6565 case _ =>
6666 0
6767 }
6868 WAVESUSDCurrencyRate
6969 }
7070
7171
7272 @Callable(i)
7373 func setContestStatus (contestNumber,contestStatus) = {
7474 let account = toBase58String(i.caller.bytes)
7575 if ((account != DAPPOWNER))
7676 then throw("Only dAPP Owner can set Contest Status.")
7777 else if (if ((contestStatus != CANCELED))
7878 then (contestStatus != CLOSED)
7979 else false)
8080 then throw(("Invalid status: " + contestStatus))
8181 else WriteSet([DataEntry((("contest_" + toString(contestNumber)) + "_status"), contestStatus)])
8282 }
8383
8484
8585
8686 @Callable(i)
8787 func setContestConfiguration () = {
8888 let account = toBase58String(i.caller.bytes)
8989 let contestCurrNumber = getNumByKey("contest_currentnumber")
9090 let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
9191 let contestNewNumber = (contestCurrNumber + 1)
9292 let contestBetCost = (((wavesBalance(this) / 25) / 5000000) * 100000)
9393 if ((account != DAPPOWNER))
9494 then throw(((("Only dAPP Owner can Configure Contest. Caller account: " + account) + " dapp owner: ") + DAPPOWNER))
9595 else if ((contestCurrStatus == RUNNING))
9696 then throw(("You cannot configure a new Contest while old Contest status is: " + contestCurrStatus))
9797 else {
9898 let contestFinishHeight = (height + (6 * 1440))
9999 WriteSet([DataEntry("contest_currentnumber", contestNewNumber), DataEntry((("contest_" + toString(contestNewNumber)) + "_finishheight"), contestFinishHeight), DataEntry((("contest_" + toString(contestNewNumber)) + "_status"), RUNNING), DataEntry((("contest_" + toString(contestNewNumber)) + "_betcounter"), 0), DataEntry((("contest_" + toString(contestNewNumber)) + "_betcost"), contestBetCost)])
100100 }
101101 }
102102
103103
104104
105105 @Callable(i)
106106 func bet (currencyValue) = {
107107 let account = toBase58String(i.caller.bytes)
108108 let pmt = extract(i.payment)
109109 let contestCurrNumber = getNumByKey("contest_currentnumber")
110110 let contestStartHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_startheight"))
111111 let contestFinishHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_finishheight"))
112- let contestBetCounter = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betcounter"))
113112 let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
114113 let contestCurrBetCost = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betcost"))
115- let thisBetId = (contestBetCounter + 1)
116114 let contestStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
117- let existingBetBetId = getNumByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)))
118- let existingBetAccount = getBetAccount(existingBetBetId)
115+ let existingBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)))
119116 if ((height > (contestFinishHeight - (2 * 1440))))
120117 then throw("You cannot bet anymore at this height.")
121118 else if ((contestCurrStatus != RUNNING))
122119 then throw(("Invalid status: you cannot bet now, contest status is: " + contestCurrStatus))
123120 else if (if ((pmt.assetId != WLT))
124121 then true
125122 else (pmt.amount != contestCurrBetCost))
126123 then throw(((("You must pay at least: " + toString(contestCurrBetCost)) + " WLT to bet. You paid: ") + toString(pmt.amount)))
127124 else if (if ((existingBetAccount != NONE))
128125 then (existingBetAccount != account)
129126 else false)
130- then throw(((((("Another user: " + existingBetAccount) + " did bet already on rate: ") + toString(currencyValue)) + " betID:") + toString(existingBetBetId)))
131- else WriteSet([DataEntry((((("bet_" + toString(contestCurrNumber)) + "_") + toString(thisBetId)) + "_owner"), account), DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), thisBetId), DataEntry((("contest_" + toString(contestCurrNumber)) + "_betcounter"), thisBetId)])
127+ then throw(((("Another user: " + existingBetAccount) + " did bet already on rate: ") + toString(currencyValue)))
128+ else WriteSet([DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), account)])
132129 }
133130
134131
135132
136133 @Callable(i)
137134 func closecontest () = {
138135 let currencyRate = getExtWAVESUSDCurrencyRate()
139136 let contestCurrNumber = getNumByKey("contest_currentnumber")
140- let winningBetBetId = getNumByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyRate)))
141- let winningBetAccount = getBetAccount(winningBetBetId)
137+ let winningBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyRate)))
142138 let contestFinishHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_finishheight"))
143139 let account = toBase58String(i.caller.bytes)
144140 let balance = wavesBalance(this)
145141 let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
146142 let writeStatistics = WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_height"), height)])
147143 if (if ((contestFinishHeight > height))
148144 then (account != DAPPOWNER)
149145 else false)
150146 then throw(((("account: " + account) + ": Cannot close the contest before height:") + toString(contestFinishHeight)))
151147 else if ((contestCurrStatus != RUNNING))
152148 then throw(("Cannot close a contest in status: " + contestCurrStatus))
153149 else if ((winningBetAccount != NONE))
154150 then {
155151 let WLTShareRevenue = ((assetBalance(this, WLT) * 5) / 100)
156152 let WLTShareBurn = ((assetBalance(this, WLT) * 90) / 100)
157153 let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), (((wavesBalance(this) * 99) / 100) - FEE), unit), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTShareRevenue, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTShareRevenue, WLT), ScriptTransfer(extract(addressFromString(WLTBURNWALLET)), WLTShareBurn, WLT)])
158154 ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_height"), height)]), winTransfer)
159155 }
160156 else WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_height"), height)])
161157 }
162158
163159
164160 @Verifier(tx)
165161 func verify () = match tx {
166162 case _: SetScriptTransaction|DataTransaction =>
167163 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
168164 case _: InvokeScriptTransaction =>
169165 true
170166 case _ =>
171167 true
172168 }
173169

github/deemru/w8io/026f985 
36.75 ms