tx · 9wrXao37gw81k11Uh54djWmxiUMC3AkXDQ35gNiPj9MZ

3MrfLFw1uz3BDr45RQLvrRnAwT2nHpB4KiX:  -0.01000000 Waves

2023.06.12 23:13 [2619929] smart account 3MrfLFw1uz3BDr45RQLvrRnAwT2nHpB4KiX > SELF 0.00000000 Waves

{ "type": 13, "id": "9wrXao37gw81k11Uh54djWmxiUMC3AkXDQ35gNiPj9MZ", "fee": 1000000, "feeAssetId": null, "timestamp": 1686600873717, "version": 2, "chainId": 84, "sender": "3MrfLFw1uz3BDr45RQLvrRnAwT2nHpB4KiX", "senderPublicKey": "5iiNX4Sz3qZzcerumQLc1y7u9TH2X46jDV4f9Xivtmtv", "proofs": [ "3dtnDv2E13CXup1iTE8Bx1AfxKVphe2giydwHTHzScJ2c2toCeGMVrcXJe4Yq4SwUBeAmHoyCjH47bBwpkpeiNUc" ], "script": "base64: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bWVudAIFC1JFRF9TRUNUT1JTBQxyYW5kb21OdW1iZXIJAGgCBQliZXRBbW91bnQAAgAAAwkAAAIFDGJldERpcmVjdGlvbgIFYmxhY2sDCQEPY29udGFpbnNFbGVtZW50AgUNQkxBQ0tfU0VDVE9SUwUMcmFuZG9tTnVtYmVyCQBoAgUJYmV0QW1vdW50AAIAAAMJAAACBQxiZXREaXJlY3Rpb24CA29kZAMJAQIhPQIJAGoCBQxyYW5kb21OdW1iZXIAAgAACQBoAgUJYmV0QW1vdW50AAIAAAMJAAACBQxiZXREaXJlY3Rpb24CBGV2ZW4DCQAAAgkAagIFDHJhbmRvbU51bWJlcgACAAAJAGgCBQliZXRBbW91bnQAAgAAAwMJAAACCQCQAwEFEnNlbGVjdGVkTnVtYmVyQmV0cwABCQAAAgUMYmV0RGlyZWN0aW9uAgNudW0HAwkAAAIJAJEDAgUSc2VsZWN0ZWROdW1iZXJCZXRzAAAFDHJhbmRvbU51bWJlcgkAaAIFCWJldEFtb3VudAAkAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMAAgMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFCWJldEFtb3VudAASAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMAAwMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFCWJldEFtb3VudAAMAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMABAMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFCWJldEFtb3VudAAJAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMADAMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFCWJldEFtb3VudAADAAADCQAAAgkAkAMBBRJzZWxlY3RlZE51bWJlckJldHMAEgMJAQ9jb250YWluc0VsZW1lbnQCBRJzZWxlY3RlZE51bWJlckJldHMFDHJhbmRvbU51bWJlcgkAaAIFCWJldEFtb3VudAACAAAAAAELUl9nZXRCZXRLZXkBAWkJAKwCAgINYmV0X1JvdWxldHRlXwkApQgBCAUBaQZjYWxsZXIBEVJfZ2V0QmV0QW1vdW50S2V5AQFpCQCsAgICE2JldEFtb3VudF9Sb3VsZXR0ZV8JAKUIAQgFAWkGY2FsbGVyARdSX2dldFNlbGVjdGVkTnVtYmVyc0tleQEBaQkArAICAhlzZWxlY3RlZE51bWJlcnNfUm91bGV0dGVfCQClCAEIBQFpBmNhbGxlcgERUl9nZXREaXJlY3Rpb25LZXkBAWkJAKwCAgITZGlyZWN0aW9uX1JvdWxldHRlXwkApQgBCAUBaQZjYWxsZXIBC1JfZ2V0TG9nS2V5AQFpCQCsAgIJAKwCAgkArAICAg1sb2dfUm91bGV0dGVfCQClCAEIBQFpBmNhbGxlcgIBXwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAQ5SX2dldFN0YXR1c0tleQEBaQkArAICAhBzdGF0dXNfUm91bGV0dGVfCQClCAEIBQFpBmNhbGxlcgEMTFdfZ2V0QmV0S2V5AQFpCQCsAgICD2JldF9MdWNreVdoZWVsXwkApQgBCAUBaQZjYWxsZXIBDExXX2dldFdvbktleQEBaQkArAICAg93b25fTHVja3lXaGVlbF8JAKUIAQgFAWkGY2FsbGVyARVMV19nZXRSYW5kb21OdW1iZXJLZXkBAWkJAKwCAgIYcmFuZG9tTnVtYmVyX0x1Y2t5V2hlZWxfCQClCAEIBQFpBmNhbGxlcgEMTFdfZ2V0TG9nS2V5AQFpCQCsAgIJAKwCAgkArAICAg9sb2dfTHVja3lXaGVlbF8JAKUIAQgFAWkGY2FsbGVyAgFfCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQBDkxXX3doYXRVc2VyV29uAQV2YWx1ZQQHJG1hdGNoMAUFdmFsdWUDCQAAAgABBQckbWF0Y2gwCQEKbnVtVG9XYXZlcwEAAgMJAAACAAMFByRtYXRjaDAJAQpudW1Ub1dhdmVzAQABAwkAAAIABwUHJG1hdGNoMAkBCm51bVRvV2F2ZXMBAAYDCQAAAgAJBQckbWF0Y2gwCQEKbnVtVG9XYXZlcwEAAQAAAQ9MV19nZXRTdGF0dXNLZXkBAWkJAKwCAgIQc3RhdHVzX1JvdWxldHRlXwkApQgBCAUBaQZjYWxsZXIEAWkBD1JvdWxldHRlX2NvbW1pdAMJYmV0QW1vdW50EnNlbGVjdGVkTnVtYmVyQmV0cwxiZXREaXJlY3Rpb24EAXAJAJEDAggFAWkIcGF5bWVudHMAAAMJAQEhAQkBC2lzUGF5bWVudE9rAgUBaQUJYmV0QW1vdW50CQACAQIeV3JvbmcgcGF5bWVudCBhbW91bnQgb3IgYXNzZXQhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELUl9nZXRCZXRLZXkBBQFpCQBkAgUGaGVpZ2h0AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARFSX2dldEJldEFtb3VudEtleQEFAWkFCWJldEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEXUl9nZXRTZWxlY3RlZE51bWJlcnNLZXkBBQFpCQEXbGlzdEludENvbXByZXNzVG9TdHJpbmcBBRJzZWxlY3RlZE51bWJlckJldHMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEVJfZ2V0RGlyZWN0aW9uS2V5AQUBaQUMYmV0RGlyZWN0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5SX2dldFN0YXR1c0tleQEFAWkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiB8IHN0YXR1czogY29tbWl0IHwgcmV2ZWFsQmxvY2s6IAkApAMBCQBkAgUGaGVpZ2h0AAECDiB8IGJldEFtb3VudDogCQCkAwEFCWJldEFtb3VudAIUIHwgc2VsZWN0ZWROdW1iZXJzOiAJARdsaXN0SW50Q29tcHJlc3NUb1N0cmluZwEFEnNlbGVjdGVkTnVtYmVyQmV0cwUDbmlsAWkBD1JvdWxldHRlX3JldmVhbAAEDGNvbW1pdEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQERQGV4dHJOYXRpdmUoMTA1NSkBCQELUl9nZXRCZXRLZXkBBQFpAg1CZXQgbm90IGZvdW5kBAliZXRBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBEVJfZ2V0QmV0QW1vdW50S2V5AQUBaQIUQmV0IGFtb3VudCBub3QgZm91bmQEEnNlbGVjdGVkTnVtYmVyc1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEXUl9nZXRTZWxlY3RlZE51bWJlcnNLZXkBBQFpAhpTZWxlY3RlZCBudW1iZXJzIG5vdCBmb3VuZAQJZGlyZWN0aW9uCQETdmFsdWVPckVycm9yTWVzc2FnZQIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARFSX2dldERpcmVjdGlvbktleQEFAWkCE0RpcmVjdGlvbiBub3QgZm91bmQED3NlbGVjdGVkTnVtYmVycwkBGXN0cmluZ0RlY29tcHJlc3NUb0xpc3RJbnQBBRJzZWxlY3RlZE51bWJlcnNTdHIDCQBmAgUMY29tbWl0SGVpZ2h0BQZoZWlnaHQJAAIBCQCsAgIJAKwCAgIFV2FpdCAJAKQDAQkAZQIFDGNvbW1pdEhlaWdodAUGaGVpZ2h0AhkgYmxvY2tzIHRvIHJldmVhbCB0aGlzIGlkBAxyYW5kb21OdW1iZXIJAQ9nZXRSYW5kb21SdWxsZXQBBQxjb21taXRIZWlnaHQEDXdpbm5pbmdBbW91bnQJAGgCCQBpAgkBCm51bVRvV2F2ZXMBCQEPUl9XaW5DYWxjdWxhdG9yBAUMcmFuZG9tTnVtYmVyBQliZXRBbW91bnQFD3NlbGVjdGVkTnVtYmVycwUJZGlyZWN0aW9uAAQAAwQGbG9nU3RyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhB8IGNvbW1pdEhlaWdodDogCQCkAwEFDGNvbW1pdEhlaWdodAIOIHwgYmV0QW1vdW50OiAJAKQDAQUJYmV0QW1vdW50AhIgfCB3aW5uaW5nQW1vdW50OiAJAKQDAQUNd2lubmluZ0Ftb3VudAIUIHwgc2VsZWN0ZWROdW1iZXJzOiAJARdsaXN0SW50Q29tcHJlc3NUb1N0cmluZwEFD3NlbGVjdGVkTnVtYmVycwIRIHwgcmFuZG9tTnVtYmVyOiAJAKQDAQUMcmFuZG9tTnVtYmVyBAlzdGF0dXNTdHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICInwgc3RhdHVzOiByZXZlYWwgfCB3aW5uaW5nQW1vdW50OiAJAKQDAQUNd2lubmluZ0Ftb3VudAIUIHwgc2VsZWN0ZWROdW1iZXJzOiAJARdsaXN0SW50Q29tcHJlc3NUb1N0cmluZwEFD3NlbGVjdGVkTnVtYmVycwIRIHwgcmFuZG9tTnVtYmVyOiAJAKQDAQUMcmFuZG9tTnVtYmVyAg4gfCBiZXRBbW91bnQ6IAkApAMBBQliZXRBbW91bnQCFCB8IHNlbGVjdGVkTnVtYmVyczogCQEXbGlzdEludENvbXByZXNzVG9TdHJpbmcBBQ9zZWxlY3RlZE51bWJlcnMDCQBmAgUNd2lubmluZ0Ftb3VudAAACQDMCAIJAQtEZWxldGVFbnRyeQEJAQtSX2dldEJldEtleQEFAWkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEVJfZ2V0QmV0QW1vdW50S2V5AQUBaQkAzAgCCQELRGVsZXRlRW50cnkBCQEXUl9nZXRTZWxlY3RlZE51bWJlcnNLZXkBBQFpCQDMCAIJAQtEZWxldGVFbnRyeQEJARFSX2dldERpcmVjdGlvbktleQEFAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQ13aW5uaW5nQW1vdW50BQR1bml0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtSX2dldExvZ0tleQEFAWkFBmxvZ1N0cgkAzAgCCQELU3RyaW5nRW50cnkCCQEOUl9nZXRTdGF0dXNLZXkBBQFpBQlzdGF0dXNTdHIFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBCQELUl9nZXRCZXRLZXkBBQFpCQDMCAIJAQtEZWxldGVFbnRyeQEJARFSX2dldEJldEFtb3VudEtleQEFAWkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBF1JfZ2V0U2VsZWN0ZWROdW1iZXJzS2V5AQUBaQkAzAgCCQELRGVsZXRlRW50cnkBCQERUl9nZXREaXJlY3Rpb25LZXkBBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQELUl9nZXRMb2dLZXkBBQFpBQ13aW5uaW5nQW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQtSX2dldExvZ0tleQEFAWkFBmxvZ1N0cgkAzAgCCQELU3RyaW5nRW50cnkCCQEOUl9nZXRTdGF0dXNLZXkBBQFpBQlzdGF0dXNTdHIFA25pbAFpARFMdWNreVdoZWVsX2NvbW1pdAADCQEBIQEJAQtpc1BheW1lbnRPawIFAWkAAQkAAgECHVdyb25nIHBheW1lbnQgYW1vdW50IG9yIGFzc2V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMTFdfZ2V0QmV0S2V5AQUBaQkAZAIFBmhlaWdodAABCQDMCAIJAQtEZWxldGVFbnRyeQEJARVMV19nZXRSYW5kb21OdW1iZXJLZXkBBQFpCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxMV19nZXRXb25LZXkBBQFpCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9MV19nZXRTdGF0dXNLZXkBBQFpAhB8IHN0YXR1czogY29tbWl0BQNuaWwBaQERTHVja3lXaGVlbF9yZXZlYWwABAxjb21taXRIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDExXX2dldEJldEtleQEFAWkCDUJldCBub3QgZm91bmQDCQBmAgUMY29tbWl0SGVpZ2h0BQZoZWlnaHQJAAIBCQCsAgIJAKwCAgIFV2FpdCAJAKQDAQkAZQIFDGNvbW1pdEhlaWdodAUGaGVpZ2h0AhkgYmxvY2tzIHRvIHJldmVhbCB0aGlzIGlkBAtyZXZlYWxCbG9jawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDtBwEFDGNvbW1pdEhlaWdodAIRdW5leGNwZWN0ZWQgZXJyb3IEA3ZyZgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAULcmV2ZWFsQmxvY2sDdnJmAhF1bmV4Y3BlY3RlZCBlcnJvcgQKcmFuZG9tSGFzaAkA9wMBCQEFdmFsdWUBBQN2cmYEDHJldmVhbEJsb2NrMgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDtBwEJAGUCBQxjb21taXRIZWlnaHQAAQIRdW5leGNwZWN0ZWQgZXJyb3IEBHZyZjIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFC3JldmVhbEJsb2NrA3ZyZgIRdW5leGNwZWN0ZWQgZXJyb3IEC3JhbmRvbUhhc2gyCQD3AwEJAQV2YWx1ZQEFA3ZyZgQGcmFuZG9tCQBkAgkAsgkCBQpyYW5kb21IYXNoABAJAGkCCQCyCQIFCnJhbmRvbUhhc2gACgkAsgkCBQpyYW5kb21IYXNoAAUEDHJhbmRvbU51bWJlcgkAagIFBnJhbmRvbQAMBA13aW5uaW5nQW1vdW50CQEOTFdfd2hhdFVzZXJXb24BBQxyYW5kb21OdW1iZXIECXN0YXR1c1N0cgkArAICCQCsAgIJAKwCAgkArAICAiJ8IHN0YXR1czogcmV2ZWFsIHwgd2lubmluZ0Ftb3VudDogCQCkAwEFDXdpbm5pbmdBbW91bnQCFCB8IHNlbGVjdGVkTnVtYmVyczogAhEgfCByYW5kb21OdW1iZXI6IAkApAMBBQxyYW5kb21OdW1iZXIDCQBmAgUNd2lubmluZ0Ftb3VudAAACQDMCAIJAQtEZWxldGVFbnRyeQEJAQxMV19nZXRCZXRLZXkBBQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUNd2lubmluZ0Ftb3VudAUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDExXX2dldFdvbktleQEFAWkFDXdpbm5pbmdBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARVMV19nZXRSYW5kb21OdW1iZXJLZXkBBQFpBQxyYW5kb21OdW1iZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD0xXX2dldFN0YXR1c0tleQEFAWkFCXN0YXR1c1N0cgUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxMV19nZXRCZXRLZXkBBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEMTFdfZ2V0V29uS2V5AQUBaQUNd2lubmluZ0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFUxXX2dldFJhbmRvbU51bWJlcktleQEFAWkFDHJhbmRvbU51bWJlcgkAzAgCCQELU3RyaW5nRW50cnkCCQEPTFdfZ2V0U3RhdHVzS2V5AQUBaQUJc3RhdHVzU3RyBQNuaWwA0X25sA==", "height": 2619929, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 61AFLwgNRDN5WqZv8pjgu8DqfoYuU2NrtR1ogwNv45ud Next: 9a1yCx4PGeQeTYRdSTC88Aci8MEpkZzvXSP2UuTU6ER9 Diff:
OldNewDifferences
215215 then throw((("Wait " + toString((commitHeight - height))) + " blocks to reveal this id"))
216216 else {
217217 let randomNumber = getRandomRullet(commitHeight)
218- let winningAmount = numToWaves(R_WinCalculator(randomNumber, betAmount, selectedNumbers, direction))
218+ let winningAmount = ((numToWaves(R_WinCalculator(randomNumber, betAmount, selectedNumbers, direction)) / 4) * 3)
219219 let logStr = ((((((((("| commitHeight: " + toString(commitHeight)) + " | betAmount: ") + toString(betAmount)) + " | winningAmount: ") + toString(winningAmount)) + " | selectedNumbers: ") + listIntCompressToString(selectedNumbers)) + " | randomNumber: ") + toString(randomNumber))
220220 let statusStr = ((((((((("| status: reveal | winningAmount: " + toString(winningAmount)) + " | selectedNumbers: ") + listIntCompressToString(selectedNumbers)) + " | randomNumber: ") + toString(randomNumber)) + " | betAmount: ") + toString(betAmount)) + " | selectedNumbers: ") + listIntCompressToString(selectedNumbers))
221221 if ((winningAmount > 0))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func numToWaves (num) = (num * 100000000)
55
66
77 func isPaymentOk (i,sum) = {
88 let acceptableAssetId = base58'WAVES'
99 let p = i.payments[0]
1010 if ((p.amount >= numToWaves(sum)))
1111 then (p.assetId == unit)
1212 else false
1313 }
1414
1515
1616 func mapIntToStr (accum,next) = toString(next) :: accum
1717
1818
1919 func mapStrToInt (accum,next) = parseIntValue(next) :: accum
2020
2121
2222 func mapIntToSum (accum,next) = (accum + next)
2323
2424
2525 func listIntToSum (arr) = {
2626 let $l = arr
2727 let $s = size($l)
2828 let $acc0 = 0
2929 func $f0_1 ($a,$i) = if (($i >= $s))
3030 then $a
3131 else mapIntToSum($a, $l[$i])
3232
3333 func $f0_2 ($a,$i) = if (($i >= $s))
3434 then $a
3535 else throw("List size exceeds 50")
3636
3737 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
3838 }
3939
4040
4141 func listIntToListString (arr) = {
4242 let $l = arr
4343 let $s = size($l)
4444 let $acc0 = nil
4545 func $f0_1 ($a,$i) = if (($i >= $s))
4646 then $a
4747 else mapIntToStr($a, $l[$i])
4848
4949 func $f0_2 ($a,$i) = if (($i >= $s))
5050 then $a
5151 else throw("List size exceeds 50")
5252
5353 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
5454 }
5555
5656
5757 func listStringToListIng (arr) = {
5858 let $l = arr
5959 let $s = size($l)
6060 let $acc0 = nil
6161 func $f0_1 ($a,$i) = if (($i >= $s))
6262 then $a
6363 else mapStrToInt($a, $l[$i])
6464
6565 func $f0_2 ($a,$i) = if (($i >= $s))
6666 then $a
6767 else throw("List size exceeds 50")
6868
6969 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
7070 }
7171
7272
7373 func listStringCompressToString (arr) = makeString(arr, "|")
7474
7575
7676 func stringDecompressToListString (str) = split(str, "|")
7777
7878
7979 func listIntCompressToString (arr) = makeString(listIntToListString(arr), "|")
8080
8181
8282 func stringDecompressToListInt (arrStr) = listStringToListIng(split(arrStr, "|"))
8383
8484
8585 func getRandom (commitHeight) = {
8686 let revealBlock = valueOrErrorMessage(blockInfoByHeight(commitHeight), "unexcpected error")
8787 let vrf = valueOrErrorMessage(revealBlock.vrf, "unexcpected error")
8888 let randomHash = sha256(value(vrf))
8989 let hash = toInt(randomHash, 16)
9090 (hash % 37)
9191 }
9292
9393
9494 func getRandomRullet (commitHeight) = {
9595 let randomHash = sha256((value(value(blockInfoByHeight(commitHeight)).vrf) + toBytes(commitHeight)))
9696 let hashInt = toInt(randomHash, 24)
9797 (hashInt % 37)
9898 }
9999
100100
101101 func R_WinCalculator (randomNumber,betAmount,selectedNumberBets,betDirection) = {
102102 let RED_SECTORS = [32, 19, 21, 25, 34, 27, 36, 30, 23, 5, 16, 1, 14, 9, 18, 7, 12, 3]
103103 let BLACK_SECTORS = [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35]
104104 if ((betDirection == "red"))
105105 then if (containsElement(RED_SECTORS, randomNumber))
106106 then (betAmount * 2)
107107 else 0
108108 else if ((betDirection == "black"))
109109 then if (containsElement(BLACK_SECTORS, randomNumber))
110110 then (betAmount * 2)
111111 else 0
112112 else if ((betDirection == "odd"))
113113 then if (((randomNumber % 2) != 0))
114114 then (betAmount * 2)
115115 else 0
116116 else if ((betDirection == "even"))
117117 then if (((randomNumber % 2) == 0))
118118 then (betAmount * 2)
119119 else 0
120120 else if (if ((size(selectedNumberBets) == 1))
121121 then (betDirection == "num")
122122 else false)
123123 then if ((selectedNumberBets[0] == randomNumber))
124124 then (betAmount * 36)
125125 else 0
126126 else if ((size(selectedNumberBets) == 2))
127127 then if (containsElement(selectedNumberBets, randomNumber))
128128 then (betAmount * 18)
129129 else 0
130130 else if ((size(selectedNumberBets) == 3))
131131 then if (containsElement(selectedNumberBets, randomNumber))
132132 then (betAmount * 12)
133133 else 0
134134 else if ((size(selectedNumberBets) == 4))
135135 then if (containsElement(selectedNumberBets, randomNumber))
136136 then (betAmount * 9)
137137 else 0
138138 else if ((size(selectedNumberBets) == 12))
139139 then if (containsElement(selectedNumberBets, randomNumber))
140140 then (betAmount * 3)
141141 else 0
142142 else if ((size(selectedNumberBets) == 18))
143143 then if (containsElement(selectedNumberBets, randomNumber))
144144 then (betAmount * 2)
145145 else 0
146146 else 0
147147 }
148148
149149
150150 func R_getBetKey (i) = ("bet_Roulette_" + toString(i.caller))
151151
152152
153153 func R_getBetAmountKey (i) = ("betAmount_Roulette_" + toString(i.caller))
154154
155155
156156 func R_getSelectedNumbersKey (i) = ("selectedNumbers_Roulette_" + toString(i.caller))
157157
158158
159159 func R_getDirectionKey (i) = ("direction_Roulette_" + toString(i.caller))
160160
161161
162162 func R_getLogKey (i) = ((("log_Roulette_" + toString(i.caller)) + "_") + toBase58String(i.transactionId))
163163
164164
165165 func R_getStatusKey (i) = ("status_Roulette_" + toString(i.caller))
166166
167167
168168 func LW_getBetKey (i) = ("bet_LuckyWheel_" + toString(i.caller))
169169
170170
171171 func LW_getWonKey (i) = ("won_LuckyWheel_" + toString(i.caller))
172172
173173
174174 func LW_getRandomNumberKey (i) = ("randomNumber_LuckyWheel_" + toString(i.caller))
175175
176176
177177 func LW_getLogKey (i) = ((("log_LuckyWheel_" + toString(i.caller)) + "_") + toBase58String(i.transactionId))
178178
179179
180180 func LW_whatUserWon (value) = match value {
181181 case _ =>
182182 if ((1 == $match0))
183183 then numToWaves(2)
184184 else if ((3 == $match0))
185185 then numToWaves(1)
186186 else if ((7 == $match0))
187187 then numToWaves(6)
188188 else if ((9 == $match0))
189189 then numToWaves(1)
190190 else 0
191191 }
192192
193193
194194 func LW_getStatusKey (i) = ("status_Roulette_" + toString(i.caller))
195195
196196
197197 @Callable(i)
198198 func Roulette_commit (betAmount,selectedNumberBets,betDirection) = {
199199 let p = i.payments[0]
200200 if (!(isPaymentOk(i, betAmount)))
201201 then throw("Wrong payment amount or asset!")
202202 else [IntegerEntry(R_getBetKey(i), (height + 1)), IntegerEntry(R_getBetAmountKey(i), betAmount), StringEntry(R_getSelectedNumbersKey(i), listIntCompressToString(selectedNumberBets)), StringEntry(R_getDirectionKey(i), betDirection), StringEntry(R_getStatusKey(i), ((((("| status: commit | revealBlock: " + toString((height + 1))) + " | betAmount: ") + toString(betAmount)) + " | selectedNumbers: ") + listIntCompressToString(selectedNumberBets)))]
203203 }
204204
205205
206206
207207 @Callable(i)
208208 func Roulette_reveal () = {
209209 let commitHeight = valueOrErrorMessage(getIntegerValue(R_getBetKey(i)), "Bet not found")
210210 let betAmount = valueOrErrorMessage(getIntegerValue(R_getBetAmountKey(i)), "Bet amount not found")
211211 let selectedNumbersStr = valueOrErrorMessage(getStringValue(R_getSelectedNumbersKey(i)), "Selected numbers not found")
212212 let direction = valueOrErrorMessage(getStringValue(R_getDirectionKey(i)), "Direction not found")
213213 let selectedNumbers = stringDecompressToListInt(selectedNumbersStr)
214214 if ((commitHeight > height))
215215 then throw((("Wait " + toString((commitHeight - height))) + " blocks to reveal this id"))
216216 else {
217217 let randomNumber = getRandomRullet(commitHeight)
218- let winningAmount = numToWaves(R_WinCalculator(randomNumber, betAmount, selectedNumbers, direction))
218+ let winningAmount = ((numToWaves(R_WinCalculator(randomNumber, betAmount, selectedNumbers, direction)) / 4) * 3)
219219 let logStr = ((((((((("| commitHeight: " + toString(commitHeight)) + " | betAmount: ") + toString(betAmount)) + " | winningAmount: ") + toString(winningAmount)) + " | selectedNumbers: ") + listIntCompressToString(selectedNumbers)) + " | randomNumber: ") + toString(randomNumber))
220220 let statusStr = ((((((((("| status: reveal | winningAmount: " + toString(winningAmount)) + " | selectedNumbers: ") + listIntCompressToString(selectedNumbers)) + " | randomNumber: ") + toString(randomNumber)) + " | betAmount: ") + toString(betAmount)) + " | selectedNumbers: ") + listIntCompressToString(selectedNumbers))
221221 if ((winningAmount > 0))
222222 then [DeleteEntry(R_getBetKey(i)), DeleteEntry(R_getBetAmountKey(i)), DeleteEntry(R_getSelectedNumbersKey(i)), DeleteEntry(R_getDirectionKey(i)), ScriptTransfer(i.caller, winningAmount, unit), StringEntry(R_getLogKey(i), logStr), StringEntry(R_getStatusKey(i), statusStr)]
223223 else [DeleteEntry(R_getBetKey(i)), DeleteEntry(R_getBetAmountKey(i)), DeleteEntry(R_getSelectedNumbersKey(i)), DeleteEntry(R_getDirectionKey(i)), IntegerEntry(R_getLogKey(i), winningAmount), StringEntry(R_getLogKey(i), logStr), StringEntry(R_getStatusKey(i), statusStr)]
224224 }
225225 }
226226
227227
228228
229229 @Callable(i)
230230 func LuckyWheel_commit () = if (!(isPaymentOk(i, 1)))
231231 then throw("Wrong payment amount or asset")
232232 else [IntegerEntry(LW_getBetKey(i), (height + 1)), DeleteEntry(LW_getRandomNumberKey(i)), DeleteEntry(LW_getWonKey(i)), StringEntry(LW_getStatusKey(i), "| status: commit")]
233233
234234
235235
236236 @Callable(i)
237237 func LuckyWheel_reveal () = {
238238 let commitHeight = valueOrErrorMessage(getIntegerValue(LW_getBetKey(i)), "Bet not found")
239239 if ((commitHeight > height))
240240 then throw((("Wait " + toString((commitHeight - height))) + " blocks to reveal this id"))
241241 else {
242242 let revealBlock = valueOrErrorMessage(blockInfoByHeight(commitHeight), "unexcpected error")
243243 let vrf = valueOrErrorMessage(revealBlock.vrf, "unexcpected error")
244244 let randomHash = sha256(value(vrf))
245245 let revealBlock2 = valueOrErrorMessage(blockInfoByHeight((commitHeight - 1)), "unexcpected error")
246246 let vrf2 = valueOrErrorMessage(revealBlock.vrf, "unexcpected error")
247247 let randomHash2 = sha256(value(vrf))
248248 let random = (toInt(randomHash, 16) + (toInt(randomHash, 10) / toInt(randomHash, 5)))
249249 let randomNumber = (random % 12)
250250 let winningAmount = LW_whatUserWon(randomNumber)
251251 let statusStr = (((("| status: reveal | winningAmount: " + toString(winningAmount)) + " | selectedNumbers: ") + " | randomNumber: ") + toString(randomNumber))
252252 if ((winningAmount > 0))
253253 then [DeleteEntry(LW_getBetKey(i)), ScriptTransfer(i.caller, winningAmount, unit), IntegerEntry(LW_getWonKey(i), winningAmount), IntegerEntry(LW_getRandomNumberKey(i), randomNumber), StringEntry(LW_getStatusKey(i), statusStr)]
254254 else [DeleteEntry(LW_getBetKey(i)), IntegerEntry(LW_getWonKey(i), winningAmount), IntegerEntry(LW_getRandomNumberKey(i), randomNumber), StringEntry(LW_getStatusKey(i), statusStr)]
255255 }
256256 }
257257
258258

github/deemru/w8io/03bedc9 
45.05 ms