tx · 3tBJZDdYHHDHhxaTUtpP7YkTPMU4LoBhxtW79WyQpNuR

3NDAj53R4NmVTZzKy6WwbExz9oFfNFAh5w4:  -0.10010000 Waves

2022.05.05 02:43 [2037621] smart account 3NDAj53R4NmVTZzKy6WwbExz9oFfNFAh5w4 > SELF 0.00000000 Waves

{ "type": 13, "id": "3tBJZDdYHHDHhxaTUtpP7YkTPMU4LoBhxtW79WyQpNuR", "fee": 10010000, "feeAssetId": null, "timestamp": 1651707903584, "version": 2, "chainId": 84, "sender": "3NDAj53R4NmVTZzKy6WwbExz9oFfNFAh5w4", "senderPublicKey": "FfxSTJBTKPhYbdzi7vbwFE3EvTcVLHNeaS9Af6Vtazuy", "proofs": [ "BAiUfZTQn8GgSkAq4DEcSBaA9pEZFQjp6C5tJQQP5SxPn4m9Lfz177NFMs9X8WGHwkddnQHLqLr1VquamxzRCyM" ], "script": "base64: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AAAAAAMJAARMAAAAAgAAAAAAAAAABgkABEwAAAACAAAAAAAAAAAJCQAETAAAAAIAAAAAAAAAAAwJAARMAAAAAgAAAAAAAAAADwkABEwAAAACAAAAAAAAAAASCQAETAAAAAIAAAAAAAAAABUJAARMAAAAAgAAAAAAAAAAGAkABEwAAAACAAAAAAAAAAAbCQAETAAAAAIAAAAAAAAAAB4JAARMAAAAAgAAAAAAAAAAIQkABEwAAAACAAAAAAAAAAAkBQAAAANuaWwAAAAAE2dhbWVNYXN0ZXJQdWJsaWNLZXkJAAJZAAAAAQIAAAAsN2phZkdCTHhNMjdGN0dqVldMbWZQelZjVXd2Rm9MOVhoZU55dE5WTTlIaEgAAAAAEGdhbWVDb3VudGVyTGFiZWwCAAAADkdfR0FNRVNDT1VOVEVSAAAAABJnYW1lVG90YWxCZXRzTGFiZWwCAAAAC0dfVE9UQUxCRVRTAAAAABZnYW1lUHJvY2Vzc2VkQmV0c0xhYmVsAgAAAA9HX1BST0NFU1NFREJFVFMAAAAAD2dhbWVNaW5CZXRMYWJlbAIAAAAIR19NSU5CRVQAAAAAD2dhbWVNYXhCZXRMYWJlbAIAAAAIR19NQVhCRVQAAAAAEmdhbWVSU0FQdWJsaWNMYWJlbAIAAAALR19SU0FQVUJMSUMAAAAAGGdhbWVNYXN0ZXJQdWJsaWNLZXlMYWJlbAIAAAAXR19HQU1FTUFTVEVSX1BVQkxJQ19LRVkAAAAADmdhbWVUb2tlbkxhYmVsAgAAAAlHX1RPS0VOSUQBAAAAD2dhbWVzR2V0Q291bnRlcgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAQZ2FtZUNvdW50ZXJMYWJlbAEAAAAOZ2FtZXNUb3RhbEJldHMAAAAACQAEGgAAAAIFAAAABHRoaXMFAAAAEmdhbWVUb3RhbEJldHNMYWJlbAEAAAASZ2FtZXNQcm9jZXNzZWRCZXRzAAAAAAkABBoAAAACBQAAAAR0aGlzBQAAABZnYW1lUHJvY2Vzc2VkQmV0c0xhYmVsAQAAAAtnYW1lc01pbkJldAAAAAAJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAD2dhbWVNaW5CZXRMYWJlbAEAAAALZ2FtZXNNYXhCZXQAAAAACQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA9nYW1lTWF4QmV0TGFiZWwBAAAAE2dhbWVSU0FQdWJsaWNTdHJpbmcAAAAACQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAABJnYW1lUlNBUHVibGljTGFiZWwBAAAADWdhbWVSU0FQdWJsaWMAAAAACQACWwAAAAEJAQAAABNnYW1lUlNBUHVibGljU3RyaW5nAAAAAAEAAAAJZ2FtZVRva2VuAAAAAAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAA5nYW1lVG9rZW5MYWJlbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAd0b2tlbklkBQAAAAckbWF0Y2gwAwkAAAAAAAACBQAAAAd0b2tlbklkAgAAAAAFAAAABHVuaXQJAAJZAAAAAQUAAAAHdG9rZW5JZAUAAAAEdW5pdAEAAAAPYmV0RGV0YWlsc0xhYmVsAAAAAQAAAAliZXROdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJCXwkAAaQAAAABBQAAAAliZXROdW1iZXICAAAAC19CZXREZXRhaWxzAQAAABBiZXRXaW5TdGF0ZUxhYmVsAAAAAQAAAAliZXROdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJCXwkAAaQAAAABBQAAAAliZXROdW1iZXICAAAACV9XaW5TdGF0ZQEAAAARYmV0V2luQW1vdW50TGFiZWwAAAABAAAACWJldE51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkJfCQABpAAAAAEFAAAACWJldE51bWJlcgIAAAAKX1dpbkFtb3VudAEAAAAMYmV0R2FtZUxhYmVsAAAAAQAAAAliZXROdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJCXwkAAaQAAAABBQAAAAliZXROdW1iZXICAAAABV9HYW1lAQAAAA5iZXRQYXlvdXRMYWJlbAAAAAEAAAAJYmV0TnVtYmVyCQABLAAAAAIJAAEsAAAAAgIAAAACQl8JAAGkAAAAAQUAAAAJYmV0TnVtYmVyAgAAAAdfUGF5b3V0AQAAABBiZXREZXRhaWxzUmVzdWx0AAAAAQAAAAliZXROdW1iZXIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAD2JldERldGFpbHNMYWJlbAAAAAEFAAAACWJldE51bWJlcgEAAAAUYmV0R2V0V2luU3RhdGVSZXN1bHQAAAABAAAACWJldE51bWJlcgkABB0AAAACBQAAAAR0aGlzCQEAAAAQYmV0V2luU3RhdGVMYWJlbAAAAAEFAAAACWJldE51bWJlcgEAAAAVYmV0R2V0V2luQW1vdW50UmVzdWx0AAAAAQAAAAliZXROdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEWJldFdpbkFtb3VudExhYmVsAAAAAQUAAAAJYmV0TnVtYmVyAQAAAA1iZXRHYW1lUmVzdWx0AAAAAQAAAAliZXROdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAADGJldEdhbWVMYWJlbAAAAAEFAAAACWJldE51bWJlcgEAAAAPYmV0UGF5b3V0UmVzdWx0AAAAAQAAAAliZXROdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAADmJldFBheW91dExhYmVsAAAAAQUAAAAJYmV0TnVtYmVyAQAAAA5nYW1lU3RhdGVMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAABl9TdGF0ZQEAAAAUZ2FtZVN0YXJ0SGVpZ2h0TGFiZWwAAAABAAAACmdhbWVOdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAxfU3RhcnRIZWlnaHQBAAAAEmdhbWVFbmRIZWlnaHRMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAACl9FbmRIZWlnaHQBAAAAD2dhbWVTdW1TaGFMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAB19TdW1TaGEBAAAAD2dhbWVSZXN1bHRMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAB19SZXN1bHQBAAAAE2dhbWVSYW5kb21IYXNoTGFiZWwAAAABAAAACmdhbWVOdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAtfUmFuZG9tSGFzaAEAAAAMZ2FtZUdldFN0YXRlAAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAAA5nYW1lU3RhdGVMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIBAAAAEmdhbWVHZXRTdGFydEhlaWdodAAAAAEAAAAKZ2FtZU51bWJlcgkABBoAAAACBQAAAAR0aGlzCQEAAAAUZ2FtZVN0YXJ0SGVpZ2h0TGFiZWwAAAABBQAAAApnYW1lTnVtYmVyAQAAABBnYW1lR2V0RW5kSGVpZ2h0AAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAABJnYW1lRW5kSGVpZ2h0TGFiZWwAAAABBQAAAApnYW1lTnVtYmVyAQAAAA1nYW1lR2V0U3VtU2hhAAAAAQAAAApnYW1lTnVtYmVyCQAEHQAAAAIFAAAABHRoaXMJAQAAAA9nYW1lU3VtU2hhTGFiZWwAAAABBQAAAApnYW1lTnVtYmVyAQAAAA1nYW1lR2V0UmVzdWx0AAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAAA9nYW1lUmVzdWx0TGFiZWwAAAABBQAAAApnYW1lTnVtYmVyAQAAAA9jaGVja1Blcm1pc3Npb24AAAABAAAAD2NhbGxlclB1YmxpY0tleQkBAAAAAiE9AAAAAgUAAAAPY2FsbGVyUHVibGljS2V5BQAAABNnYW1lTWFzdGVyUHVibGljS2V5AQAAAA9nYW1lSW5CYXNlVG9rZW4AAAABAAAABXRva2VuCQAAAAAAAAIFAAAABXRva2VuBQAAAAR1bml0AQAAAAtnZXRNdWx0aXBsZQAAAAEAAAAMbnVtYmVyUGxhY2VkAwkAAAAAAAACBQAAAAxudW1iZXJQbGFjZWQAAAAAAAAAAAEAAAAAAAAAACQDCQAAAAAAAAIFAAAADG51bWJlclBsYWNlZAAAAAAAAAAAAgAAAAAAAAAAEgMJAAAAAAAA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QU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FSQUFNSUlCQ3dLQ0FRSUErQ3Biek1CS3BxKzdWYXJTREhMVzB3UVNvaDJMVGJnbDFyQWhmcnVaR0NqdDZNTzRvMXYxaUxxS3lOSDNGSnN2d2xMVXFtcUU3RTJXbDdMYklQQTI2UHhPMlhDRGZ2ajBPV3A3Y0VKa1VCRWl5UFlDbitpdVBYVVB3dWRvRmdNNFdIZjBJUGJESjJPNk9nelFsQkJtTnU2T3dyN25hSVRpSnJQQXZha1BnQWRtVVB2NHJPemN1NkJSMFQ4R3dzendwcnZ3V1psS0Y2QWQwMG9tTEZEbXg2Nkh2QkU1MXNSQmlYSVJiSm5qRGhsb3BpemU0TG9SMUZJclFhQXUxc2ZzNWJFSExBMzNqdkt5Ym5lK0lEYXdDc2lJTlpZZFBaVjFXV2NVUkMrWEFGZkJpWUN3NFBZeWd1eGFCUkhvdHpMYzJkT3NCVjFIRE5JakxLVm9Sa255dDUwQ0F3RUFBUT09CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADmdhbWVUb2tlbkxhYmVsAgAAACw5Z1RXbkhzdGFBa2hEN2hFR0JxTmRnY0FydTU4NzJkOFhmMVFtb1ByejVpegUAAAADbmlsAAAAAWkBAAAACXN0YXJ0R2FtZQAAAAIAAAAKcmFuZG9tSGFzaAAAAAxibG9ja0luUm91bmQDCQEAAAAPY2hlY2tQZXJtaXNzaW9uAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAE3N0YXJ0R2FtZV9GT1JCQklERU4EAAAAByRtYXRjaDAJAQAAAA9nYW1lc0dldENvdW50ZXIAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAADEdBTUVTQ09VTlRFUgUAAAAHJG1hdGNoMAQAAAAObmV3R2FtZUNvdW50ZXIJAABkAAAAAgUAAAAMR0FNRVNDT1VOVEVSAAAAAAAAAAABAwkAAGYAAAACBQAAAAxHQU1FU0NPVU5URVIAAAAAAAAAAAAEAAAAByRtYXRjaDEJAQAAAAxnYW1lR2V0U3RhdGUAAAABBQAAAAxHQU1FU0NPVU5URVIDCQAAAQAAAAIFAAAAByRtYXRjaDECAAAAA0ludAQAAAAJZ2FtZVN0YXRlBQAAAAckbWF0Y2gxAwkAAAAAAAACBQAAAAlnYW1lU3RhdGUAAAAAAAAAAAAJAAACAAAAAQIAAAAfTGFzdCBnYW1lIGhhcyBub3QgZmluaXNoZWQgeWV0LgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAQZ2FtZUNvdW50ZXJMYWJlbAUAAAAObmV3R2FtZUNvdW50ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABRnYW1lU3RhcnRIZWlnaHRMYWJlbAAAAAEFAAAADm5ld0dhbWVDb3VudGVyCAUAAAAJbGFzdEJsb2NrAAAABmhlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEmdhbWVFbmRIZWlnaHRMYWJlbAAAAAEFAAAADm5ld0dhbWVDb3VudGVyCQAAZAAAAAIFAAAABmhlaWdodAUAAAAMYmxvY2tJblJvdW5kCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOZ2FtZVN0YXRlTGFiZWwAAAABBQAAAA5uZXdHYW1lQ291bnRlcgAAAAAAAAAAAAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPZ2FtZVN1bVNoYUxhYmVsAAAAAQUAAAAObmV3R2FtZUNvdW50ZXIJAAJYAAAAAQkAAfcAAAABCQACWwAAAAEFAAAACnJhbmRvbUhhc2gFAAAAA25pbAkAAAIAAAABAgAAABVHYW1lIHN0YXRlIG5vdCBmb3VuZC4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGdhbWVDb3VudGVyTGFiZWwFAAAADm5ld0dhbWVDb3VudGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAUZ2FtZVN0YXJ0SGVpZ2h0TGFiZWwAAAABBQAAAA5uZXdHYW1lQ291bnRlcggFAAAACWxhc3RCbG9jawAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJnYW1lRW5kSGVpZ2h0TGFiZWwAAAABBQAAAA5uZXdHYW1lQ291bnRlcgkAAGQAAAACBQAAAAZoZWlnaHQFAAAADGJsb2Nr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AAIAAAANcGFyYW1ldGVyTmFtZQAAAA5wYXJhbWV0ZXJWYWx1ZQMJAQAAAA9jaGVja1Blcm1pc3Npb24AAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAATc2V0TWluQmV0X0ZPUkJCSURFTgMJAAAAAAAAAgUAAAANcGFyYW1ldGVyTmFtZQIAAAAJY2hhbmdlTWF4BAAAAAxtYXhpbXVtVmFsdWUJAQAAAA1wYXJzZUludFZhbHVlAAAAAQUAAAAOcGFyYW1ldGVyVmFsdWUEAAAADG1pbmltdW1WYWx1ZQkBAAAAC2dhbWVzTWluQmV0AAAAAAMJAABmAAAAAgAAAAAAAAAAAAUAAAAMbWF4aW11bVZhbHVlCQAAAgAAAAECAAAAHHZhbHVlIGNhbm5vdCBiZSBsb3dlciB0aGFuIDADCQAAZgAAAAIFAAAADG1pbmltdW1WYWx1ZQUAAAAMbWF4aW11bVZhbHVlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACR2YWx1ZSBjYW5ub3QgYmUgbG93ZXIgdGhhbiBtaW4gYmV0ICgJAAGkAAAAAQUAAAAMbWluaW11bVZhbHVlAgAAAAEpCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9nYW1lTWF4QmV0TGFiZWwFAAAADG1heGltdW1WYWx1ZQUAAAADbmlsAwkAAAAAAAACBQAAAA1wYXJhbWV0ZXJOYW1lAgAAAAljaGFuZ2VNaW4EAAAADG1heGltdW1WYWx1ZQkBAAAAC2dhbWVzTWF4QmV0AAAAAAQAAAAMbWluaW11bVZhbHVlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAADnBhcmFtZXRlclZhbHVlAwkAAGYAAAACAAAAAAAAAAAABQAAAAxtaW5pbXVtVmFsdWUJAAACAAAAAQIAAAAcdmFsdWUgY2Fubm90IGJlIGxvd2VyIHRoYW4gMAMJAABmAAAAAgUAAAAMbWluaW11bVZhbHVlBQAAAAxtYXhpbXVtVmFsdWUJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAJnZhbHVlIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWluIGJldCAoCQABpAAAAAEFAAAADG1heGltdW1WYWx1ZQIAAAABKQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPZ2FtZU1pbkJldExhYmVsBQAAAAxtaW5pbXVtVmFsdWUFAAAAA25pbAMJAAAAAAAAAgUAAAANcGFyYW1ldGVyTmFtZQIAAAAJY2hhbmdlUlNBCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEmdhbWVSU0FQdWJsaWNMYWJlbAUAAAAOcGFyYW1ldGVyVmFsdWUFAAAAA25pbAMJAAAAAAAAAgUAAAANcGFyYW1ldGVyTmFtZQIAAAAMY2hhbmdlUHViS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAGGdhbWVNYXN0ZXJQdWJsaWNLZXlMYWJlbAUAAAAOcGFyYW1ldGVyVmFsdWUFAAAAA25pbAMJAAAAAAAAAgUAAAANcGFyYW1ldGVyTmFtZQIAAAALY2hhbmdlVG9rZW4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAOZ2FtZVRva2VuTGFiZWwFAAAADnBhcmFtZXRlclZhbHVlBQAAAANuaWwJAAACAAAAAQIAAABJU2V0dGluZyBub3QgZm91bmQuIEFsbG93ZWQ6IGNoYW5nZU1heCwgY2hhbmdlTWluLCBjaGFuZ2VSU0EsIGNoYW5nZVB1YktleQAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5QVR5rA==", "height": 2037621, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8EuNKb9p8zJpD6LWJJE8Q781yuC19gS6txtNpHGTRo7y Next: 3N8sWrLhFdRyoR6UAhCa3HvcdndZuyJbiJZEc7e7bB5e Diff:
OldNewDifferences
352352 case _ =>
353353 throw("End height has not been defined.")
354354 }
355- else throw((((("Bet is greater than maximum bet (" + toString(gamesMaxBet())) + "), lower than minimum (") + toString(gamesMinBet())) + ") or payment is not in correct assetId."))
355+ else throw((((((("Bet (" + toString(amount)) + ") is greater than maximum bet (") + toString(gamesMaxBet())) + "), lower than minimum (") + toString(gamesMinBet())) + ") or payment is not in correct assetId."))
356356 }
357357 case _ =>
358358 throw("Game does not exist or has already ended.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wheel = [5, 24, 16, 33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28, 12, 35, 3, 26, 0, 32, 15, 19, 4, 21, 2, 25, 17, 34, 6, 27, 13, 36, 11, 30, 8, 23, 10]
55
66 let black = [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35]
77
88 let red = [1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36]
99
1010 let col1 = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34]
1111
1212 let col2 = [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35]
1313
1414 let col3 = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36]
1515
1616 let gameMasterPublicKey = fromBase58String("7jafGBLxM27F7GjVWLmfPzVcUwvFoL9XheNytNVM9HhH")
1717
1818 let gameCounterLabel = "G_GAMESCOUNTER"
1919
2020 let gameTotalBetsLabel = "G_TOTALBETS"
2121
2222 let gameProcessedBetsLabel = "G_PROCESSEDBETS"
2323
2424 let gameMinBetLabel = "G_MINBET"
2525
2626 let gameMaxBetLabel = "G_MAXBET"
2727
2828 let gameRSAPublicLabel = "G_RSAPUBLIC"
2929
3030 let gameMasterPublicKeyLabel = "G_GAMEMASTER_PUBLIC_KEY"
3131
3232 let gameTokenLabel = "G_TOKENID"
3333
3434 func gamesGetCounter () = getInteger(this, gameCounterLabel)
3535
3636
3737 func gamesTotalBets () = getInteger(this, gameTotalBetsLabel)
3838
3939
4040 func gamesProcessedBets () = getInteger(this, gameProcessedBetsLabel)
4141
4242
4343 func gamesMinBet () = getIntegerValue(this, gameMinBetLabel)
4444
4545
4646 func gamesMaxBet () = getIntegerValue(this, gameMaxBetLabel)
4747
4848
4949 func gameRSAPublicString () = getStringValue(this, gameRSAPublicLabel)
5050
5151
5252 func gameRSAPublic () = fromBase64String(gameRSAPublicString())
5353
5454
5555 func gameToken () = match getString(this, gameTokenLabel) {
5656 case tokenId: String =>
5757 if ((tokenId == ""))
5858 then unit
5959 else fromBase58String(tokenId)
6060 case _ =>
6161 unit
6262 }
6363
6464
6565 func betDetailsLabel (betNumber) = (("B_" + toString(betNumber)) + "_BetDetails")
6666
6767
6868 func betWinStateLabel (betNumber) = (("B_" + toString(betNumber)) + "_WinState")
6969
7070
7171 func betWinAmountLabel (betNumber) = (("B_" + toString(betNumber)) + "_WinAmount")
7272
7373
7474 func betGameLabel (betNumber) = (("B_" + toString(betNumber)) + "_Game")
7575
7676
7777 func betPayoutLabel (betNumber) = (("B_" + toString(betNumber)) + "_Payout")
7878
7979
8080 func betDetailsResult (betNumber) = getString(this, betDetailsLabel(betNumber))
8181
8282
8383 func betGetWinStateResult (betNumber) = getString(this, betWinStateLabel(betNumber))
8484
8585
8686 func betGetWinAmountResult (betNumber) = getInteger(this, betWinAmountLabel(betNumber))
8787
8888
8989 func betGameResult (betNumber) = getInteger(this, betGameLabel(betNumber))
9090
9191
9292 func betPayoutResult (betNumber) = getInteger(this, betPayoutLabel(betNumber))
9393
9494
9595 func gameStateLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_State")
9696
9797
9898 func gameStartHeightLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_StartHeight")
9999
100100
101101 func gameEndHeightLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_EndHeight")
102102
103103
104104 func gameSumShaLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_SumSha")
105105
106106
107107 func gameResultLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_Result")
108108
109109
110110 func gameRandomHashLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_RandomHash")
111111
112112
113113 func gameGetState (gameNumber) = getInteger(this, gameStateLabel(gameNumber))
114114
115115
116116 func gameGetStartHeight (gameNumber) = getInteger(this, gameStartHeightLabel(gameNumber))
117117
118118
119119 func gameGetEndHeight (gameNumber) = getInteger(this, gameEndHeightLabel(gameNumber))
120120
121121
122122 func gameGetSumSha (gameNumber) = getString(this, gameSumShaLabel(gameNumber))
123123
124124
125125 func gameGetResult (gameNumber) = getInteger(this, gameResultLabel(gameNumber))
126126
127127
128128 func checkPermission (callerPublicKey) = (callerPublicKey != gameMasterPublicKey)
129129
130130
131131 func gameInBaseToken (token) = (token == unit)
132132
133133
134134 func getMultiple (numberPlaced) = if ((numberPlaced == 1))
135135 then 36
136136 else if ((numberPlaced == 2))
137137 then 18
138138 else if ((numberPlaced == 3))
139139 then 12
140140 else if ((numberPlaced == 4))
141141 then 9
142142 else if ((numberPlaced == 5))
143143 then 7
144144 else if ((numberPlaced == 6))
145145 then 6
146146 else 0
147147
148148
149149 func getWinnings (bet,result) = {
150150 let betStringList = split(bet, "-")
151151 let amountBet = value(parseInt(betStringList[1]))
152152 let betType = betStringList[2]
153153 if ((betType == "numbers"))
154154 then {
155155 let allNumberBets = removeByIndex(removeByIndex(removeByIndex(betStringList, 0), 0), 0)
156156 if (containsElement(allNumberBets, toString(result)))
157157 then (amountBet * getMultiple(size(allNumberBets)))
158158 else 0
159159 }
160160 else if ((betType == "color"))
161161 then if ((betStringList[3] == "red"))
162162 then if (containsElement(red, result))
163163 then (amountBet * 2)
164164 else 0
165165 else if (containsElement(black, result))
166166 then (amountBet * 2)
167167 else 0
168168 else if ((betType == "column"))
169169 then if ((betStringList[3] == "1"))
170170 then if (containsElement(col1, result))
171171 then (amountBet * 3)
172172 else 0
173173 else if ((betStringList[3] == "2"))
174174 then if (containsElement(col2, result))
175175 then (amountBet * 3)
176176 else 0
177177 else if ((betStringList[3] == "3"))
178178 then if (containsElement(col3, result))
179179 then (amountBet * 3)
180180 else 0
181181 else 0
182182 else if ((betType == "dozen"))
183183 then if ((betStringList[3] == "1"))
184184 then if (if ((result >= 1))
185185 then (12 >= result)
186186 else false)
187187 then (amountBet * 3)
188188 else 0
189189 else if ((betStringList[3] == "2"))
190190 then if (if ((result >= 13))
191191 then (24 >= result)
192192 else false)
193193 then (amountBet * 3)
194194 else 0
195195 else if ((betStringList[3] == "3"))
196196 then if (if ((result >= 25))
197197 then (36 >= result)
198198 else false)
199199 then (amountBet * 3)
200200 else 0
201201 else 0
202202 else if ((betType == "oddeven"))
203203 then if ((result == 0))
204204 then 0
205205 else if ((betStringList[3] == "even"))
206206 then if (if (((result % 2) == 0))
207207 then (result != 0)
208208 else false)
209209 then (amountBet * 2)
210210 else 0
211211 else if (((result % 2) == 1))
212212 then (amountBet * 2)
213213 else 0
214214 else if ((betType == "lowhigh"))
215215 then if ((result == 0))
216216 then 0
217217 else if ((betStringList[3] == "low"))
218218 then if (if ((result >= 1))
219219 then (18 >= result)
220220 else false)
221221 then (amountBet * 2)
222222 else 0
223223 else if (if ((result >= 19))
224224 then (36 >= result)
225225 else false)
226226 then (amountBet * 2)
227227 else 0
228228 else 0
229229 }
230230
231231
232232 @Callable(i)
233233 func processNextBet () = if (checkPermission(i.callerPublicKey))
234234 then throw("processNextBet_FORBBIDEN")
235235 else match gamesTotalBets() {
236236 case totalBets: Int =>
237237 match gamesProcessedBets() {
238238 case lastProcessedBet: Int =>
239239 let nextBet = (lastProcessedBet + 1)
240240 if ((nextBet > totalBets))
241241 then throw("Next bet has not been placed.")
242242 else {
243243 let gameNumber = value(betGameResult(nextBet))
244244 match gameGetState(gameNumber) {
245245 case state: Int =>
246246 if ((state == 1))
247247 then {
248248 let result = value(gameGetResult(gameNumber))
249249 let betDetails = value(betDetailsResult(nextBet))
250250 let betPlacer = split(betDetails, "-")[0]
251251 let address = value(addressFromString(betPlacer))
252252 let winnings = getWinnings(betDetails, result)
253253 [ScriptTransfer(address, winnings, gameToken()), IntegerEntry(gameProcessedBetsLabel, (lastProcessedBet + 1)), IntegerEntry(betPayoutLabel(nextBet), winnings)]
254254 }
255255 else throw("Game has not finished.")
256256 case _ =>
257257 throw("Game does not exist or has already ended.")
258258 }
259259 }
260260 case _ =>
261261 throw("Game has not been initialized, next bets not found")
262262 }
263263 case _ =>
264264 throw("Game has not been initialized, total bets not found")
265265 }
266266
267267
268268
269269 @Callable(i)
270270 func initGame () = if (checkPermission(i.callerPublicKey))
271271 then throw("initGame_FORBBIDEN")
272272 else match gamesGetCounter() {
273273 case GAMESCOUNTER: Int =>
274274 throw("INIT_ALREADY_DONE")
275275 case _ =>
276276 [IntegerEntry(gameCounterLabel, 0), IntegerEntry(gameTotalBetsLabel, 0), IntegerEntry(gameProcessedBetsLabel, 0), IntegerEntry(gameMinBetLabel, 100000000), IntegerEntry(gameMaxBetLabel, 2500000000), StringEntry(gameRSAPublicLabel, "base64:MIIBIzANBgkqhkiG9w0BAQEFAAOCARAAMIIBCwKCAQIA+CpbzMBKpq+7VarSDHLW0wQSoh2LTbgl1rAhfruZGCjt6MO4o1v1iLqKyNH3FJsvwlLUqmqE7E2Wl7LbIPA26PxO2XCDfvj0OWp7cEJkUBEiyPYCn+iuPXUPwudoFgM4WHf0IPbDJ2O6OgzQlBBmNu6Owr7naITiJrPAvakPgAdmUPv4rOzcu6BR0T8GwszwprvwWZlKF6Ad00omLFDmx66HvBE51sRBiXIRbJnjDhlopize4LoR1FIrQaAu1sfs5bEHLA33jvKybne+IDawCsiINZYdPZV1WWcURC+XAFfBiYCw4PYyguxaBRHotzLc2dOsBV1HDNIjLKVoRknyt50CAwEAAQ=="), StringEntry(gameTokenLabel, "9gTWnHstaAkhD7hEGBqNdgcAru5872d8Xf1QmoPrz5iz")]
277277 }
278278
279279
280280
281281 @Callable(i)
282282 func startGame (randomHash,blockInRound) = if (checkPermission(i.callerPublicKey))
283283 then throw("startGame_FORBBIDEN")
284284 else match gamesGetCounter() {
285285 case GAMESCOUNTER: Int =>
286286 let newGameCounter = (GAMESCOUNTER + 1)
287287 if ((GAMESCOUNTER > 0))
288288 then match gameGetState(GAMESCOUNTER) {
289289 case gameState: Int =>
290290 if ((gameState == 0))
291291 then throw("Last game has not finished yet.")
292292 else [IntegerEntry(gameCounterLabel, newGameCounter), IntegerEntry(gameStartHeightLabel(newGameCounter), lastBlock.height), IntegerEntry(gameEndHeightLabel(newGameCounter), (height + blockInRound)), IntegerEntry(gameStateLabel(newGameCounter), 0), StringEntry(gameSumShaLabel(newGameCounter), toBase58String(sha256(fromBase64String(randomHash))))]
293293 case _ =>
294294 throw("Game state not found.")
295295 }
296296 else [IntegerEntry(gameCounterLabel, newGameCounter), IntegerEntry(gameStartHeightLabel(newGameCounter), lastBlock.height), IntegerEntry(gameEndHeightLabel(newGameCounter), (height + blockInRound)), IntegerEntry(gameStateLabel(newGameCounter), 0), StringEntry(gameSumShaLabel(newGameCounter), toBase58String(sha256(fromBase64String(randomHash))))]
297297 case _ =>
298298 throw("INIT_NEEDED")
299299 }
300300
301301
302302
303303 @Callable(i)
304304 func placeBet (bet) = {
305305 let assetId = gameToken()
306306 if ((i.feeAssetId != assetId))
307307 then throw("Fee is not in correct assetId")
308308 else {
309309 let betStringList = split(bet, "-")
310310 let betType = betStringList[0]
311311 if (if (if (if (if (if ((betType != "numbers"))
312312 then (betType != "column")
313313 else false)
314314 then (betType != "color")
315315 else false)
316316 then (betType != "dozen")
317317 else false)
318318 then (betType != "oddeven")
319319 else false)
320320 then (betType != "lowhigh")
321321 else false)
322322 then throw("Bet type is not valid.")
323323 else match gamesGetCounter() {
324324 case GAMESCOUNTER: Int =>
325325 match gameGetState(GAMESCOUNTER) {
326326 case state: Int =>
327327 if ((state == 1))
328328 then throw("Game is finished and next game has not started.")
329329 else if ((size(i.payments) != 1))
330330 then throw("Payment not attached or there is more then one payment")
331331 else {
332332 let p = i.payments[0]
333333 let amount = (p.amount + i.fee)
334334 if (if (if ((value(gamesMaxBet()) >= amount))
335335 then (amount >= value(gamesMinBet()))
336336 else false)
337337 then (i.payments[0].assetId == assetId)
338338 else false)
339339 then match gameGetEndHeight(GAMESCOUNTER) {
340340 case endHeight: Int =>
341341 if ((endHeight > height))
342342 then match gamesTotalBets() {
343343 case totalBets: Int =>
344344 let thisBetNumber = (totalBets + 1)
345345 if ((assetId == unit))
346346 then [IntegerEntry(gameTotalBetsLabel, (totalBets + 1)), StringEntry(betDetailsLabel(thisBetNumber), ((((toBase58String(i.caller.bytes) + "-") + toString(amount)) + "-") + bet)), IntegerEntry(betGameLabel(thisBetNumber), GAMESCOUNTER)]
347347 else [IntegerEntry(gameTotalBetsLabel, (totalBets + 1)), StringEntry(betDetailsLabel(thisBetNumber), ((((toBase58String(i.caller.bytes) + "-") + toString(amount)) + "-") + bet)), IntegerEntry(betGameLabel(thisBetNumber), GAMESCOUNTER)]
348348 case _ =>
349349 throw("Game has not been initalized.")
350350 }
351351 else throw("Game has already exceeded betting round")
352352 case _ =>
353353 throw("End height has not been defined.")
354354 }
355- else throw((((("Bet is greater than maximum bet (" + toString(gamesMaxBet())) + "), lower than minimum (") + toString(gamesMinBet())) + ") or payment is not in correct assetId."))
355+ else throw((((((("Bet (" + toString(amount)) + ") is greater than maximum bet (") + toString(gamesMaxBet())) + "), lower than minimum (") + toString(gamesMinBet())) + ") or payment is not in correct assetId."))
356356 }
357357 case _ =>
358358 throw("Game does not exist or has already ended.")
359359 }
360360 case _ =>
361361 throw("Game needs to be initialized.")
362362 }
363363 }
364364 }
365365
366366
367367
368368 @Callable(i)
369369 func endGame (rsaSign,gameNumber) = if (checkPermission(i.callerPublicKey))
370370 then throw("endGame_FORBBIDEN")
371371 else match gameGetState(gameNumber) {
372372 case state: Int =>
373373 if ((state == 1))
374374 then throw("Game is finished")
375375 else match gameGetEndHeight(gameNumber) {
376376 case gameHeight: Int =>
377377 if ((gameHeight > height))
378378 then throw(("Not enough blocks have past since game has started, game ends at block " + toString(gameHeight)))
379379 else match gameGetSumSha(gameNumber) {
380380 case SUMSHA: String =>
381381 let sig = fromBase64String(rsaSign)
382382 let rsaSigValid = rsaVerify(SHA256, fromBase58String(SUMSHA), sig, gameRSAPublic())
383383 match blockInfoByHeight(gameHeight) {
384384 case previousBlock: BlockInfo =>
385385 let randomHash = sha256((take(sig, 32) + take(previousBlock.generationSignature, 32)))
386386 if (!(rsaSigValid))
387387 then throw("INVALID_RSA_SIGN")
388388 else {
389389 let index = wheel[((toInt(randomHash) + value(gameNumber)) % 37)]
390390 [IntegerEntry(gameStateLabel(gameNumber), 1), IntegerEntry(gameResultLabel(gameNumber), index), StringEntry(gameRandomHashLabel(gameNumber), toBase64String(randomHash))]
391391 }
392392 case _ =>
393393 throw("Last block does not exist.")
394394 }
395395 case _ =>
396396 throw("SHA does not exist")
397397 }
398398 case _ =>
399399 throw("Cannot get game height.")
400400 }
401401 case _ =>
402402 throw("Game does not exist or has already ended")
403403 }
404404
405405
406406
407407 @Callable(i)
408408 func setParameter (parameterName,parameterValue) = if (checkPermission(i.callerPublicKey))
409409 then throw("setMinBet_FORBBIDEN")
410410 else if ((parameterName == "changeMax"))
411411 then {
412412 let maximumValue = parseIntValue(parameterValue)
413413 let minimumValue = gamesMinBet()
414414 if ((0 > maximumValue))
415415 then throw("value cannot be lower than 0")
416416 else if ((minimumValue > maximumValue))
417417 then throw((("value cannot be lower than min bet (" + toString(minimumValue)) + ")"))
418418 else [IntegerEntry(gameMaxBetLabel, maximumValue)]
419419 }
420420 else if ((parameterName == "changeMin"))
421421 then {
422422 let maximumValue = gamesMaxBet()
423423 let minimumValue = parseIntValue(parameterValue)
424424 if ((0 > minimumValue))
425425 then throw("value cannot be lower than 0")
426426 else if ((minimumValue > maximumValue))
427427 then throw((("value cannot be greater than min bet (" + toString(maximumValue)) + ")"))
428428 else [IntegerEntry(gameMinBetLabel, minimumValue)]
429429 }
430430 else if ((parameterName == "changeRSA"))
431431 then [StringEntry(gameRSAPublicLabel, parameterValue)]
432432 else if ((parameterName == "changePubKey"))
433433 then [StringEntry(gameMasterPublicKeyLabel, parameterValue)]
434434 else if ((parameterName == "changeToken"))
435435 then [StringEntry(gameTokenLabel, parameterValue)]
436436 else throw("Setting not found. Allowed: changeMax, changeMin, changeRSA, changePubKey")
437437
438438
439439 @Verifier(tx)
440440 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
441441

github/deemru/w8io/169f3d6 
54.49 ms