tx · DRykuMBG3XybRhBPrJQWswKMcWXJzUqBuzFBeXvqya57

3N6GuFb7Ucxs3cZjmwYDusKtfLaAigDtav5:  -0.01000000 Waves

2023.06.07 08:26 [2611828] smart account 3N6GuFb7Ucxs3cZjmwYDusKtfLaAigDtav5 > SELF 0.00000000 Waves

{ "type": 13, "id": "DRykuMBG3XybRhBPrJQWswKMcWXJzUqBuzFBeXvqya57", "fee": 1000000, "feeAssetId": null, "timestamp": 1686115661152, "version": 2, "chainId": 84, "sender": "3N6GuFb7Ucxs3cZjmwYDusKtfLaAigDtav5", "senderPublicKey": "EMAuwff72FwVoiJK9xHyuUUMbpKmgV5temqeLU2aEsiS", "proofs": [ "2sz6fgNCxjeXNvdtgNbKvqRk1sKs9Yjn4dwgLuVCL9JqsxtZbzZTgSs2Ci8iq3XmfvmLi9vLLA8kLFDjHLvNpczg" ], "script": "base64:BgIICAISABIAEgAIAQpudW1Ub1dhdmVzAQNudW0JAGgCBQNudW0AgMLXLwELaXNQYXltZW50T2sBAWkEEWFjY2VwdGFibGVBc3NldElkASAiRKbniFR9USiuale6D2n6duEOdzftqEerUh9pTZRCRwMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRQYXltZW50IG5vdCBhdHRhY2hlZAQBcAkAkQMCCAUBaQhwYXltZW50cwAABAckbWF0Y2gwCAUBcAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB2Fzc2V0SWQFByRtYXRjaDADCQAAAgUHYXNzZXRJZAURYWNjZXB0YWJsZUFzc2V0SWQJAGcCCAUBcAZhbW91bnQJAQpudW1Ub1dhdmVzAQABBwkAZwIIBQFwBmFtb3VudAkBCm51bVRvV2F2ZXMBAAEBDExXX2dldEJldEtleQEBaQkArAICAg9iZXRfTHVja3lXaGVlbF8JAKUIAQgFAWkGY2FsbGVyAQxMV19nZXRXb25LZXkBAWkJAKwCAgIPd29uX0x1Y2t5V2hlZWxfCQClCAEIBQFpBmNhbGxlcgEVTFdfZ2V0UmFuZG9tTnVtYmVyS2V5AQFpCQCsAgICGHJhbmRvbU51bWJlcl9MdWNreVdoZWVsXwkApQgBCAUBaQZjYWxsZXIBDExXX2dldExvZ0tleQEBaQkArAICCQCsAgIJAKwCAgIPbG9nX0x1Y2t5V2hlZWxfCQClCAEIBQFpBmNhbGxlcgIBXwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAQ5MV193aGF0VXNlcldvbgEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAAIAAQUHJG1hdGNoMAkBCm51bVRvV2F2ZXMBAAIDCQAAAgADBQckbWF0Y2gwCQEKbnVtVG9XYXZlcwEAAQMJAAACAAcFByRtYXRjaDAJAQpudW1Ub1dhdmVzAQAGAwkAAAIACQUHJG1hdGNoMAkBCm51bVRvV2F2ZXMBAAEAAAENd2luQ2FsY3VsYXRvcgQDYmV0EnNlbGVjdGVkTnVtYmVyQmV0cwxyYW5kb21OdW1iZXIMYmV0RGlyZWN0aW9uBAtSRURfU0VDVE9SUwkAzAgCACAJAMwIAgATCQDMCAIAFQkAzAgCABkJAMwIAgAiCQDMCAIAGwkAzAgCACQJAMwIAgAeCQDMCAIAFwkAzAgCAAUJAMwIAgAQCQDMCAIAAQkAzAgCAA4JAMwIAgAJCQDMCAIAEgkAzAgCAAcJAMwIAgAMCQDMCAIAAwUDbmlsAwMJAAACCQCQAwEFEnNlbGVjdGVkTnVtYmVyQmV0cwABCQAAAgUMYmV0RGlyZWN0aW9uAgNudW0HAwkAAAIJAJEDAgUSc2VsZWN0ZWROdW1iZXJCZXRzAAAFDHJhbmRvbU51bWJlcgkAaAIFA2JldAAkAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMAAgMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFA2JldAASAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMAAwMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFA2JldAAMAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMABAMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFA2JldAAJAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMADAMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFA2JldAADAAADCQAAAgUMYmV0RGlyZWN0aW9uAgNyZWQDCQEPY29udGFpbnNFbGVtZW50AgULUkVEX1NFQ1RPUlMFDHJhbmRvbU51bWJlcgkAaAIFA2JldAACAAADCQAAAgUMYmV0RGlyZWN0aW9uAgVibGFjawMDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQtSRURfU0VDVE9SUwUMcmFuZG9tTnVtYmVyCQECIT0CBQxyYW5kb21OdW1iZXIAAAcJAGgCBQNiZXQAAgAAAwkAAAIFDGJldERpcmVjdGlvbgIDb2RkAwkBAiE9AgkAagIFDHJhbmRvbU51bWJlcgACAAAJAGgCBQNiZXQAAgAAAwkAAAIFDGJldERpcmVjdGlvbgIEZXZlbgMJAAACCQBqAgUMcmFuZG9tTnVtYmVyAAIAAAkAaAIFA2JldAACAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMAEgMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFA2JldAACAAAAAAMBaQERTHVja3lXaGVlbF9jb21taXQAAwkBASEBCQELaXNQYXltZW50T2sBBQFpCQACAQIdV3JvbmcgcGF5bWVudCBhbW91bnQgb3IgYXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQxMV19nZXRCZXRLZXkBBQFpCQBkAgUGaGVpZ2h0AAEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFUxXX2dldFJhbmRvbU51bWJlcktleQEFAWkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDExXX2dldFdvbktleQEFAWkFA25pbAFpARFMdWNreVdoZWVsX3JldmVhbAAEDGNvbW1pdEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEMTFdfZ2V0QmV0S2V5AQUBaQINQmV0IG5vdCBmb3VuZAMJAGYCBQxjb21taXRIZWlnaHQFBmhlaWdodAkAAgEJAKwCAgkArAICAgV3YWl0IAkApAMBCQBlAgUMY29tbWl0SGVpZ2h0BQZoZWlnaHQCGSBibG9ja3MgdG8gcmV2ZWFsIHRoaXMgaWQEC3JldmVhbEJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAO0HAQUMY29tbWl0SGVpZ2h0AhF1bmV4Y3BlY3RlZCBlcnJvcgQDdnJmCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQtyZXZlYWxCbG9jawN2cmYCEXVuZXhjcGVjdGVkIGVycm9yBApyYW5kb21IYXNoCQD3AwEJAQV2YWx1ZQEFA3ZyZgQKcmFuZG9tU2VlZAkAagIJALIJAgUKcmFuZG9tSGFzaAAQAAwEDHJhbmRvbU51bWJlcgkAZAIJAGoCBQpyYW5kb21TZWVkCQBkAgkAZQIADAABAAEAAQQNd2lubmluZ0Ftb3VudAkBDkxXX3doYXRVc2VyV29uAQUMcmFuZG9tTnVtYmVyAwkAZgIFDXdpbm5pbmdBbW91bnQAAAkAzAgCCQELRGVsZXRlRW50cnkBCQEMTFdfZ2V0QmV0S2V5AQUBaQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDXdpbm5pbmdBbW91bnQFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQxMV19nZXRXb25LZXkBBQFpBQ13aW5uaW5nQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVTFdfZ2V0UmFuZG9tTnVtYmVyS2V5AQUBaQUMcmFuZG9tTnVtYmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMTFdfZ2V0TG9nS2V5AQUBaQUNd2lubmluZ0Ftb3VudAUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxMV19nZXRCZXRLZXkBBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMTFdfZ2V0V29uS2V5AQUBaQUNd2lubmluZ0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFUxXX2dldFJhbmRvbU51bWJlcktleQEFAWkFDHJhbmRvbU51bWJlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDExXX2dldExvZ0tleQEFAWkFDXdpbm5pbmdBbW91bnQFA25pbAFpAQRUZXN0AAUDbmlsAG2bsNM=", "height": 2611828, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9t9HMWUsoP97r7c7eirMrxRxabZEMV5BKtp23HUDdnbV Next: Ds8rWA1iitPHEtJdG92UzRvwxYW89WGCXRwDw1hYsNYV Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 4 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func generateRandomNumber (i,min,max) = {
5- let randomSeed = toInt(keccak256(i.transactionId))
6- let randomNumber = ((randomSeed % ((max - min) + 1)) + min)
7- randomNumber
8- }
4+func numToWaves (num) = (num * 100000000)
95
106
117 func isPaymentOk (i) = {
1713 match p.assetId {
1814 case assetId: ByteVector =>
1915 if ((assetId == acceptableAssetId))
20- then (p.amount >= 100000000)
16+ then (p.amount >= numToWaves(1))
2117 else false
2218 case _ =>
23- (p.amount >= 100000000)
19+ (p.amount >= numToWaves(1))
2420 }
2521 }
2622 }
2723
2824
29-func gameLuckyWheelWhatUserWon (value) = match value {
25+func LW_getBetKey (i) = ("bet_LuckyWheel_" + toString(i.caller))
26+
27+
28+func LW_getWonKey (i) = ("won_LuckyWheel_" + toString(i.caller))
29+
30+
31+func LW_getRandomNumberKey (i) = ("randomNumber_LuckyWheel_" + toString(i.caller))
32+
33+
34+func LW_getLogKey (i) = ((("log_LuckyWheel_" + toString(i.caller)) + "_") + toBase58String(i.transactionId))
35+
36+
37+func LW_whatUserWon (value) = match value {
3038 case _ =>
3139 if ((1 == $match0))
32- then 200000000
40+ then numToWaves(2)
3341 else if ((3 == $match0))
34- then 100000000
35- else if ((5 == $match0))
36- then 100000000
37- else if ((7 == $match0))
38- then 300000000
39- else if ((8 == $match0))
40- then 100000000
41- else if ((11 == $match0))
42- then 100000000
43- else 0
42+ then numToWaves(1)
43+ else if ((7 == $match0))
44+ then numToWaves(6)
45+ else if ((9 == $match0))
46+ then numToWaves(1)
47+ else 0
4448 }
4549
4650
51+func winCalculator (bet,selectedNumberBets,randomNumber,betDirection) = {
52+ let RED_SECTORS = [32, 19, 21, 25, 34, 27, 36, 30, 23, 5, 16, 1, 14, 9, 18, 7, 12, 3]
53+ if (if ((size(selectedNumberBets) == 1))
54+ then (betDirection == "num")
55+ else false)
56+ then if ((selectedNumberBets[0] == randomNumber))
57+ then (bet * 36)
58+ else 0
59+ else if ((size(selectedNumberBets) == 2))
60+ then if (containsElement(selectedNumberBets, randomNumber))
61+ then (bet * 18)
62+ else 0
63+ else if ((size(selectedNumberBets) == 3))
64+ then if (containsElement(selectedNumberBets, randomNumber))
65+ then (bet * 12)
66+ else 0
67+ else if ((size(selectedNumberBets) == 4))
68+ then if (containsElement(selectedNumberBets, randomNumber))
69+ then (bet * 9)
70+ else 0
71+ else if ((size(selectedNumberBets) == 12))
72+ then if (containsElement(selectedNumberBets, randomNumber))
73+ then (bet * 3)
74+ else 0
75+ else if ((betDirection == "red"))
76+ then if (containsElement(RED_SECTORS, randomNumber))
77+ then (bet * 2)
78+ else 0
79+ else if ((betDirection == "black"))
80+ then if (if (!(containsElement(RED_SECTORS, randomNumber)))
81+ then (randomNumber != 0)
82+ else false)
83+ then (bet * 2)
84+ else 0
85+ else if ((betDirection == "odd"))
86+ then if (((randomNumber % 2) != 0))
87+ then (bet * 2)
88+ else 0
89+ else if ((betDirection == "even"))
90+ then if (((randomNumber % 2) == 0))
91+ then (bet * 2)
92+ else 0
93+ else if ((size(selectedNumberBets) == 18))
94+ then if (containsElement(selectedNumberBets, randomNumber))
95+ then (bet * 2)
96+ else 0
97+ else 0
98+ }
99+
100+
47101 @Callable(i)
48-func gameLuckyWheel (id) = if (!(isPaymentOk(i)))
102+func LuckyWheel_commit () = if (!(isPaymentOk(i)))
49103 then throw("Wrong payment amount or asset")
50- else {
51- let randomNumber = generateRandomNumber(i, 1, 12)
52- let winningAmount = gameLuckyWheelWhatUserWon(randomNumber)
53- if ((winningAmount > 0))
54- then [ScriptTransfer(i.caller, winningAmount, unit), IntegerEntry(("game_" + id), winningAmount)]
55- else [IntegerEntry(("game_" + id), winningAmount)]
56- }
104+ else [IntegerEntry(LW_getBetKey(i), (height + 1)), DeleteEntry(LW_getRandomNumberKey(i)), DeleteEntry(LW_getWonKey(i))]
105+
106+
107+
108+@Callable(i)
109+func LuckyWheel_reveal () = {
110+ let commitHeight = valueOrErrorMessage(getIntegerValue(LW_getBetKey(i)), "Bet not found")
111+ if ((commitHeight > height))
112+ then throw((("wait " + toString((commitHeight - height))) + " blocks to reveal this id"))
113+ else {
114+ let revealBlock = valueOrErrorMessage(blockInfoByHeight(commitHeight), "unexcpected error")
115+ let vrf = valueOrErrorMessage(revealBlock.vrf, "unexcpected error")
116+ let randomHash = sha256(value(vrf))
117+ let randomSeed = (toInt(randomHash, 16) % 12)
118+ let randomNumber = ((randomSeed % ((12 - 1) + 1)) + 1)
119+ let winningAmount = LW_whatUserWon(randomNumber)
120+ if ((winningAmount > 0))
121+ then [DeleteEntry(LW_getBetKey(i)), ScriptTransfer(i.caller, winningAmount, unit), IntegerEntry(LW_getWonKey(i), winningAmount), IntegerEntry(LW_getRandomNumberKey(i), randomNumber), IntegerEntry(LW_getLogKey(i), winningAmount)]
122+ else [DeleteEntry(LW_getBetKey(i)), IntegerEntry(LW_getWonKey(i), winningAmount), IntegerEntry(LW_getRandomNumberKey(i), randomNumber), IntegerEntry(LW_getLogKey(i), winningAmount)]
123+ }
124+ }
125+
126+
127+
128+@Callable(i)
129+func Test () = nil
57130
58131
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 4 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func generateRandomNumber (i,min,max) = {
5- let randomSeed = toInt(keccak256(i.transactionId))
6- let randomNumber = ((randomSeed % ((max - min) + 1)) + min)
7- randomNumber
8- }
4+func numToWaves (num) = (num * 100000000)
95
106
117 func isPaymentOk (i) = {
128 let acceptableAssetId = base58'3JmaWyFqWo8YSA8x3DXCBUW7veesxacvKx19dMv7wTMg'
139 if ((size(i.payments) == 0))
1410 then throw("Payment not attached")
1511 else {
1612 let p = i.payments[0]
1713 match p.assetId {
1814 case assetId: ByteVector =>
1915 if ((assetId == acceptableAssetId))
20- then (p.amount >= 100000000)
16+ then (p.amount >= numToWaves(1))
2117 else false
2218 case _ =>
23- (p.amount >= 100000000)
19+ (p.amount >= numToWaves(1))
2420 }
2521 }
2622 }
2723
2824
29-func gameLuckyWheelWhatUserWon (value) = match value {
25+func LW_getBetKey (i) = ("bet_LuckyWheel_" + toString(i.caller))
26+
27+
28+func LW_getWonKey (i) = ("won_LuckyWheel_" + toString(i.caller))
29+
30+
31+func LW_getRandomNumberKey (i) = ("randomNumber_LuckyWheel_" + toString(i.caller))
32+
33+
34+func LW_getLogKey (i) = ((("log_LuckyWheel_" + toString(i.caller)) + "_") + toBase58String(i.transactionId))
35+
36+
37+func LW_whatUserWon (value) = match value {
3038 case _ =>
3139 if ((1 == $match0))
32- then 200000000
40+ then numToWaves(2)
3341 else if ((3 == $match0))
34- then 100000000
35- else if ((5 == $match0))
36- then 100000000
37- else if ((7 == $match0))
38- then 300000000
39- else if ((8 == $match0))
40- then 100000000
41- else if ((11 == $match0))
42- then 100000000
43- else 0
42+ then numToWaves(1)
43+ else if ((7 == $match0))
44+ then numToWaves(6)
45+ else if ((9 == $match0))
46+ then numToWaves(1)
47+ else 0
4448 }
4549
4650
51+func winCalculator (bet,selectedNumberBets,randomNumber,betDirection) = {
52+ let RED_SECTORS = [32, 19, 21, 25, 34, 27, 36, 30, 23, 5, 16, 1, 14, 9, 18, 7, 12, 3]
53+ if (if ((size(selectedNumberBets) == 1))
54+ then (betDirection == "num")
55+ else false)
56+ then if ((selectedNumberBets[0] == randomNumber))
57+ then (bet * 36)
58+ else 0
59+ else if ((size(selectedNumberBets) == 2))
60+ then if (containsElement(selectedNumberBets, randomNumber))
61+ then (bet * 18)
62+ else 0
63+ else if ((size(selectedNumberBets) == 3))
64+ then if (containsElement(selectedNumberBets, randomNumber))
65+ then (bet * 12)
66+ else 0
67+ else if ((size(selectedNumberBets) == 4))
68+ then if (containsElement(selectedNumberBets, randomNumber))
69+ then (bet * 9)
70+ else 0
71+ else if ((size(selectedNumberBets) == 12))
72+ then if (containsElement(selectedNumberBets, randomNumber))
73+ then (bet * 3)
74+ else 0
75+ else if ((betDirection == "red"))
76+ then if (containsElement(RED_SECTORS, randomNumber))
77+ then (bet * 2)
78+ else 0
79+ else if ((betDirection == "black"))
80+ then if (if (!(containsElement(RED_SECTORS, randomNumber)))
81+ then (randomNumber != 0)
82+ else false)
83+ then (bet * 2)
84+ else 0
85+ else if ((betDirection == "odd"))
86+ then if (((randomNumber % 2) != 0))
87+ then (bet * 2)
88+ else 0
89+ else if ((betDirection == "even"))
90+ then if (((randomNumber % 2) == 0))
91+ then (bet * 2)
92+ else 0
93+ else if ((size(selectedNumberBets) == 18))
94+ then if (containsElement(selectedNumberBets, randomNumber))
95+ then (bet * 2)
96+ else 0
97+ else 0
98+ }
99+
100+
47101 @Callable(i)
48-func gameLuckyWheel (id) = if (!(isPaymentOk(i)))
102+func LuckyWheel_commit () = if (!(isPaymentOk(i)))
49103 then throw("Wrong payment amount or asset")
50- else {
51- let randomNumber = generateRandomNumber(i, 1, 12)
52- let winningAmount = gameLuckyWheelWhatUserWon(randomNumber)
53- if ((winningAmount > 0))
54- then [ScriptTransfer(i.caller, winningAmount, unit), IntegerEntry(("game_" + id), winningAmount)]
55- else [IntegerEntry(("game_" + id), winningAmount)]
56- }
104+ else [IntegerEntry(LW_getBetKey(i), (height + 1)), DeleteEntry(LW_getRandomNumberKey(i)), DeleteEntry(LW_getWonKey(i))]
105+
106+
107+
108+@Callable(i)
109+func LuckyWheel_reveal () = {
110+ let commitHeight = valueOrErrorMessage(getIntegerValue(LW_getBetKey(i)), "Bet not found")
111+ if ((commitHeight > height))
112+ then throw((("wait " + toString((commitHeight - height))) + " blocks to reveal this id"))
113+ else {
114+ let revealBlock = valueOrErrorMessage(blockInfoByHeight(commitHeight), "unexcpected error")
115+ let vrf = valueOrErrorMessage(revealBlock.vrf, "unexcpected error")
116+ let randomHash = sha256(value(vrf))
117+ let randomSeed = (toInt(randomHash, 16) % 12)
118+ let randomNumber = ((randomSeed % ((12 - 1) + 1)) + 1)
119+ let winningAmount = LW_whatUserWon(randomNumber)
120+ if ((winningAmount > 0))
121+ then [DeleteEntry(LW_getBetKey(i)), ScriptTransfer(i.caller, winningAmount, unit), IntegerEntry(LW_getWonKey(i), winningAmount), IntegerEntry(LW_getRandomNumberKey(i), randomNumber), IntegerEntry(LW_getLogKey(i), winningAmount)]
122+ else [DeleteEntry(LW_getBetKey(i)), IntegerEntry(LW_getWonKey(i), winningAmount), IntegerEntry(LW_getRandomNumberKey(i), randomNumber), IntegerEntry(LW_getLogKey(i), winningAmount)]
123+ }
124+ }
125+
126+
127+
128+@Callable(i)
129+func Test () = nil
57130
58131

github/deemru/w8io/873ac7e 
33.46 ms