tx · Fv4rAe6Bf3nYgtaV8LbNNXVjJqMRJvjZ9FMXrKpweC3i

3N26e1BbLcoF8kFqpm6Gddr7kxgoDe9REJb:  -0.25000100 Waves

2022.06.23 13:48 [2108958] smart account 3N26e1BbLcoF8kFqpm6Gddr7kxgoDe9REJb > SELF 0.00000000 Waves

{ "type": 13, "id": "Fv4rAe6Bf3nYgtaV8LbNNXVjJqMRJvjZ9FMXrKpweC3i", "fee": 25000100, "feeAssetId": null, "timestamp": 1655981327971, "version": 2, "chainId": 84, "sender": "3N26e1BbLcoF8kFqpm6Gddr7kxgoDe9REJb", "senderPublicKey": "3krGBeGHSKGxasgdvrDcAML6LcR4761m3mGrStenhy5a", "proofs": [ "35vRWaT3ikGc2mnSDi7h15hD1LtTPPQJNNLBchB1LePu4T4VrxeCWZh2mSnvNqum4QUJhMYmkGHJcYc9xXoEuUA5" ], "script": "base64:AAIFAAAAAAAAAEAIAhIDCgEIEgYKBAgIAQESABIDCgEIEgMKAQgSAwoBCBIFCgMBCAgSAwoBCBIHCgUBCAgICBIAEgcKBQEICAgIAAAANAAAAAATZ2FtZU1hc3RlclB1YmxpY0tleQEAAAAgh2NeSAUW2uQexD0RUIJUfR1w1nhCs0weUe54MOYnJQIAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAZNiYXNlNjQ6TUlJQkl6QU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FSQUFNSUlCQ3dLQ0FRSUErQ3Biek1CS3BxKzdWYXJTREhMVzB3UVNvaDJMVGJnbDFyQWhmcnVaR0NqdDZNTzRvMXYxaUxxS3lOSDNGSnN2d2xMVXFtcUU3RTJXbDdMYklQQTI2UHhPMlhDRGZ2ajBPV3A3Y0VKa1VCRWl5UFlDbitpdVBYVVB3dWRvRmdNNFdIZjBJUGJESjJPNk9nelFsQkJtTnU2T3dyN25hSVRpSnJQQXZha1BnQWRtVVB2NHJPemN1NkJSMFQ4R3dzendwcnZ3V1psS0Y2QWQwMG9tTEZEbXg2Nkh2QkU1MXNSQmlYSVJiSm5qRGhsb3BpemU0TG9SMUZJclFhQXUxc2ZzNWJFSExBMzNqdkt5Ym5lK0lEYXdDc2lJTlpZZFBaVjFXV2NVUkMrWEFGZkJpWUN3NFBZeWd1eGFCUkhvdHpMYzJkT3NCVjFIRE5JakxLVm9Sa255dDUwQ0F3RUFBUT09AAAAABZzZXR1cEdhbWVzQ291bnRlckxhYmVsAgAAABNHX1NFVFVQR0FNRVNDT1VOVEVSAAAAABV1c2VkR2FtZXNDb3VudGVyTGFiZWwCAAAAEkdfVVNFREdBTUVTQ09VTlRFUgAAAAAQZGVhbGVyUXVldWVMYWJlbAIAAAANR19ERUFMRVJRVUVVRQAAAAAPZ2FtZU1heEJldExhYmVsAgAAAAhHX01BWEJFVAEAAAALZ2FtZXNNYXhCZXQAAAAACQAEGgAAAAIFAAAABHRoaXMFAAAAD2dhbWVNYXhCZXRMYWJlbAEAAAAUZ2FtZXNTZXR1cEdldENvdW50ZXIAAAAACQAEGgAAAAIFAAAABHRoaXMFAAAAFnNldHVwR2FtZXNDb3VudGVyTGFiZWwBAAAAE2dhbWVzVXNlZEdldENvdW50ZXIAAAAACQAEGgAAAAIFAAAABHRoaXMFAAAAFXVzZWRHYW1lc0NvdW50ZXJMYWJlbAEAAAAOZ2V0RGVhbGVyUXVldWUAAAAACQAEHQAAAAIFAAAABHRoaXMFAAAAEGRlYWxlclF1ZXVlTGFiZWwBAAAAGmdldEdhbWVDYXJkc1NpZ25hdHVyZUxhYmVsAAAAAgAAAApnYW1lTnVtYmVyAAAABGNhcmQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAD19DQVJEU0lHTkFUVVJFXwkAAaQAAAABBQAAAARjYXJkAQAAABFnZXRHYW1lQ2FyZHNMYWJlbAAAAAIAAAAKZ2FtZU51bWJlcgAAAARjYXJkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAZfQ0FSRF8JAAGkAAAAAQUAAAAEY2FyZAEAAAAWZ2V0R2FtZVNvcnRlZEhhbmRMYWJlbAAAAAIAAAAKZ2FtZU51bWJlcgAAAAN3aG8JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAKZ2FtZU51bWJlcgIAAAABXwUAAAADd2hvAgAAAAtfU09SVEVESEFORAEAAAAVZ2V0R2FtZUhhbmRTY29yZUxhYmVsAAAAAgAAAApnYW1lTnVtYmVyAAAAA3dobwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAFfBQAAAAN3aG8CAAAABl9TQ09SRQEAAAAWZ2V0R2FtZUFudGVBbW91bnRMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAABV9BTlRFAQAAABJnZXRHYW1lUGxheWVyTGFiZWwAAAABAAAACmdhbWVOdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAdfUExBWUVSAQAAABJnZXRHYW1lUGF5b3V0TGFiZWwAAAABAAAACmdhbWVOdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAdfUEFZT1VUAQAAABFnZXRHYW1lU3RhdGVMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAABl9TVEFURQEAAAAaZ2V0R2FtZVNodWZmZWxPZmZlc2V0TGFiZWwAAAABAAAACmdhbWVOdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAdfT0ZGU0VUAQAAABVnZXRHYW1lQ2FyZHNTaWduYXR1cmUAAAACAAAACmdhbWVOdW1iZXIAAAAEY2FyZAkABB0AAAACBQAAAAR0aGlzCQEAAAAaZ2V0R2FtZUNhcmRzU2lnbmF0dXJlTGFiZWwAAAACBQAAAApnYW1lTnVtYmVyBQAAAARjYXJkAQAAABZnZXRHYW1lU29ydGVkSGFuZENhcmRzAAAAAgAAAApnYW1lTnVtYmVyAAAAA3dobwkABB0AAAACBQAAAAR0aGlzCQEAAAAWZ2V0R2FtZVNvcnRlZEhhbmRMYWJlbAAAAAIFAAAACmdhbWVOdW1iZXIFAAAAA3dobwEAAAAQZ2V0R2FtZUhhbmRTY29yZQAAAAIAAAAKZ2FtZU51bWJlcgAAAAN3aG8JAAQaAAAAAgUAAAAEdGhpcwkBAAAAFWdldEdhbWVIYW5kU2NvcmVMYWJlbAAAAAIFAAAACmdhbWVOdW1iZXIFAAAAA3dobwEAAAAMZ2V0R2FtZUNhcmRzAAAAAgAAAApnYW1lTnVtYmVyAAAABGNhcmQJAAQdAAAAAgUAAAAEdGhpcwkBAAAAEWdldEdhbWVDYXJkc0xhYmVsAAAAAgUAAAAKZ2FtZU51bWJlcgUAAAAEY2FyZAEAAAANZ2V0R2FtZVBsYXllcgAAAAEAAAAKZ2FtZU51bWJlcgkABB0AAAACBQAAAAR0aGlzCQEAAAASZ2V0R2FtZVBsYXllckxhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAAMZ2V0R2FtZVN0YXRlAAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAABFnZXRHYW1lU3RhdGVMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIBAAAAEWdldEdhbWVBbnRlQW1vdW50AAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAABZnZXRHYW1lQW50ZUFtb3VudExhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAAVZ2V0R2FtZVNodWZmZWxPZmZlc2V0AAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAABpnZXRHYW1lU2h1ZmZlbE9mZmVzZXRMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIBAAAADWdldEdhbWVQYXlvdXQAAAABAAAACmdhbWVOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEmdldEdhbWVQYXlvdXRMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIBAAAAGWdldFBsYXllckN1cnJlbnRHYW1lTGFiZWwAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAAAJQXwUAAAAHYWRkcmVzcwIAAAAMX0NVUlJFTlRHQU1FAQAAABRnZXRQbGF5ZXJDdXJyZW50R2FtZQAAAAEAAAAHYWRkcmVzcwkABBoAAAACBQAAAAR0aGlzCQEAAAAZZ2V0UGxheWVyQ3VycmVudEdhbWVMYWJlbAAAAAEFAAAAB2FkZHJlc3MBAAAACnZlcmlmeUNhcmQAAAADAAAABGNhcmQAAAAKZ2FtZU51bWJlcgAAAApjYXJkTnVtYmVyCQAKKAAAAAQFAAAABlNIQTI1NgkAAZsAAAABBQAAAARjYXJkCQACWwAAAAEJAAGRAAAAAgkABLUAAAACCQEAAAAFdmFsdWUAAAABCQEAAAAVZ2V0R2FtZUNhcmRzU2lnbmF0dXJlAAAAAgUAAAAKZ2FtZU51bWJlcgUAAAAKY2FyZE51bWJlcgIAAAABIAAAAAAAAAAAAAUAAAAJUlNBUFVCTElDAQAAAA9jaGVja1Blcm1pc3Npb24AAAABAAAAD2NhbGxlclB1YmxpY0tleQkBAAAAAiE9AAAAAgUAAAAPY2FsbGVyUHVibGljS2V5BQAAABNnYW1lTWFzdGVyUHVibGljS2V5AQAAABJjcmVhdGVHYW1lTWV0YWRhdGEAAAACAAAAB2FkZHJlc3MAAAAEYW50ZQQAAAANZ2FtZVRvUmVzZXJ2ZQkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQEAAAATZ2FtZXNVc2VkR2V0Q291bnRlcgAAAAAAAAAAAAAAAAEEAAAAC2RlYWxlclF1ZXVlCQEAAAAFdmFsdWUAAAABCQEAAAAOZ2V0RGVhbGVyUXVldWUAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABV1c2VkR2FtZXNDb3VudGVyTGFiZWwFAAAADWdhbWVUb1Jlc2VydmUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABlnZXRQbGF5ZXJDdXJyZW50R2FtZUxhYmVsAAAAAQUAAAAHYWRkcmVzcwUAAAANZ2FtZVRvUmVzZXJ2ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldEdhbWVTdGF0ZUxhYmVsAAAAAQUAAAANZ2FtZVRvUmVzZXJ2ZQAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmdldEdhbWVBbnRlQW1vdW50TGFiZWwAAAABBQAAAA1nYW1lVG9SZXNlcnZlBQAAAARhbnRlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEGRlYWxlclF1ZXVlTGFiZWwJAAEsAAAAAgkAASwAAAACCQEAAAAFdmFsdWUAAAABCQEAAAAOZ2V0RGVhbGVyUXVldWUAAAAAAgAAAAEsCQABpAAAAAEFAAAADWdhbWVUb1Jlc2VydmUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmdldEdhbWVQbGF5ZXJMYWJlbAAAAAEFAAAADWdhbWVUb1Jlc2VydmUFAAAAB2FkZHJlc3MFAAAAA25pbAEAAAAMZ2V0R2FtZVNldHVwAAAABgAAAApnYW1lTnVtYmVyAAAACnJhbmRvbWl6ZXIAAAAGY2FyZHMwAAAABmNhcmRzMQAAAAZjYXJkczIAAAAGY2FyZHMzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABZzZXR1cEdhbWVzQ291bnRlckxhYmVsBQAAAApnYW1lTnVtYmVyCQAETAAAAAIJAQAAAAxJ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aAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACBAAAABVkZWFsZXJzSGlnaGVzdE5vblBhaXIJAQAAABdnZXRIaWdoZXN0Tm9uUGFpck51bWJlcgAAAAEFAAAAEGFsbERlYWxlck51bWJlcnMEAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIJAQAAABdnZXRIaWdoZXN0Tm9uUGFpck51bWJlcgAAAAEFAAAAEGFsbFBsYXllck51bWJlcnMDCQAAAAAAAAIFAAAAC3BsYXllclZhbHVlAAAAAAAAAAACBAAAABFwbGF5ZXJzTG93ZXN0UGFpcgkBAAAAEGxvd2VzdFBhaXJOdW1iZXIAAAABBQAAABBhbGxQbGF5ZXJOdW1iZXJzBAAAABFkZWFsZXJzTG93ZXN0UGFpcgkBAAAAEGxvd2VzdFBhaXJOdW1iZXIAAAABBQAAABBhbGxEZWFsZXJOdW1iZXJzAwkAAGYAAAACBQAAABFkZWFsZXJzTG93ZXN0UGFpcgUAAAARcGxheWVyc0xvd2VzdFBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAEXBsYXllcnNMb3dlc3RQYWlyBQAAABFkZWFsZXJzTG93ZXN0UGFpcgkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACAwkAAGYAAAACBQAAABVkZWFsZXJzSGlnaGVzdE5vblBhaXIFAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIFAAAAFWRlYWxlcnNIaWdoZXN0Tm9uUGFpcgkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACCQAAZAAAAAIFAAAABGFudGUJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgMJAABmAAAAAgUAAAAVZGVhbGVyc0hpZ2hlc3ROb25QYWlyBQAAABZwbGF5ZXJzc0hpZ2hlc3ROb25QYWlyAAAAAAAAAAAAAwkAAGYAAAACBQAAABZwbGF5ZXJzc0hpZ2hlc3ROb25QYWlyBQAAABVkZWFsZXJzSGlnaGVzdE5vblBhaXIJAABkAAAAAgkAAGgAAAACCQAAaAAAAAIJAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQUAAAALcGxheWVyVmFsdWUFAAAABGFudGUAAAAAAAAAAAIJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgQAAAAbZGVhbGVyc3NlY29uZEhpZ2hlc3ROb25QYWlyCQEAAAAec2Vjb25kSGlnaGVzdE5vblBhaXJPZlBhaXJIYW5kAAAAAQUAAAAQYWxsRGVhbGVyTnVtYmVycwQAAAAbcGxheWVyc3NlY29uZEhpZ2hlc3ROb25QYWlyCQEAAAAec2Vjb25kSGlnaGVzdE5vblBhaXJPZlBhaXJIYW5kAAAAAQUAAAAQYWxsUGxheWVyTnVtYmVycwMJAABmAAAAAgUAAAAbZGVhbGVyc3NlY29uZEhpZ2hlc3ROb25QYWlyBQAAABtwbGF5ZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAG3BsYXllcnNzZWNvbmRIaWdoZXN0Tm9uUGFpcgUAAAAbZGVhbGVyc3NlY29uZEhpZ2hlc3ROb25QYWlyCQAAZAAAAAIJAABoAAAAAgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIEAAAAGmRlYWxlcnN0aGlyZEhpZ2hlc3ROb25QYWlyCQEAAAAddGhpcmRIaWdoZXN0Tm9uUGFpck9mUGFpckhhbmQAAAABBQAAABBhbGxEZWFsZXJOdW1iZXJzBAAAABpwbGF5ZXJzdGhpcmRIaWdoZXN0Tm9uUGFpcgkBAAAAHXRoaXJkSGlnaGVzdE5vblBhaXJPZlBhaXJIYW5kAAAAAQUA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dEdhbWUEAAAAB2FkZHJlc3MJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQkBAAAABXZhbHVlAAAAAQkBAAAADWdldEdhbWVQbGF5ZXIAAAABBQAAAAtjdXJyZW50R2FtZQQAAAATcGxheWVyc09yZGVyZWRDYXJkcwkBAAAABXZhbHVlAAAAAQkBAAAAFmdldEdhbWVTb3J0ZWRIYW5kQ2FyZHMAAAACBQAAAAtjdXJyZW50R2FtZQIAAAAGUExBWUVSBAAAAAZwYXlvdXQJAQAAAA9nZXRQbGF5ZXJQYXlvdXQAAAAEBQAAABNwbGF5ZXJzT3JkZXJlZENhcmRzBQAAABJkZWFsZXJPcmRlcmVkQ2FyZHMFAAAABGFudGUJAQAAAAV2YWx1ZQAAAAEJAQAAABBnZXRHYW1lSGFuZFNjb3JlAAAAAgUAAAALY3VycmVudEdhbWUCAAAABlBMQVlFUgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldEdhbWVTdGF0ZUxhYmVsAAAAAQUAAAALY3VycmVudEdhbWUAAAAAAAAAAAQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAQZGVhbGVyUXVldWVMYWJlbAkBAAAACXRha2VSaWdodAAAAAIFAAAAC2RlYWxlclF1ZXVlCQAAZQAAAAIJAAExAAAAAQUAAAALZGVhbGVyUXVldWUJAABkAAAAAgAAAAAAAAAAAQkAATEAAAABCQABpAAAAAEFAAAAC2N1cnJlbnRHYW1lCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASZ2V0R2FtZVBheW91dExhYmVsAAAAAQUAAAALY3VycmVudEdhbWUFAAAABnBheW91dAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAWZ2V0R2FtZVNvcnRlZEhhbmRMYWJlbAAAAAIFAAAAC2N1cnJlbnRHYW1lAgAAAAZERUFMRVIFAAAAEmRlYWxlck9yZGVyZWRDYXJkcwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAdhZGRyZXNzBQAAAAZwYXlvdXQFAAAABHVuaXQFAAAAA25pbAkAAAIAAAABAgAAACdPbmUgb2YgdGhlIGNhcmRzIGZh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", "height": 2108958, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 4DdZ3w4BKWwHE34Qn8HcL5X8sgUFZrwH2kef7Yimz7kn Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let gameMasterPublicKey = base58'A7VvRHtZro8bvGa9KAahiP9xovdKJ5hGsTjHLMa6nRPo'
5+
6+let RSAPUBLIC = fromBase64String("base64:MIIBIzANBgkqhkiG9w0BAQEFAAOCARAAMIIBCwKCAQIA+CpbzMBKpq+7VarSDHLW0wQSoh2LTbgl1rAhfruZGCjt6MO4o1v1iLqKyNH3FJsvwlLUqmqE7E2Wl7LbIPA26PxO2XCDfvj0OWp7cEJkUBEiyPYCn+iuPXUPwudoFgM4WHf0IPbDJ2O6OgzQlBBmNu6Owr7naITiJrPAvakPgAdmUPv4rOzcu6BR0T8GwszwprvwWZlKF6Ad00omLFDmx66HvBE51sRBiXIRbJnjDhlopize4LoR1FIrQaAu1sfs5bEHLA33jvKybne+IDawCsiINZYdPZV1WWcURC+XAFfBiYCw4PYyguxaBRHotzLc2dOsBV1HDNIjLKVoRknyt50CAwEAAQ==")
7+
8+let setupGamesCounterLabel = "G_SETUPGAMESCOUNTER"
9+
10+let usedGamesCounterLabel = "G_USEDGAMESCOUNTER"
11+
12+let dealerQueueLabel = "G_DEALERQUEUE"
13+
14+let gameMaxBetLabel = "G_MAXBET"
15+
16+func gamesMaxBet () = getInteger(this, gameMaxBetLabel)
17+
18+
19+func gamesSetupGetCounter () = getInteger(this, setupGamesCounterLabel)
20+
21+
22+func gamesUsedGetCounter () = getInteger(this, usedGamesCounterLabel)
23+
24+
25+func getDealerQueue () = getString(this, dealerQueueLabel)
26+
27+
28+func getGameCardsSignatureLabel (gameNumber,card) = ((("G_" + toString(gameNumber)) + "_CARDSIGNATURE_") + toString(card))
29+
30+
31+func getGameCardsLabel (gameNumber,card) = ((("G_" + toString(gameNumber)) + "_CARD_") + toString(card))
32+
33+
34+func getGameSortedHandLabel (gameNumber,who) = (((("G_" + toString(gameNumber)) + "_") + who) + "_SORTEDHAND")
35+
36+
37+func getGameHandScoreLabel (gameNumber,who) = (((("G_" + toString(gameNumber)) + "_") + who) + "_SCORE")
38+
39+
40+func getGameAnteAmountLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_ANTE")
41+
42+
43+func getGamePlayerLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_PLAYER")
44+
45+
46+func getGamePayoutLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_PAYOUT")
47+
48+
49+func getGameStateLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_STATE")
50+
51+
52+func getGameShuffelOffesetLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_OFFSET")
53+
54+
55+func getGameCardsSignature (gameNumber,card) = getString(this, getGameCardsSignatureLabel(gameNumber, card))
56+
57+
58+func getGameSortedHandCards (gameNumber,who) = getString(this, getGameSortedHandLabel(gameNumber, who))
59+
60+
61+func getGameHandScore (gameNumber,who) = getInteger(this, getGameHandScoreLabel(gameNumber, who))
62+
63+
64+func getGameCards (gameNumber,card) = getString(this, getGameCardsLabel(gameNumber, card))
65+
66+
67+func getGamePlayer (gameNumber) = getString(this, getGamePlayerLabel(gameNumber))
68+
69+
70+func getGameState (gameNumber) = getInteger(this, getGameStateLabel(gameNumber))
71+
72+
73+func getGameAnteAmount (gameNumber) = getInteger(this, getGameAnteAmountLabel(gameNumber))
74+
75+
76+func getGameShuffelOffeset (gameNumber) = getInteger(this, getGameShuffelOffesetLabel(gameNumber))
77+
78+
79+func getGamePayout (gameNumber) = getInteger(this, getGamePayoutLabel(gameNumber))
80+
81+
82+func getPlayerCurrentGameLabel (address) = (("P_" + address) + "_CURRENTGAME")
83+
84+
85+func getPlayerCurrentGame (address) = getInteger(this, getPlayerCurrentGameLabel(address))
86+
87+
88+func verifyCard (card,gameNumber,cardNumber) = rsaVerify_16Kb(SHA256, toBytes(card), fromBase64String(split(value(getGameCardsSignature(gameNumber, cardNumber)), " ")[0]), RSAPUBLIC)
89+
90+
91+func checkPermission (callerPublicKey) = (callerPublicKey != gameMasterPublicKey)
92+
93+
94+func createGameMetadata (address,ante) = {
95+ let gameToReserve = (value(gamesUsedGetCounter()) + 1)
96+ let dealerQueue = value(getDealerQueue())
97+[IntegerEntry(usedGamesCounterLabel, gameToReserve), IntegerEntry(getPlayerCurrentGameLabel(address), gameToReserve), IntegerEntry(getGameStateLabel(gameToReserve), 1), IntegerEntry(getGameAnteAmountLabel(gameToReserve), ante), StringEntry(dealerQueueLabel, ((value(getDealerQueue()) + ",") + toString(gameToReserve))), StringEntry(getGamePlayerLabel(gameToReserve), address)]
98+ }
99+
100+
101+func getGameSetup (gameNumber,randomizer,cards0,cards1,cards2,cards3) = [IntegerEntry(setupGamesCounterLabel, gameNumber), IntegerEntry(getGameStateLabel(gameNumber), 0), IntegerEntry(getGameShuffelOffesetLabel(gameNumber), randomizer), StringEntry(getGameCardsSignatureLabel(gameNumber, 0), cards0), StringEntry(getGameCardsSignatureLabel(gameNumber, 1), cards1), StringEntry(getGameCardsSignatureLabel(gameNumber, 2), cards2), StringEntry(getGameCardsSignatureLabel(gameNumber, 3), cards3)]
102+
103+
104+func getSuit (card) = split(card, "/")[1]
105+
106+
107+func getNumber (card) = value(parseInt(split(card, "/")[0]))
108+
109+
110+func isFourOfAKind (hand) = if (if ((hand[0] == hand[3]))
111+ then true
112+ else (hand[1] == hand[4]))
113+ then true
114+ else false
115+
116+
117+func isFullHouse (hand) = if (if (if ((hand[0] == hand[2]))
118+ then (hand[3] == hand[4])
119+ else false)
120+ then true
121+ else if ((hand[0] == hand[1]))
122+ then (hand[2] == hand[4])
123+ else false)
124+ then true
125+ else false
126+
127+
128+func isFlush (hand) = {
129+ let firstSuit = hand[0]
130+ if (if (if (if ((hand[1] == firstSuit))
131+ then (hand[2] == firstSuit)
132+ else false)
133+ then (hand[3] == firstSuit)
134+ else false)
135+ then (hand[4] == firstSuit)
136+ else false)
137+ then true
138+ else false
139+ }
140+
141+
142+func isStraight (hand) = {
143+ let largest = hand[4]
144+ if (if (if (if ((hand[3] == (largest - 1)))
145+ then (hand[2] == (largest - 2))
146+ else false)
147+ then (hand[1] == (largest - 3))
148+ else false)
149+ then (hand[0] == (largest - 4))
150+ else false)
151+ then true
152+ else false
153+ }
154+
155+
156+func isThreeOfKind (hand) = if (if (if ((hand[0] == hand[2]))
157+ then true
158+ else (hand[1] == hand[3]))
159+ then true
160+ else (hand[2] == hand[4]))
161+ then true
162+ else false
163+
164+
165+func isTwoPair (hand) = {
166+ let numberOfPairs = 0
167+ let matching = [(hand[0] == hand[1]), (hand[1] == hand[2]), (hand[2] == hand[3]), (hand[3] == hand[4])]
168+ if (if (if ((indexOf(matching, true) != lastIndexOf(matching, true)))
169+ then (indexOf(matching, true) != unit)
170+ else false)
171+ then (lastIndexOf(matching, true) != unit)
172+ else false)
173+ then true
174+ else false
175+ }
176+
177+
178+func isOnePair (hand) = if (if (if (if ((hand[0] == hand[1]))
179+ then true
180+ else (hand[1] == hand[2]))
181+ then true
182+ else (hand[2] == hand[3]))
183+ then true
184+ else (hand[3] == hand[4]))
185+ then true
186+ else false
187+
188+
189+func getScore (hand) = {
190+ let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
191+ let allSuits = (((((nil :+ getSuit(hand[0])) :+ getSuit(hand[1])) :+ getSuit(hand[2])) :+ getSuit(hand[3])) :+ getSuit(hand[4]))
192+ if (isStraight(allNumbers))
193+ then if (isFlush(allSuits))
194+ then if ((allNumbers[4] == 14))
195+ then 9
196+ else 8
197+ else 4
198+ else if (isFourOfAKind(allNumbers))
199+ then 7
200+ else if (isFullHouse(allNumbers))
201+ then 6
202+ else if (isFlush(allSuits))
203+ then 5
204+ else if (isThreeOfKind(allNumbers))
205+ then 3
206+ else if (isTwoPair(allNumbers))
207+ then 2
208+ else if (isOnePair(allNumbers))
209+ then 1
210+ else 0
211+ }
212+
213+
214+func payoutMultiplier (playerScore) = if ((playerScore == 9))
215+ then 101
216+ else if ((playerScore == 8))
217+ then 51
218+ else if ((playerScore == 7))
219+ then 21
220+ else if ((playerScore == 6))
221+ then 8
222+ else if ((playerScore == 5))
223+ then 6
224+ else if ((playerScore == 4))
225+ then 5
226+ else if ((playerScore == 3))
227+ then 4
228+ else if ((playerScore == 2))
229+ then 3
230+ else 2
231+
232+
233+func whoHasHighestCard (allPlayerNumbers,allDealerNumbers) = if ((allDealerNumbers[4] > allPlayerNumbers[4]))
234+ then 2
235+ else if ((allPlayerNumbers[4] > allDealerNumbers[4]))
236+ then 1
237+ else if ((allDealerNumbers[3] > allPlayerNumbers[3]))
238+ then 2
239+ else if ((allPlayerNumbers[3] > allDealerNumbers[3]))
240+ then 1
241+ else if ((allDealerNumbers[2] > allPlayerNumbers[2]))
242+ then 2
243+ else if ((allPlayerNumbers[2] > allDealerNumbers[2]))
244+ then 1
245+ else if ((allDealerNumbers[1] > allPlayerNumbers[1]))
246+ then 2
247+ else if ((allPlayerNumbers[1] > allDealerNumbers[1]))
248+ then 1
249+ else if ((allDealerNumbers[0] > allPlayerNumbers[0]))
250+ then 2
251+ else if ((allPlayerNumbers[0] > allDealerNumbers[0]))
252+ then 1
253+ else 0
254+
255+
256+func highestPairNumber (cardNumbers) = if ((cardNumbers[4] == cardNumbers[3]))
257+ then cardNumbers[4]
258+ else if ((cardNumbers[3] == cardNumbers[2]))
259+ then cardNumbers[3]
260+ else if ((cardNumbers[2] == cardNumbers[1]))
261+ then cardNumbers[2]
262+ else if ((cardNumbers[1] == cardNumbers[0]))
263+ then cardNumbers[1]
264+ else -1
265+
266+
267+func lowestPairNumber (cardNumbers) = if ((cardNumbers[0] == cardNumbers[1]))
268+ then cardNumbers[1]
269+ else if ((cardNumbers[1] == cardNumbers[2]))
270+ then cardNumbers[1]
271+ else if ((cardNumbers[2] == cardNumbers[3]))
272+ then cardNumbers[2]
273+ else if ((cardNumbers[3] == cardNumbers[4]))
274+ then cardNumbers[3]
275+ else -1
276+
277+
278+func getHighestNonPairNumber (cardNumbers) = if ((cardNumbers[4] != cardNumbers[3]))
279+ then cardNumbers[4]
280+ else if ((cardNumbers[2] != cardNumbers[1]))
281+ then cardNumbers[2]
282+ else cardNumbers[0]
283+
284+
285+func secondHighestNonPairOfPairHand (cardNumbers) = if ((cardNumbers[3] == cardNumbers[2]))
286+ then cardNumbers[1]
287+ else if ((cardNumbers[2] == cardNumbers[1]))
288+ then cardNumbers[3]
289+ else cardNumbers[2]
290+
291+
292+func thirdHighestNonPairOfPairHand (cardNumbers) = if ((cardNumbers[0] == cardNumbers[1]))
293+ then cardNumbers[2]
294+ else cardNumbers[0]
295+
296+
297+func getPlayerPayout (playerHand,dealerHand,ante,playerScore) = {
298+ let playerCards = split(playerHand, "+")
299+ let playerValue = playerScore
300+ let dealerCards = split(dealerHand, "+")
301+ let dealerValue = getScore(dealerCards)
302+ let allPlayerNumbers = (((((nil :+ getNumber(playerCards[0])) :+ getNumber(playerCards[1])) :+ getNumber(playerCards[2])) :+ getNumber(playerCards[3])) :+ getNumber(playerCards[4]))
303+ let allDealerNumbers = (((((nil :+ getNumber(dealerCards[0])) :+ getNumber(dealerCards[1])) :+ getNumber(dealerCards[2])) :+ getNumber(dealerCards[3])) :+ getNumber(dealerCards[4]))
304+ if (if (if ((indexOf(dealerHand, "13") != unit))
305+ then (indexOf(dealerHand, "14") != unit)
306+ else false)
307+ then true
308+ else (dealerValue >= 1))
309+ then if ((playerValue == dealerValue))
310+ then if ((playerValue == 9))
311+ then (ante + (ante * 2))
312+ else if (if ((playerValue == 8))
313+ then true
314+ else (playerValue == 4))
315+ then if ((allDealerNumbers[4] > allPlayerNumbers[4]))
316+ then 0
317+ else if ((allDealerNumbers[4] == allPlayerNumbers[4]))
318+ then (ante + (ante * 2))
319+ else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
320+ else if ((playerValue == 7))
321+ then if ((allDealerNumbers[1] > allPlayerNumbers[1]))
322+ then 0
323+ else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
324+ else if ((playerValue == 6))
325+ then if ((allDealerNumbers[2] > allPlayerNumbers[2]))
326+ then 0
327+ else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
328+ else if ((playerValue == 5))
329+ then {
330+ let highestCardThere = whoHasHighestCard(allPlayerNumbers, allDealerNumbers)
331+ if ((highestCardThere == 1))
332+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
333+ else if ((highestCardThere == 2))
334+ then 0
335+ else (ante + (ante * 2))
336+ }
337+ else if ((playerValue == 3))
338+ then if ((allDealerNumbers[2] > allPlayerNumbers[2]))
339+ then 0
340+ else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
341+ else if (if ((playerValue == 2))
342+ then true
343+ else (playerValue == 1))
344+ then {
345+ let playersHighestPair = highestPairNumber(allPlayerNumbers)
346+ let dealersHighestPair = highestPairNumber(allDealerNumbers)
347+ if ((dealersHighestPair > playersHighestPair))
348+ then 0
349+ else if ((playersHighestPair > dealersHighestPair))
350+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
351+ else {
352+ let dealersHighestNonPair = getHighestNonPairNumber(allDealerNumbers)
353+ let playerssHighestNonPair = getHighestNonPairNumber(allPlayerNumbers)
354+ if ((playerValue == 2))
355+ then {
356+ let playersLowestPair = lowestPairNumber(allPlayerNumbers)
357+ let dealersLowestPair = lowestPairNumber(allDealerNumbers)
358+ if ((dealersLowestPair > playersLowestPair))
359+ then 0
360+ else if ((playersLowestPair > dealersLowestPair))
361+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
362+ else if ((dealersHighestNonPair > playerssHighestNonPair))
363+ then 0
364+ else if ((playerssHighestNonPair > dealersHighestNonPair))
365+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
366+ else (ante + (ante * 2))
367+ }
368+ else if ((dealersHighestNonPair > playerssHighestNonPair))
369+ then 0
370+ else if ((playerssHighestNonPair > dealersHighestNonPair))
371+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
372+ else {
373+ let dealerssecondHighestNonPair = secondHighestNonPairOfPairHand(allDealerNumbers)
374+ let playerssecondHighestNonPair = secondHighestNonPairOfPairHand(allPlayerNumbers)
375+ if ((dealerssecondHighestNonPair > playerssecondHighestNonPair))
376+ then 0
377+ else if ((playerssecondHighestNonPair > dealerssecondHighestNonPair))
378+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
379+ else {
380+ let dealersthirdHighestNonPair = thirdHighestNonPairOfPairHand(allDealerNumbers)
381+ let playersthirdHighestNonPair = thirdHighestNonPairOfPairHand(allPlayerNumbers)
382+ if ((dealersthirdHighestNonPair > playersthirdHighestNonPair))
383+ then 0
384+ else if ((playersthirdHighestNonPair > dealersthirdHighestNonPair))
385+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
386+ else (ante + (ante * 2))
387+ }
388+ }
389+ }
390+ }
391+ else {
392+ let highestCardThere = whoHasHighestCard(allPlayerNumbers, allDealerNumbers)
393+ if ((highestCardThere == 1))
394+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
395+ else if ((highestCardThere == 2))
396+ then 0
397+ else (ante + (ante * 2))
398+ }
399+ else if ((playerValue > dealerValue))
400+ then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
401+ else 0
402+ else (ante * 4)
403+ }
404+
405+
406+@Callable(i)
407+func testPairSingleCards (orderedCards) = {
408+ let hand = split(orderedCards, "+")
409+ let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
410+ throw(((((toString(getHighestNonPairNumber(allNumbers)) + "-") + toString(secondHighestNonPairOfPairHand(allNumbers))) + "-") + toString(thirdHighestNonPairOfPairHand(allNumbers))))
411+ }
412+
413+
414+
415+@Callable(i)
416+func testPayout (playerHand,dealerHand,ante,playerScore) = throw(toString(getPlayerPayout(playerHand, dealerHand, ante, playerScore)))
417+
418+
419+
420+@Callable(i)
421+func initGame () = if (checkPermission(i.callerPublicKey))
422+ then throw("initGame_FORBBIDEN")
423+ else match gamesSetupGetCounter() {
424+ case GAMESCOUNTER: Int =>
425+ throw("INIT_ALREADY_DONE")
426+ case _ =>
427+[IntegerEntry(setupGamesCounterLabel, 0), IntegerEntry(usedGamesCounterLabel, 0), IntegerEntry(gameMaxBetLabel, 100000000), StringEntry(dealerQueueLabel, "")]
428+ }
429+
430+
431+
432+@Callable(i)
433+func testScore (orderedCards) = throw((("Score is " + toString(getScore(split(orderedCards, "+")))) + "."))
434+
435+
436+
437+@Callable(i)
438+func testHighestPair (orderedCards) = {
439+ let hand = split(orderedCards, "+")
440+ let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
441+ throw((("Highest Pairs is " + toString(highestPairNumber(allNumbers))) + "."))
442+ }
443+
444+
445+
446+@Callable(i)
447+func testLowestPair (orderedCards) = {
448+ let hand = split(orderedCards, "+")
449+ let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
450+ throw((("Highest Pairs is " + toString(lowestPairNumber(allNumbers))) + "."))
451+ }
452+
453+
454+
455+@Callable(i)
456+func revealResults (currentGame,card3,dealerOrderedCards) = if (checkPermission(i.callerPublicKey))
457+ then throw("setupGame_FORBBIDEN")
458+ else {
459+ let dealerQueue = value(getDealerQueue())
460+ let nextGameToProcess = split(dealerQueue, ",")[1]
461+ if ((nextGameToProcess == toString(currentGame)))
462+ then if (true)
463+ then {
464+ let ante = value(getGameAnteAmount(currentGame))
465+ let address = value(addressFromString(value(getGamePlayer(currentGame))))
466+ let playersOrderedCards = value(getGameSortedHandCards(currentGame, "PLAYER"))
467+ let payout = getPlayerPayout(playersOrderedCards, dealerOrderedCards, ante, value(getGameHandScore(currentGame, "PLAYER")))
468+[IntegerEntry(getGameStateLabel(currentGame), 4), StringEntry(dealerQueueLabel, takeRight(dealerQueue, (size(dealerQueue) - (1 + size(toString(currentGame)))))), IntegerEntry(getGamePayoutLabel(currentGame), payout), StringEntry(getGameSortedHandLabel(currentGame, "DEALER"), dealerOrderedCards), ScriptTransfer(address, payout, unit)]
469+ }
470+ else throw("One of the cards failed to be verified.")
471+ else throw(("The next game to process is " + nextGameToProcess))
472+ }
473+
474+
475+
476+@Callable(i)
477+func foldOrRaise (action) = {
478+ let address = toBase58String(i.caller.bytes)
479+ if (if ((action != "fold"))
480+ then (action != "raise")
481+ else false)
482+ then throw("Invalid action.")
483+ else {
484+ let currentGame = value(getPlayerCurrentGame(address))
485+ if (value((getGameState(currentGame) != 2)))
486+ then throw("Game is not in correct state.")
487+ else if ((action == "raise"))
488+ then {
489+ let ante = value(getGameAnteAmount(currentGame))
490+ let pay = (i.payments[0].amount + i.fee)
491+ if (if ((size(i.payments) != 1))
492+ then true
493+ else (pay != (ante * 2)))
494+ then throw((("Fee must be 2x the ante (" + toString((ante * 2))) + ")"))
495+ else [IntegerEntry(getGameStateLabel(currentGame), 3), StringEntry(dealerQueueLabel, ((value(getDealerQueue()) + ",") + toString(currentGame)))]
496+ }
497+ else [IntegerEntry(getGameStateLabel(currentGame), 6)]
498+ }
499+ }
500+
501+
502+
503+@Callable(i)
504+func revealCards (currentGame,card0,card1,card2,playerOrderedCards) = if (checkPermission(i.callerPublicKey))
505+ then throw("setupGame_FORBBIDEN")
506+ else {
507+ let dealerQueue = value(getDealerQueue())
508+ let nextGameToProcess = split(dealerQueue, ",")[1]
509+ if ((nextGameToProcess == toString(currentGame)))
510+ then {
511+ let allPlayersCards = (card0 + card1)
512+ let orderedCards = split(playerOrderedCards, "+")
513+ if (true)
514+ then if (if (if (if ((value(getGameState(currentGame)) == 1))
515+ then verifyCard(card0, currentGame, 0)
516+ else false)
517+ then verifyCard(card1, currentGame, 1)
518+ else false)
519+ then verifyCard(card2, currentGame, 2)
520+ else false)
521+ then [StringEntry(getGameCardsLabel(currentGame, 2), card2), IntegerEntry(value(getGameStateLabel(currentGame)), 2), StringEntry(dealerQueueLabel, takeRight(dealerQueue, (size(dealerQueue) - (1 + size(toString(currentGame)))))), StringEntry(getGameSortedHandLabel(currentGame, "PLAYER"), playerOrderedCards), IntegerEntry(getGameHandScoreLabel(currentGame, "PLAYER"), getScore(orderedCards))]
522+ else throw("One of the cards failed to be verified or game is not in state 1.")
523+ else throw("Ordered cards should be sorted from smallest to largest.")
524+ }
525+ else throw(("The next game to process is " + nextGameToProcess))
526+ }
527+
528+
529+
530+@Callable(i)
531+func startGame () = if ((size(i.payments) != 1))
532+ then throw("Only one mayment allowed")
533+ else {
534+ let p = i.payments[0]
535+ let ante = (p.amount + i.fee)
536+ let address = toBase58String(i.caller.bytes)
537+ if ((value(gamesUsedGetCounter()) >= value(gamesSetupGetCounter())))
538+ then throw("No available set up games to use.")
539+ else match getPlayerCurrentGame(address) {
540+ case CURRENTGAME: Int =>
541+ if ((4 > value(getGameState(CURRENTGAME))))
542+ then throw((("Game " + toString(CURRENTGAME)) + " is still in progress."))
543+ else createGameMetadata(address, ante)
544+ case _: Unit =>
545+ createGameMetadata(address, ante)
546+ case _ =>
547+ throw("Match error")
548+ }
549+ }
550+
551+
552+
553+@Callable(i)
554+func setupGame (gameNumber,cards0,cards1,cards2,cards3) = if (checkPermission(i.callerPublicKey))
555+ then throw("setupGame_FORBBIDEN")
556+ else match gamesSetupGetCounter() {
557+ case SETUPGAMESCOUNTER: Int =>
558+ let randomizer = (toInt(sha256((take(lastBlock.generationSignature, 16) + take(i.transactionId, 16)))) % 2)
559+ let currentGame = (SETUPGAMESCOUNTER + 1)
560+ if ((gameNumber != currentGame))
561+ then throw("Wrong game number.")
562+ else if (((randomizer % 2) == 1))
563+ then getGameSetup(currentGame, randomizer, cards3, cards2, cards1, cards0)
564+ else getGameSetup(currentGame, randomizer, cards0, cards1, cards2, cards3)
565+ case _ =>
566+ throw("InitGame Required")
567+ }
568+
569+
570+@Verifier(tx)
571+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
572+

github/deemru/w8io/169f3d6 
37.74 ms