2019.11.15 10:30 [1796166] smart account 3P4NZR6ckE8aLC7Bogr5NXBzSi6p13DQg67 > SELF 0.00000000 Waves

{ "type": 13, "id": "J1o6ZcaohdQiAQubgVHQSRkw9N67kVF1Tin1aCbEs9WA", "fee": 1400000, "feeAssetId": null, "timestamp": 1573803093212, "version": 1, "sender": "3P4NZR6ckE8aLC7Bogr5NXBzSi6p13DQg67", "senderPublicKey": "Gx6Ph96SNt8iLRaGaYT14BgHA8mj5SBfMLaizdDU59gA", "proofs": [ "3Ya8qBcjRpCnqGRN2in2ttoTsWSPMoy9zJFJdfxP1fKU3QLB5NQBtz4mkSyn93Ady25HatBHhZmbr1DqjRD3u82M" ], "script": "base64:AAIDAAAAAAAAABMIARIDCgEIEgMKAQESAwoBARIAAAAADgAAAAAHUlVOTklORwIAAAAHUlVOTklORwAAAAAGQ0xPU0VEAgAAAAZDTE9TRUQAAAAACENBTkNFTEVEAgAAAAhDQU5DRUxFRAAAAAAJREFQUE9XTkVSAgAAACMzUDROWlI2Y2tFOGFMQzdCb2dyNU5YQnpTaTZwMTNEUWc2NwAAAAAMT1JBQ0xFV0FMTEVUAgAAACMzUDdpUG9ZRnRteGpEVjZDSlBSNWdGV21QQVVKU0ZvRFNhWgAAAAAOV0FWRVNLSVRXQUxMRVQCAAAAIzNQREVFTVJVM3RCSmZmYWc3c1JQbmp3RVE4R1pHaWtVV0JpAAAAAApCVVJOV0FMTEVUAgAAACMzUERpdFVrUDU5dk1takpOR2JUY05yTHA2cVVvNEJTb3FTRQAAAAAFV0FWRVMCAAAABVdBVkVTAAAAAAROT05FAgAAAAROT05FAAAAAANGRUUAAAAAAAANu6AAAAAAA1dMVAEAAAAgqJhrfto5nPqXt3gXMvb4/ZqblTP7XcYlZCjOVdN6v4cBAAAAC2dldE51bUJ5S2V5AAAAAQAAAANrZXkEAAAAA251bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAUAAAADbnVtAQAAAAtnZXRTdHJCeUtleQAAAAEAAAADa2V5BAAAAANzdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEFAAAABE5PTkUFAAAAA3N0cgEAAAAaZ2V0RXh0V0FWRVNVU0RDdXJyZW5jeVJhdGUAAAAABAAAAA1vcmFjbGVBZGRyZXNzCQEAAAAHZXh0cmFjdAAAAAEJAQAAABFhZGRyZXNzRnJvbVN0cmluZwAAAAEFAAAADE9SQUNMRVdBTExFVAQAAAAUV0FWRVNVU0RDdXJyZW5jeVJhdGUEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAANb3JhY2xlQWRkcmVzcwIAAAALd2F2ZXNfdXNkXzMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAUAAAAUV0FWRVNVU0RDdXJyZW5jeVJhdGUAAAAEAAAAAWkBAAAAEHNldENvbnRlc3RTdGF0dXMAAAABAAAADWNvbnRlc3RTdGF0dXMEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAARY29udGVzdEN1cnJOdW1iZXIJAQAAAAtnZXROdW1CeUtleQAAAAECAAAAFWNvbnRlc3RfY3VycmVudG51bWJlcgMJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAACURBUFBPV05FUgkAAAIAAAABAgAAACdPbmx5IGRBUFAgT3duZXIgY2FuIHNldCBDb250ZXN0IFN0YXR1cy4DAwkBAAAAAiE9AAAAAgUAAAANY29udGVzdFN0YXR1cwUAAAAIQ0FOQ0VMRUQJAQAAAAIhPQAAAAIFAAAADWNvbnRlc3RTdGF0dXMFAAAABkNMT1NFRAcJAAACAAAAAQkAASwAAAACAgAAABBJbnZhbGlkIHN0YXR1czogBQAAAA1jb250ZXN0U3RhdHVzCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAAB19zdGF0dXMFAAAADWNvbnRlc3RTdGF0dXMFAAAAA25pbAAAAAFpAQAAABdzZXRDb250ZXN0Q29uZmlndXJhdGlvbgAAAAEAAAAOY29udGVzdEJldENvc3QEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAARY29udGVzdEN1cnJOdW1iZXIJAQAAAAtnZXROdW1CeUtleQAAAAECAAAAFWNvbnRlc3RfY3VycmVudG51bWJlcgQAAAARY29udGVzdEN1cnJTdGF0dXMJAQAAAAtnZXRTdHJCeUtleQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhjb250ZXN0XwkAAaQAAAABBQAAABFjb250ZXN0Q3Vyck51bWJlcgIAAAAHX3N0YXR1cwQAAAAQY29udGVzdE5ld051bWJlcgkAAGQAAAACBQAAABFjb250ZXN0Q3Vyck51bWJlcgAAAAAAAAAAAQQAAAAHYmFsYW5jZQkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMDCQEAAAACIT0AAAACBQAAAAdhY2NvdW50BQAAAAlEQVBQT1dORVIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA3T25seSBkQVBQIE93bmVyIGNhbiBDb25maWd1cmUgQ29udGVzdC4gQ2FsbGVyIGFjY291bnQ6IAUAAAAHYWNjb3VudAIAAAANIGRhcHAgb3duZXI6IAUAAAAJREFQUE9XTkVSAwkAAAAAAAACBQAAABFjb250ZXN0Q3VyclN0YXR1cwUAAAAHUlVOTklORwkAAAIAAAABCQABLAAAAAICAAAAQFlvdSBjYW5ub3QgY29uZmlndXJlIGEgbmV3IENvbnRlc3Qgd2hpbGUgb2xkIENvbnRlc3Qgc3RhdHVzIGlzOiAFAAAAEWNvbnRlc3RDdXJyU3RhdHVzBAAAABNjb250ZXN0RmluaXNoSGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAkAAGgAAAACAAAAAAAAAAAGAAAAAAAAAAWgCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAABVjb250ZXN0X2N1cnJlbnRudW1iZXIFAAAAEGNvbnRlc3ROZXdOdW1iZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAhjb250ZXN0XwkAAaQAAAABBQAAABBjb250ZXN0TmV3TnVtYmVyAgAAAA1fZmluaXNoaGVpZ2h0BQAAABNjb250ZXN0RmluaXNoSGVpZ2h0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAAQY29udGVzdE5ld051bWJlcgIAAAAHX3N0YXR1cwUAAAAHUlVOTklORwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEGNvbnRlc3ROZXdOdW1iZXICAAAAC19iZXRjb3VudGVyAAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAAQY29udGVzdE5ld051bWJlcgIAAAAIX2JldGNvc3QFAAAADmNvbnRlc3RCZXRDb3N0BQAAAANuaWwAAAABaQEAAAADYmV0AAAAAQAAAA1jdXJyZW5jeVZhbHVlBAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAABFjb250ZXN0Q3Vyck51bWJlcgkBAAAAC2dldE51bUJ5S2V5AAAAAQIAAAAVY29udGVzdF9jdXJyZW50bnVtYmVyBAAAABJjb250ZXN0U3RhcnRIZWlnaHQJAQAAAAtnZXROdW1CeUtleQAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAhjb250ZXN0XwkAAaQAAAABBQAAABFjb250ZXN0Q3Vyck51bWJlcgIAAAAMX3N0YXJ0aGVpZ2h0BAAAABNjb250ZXN0RmluaXNoSGVpZ2h0CQEAAAALZ2V0TnVtQnlLZXkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAADV9maW5pc2hoZWlnaHQEAAAAEWNvbnRlc3RDdXJyU3RhdHVzCQEAAAALZ2V0U3RyQnlLZXkAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAIY29udGVzdF8JAAGkAAAAAQUAAAARY29udGVzdEN1cnJOdW1iZXICAAAAB19zdGF0dXMEAAAAEmNvbnRlc3RDdXJyQmV0Q29zdAkBAAAAC2dldE51bUJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAAhfYmV0Y29zdAQAAAANY29udGVzdFN0YXR1cwkBAAAAC2dldFN0ckJ5S2V5AAAAAQkAASwAAAACCQAB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REN1cnJlbmN5UmF0ZQAAAAAEAAAAEWNvbnRlc3RDdXJyTnVtYmVyCQEAAAALZ2V0TnVtQnlLZXkAAAABAgAAABVjb250ZXN0X2N1cnJlbnRudW1iZXIEAAAAEXdpbm5pbmdCZXRBY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARiZXRfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAAFfCQABpAAAAAEFAAAADGN1cnJlbmN5UmF0ZQQAAAATY29udGVzdEZpbmlzaEhlaWdodAkBAAAAC2dldE51bUJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAA1fZmluaXNoaGVpZ2h0BAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAB2JhbGFuY2UJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAR0aGlzBAAAABFjb250ZXN0Q3VyclN0YXR1cwkBAAAAC2dldFN0ckJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAAdfc3RhdHVzBAAAABRjb250ZXN0Q3VyckJldHNUb3RhbAkBAAAAC2dldE51bUJ5S2V5AAAAAQkAASwAAAACCQABLAAAAAICAAAACGNvbnRlc3RfCQABpAAAAAEFAAAAEWNvbnRlc3RDdXJyTnVtYmVyAgAAAApfYmV0c3RvdGFsAwkBAAAAAiE9AAAAAgUAAAAHYWNjb3VudAUAAAAJREFQUE9XTkVSCQAAAgAAAAECAAAAIk9ubHkgZEFQUCBPd25lciBjYW4gQ2xvc2UgQ29udGVzdC4DCQAAZgAAAAIFAAAAE2NvbnRlc3RGaW5pc2hIZWlnaHQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAlhY2NvdW50OiAFAAAAB2FjY291bnQCAAAAKTogQ2Fubm90IGNsb3NlIHRoZSBjb250ZXN0IGJlZm9yZSBoZWln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", "chainId": 87, "height": 1796166, "spentComplexity": 0 } View: original | compacted Prev: DFEVLe96Hmk2bG6kCuPbbhzWyi7BMzzGZqjkCGCSnSZQ Next: YDvmFFBbzYWHEUpjzaX98cskqUrYgZwWT3yyaW65ShB Diff:
OldNewDifferences
99
1010 let DAPPOWNER = "3P4NZR6ckE8aLC7Bogr5NXBzSi6p13DQg67"
1111
12-let ORACLEWALLET = "3PPTrTo3AzR56N7ArzbU3Bpq9zYMgcf39Mk"
12+let ORACLEWALLET = "3P7iPoYFtmxjDV6CJPR5gFWmPAUJSFoDSaZ"
1313
1414 let WAVESKITWALLET = "3PDEEMRU3tBJffag7sRPnjwEQ8GZGikUWBi"
15+
16+let BURNWALLET = "3PDitUkP59vMmjJNGbTcNrLp6qUo4BSoqSE"
1517
1618 let WAVES = "WAVES"
1719
4547
4648 func getExtWAVESUSDCurrencyRate () = {
4749 let oracleAddress = extract(addressFromString(ORACLEWALLET))
48- let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_2") {
50+ let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_3") {
4951 case a: Int =>
5052 a
5153 case _ =>
101103 let contestStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
102104 let accountBetsNumber = getNumByKey((((("contest_" + toString(contestCurrNumber)) + "_") + account) + "_bets"))
103105 let existingBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)))
106+ let contestCurrBetsTotal = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betstotal"))
104107 if ((height > (contestFinishHeight - (2 * 1440))))
105108 then throw("You cannot bet anymore at this height.")
106109 else if ((contestCurrStatus != RUNNING))
108111 else if (if ((pmt.assetId != WLT))
109112 then true
110113 else (pmt.amount != contestCurrBetCost))
111- then throw(((("You must pay at least: " + toString(contestCurrBetCost)) + " WLT to bet. You paid: ") + toString(pmt.amount)))
114+ then throw(((("You must pay: " + toString(contestCurrBetCost)) + " WLT to bet. You paid: ") + toString(pmt.amount)))
112115 else if (if ((existingBetAccount != NONE))
113116 then (existingBetAccount != account)
114117 else false)
115118 then throw((("Another user: " + existingBetAccount) + " did bet already on this rate."))
116- else if ((accountBetsNumber >= 1))
117- then throw("You can do at most 1 bet.")
118- else WriteSet([DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), account), DataEntry((((("contest_" + toString(contestCurrNumber)) + "_") + account) + "_bets"), (accountBetsNumber + 1))])
119+ else if ((accountBetsNumber >= 3))
120+ then throw("An address can bet at most 3 times.")
121+ else WriteSet([DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), account), DataEntry((((("contest_" + toString(contestCurrNumber)) + "_") + account) + "_bets"), (accountBetsNumber + 1)), DataEntry((("contest_" + toString(contestCurrNumber)) + "_betstotal"), (contestCurrBetsTotal + pmt.amount))])
119122 }
120123
121124
129132 let account = toBase58String(i.caller.bytes)
130133 let balance = wavesBalance(this)
131134 let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
135+ let contestCurrBetsTotal = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betstotal"))
132136 if ((account != DAPPOWNER))
133137 then throw("Only dAPP Owner can Close Contest.")
134138 else if ((contestFinishHeight > height))
137141 then throw(("Cannot close a contest in status: " + contestCurrStatus))
138142 else if ((winningBetAccount != NONE))
139143 then {
140- let WLTOracleShareRevenue = ((assetBalance(this, WLT) * 1) / 100)
141- let WLTWavesKitShareRevenue = ((assetBalance(this, WLT) * 4) / 100)
142- let WLTPrize = ((assetBalance(this, WLT) * 95) / 100)
143- let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), WLTPrize, WLT), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTOracleShareRevenue, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTWavesKitShareRevenue, WLT)])
144+ let WLTbalance = assetBalance(this, WLT)
145+ let WLTPrize = (WLTbalance - contestCurrBetsTotal)
146+ let WLTOracleShareRevenue = ((WLTPrize * 2) / 100)
147+ let WLTWavesKitShareRevenue = ((WLTPrize * 3) / 100)
148+ let WLTWinner = ((WLTPrize * 95) / 100)
149+ let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), WLTWinner, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTWavesKitShareRevenue, WLT), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTOracleShareRevenue, WLT), ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)])
144150 ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_rateheight"), height), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), WLTPrize)]), winTransfer)
145151 }
146- else WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), 0)])
152+ else ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_rateheight"), height), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), 0)]), TransferSet([ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)]))
147153 }
148154
149155
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 = "3P4NZR6ckE8aLC7Bogr5NXBzSi6p13DQg67"
1111
12-let ORACLEWALLET = "3PPTrTo3AzR56N7ArzbU3Bpq9zYMgcf39Mk"
12+let ORACLEWALLET = "3P7iPoYFtmxjDV6CJPR5gFWmPAUJSFoDSaZ"
1313
1414 let WAVESKITWALLET = "3PDEEMRU3tBJffag7sRPnjwEQ8GZGikUWBi"
15+
16+let BURNWALLET = "3PDitUkP59vMmjJNGbTcNrLp6qUo4BSoqSE"
1517
1618 let WAVES = "WAVES"
1719
1820 let NONE = "NONE"
1921
2022 let FEE = 900000
2123
2224 let WLT = base58'CM8J4Z9HW3MdKgTxrpf3WYauXfjdu1zZKg19AGTicEYe'
2325
2426 func getNumByKey (key) = {
2527 let num = match getInteger(this, key) {
2628 case a: Int =>
2729 a
2830 case _ =>
2931 0
3032 }
3133 num
3234 }
3335
3436
3537 func getStrByKey (key) = {
3638 let str = match getString(this, key) {
3739 case a: String =>
3840 a
3941 case _ =>
4042 NONE
4143 }
4244 str
4345 }
4446
4547
4648 func getExtWAVESUSDCurrencyRate () = {
4749 let oracleAddress = extract(addressFromString(ORACLEWALLET))
48- let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_2") {
50+ let WAVESUSDCurrencyRate = match getInteger(oracleAddress, "waves_usd_3") {
4951 case a: Int =>
5052 a
5153 case _ =>
5254 0
5355 }
5456 WAVESUSDCurrencyRate
5557 }
5658
5759
5860 @Callable(i)
5961 func setContestStatus (contestStatus) = {
6062 let account = toBase58String(i.caller.bytes)
6163 let contestCurrNumber = getNumByKey("contest_currentnumber")
6264 if ((account != DAPPOWNER))
6365 then throw("Only dAPP Owner can set Contest Status.")
6466 else if (if ((contestStatus != CANCELED))
6567 then (contestStatus != CLOSED)
6668 else false)
6769 then throw(("Invalid status: " + contestStatus))
6870 else WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), contestStatus)])
6971 }
7072
7173
7274
7375 @Callable(i)
7476 func setContestConfiguration (contestBetCost) = {
7577 let account = toBase58String(i.caller.bytes)
7678 let contestCurrNumber = getNumByKey("contest_currentnumber")
7779 let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
7880 let contestNewNumber = (contestCurrNumber + 1)
7981 let balance = wavesBalance(this)
8082 if ((account != DAPPOWNER))
8183 then throw(((("Only dAPP Owner can Configure Contest. Caller account: " + account) + " dapp owner: ") + DAPPOWNER))
8284 else if ((contestCurrStatus == RUNNING))
8385 then throw(("You cannot configure a new Contest while old Contest status is: " + contestCurrStatus))
8486 else {
8587 let contestFinishHeight = (height + (6 * 1440))
8688 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)])
8789 }
8890 }
8991
9092
9193
9294 @Callable(i)
9395 func bet (currencyValue) = {
9496 let account = toBase58String(i.caller.bytes)
9597 let pmt = extract(i.payment)
9698 let contestCurrNumber = getNumByKey("contest_currentnumber")
9799 let contestStartHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_startheight"))
98100 let contestFinishHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_finishheight"))
99101 let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
100102 let contestCurrBetCost = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betcost"))
101103 let contestStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
102104 let accountBetsNumber = getNumByKey((((("contest_" + toString(contestCurrNumber)) + "_") + account) + "_bets"))
103105 let existingBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)))
106+ let contestCurrBetsTotal = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betstotal"))
104107 if ((height > (contestFinishHeight - (2 * 1440))))
105108 then throw("You cannot bet anymore at this height.")
106109 else if ((contestCurrStatus != RUNNING))
107110 then throw(("Invalid status: you cannot bet now, contest status is: " + contestCurrStatus))
108111 else if (if ((pmt.assetId != WLT))
109112 then true
110113 else (pmt.amount != contestCurrBetCost))
111- then throw(((("You must pay at least: " + toString(contestCurrBetCost)) + " WLT to bet. You paid: ") + toString(pmt.amount)))
114+ then throw(((("You must pay: " + toString(contestCurrBetCost)) + " WLT to bet. You paid: ") + toString(pmt.amount)))
112115 else if (if ((existingBetAccount != NONE))
113116 then (existingBetAccount != account)
114117 else false)
115118 then throw((("Another user: " + existingBetAccount) + " did bet already on this rate."))
116- else if ((accountBetsNumber >= 1))
117- then throw("You can do at most 1 bet.")
118- else WriteSet([DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), account), DataEntry((((("contest_" + toString(contestCurrNumber)) + "_") + account) + "_bets"), (accountBetsNumber + 1))])
119+ else if ((accountBetsNumber >= 3))
120+ then throw("An address can bet at most 3 times.")
121+ else WriteSet([DataEntry(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyValue)), account), DataEntry((((("contest_" + toString(contestCurrNumber)) + "_") + account) + "_bets"), (accountBetsNumber + 1)), DataEntry((("contest_" + toString(contestCurrNumber)) + "_betstotal"), (contestCurrBetsTotal + pmt.amount))])
119122 }
120123
121124
122125
123126 @Callable(i)
124127 func closecontest () = {
125128 let currencyRate = getExtWAVESUSDCurrencyRate()
126129 let contestCurrNumber = getNumByKey("contest_currentnumber")
127130 let winningBetAccount = getStrByKey(((("bet_" + toString(contestCurrNumber)) + "_") + toString(currencyRate)))
128131 let contestFinishHeight = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_finishheight"))
129132 let account = toBase58String(i.caller.bytes)
130133 let balance = wavesBalance(this)
131134 let contestCurrStatus = getStrByKey((("contest_" + toString(contestCurrNumber)) + "_status"))
135+ let contestCurrBetsTotal = getNumByKey((("contest_" + toString(contestCurrNumber)) + "_betstotal"))
132136 if ((account != DAPPOWNER))
133137 then throw("Only dAPP Owner can Close Contest.")
134138 else if ((contestFinishHeight > height))
135139 then throw(((("account: " + account) + ": Cannot close the contest before height:") + toString(contestFinishHeight)))
136140 else if ((contestCurrStatus != RUNNING))
137141 then throw(("Cannot close a contest in status: " + contestCurrStatus))
138142 else if ((winningBetAccount != NONE))
139143 then {
140- let WLTOracleShareRevenue = ((assetBalance(this, WLT) * 1) / 100)
141- let WLTWavesKitShareRevenue = ((assetBalance(this, WLT) * 4) / 100)
142- let WLTPrize = ((assetBalance(this, WLT) * 95) / 100)
143- let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), WLTPrize, WLT), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTOracleShareRevenue, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTWavesKitShareRevenue, WLT)])
144+ let WLTbalance = assetBalance(this, WLT)
145+ let WLTPrize = (WLTbalance - contestCurrBetsTotal)
146+ let WLTOracleShareRevenue = ((WLTPrize * 2) / 100)
147+ let WLTWavesKitShareRevenue = ((WLTPrize * 3) / 100)
148+ let WLTWinner = ((WLTPrize * 95) / 100)
149+ let winTransfer = TransferSet([ScriptTransfer(extract(addressFromString(winningBetAccount)), WLTWinner, WLT), ScriptTransfer(extract(addressFromString(WAVESKITWALLET)), WLTWavesKitShareRevenue, WLT), ScriptTransfer(extract(addressFromString(ORACLEWALLET)), WLTOracleShareRevenue, WLT), ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)])
144150 ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_rateheight"), height), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), WLTPrize)]), winTransfer)
145151 }
146- else WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), 0)])
152+ else ScriptResult(WriteSet([DataEntry((("contest_" + toString(contestCurrNumber)) + "_status"), CLOSED), DataEntry((("contest_" + toString(contestCurrNumber)) + "_winner"), winningBetAccount), DataEntry((("contest_" + toString(contestCurrNumber)) + "_rateheight"), height), DataEntry((("contest_" + toString(contestCurrNumber)) + "_currencyrate"), currencyRate), DataEntry((("contest_" + toString(contestCurrNumber)) + "_prize"), 0)]), TransferSet([ScriptTransfer(extract(addressFromString(BURNWALLET)), contestCurrBetsTotal, WLT)]))
147153 }
148154
149155
150156 @Verifier(tx)
151157 func verify () = match tx {
152158 case _: SetScriptTransaction|DataTransaction =>
153159 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
154160 case _: InvokeScriptTransaction =>
155161 true
156162 case _ =>
157163 true
158164 }
159165

github/deemru/w8io/786bc32 
73.71 ms