tx · 433m5rnEcQQVMxUVXiFGyhCJgntHLbYd5t2NSSP6qyBG

3N26e1BbLcoF8kFqpm6Gddr7kxgoDe9REJb:  -0.25000000 Waves

2022.07.25 19:10 [2155567] smart account 3N26e1BbLcoF8kFqpm6Gddr7kxgoDe9REJb > SELF 0.00000000 Waves

{ "type": 13, "id": "433m5rnEcQQVMxUVXiFGyhCJgntHLbYd5t2NSSP6qyBG", "fee": 25000000, "feeAssetId": null, "timestamp": 1658765444830, "version": 2, "chainId": 84, "sender": "3N26e1BbLcoF8kFqpm6Gddr7kxgoDe9REJb", "senderPublicKey": "3krGBeGHSKGxasgdvrDcAML6LcR4761m3mGrStenhy5a", "proofs": [ "4DhArvEPgim7PZ8JCgj9iM8d1ZPEc3vDv864dePR4vAxcg2SBRMdDj1ykmAWAMva8nd2CFbGk8ZcQZsARuLwPhF6" ], "script": "base64:AAIFAAAAAAAAAEAIAhIDCgEIEgYKBAgIAQESABIDCgEIEgMKAQgSAwoBCBIFCgMBCAgSAwoBCBIHCgUBCAgICBIAEgcKBQEICAgIAAAANAAAAAATZ2FtZU1hc3RlclB1YmxpY0tleQEAAAAg+DFhTudECOWNF3WXSLjqufr28OfCR1d8Wlvy/urv+0sAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAZNiYXNlNjQ6TUlJQkl6QU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FSQUFNSUlCQ3dLQ0FRSUErQ3Biek1CS3BxKzdWYXJTREhMVzB3UVNvaDJMVGJnbDFyQWhmcnVaR0NqdDZNTzRvMXYxaUxxS3lOSDNGSnN2d2xMVXFtcUU3RTJXbDdMYklQQTI2UHhPMlhDRGZ2ajBPV3A3Y0VKa1VCRWl5UFlDbitpdVBYVVB3dWRvRmdNNFdIZjBJUGJESjJPNk9nelFsQkJtTnU2T3dyN25hSVRpSnJQQXZha1BnQWRtVVB2NHJPemN1NkJSMFQ4R3dzendwcnZ3V1psS0Y2QWQwMG9tTEZEbXg2Nkh2QkU1MXNSQmlYSVJiSm5qRGhsb3BpemU0TG9SMUZJclFhQXUxc2ZzNWJFSExBMzNqdkt5Ym5lK0lEYXdDc2lJTlpZZFBaVjFXV2NVUkMrWEFGZkJpWUN3NFBZeWd1eGFCUkhvdHpMYzJkT3NCVjFIRE5JakxLVm9Sa255dDUwQ0F3RUFBUT09AAAAABZzZXR1cEdhbWVzQ291bnRlckxhYmVsAgAAABNHX1NFVFVQR0FNRVNDT1VOVEVSAAAAABV1c2VkR2FtZXNDb3VudGVyTGFiZWwCAAAAEkdfVVNFREdBTUVTQ09VTlRFUgAAAAAQZGVhbGVyUXVldWVMYWJlbAIAAAANR19ERUFMRVJRVUVVRQAAAAAPZ2FtZU1heEJldExhYmVsAgAAAAhHX01BWEJFVAEAAAALZ2FtZXNNYXhCZXQAAAAACQAEGgAAAAIFAAAABHRoaXMFAAAAD2dhbWVNYXhCZXRMYWJlbAEAAAAUZ2FtZXNTZXR1cEdldENvdW50ZXIAAAAACQAEGgAAAAIFAAAABHRoaXMFAAAAFnNldHVwR2FtZXNDb3VudGVyTGFiZWwBAAAAE2dhbWVzVXNlZEdldENvdW50ZXIAAAAACQAEGgAAAAIFAAAABHRoaXMFAAAAFXVzZWRHYW1lc0NvdW50ZXJMYWJlbAEAAAAOZ2V0RGVhbGVyUXVldWUAAAAACQAEHQAAAAIFAAAABHRoaXMFAAAAEGRlYWxlclF1ZXVlTGFiZWwBAAAAGmdldEdhbWVDYXJkc1NpZ25hdHVyZUxhYmVsAAAAAgAAAApnYW1lTnVtYmVyAAAABGNhcmQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAD19DQVJEU0lHTkFUVVJFXwkAAaQAAAABBQAAAARjYXJkAQAAABFnZXRHYW1lQ2FyZHNMYWJlbAAAAAIAAAAKZ2FtZU51bWJlcgAAAARjYXJkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAZfQ0FSRF8JAAGkAAAAAQUAAAAEY2FyZAEAAAAWZ2V0R2FtZVNvcnRlZEhhbmRMYWJlbAAAAAIAAAAKZ2FtZU51bWJlcgAAAAN3aG8JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAKZ2FtZU51bWJlcgIAAAABXwUAAAADd2hvAgAAAAtfU09SVEVESEFORAEAAAAVZ2V0R2FtZUhhbmRTY29yZUxhYmVsAAAAAgAAAApnYW1lTnVtYmVyAAAAA3dobwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAFfBQAAAAN3aG8CAAAABl9TQ09SRQEAAAAWZ2V0R2FtZUFudGVBbW91bnRMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAABV9BTlRFAQAAABJnZXRHYW1lUGxheWVyTGFiZWwAAAABAAAACmdhbWVOdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAdfUExBWUVSAQAAABJnZXRHYW1lUGF5b3V0TGFiZWwAAAABAAAACmdhbWVOdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAdfUEFZT1VUAQAAABFnZXRHYW1lU3RhdGVMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAABl9TVEFURQEAAAAaZ2V0R2FtZVNodWZmZWxPZmZlc2V0TGFiZWwAAAABAAAACmdhbWVOdW1iZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAdfT0ZGU0VUAQAAABVnZXRHYW1lQ2FyZHNTaWduYXR1cmUAAAACAAAACmdhbWVOdW1iZXIAAAAEY2FyZAkABB0AAAACBQAAAAR0aGlzCQEAAAAaZ2V0R2FtZUNhcmRzU2lnbmF0dXJlTGFiZWwAAAACBQAAAApnYW1lTnVtYmVyBQAAAARjYXJkAQAAABZnZXRHYW1lU29ydGVkSGFuZENhcmRzAAAAAgAAAApnYW1lTnVtYmVyAAAAA3dobwkABB0AAAACBQAAAAR0aGlzCQEAAAAWZ2V0R2FtZVNvcnRlZEhhbmRMYWJlbAAAAAIFAAAACmdhbWVOdW1iZXIFAAAAA3dobwEAAAAQZ2V0R2FtZUhhbmRTY29yZQAAAAIAAAAKZ2FtZU51bWJlcgAAAAN3aG8JAAQaAAAAAgUAAAAEdGhpcwkBAAAAFWdldEdhbWVIYW5kU2NvcmVMYWJlbAAAAAIFAAAACmdhbWVOdW1iZXIFAAAAA3dobwEAAAAMZ2V0R2FtZUNhcmRzAAAAAgAAAApnYW1lTnVtYmVyAAAABGNhcmQJAAQdAAAAAgUAAAAEdGhpcwkBAAAAEWdldEdhbWVDYXJkc0xhYmVsAAAAAgUAAAAKZ2FtZU51bWJlcgUAAAAEY2FyZAEAAAANZ2V0R2FtZVBsYXllcgAAAAEAAAAKZ2FtZU51bWJlcgkABB0AAAACBQAAAAR0aGlzCQEAAAASZ2V0R2FtZVBsYXllckxhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAAMZ2V0R2FtZVN0YXRlAAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAABFnZXRHYW1lU3RhdGVMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIBAAAAEWdldEdhbWVBbnRlQW1vdW50AAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAABZnZXRHYW1lQW50ZUFtb3VudExhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAAVZ2V0R2FtZVNodWZmZWxPZmZlc2V0AAAAAQAAAApnYW1lTnVtYmVyCQAEGgAAAAIFAAAABHRoaXMJAQAAABpnZXRHYW1lU2h1ZmZlbE9mZmVzZXRMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIBAAAADWdldEdhbWVQYXlvdXQAAAABAAAACmdhbWVOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEmdldEdhbWVQYXlvdXRMYWJlbAAAAAEFAAAACmdhbWVOdW1iZXIBAAAAGWdldFBsYXllckN1cnJlbnRHYW1lTGFiZWwAAAABAAAAB2FkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAAAJQXwUAAAAHYWRkcmVzcwIAAAAMX0NVUlJFTlRHQU1FAQAAABRnZXRQbGF5ZXJDdXJyZW50R2FtZQAAAAEAAAAHYWRkcmVzcwkABBoAAAACBQAAAAR0aGlzCQEAAAAZZ2V0UGxheWVyQ3VycmVudEdhbWVMYWJlbAAAAAEFAAAAB2FkZHJlc3MBAAAACnZlcmlmeUNhcmQAAAADAAAABGNhcmQAAAAKZ2FtZU51bWJlcgAAAApjYXJkTnVtYmVyCQAKKAAAAAQFAAAABlNIQTI1NgkAAZsAAAABBQAAAARjYXJkCQACWwAAAAEJAAGRAAAAAgkABLUAAAACCQEAAAAFdmFsdWUAAAABCQEAAAAVZ2V0R2FtZUNhcmRzU2lnbmF0dXJlAAAAAgUAAAAKZ2FtZU51bWJlcgUAAAAKY2FyZE51bWJlcgIAAAABIAAAAAAAAAAAAAUAAAAJUlNBUFVCTElDAQAAAA9jaGVja1Blcm1pc3Npb24AAAABAAAAD2NhbGxlclB1YmxpY0tleQkBAAAAAiE9AAAAAgUAAAAPY2FsbGVyUHVibGljS2V5BQAAABNnYW1lTWFzdGVyUHVibGljS2V5AQAAABJjcmVhdGVHYW1lTWV0YWRhdGEAAAACAAAAB2FkZHJlc3MAAAAEYW50ZQQAAAANZ2FtZVRvUmVzZXJ2ZQkAAGQAAAACCQEAAAAFdmFsdWUAAAABCQEAAAATZ2FtZXNVc2VkR2V0Q291bnRlcgAAAAAAAAAAAAAAAAEEAAAAC2RlYWxlclF1ZXVlCQEAAAAFdmFsdWUAAAABCQEAAAAOZ2V0RGVhbGVyUXVldWUAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABV1c2VkR2FtZXNDb3VudGVyTGFiZWwFAAAADWdhbWVUb1Jlc2VydmUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABlnZXRQbGF5ZXJDdXJyZW50R2FtZUxhYmVsAAAAAQUAAAAHYWRkcmVzcwUAAAANZ2FtZVRvUmVzZXJ2ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldEdhbWVTdGF0ZUxhYmVsAAAAAQUAAAANZ2FtZVRvUmVzZXJ2ZQAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmdldEdhbWVBbnRlQW1vdW50TGFiZWwAAAABBQAAAA1nYW1lVG9SZXNlcnZlBQAAAARhbnRlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEGRlYWxlclF1ZXVlTGFiZWwJAAEsAAAAAgkAASwAAAACCQEAAAAFdmFsdWUAAAABCQEAAAAOZ2V0RGVhbGVyUXVldWUAAAAAAgAAAAEsCQABpAAAAAEFAAAADWdhbWVUb1Jlc2VydmUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmdldEdhbWVQbGF5ZXJMYWJlbAAAAAEFAAAADWdhbWVUb1Jlc2VydmUFAAAAB2FkZHJlc3MFAAAAA25pbAEAAAAMZ2V0R2FtZVNldHVwAAAABgAAAApnYW1lTnVtYmVyAAAACnJhbmRvbWl6ZXIAAAAGY2FyZHMwAAAABmNhcmRzMQAAAAZjYXJkczIAAAAGY2FyZHMzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABZzZXR1cEdhbWVzQ291bnRlckxhYmVsBQAAAApnYW1lTnVtYmVyCQAETAAAAAIJAQAAAAxJ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aAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACBAAAABVkZWFsZXJzSGlnaGVzdE5vblBhaXIJAQAAABdnZXRIaWdoZXN0Tm9uUGFpck51bWJlcgAAAAEFAAAAEGFsbERlYWxlck51bWJlcnMEAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIJAQAAABdnZXRIaWdoZXN0Tm9uUGFpck51bWJlcgAAAAEFAAAAEGFsbFBsYXllck51bWJlcnMDCQAAAAAAAAIFAAAAC3BsYXllclZhbHVlAAAAAAAAAAACBAAAABFwbGF5ZXJzTG93ZXN0UGFpcgkBAAAAEGxvd2VzdFBhaXJOdW1iZXIAAAABBQAAABBhbGxQbGF5ZXJOdW1iZXJzBAAAABFkZWFsZXJzTG93ZXN0UGFpcgkBAAAAEGxvd2VzdFBhaXJOdW1iZXIAAAABBQAAABBhbGxEZWFsZXJOdW1iZXJzAwkAAGYAAAACBQAAABFkZWFsZXJzTG93ZXN0UGFpcgUAAAARcGxheWVyc0xvd2VzdFBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAEXBsYXllcnNMb3dlc3RQYWlyBQAAABFkZWFsZXJzTG93ZXN0UGFpcgkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACAwkAAGYAAAACBQAAABVkZWFsZXJzSGlnaGVzdE5vblBhaXIFAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIFAAAAFWRlYWxlcnNIaWdoZXN0Tm9uUGFpcgkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACCQAAZAAAAAIFAAAABGFudGUJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgMJAABmAAAAAgUAAAAVZGVhbGVyc0hpZ2hlc3ROb25QYWlyBQAAABZwbGF5ZXJzc0hpZ2hlc3ROb25QYWlyAAAAAAAAAAAAAwkAAGYAAAACBQAAABZwbGF5ZXJzc0hpZ2hlc3ROb25QYWlyBQAAABVkZWFsZXJzSGlnaGVzdE5vblBhaXIJAABkAAAAAgkAAGgAAAACCQAAaAAAAAIJAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQUAAAALcGxheWVyVmFsdWUFAAAABGFudGUAAAAAAAAAAAIJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgQAAAAbZGVhbGVyc3NlY29uZEhpZ2hlc3ROb25QYWlyCQEAAAAec2Vjb25kSGlnaGVzdE5vblBhaXJPZlBhaXJIYW5kAAAAAQUAAAAQYWxsRGVhbGVyTnVtYmVycwQAAAAbcGxheWVyc3NlY29uZEhpZ2hlc3ROb25QYWlyCQEAAAAec2Vjb25kSGlnaGVzdE5vblBhaXJPZlBhaXJIYW5kAAAAAQUAAAAQYWxsUGxheWVyTnVtYmVycwMJAABmAAAAAgUAAAAbZGVhbGVyc3NlY29uZEhpZ2hlc3ROb25QYWlyBQAAABtwbGF5ZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAG3BsYXllcnNzZWNvbmRIaWdoZXN0Tm9uUGFpcgUAAAAbZGVhbGVyc3NlY29uZEhpZ2hlc3ROb25QYWlyCQAAZAAAAAIJAABoAAAAAgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIEAAAAGmRlYWxlcnN0aGlyZEhpZ2hlc3ROb25QYWlyCQEAAAAddGhpcmRIaWdoZXN0Tm9uUGFpck9mUGFpckhhbmQAAAABBQAAABBhbGxEZWFsZXJOdW1iZXJzBAAAABpwbGF5ZXJzdGhpcmRIaWdoZXN0Tm9uUGFpcgkBAAAAHXRoaXJkSGlnaGVzdE5vblBhaXJPZlBhaXJIYW5kAAAAAQUAAAAQYWxsUGxheWVyTnVtYmVycwMJAABmAAAAAgUAAAAaZGVhbGVyc3RoaXJkSGlnaGVzdE5vblBhaXIFAAAAGnBsYXllcnN0aGlyZEhpZ2hlc3ROb25QYWlyAAAAAAAAAAAAAwkAAGYAAAACBQAAABpwbGF5ZXJzdGhpcmRIaWdoZXN0Tm9uUGFpcgUAAAAaZGVhbGVyc3RoaXJkSGlnaGVzdE5vblBhaXIJAABkAAAAAgkAAGgAAAACCQAAaAAAAAIJAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQUAAAALcGxheWVyVmFsdWUFAAAABGFudGUAAAAAAAAAAAIJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgkAAGQAAAACBQAAAARhbnRlCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIEAAAAEGhpZ2hlc3RDYXJkVGhlcmUJAQAAABF3aG9IYXNIaWdoZXN0Q2FyZAAAAAIFAAAAEGFsbFBsYXllck51bWJlcnMFAAAAEGFsbERlYWxlck51bWJlcnMDCQAAAAAAAAIFAAAAEGhpZ2hlc3RDYXJkVGhlcmUAAAAAAAAAAAEJAABkAAAAAgkAAGgAAAACCQAAaAAAAAIJAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQUAAAALcGxheWVyVmFsdWUFAAAABGFudGUAAAAAAAAAAAIJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgMJAAAAAAAAAgUAAAAQaGlnaGVzdENhcmRUaGVyZQAAAAAAAAAAAgAAAAAAAAAAAAkAAGQAAAACBQAAAARhbnRlCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIDCQAAZgAAAAIFAAAAC3BsYXllclZhbHVlBQAAAAtkZWFsZXJWYWx1ZQkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACAAAAAAAAAAAACQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAQAAAALAAAAAWkBAAAAE3Rlc3RQYWlyU2luZ2xlQ2FyZHMAAAABAAAADG9yZGVyZWRDYXJkcwQAAAAEaGFuZAkABLUAAAACBQAAAAxvcmRlcmVkQ2FyZHMCAAAAASsEAAAACmFsbE51bWJlcnMJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgkABE0AAAACBQAAAANuaWwJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAAJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAEJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAIJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAMJAQAAAAlnZXROdW1iZXIAAAABCQABkQAAAAIFAAAABGhhbmQAAAAAAAAAAAQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABpAAAAAEJAQAAABdnZXRIaWdoZXN0Tm9uUGFpck51bWJlcgAAAAEFAAAACmFsbE51bWJlcnMCAAAAAS0JAAGkAAAAAQkBAAAAHnNlY29uZEhpZ2hlc3ROb25QYWlyT2ZQYWlySGFuZAAAAAEFAAAACmFsbE51bWJlcnMCAAAAAS0JAAGkAAAAAQkBAAAAHXRoaXJkSGlnaGVzdE5vblBhaXJPZlBhaXJIYW5kAAAAAQUAAAAKYWxsTnVtYmVycwAAAAFpAQAAAAp0ZXN0UGF5b3V0AAAABAAAAApwbGF5ZXJIYW5kAAAACmRlYWxlckhhbmQAAAAEYW50ZQAAAAtwbGF5ZXJTY29yZQkAAAIAAAABCQABpAAAAAEJAQAAAA9nZXRQbGF5ZXJQYXlvdXQAAAAEBQAAAApwbGF5ZXJIYW5kBQAAAApkZWFsZXJIYW5kBQAAAARhbnRlBQAAAAtwbGF5ZXJTY29yZQAAAAFpAQAAAAhpbml0R2FtZQAAAAADCQEAAAAPY2hlY2tQZXJtaXNzaW9uAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAEmluaXRHYW1lX0ZPUkJCSURFTgQAAAAHJG1hdGNoMAkBAAAAFGdhbWVzU2V0dXBHZXRDb3VudGVyAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAxHQU1FU0NPVU5URVIFAAAAByRtYXRjaDAJAAACAAAAAQIAAAARSU5JVF9BTFJFQURZX0RPTkUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFnNldHVwR2FtZXNDb3VudGVyTGFiZWwAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFXVzZWRHYW1lc0NvdW50ZXJMYWJlbAAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPZ2FtZU1heEJldExhYmVsAAAAAAAL68IACQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEGRlYWxlclF1ZXVlTGFiZWwCAAAAAAUAAAADbmlsAAAAAWkBAAAACXRlc3RTY29yZQAAAAEAAAAMb3JkZXJlZENhcmRzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAlTY29yZSBpcyAJAAGkAAAAAQkBAAAACGdldFNjb3JlAAAAAQkABLUAAAACBQAAAAxvcmRlcmVkQ2FyZHMCAAAAASsCAAAAAS4AAAABaQEAAAAPdGVzdEhpZ2hlc3RQYWlyAAAAAQAAAAxvcmRlcmVkQ2FyZHMEAAAABGhhbmQJAAS1AAAAAgUAAAAMb3JkZXJlZENhcmRzAgAAAAErBAAAAAphbGxOdW1iZXJzCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgUAAAADbmlsCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAACQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAABCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAACCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAADCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAECQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFIaWdoZXN0IFBhaXJzIGlzIAkAAaQAAAABCQEAAAARaGlnaGVzdFBhaXJOdW1iZXIAAAABBQAAAAphbGxOdW1iZXJzAgAAAAEuAAAAAWkBAAAADnRlc3RMb3dlc3RQYWlyAAAAAQAAAAxvcmRlcmVkQ2FyZHMEAAAABGhhbmQJAAS1AAAAAgUAAAAMb3JkZXJlZENhcmRzAgAAAAErBAAAAAphbGxOdW1iZXJzCQAETQAAAAIJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARNAAAAAgUAAAADbmlsCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAACQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAABCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAACCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAADCQEAAAAJZ2V0TnVtYmVyAAAAAQkAAZEAAAACBQAAAARoYW5kAAAAAAAAAAAECQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFIaWdoZXN0IFBhaXJzIGlzIAkAAaQAAAABCQEAAAAQbG93ZXN0UGFpck51bWJlcgAAAAEFAAAACmFsbE51bWJlcnMCAAAAAS4AAAABaQEAAAANcmV2ZWFsUmVzdWx0cwAAAAMAAAALY3VycmVudEdhbWUAAAAFY2FyZDMAAAASZGVhbGVyT3JkZXJlZENhcmRzAwkBAAAAD2NoZWNrUGVybWlzc2lvbgAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAABNzZXR1cEdhbWVfRk9SQkJJREVOBAAAAAtkZWFsZXJRdWV1ZQkBAAAABXZhbHVlAAAAAQkBAAAADmdldERlYWxlclF1ZXVlAAAAAAQAAAARbmV4dEdhbWVUb1Byb2Nlc3MJAAGRAAAAAgkABLUAAAACBQAAAAtkZWFsZXJRdWV1ZQIAAAABLAAAAAAAAAAAAQMJAAAAAAAAAgUAAAARbmV4dEdhbWVUb1Byb2Nlc3MJAAGkAAAAAQUAAAALY3VycmVudEdhbWUDCQEAAAAKdmVyaWZ5Q2FyZAAAAAMFAAAABWNhcmQzBQAAAAtjdXJyZW50R2FtZQAAAAAAAAAAAwQAAAAEYW50ZQkBAAAABXZhbHVlAAAAAQkBAAAAEWdldEdhbWVBbnRlQW1vdW50AAAAAQUAAAALY3VycmVudEdhbWUEAAAAB2FkZHJlc3MJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQkBAAAABXZhbHVlAAAAAQkBAAAADWdldEdhbWVQbGF5ZXIAAAABBQAAAAtjdXJyZW50R2FtZQQAAAATcGxheWVyc09yZGVyZWRDYXJkcwkBAAAABXZhbHVlAAAAAQkBAAAAFmdldEdhbWVTb3J0ZWRIYW5kQ2FyZHMAAAACBQAAAAtjdXJyZW50R2FtZQIAAAAGUExBWUVSBAAAAAZwYXlvdXQJAQAAAA9nZXRQbGF5ZXJQYXlvdXQAAAAEBQAAABNwbGF5ZXJzT3JkZXJlZENhcmRzBQAAABJkZWFsZXJPcmRlcmVkQ2FyZHMFAAAABGFudGUJAQAAAAV2YWx1ZQAAAAEJAQAAABBnZXRHYW1lSGFuZFNjb3JlAAAAAgUAAAALY3VycmVudEdhbWUCAAAABlBMQVlFUgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEWdldEdhbWVTdGF0ZUxhYmVsAAAAAQUAAAALY3VycmVudEdhbWUAAAAAAAAAAAQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAQZGVhbGVyUXVldWVMYWJlbAkBAAAACXRha2VSaWdodAAAAAIFAAAAC2RlYWxlclF1ZXVlCQAAZQAAAAIJAAExAAAAAQUAAAALZGVhbGVyUXVldWUJAABkAAAAAgAAAAAAAAAAAQkAATEAAAABCQABpAAAAAEFAAAAC2N1cnJlbnRHYW1lCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASZ2V0R2FtZVBheW91dExhYmVsAAAAAQUAAAALY3VycmVudEdhbWUFAAAABnBheW91dAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAWZ2V0R2FtZVNvcnRlZEhhbmRMYWJlbAAAAAIFAAAAC2N1cnJlbnRHYW1lAgAAAAZERUFMRVIFAAAAEmRlYWxlck9yZGVyZWRDYXJkcwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAdhZGRyZXNzBQAAAAZw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", "height": 2155567, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HXPpudvxxraxnjQ8bjitxe5LsnFEJXjU4YPDzkE7Xiw4 Next: none Diff:
OldNewDifferences
424424 case GAMESCOUNTER: Int =>
425425 throw("INIT_ALREADY_DONE")
426426 case _ =>
427-[IntegerEntry(setupGamesCounterLabel, 0), IntegerEntry(usedGamesCounterLabel, 0), IntegerEntry(gameMaxBetLabel, 100000000), StringEntry(dealerQueueLabel, "")]
427+[IntegerEntry(setupGamesCounterLabel, 0), IntegerEntry(usedGamesCounterLabel, 0), IntegerEntry(gameMaxBetLabel, 200000000), StringEntry(dealerQueueLabel, "")]
428428 }
429429
430430
534534 let p = i.payments[0]
535535 let ante = p.amount
536536 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- }
537+ if ((ante > value(gamesMaxBet())))
538+ then throw("Max bet exceeded")
539+ else if ((value(gamesUsedGetCounter()) >= value(gamesSetupGetCounter())))
540+ then throw("No available set up games to use.")
541+ else match getPlayerCurrentGame(address) {
542+ case CURRENTGAME: Int =>
543+ if ((4 > value(getGameState(CURRENTGAME))))
544+ then throw((("Game " + toString(CURRENTGAME)) + " is still in progress."))
545+ else createGameMetadata(address, ante)
546+ case _: Unit =>
547+ createGameMetadata(address, ante)
548+ case _ =>
549+ throw("Match error")
550+ }
549551 }
550552
551553
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let gameMasterPublicKey = base58'HhqnJW5MzQyVzkHSPWqYYRn7cuwbD95CkP8tnRQYzrWW'
55
66 let RSAPUBLIC = fromBase64String("base64:MIIBIzANBgkqhkiG9w0BAQEFAAOCARAAMIIBCwKCAQIA+CpbzMBKpq+7VarSDHLW0wQSoh2LTbgl1rAhfruZGCjt6MO4o1v1iLqKyNH3FJsvwlLUqmqE7E2Wl7LbIPA26PxO2XCDfvj0OWp7cEJkUBEiyPYCn+iuPXUPwudoFgM4WHf0IPbDJ2O6OgzQlBBmNu6Owr7naITiJrPAvakPgAdmUPv4rOzcu6BR0T8GwszwprvwWZlKF6Ad00omLFDmx66HvBE51sRBiXIRbJnjDhlopize4LoR1FIrQaAu1sfs5bEHLA33jvKybne+IDawCsiINZYdPZV1WWcURC+XAFfBiYCw4PYyguxaBRHotzLc2dOsBV1HDNIjLKVoRknyt50CAwEAAQ==")
77
88 let setupGamesCounterLabel = "G_SETUPGAMESCOUNTER"
99
1010 let usedGamesCounterLabel = "G_USEDGAMESCOUNTER"
1111
1212 let dealerQueueLabel = "G_DEALERQUEUE"
1313
1414 let gameMaxBetLabel = "G_MAXBET"
1515
1616 func gamesMaxBet () = getInteger(this, gameMaxBetLabel)
1717
1818
1919 func gamesSetupGetCounter () = getInteger(this, setupGamesCounterLabel)
2020
2121
2222 func gamesUsedGetCounter () = getInteger(this, usedGamesCounterLabel)
2323
2424
2525 func getDealerQueue () = getString(this, dealerQueueLabel)
2626
2727
2828 func getGameCardsSignatureLabel (gameNumber,card) = ((("G_" + toString(gameNumber)) + "_CARDSIGNATURE_") + toString(card))
2929
3030
3131 func getGameCardsLabel (gameNumber,card) = ((("G_" + toString(gameNumber)) + "_CARD_") + toString(card))
3232
3333
3434 func getGameSortedHandLabel (gameNumber,who) = (((("G_" + toString(gameNumber)) + "_") + who) + "_SORTEDHAND")
3535
3636
3737 func getGameHandScoreLabel (gameNumber,who) = (((("G_" + toString(gameNumber)) + "_") + who) + "_SCORE")
3838
3939
4040 func getGameAnteAmountLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_ANTE")
4141
4242
4343 func getGamePlayerLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_PLAYER")
4444
4545
4646 func getGamePayoutLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_PAYOUT")
4747
4848
4949 func getGameStateLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_STATE")
5050
5151
5252 func getGameShuffelOffesetLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_OFFSET")
5353
5454
5555 func getGameCardsSignature (gameNumber,card) = getString(this, getGameCardsSignatureLabel(gameNumber, card))
5656
5757
5858 func getGameSortedHandCards (gameNumber,who) = getString(this, getGameSortedHandLabel(gameNumber, who))
5959
6060
6161 func getGameHandScore (gameNumber,who) = getInteger(this, getGameHandScoreLabel(gameNumber, who))
6262
6363
6464 func getGameCards (gameNumber,card) = getString(this, getGameCardsLabel(gameNumber, card))
6565
6666
6767 func getGamePlayer (gameNumber) = getString(this, getGamePlayerLabel(gameNumber))
6868
6969
7070 func getGameState (gameNumber) = getInteger(this, getGameStateLabel(gameNumber))
7171
7272
7373 func getGameAnteAmount (gameNumber) = getInteger(this, getGameAnteAmountLabel(gameNumber))
7474
7575
7676 func getGameShuffelOffeset (gameNumber) = getInteger(this, getGameShuffelOffesetLabel(gameNumber))
7777
7878
7979 func getGamePayout (gameNumber) = getInteger(this, getGamePayoutLabel(gameNumber))
8080
8181
8282 func getPlayerCurrentGameLabel (address) = (("P_" + address) + "_CURRENTGAME")
8383
8484
8585 func getPlayerCurrentGame (address) = getInteger(this, getPlayerCurrentGameLabel(address))
8686
8787
8888 func verifyCard (card,gameNumber,cardNumber) = rsaVerify_16Kb(SHA256, toBytes(card), fromBase64String(split(value(getGameCardsSignature(gameNumber, cardNumber)), " ")[0]), RSAPUBLIC)
8989
9090
9191 func checkPermission (callerPublicKey) = (callerPublicKey != gameMasterPublicKey)
9292
9393
9494 func createGameMetadata (address,ante) = {
9595 let gameToReserve = (value(gamesUsedGetCounter()) + 1)
9696 let dealerQueue = value(getDealerQueue())
9797 [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)]
9898 }
9999
100100
101101 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)]
102102
103103
104104 func getSuit (card) = split(card, "/")[1]
105105
106106
107107 func getNumber (card) = value(parseInt(split(card, "/")[0]))
108108
109109
110110 func isFourOfAKind (hand) = if (if ((hand[0] == hand[3]))
111111 then true
112112 else (hand[1] == hand[4]))
113113 then true
114114 else false
115115
116116
117117 func isFullHouse (hand) = if (if (if ((hand[0] == hand[2]))
118118 then (hand[3] == hand[4])
119119 else false)
120120 then true
121121 else if ((hand[0] == hand[1]))
122122 then (hand[2] == hand[4])
123123 else false)
124124 then true
125125 else false
126126
127127
128128 func isFlush (hand) = {
129129 let firstSuit = hand[0]
130130 if (if (if (if ((hand[1] == firstSuit))
131131 then (hand[2] == firstSuit)
132132 else false)
133133 then (hand[3] == firstSuit)
134134 else false)
135135 then (hand[4] == firstSuit)
136136 else false)
137137 then true
138138 else false
139139 }
140140
141141
142142 func isStraight (hand) = {
143143 let largest = hand[4]
144144 if (if (if (if ((hand[3] == (largest - 1)))
145145 then (hand[2] == (largest - 2))
146146 else false)
147147 then (hand[1] == (largest - 3))
148148 else false)
149149 then (hand[0] == (largest - 4))
150150 else false)
151151 then true
152152 else false
153153 }
154154
155155
156156 func isThreeOfKind (hand) = if (if (if ((hand[0] == hand[2]))
157157 then true
158158 else (hand[1] == hand[3]))
159159 then true
160160 else (hand[2] == hand[4]))
161161 then true
162162 else false
163163
164164
165165 func isTwoPair (hand) = {
166166 let numberOfPairs = 0
167167 let matching = [(hand[0] == hand[1]), (hand[1] == hand[2]), (hand[2] == hand[3]), (hand[3] == hand[4])]
168168 if (if (if ((indexOf(matching, true) != lastIndexOf(matching, true)))
169169 then (indexOf(matching, true) != unit)
170170 else false)
171171 then (lastIndexOf(matching, true) != unit)
172172 else false)
173173 then true
174174 else false
175175 }
176176
177177
178178 func isOnePair (hand) = if (if (if (if ((hand[0] == hand[1]))
179179 then true
180180 else (hand[1] == hand[2]))
181181 then true
182182 else (hand[2] == hand[3]))
183183 then true
184184 else (hand[3] == hand[4]))
185185 then true
186186 else false
187187
188188
189189 func getScore (hand) = {
190190 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
191191 let allSuits = (((((nil :+ getSuit(hand[0])) :+ getSuit(hand[1])) :+ getSuit(hand[2])) :+ getSuit(hand[3])) :+ getSuit(hand[4]))
192192 if (isStraight(allNumbers))
193193 then if (isFlush(allSuits))
194194 then if ((allNumbers[4] == 14))
195195 then 9
196196 else 8
197197 else 4
198198 else if (isFourOfAKind(allNumbers))
199199 then 7
200200 else if (isFullHouse(allNumbers))
201201 then 6
202202 else if (isFlush(allSuits))
203203 then 5
204204 else if (isThreeOfKind(allNumbers))
205205 then 3
206206 else if (isTwoPair(allNumbers))
207207 then 2
208208 else if (isOnePair(allNumbers))
209209 then 1
210210 else 0
211211 }
212212
213213
214214 func payoutMultiplier (playerScore) = if ((playerScore == 9))
215215 then 101
216216 else if ((playerScore == 8))
217217 then 51
218218 else if ((playerScore == 7))
219219 then 21
220220 else if ((playerScore == 6))
221221 then 8
222222 else if ((playerScore == 5))
223223 then 6
224224 else if ((playerScore == 4))
225225 then 5
226226 else if ((playerScore == 3))
227227 then 4
228228 else if ((playerScore == 2))
229229 then 3
230230 else 2
231231
232232
233233 func whoHasHighestCard (allPlayerNumbers,allDealerNumbers) = if ((allDealerNumbers[4] > allPlayerNumbers[4]))
234234 then 2
235235 else if ((allPlayerNumbers[4] > allDealerNumbers[4]))
236236 then 1
237237 else if ((allDealerNumbers[3] > allPlayerNumbers[3]))
238238 then 2
239239 else if ((allPlayerNumbers[3] > allDealerNumbers[3]))
240240 then 1
241241 else if ((allDealerNumbers[2] > allPlayerNumbers[2]))
242242 then 2
243243 else if ((allPlayerNumbers[2] > allDealerNumbers[2]))
244244 then 1
245245 else if ((allDealerNumbers[1] > allPlayerNumbers[1]))
246246 then 2
247247 else if ((allPlayerNumbers[1] > allDealerNumbers[1]))
248248 then 1
249249 else if ((allDealerNumbers[0] > allPlayerNumbers[0]))
250250 then 2
251251 else if ((allPlayerNumbers[0] > allDealerNumbers[0]))
252252 then 1
253253 else 0
254254
255255
256256 func highestPairNumber (cardNumbers) = if ((cardNumbers[4] == cardNumbers[3]))
257257 then cardNumbers[4]
258258 else if ((cardNumbers[3] == cardNumbers[2]))
259259 then cardNumbers[3]
260260 else if ((cardNumbers[2] == cardNumbers[1]))
261261 then cardNumbers[2]
262262 else if ((cardNumbers[1] == cardNumbers[0]))
263263 then cardNumbers[1]
264264 else -1
265265
266266
267267 func lowestPairNumber (cardNumbers) = if ((cardNumbers[0] == cardNumbers[1]))
268268 then cardNumbers[1]
269269 else if ((cardNumbers[1] == cardNumbers[2]))
270270 then cardNumbers[1]
271271 else if ((cardNumbers[2] == cardNumbers[3]))
272272 then cardNumbers[2]
273273 else if ((cardNumbers[3] == cardNumbers[4]))
274274 then cardNumbers[3]
275275 else -1
276276
277277
278278 func getHighestNonPairNumber (cardNumbers) = if ((cardNumbers[4] != cardNumbers[3]))
279279 then cardNumbers[4]
280280 else if ((cardNumbers[2] != cardNumbers[1]))
281281 then cardNumbers[2]
282282 else cardNumbers[0]
283283
284284
285285 func secondHighestNonPairOfPairHand (cardNumbers) = if ((cardNumbers[3] == cardNumbers[2]))
286286 then cardNumbers[1]
287287 else if ((cardNumbers[2] == cardNumbers[1]))
288288 then cardNumbers[3]
289289 else cardNumbers[2]
290290
291291
292292 func thirdHighestNonPairOfPairHand (cardNumbers) = if ((cardNumbers[0] == cardNumbers[1]))
293293 then cardNumbers[2]
294294 else cardNumbers[0]
295295
296296
297297 func getPlayerPayout (playerHand,dealerHand,ante,playerScore) = {
298298 let playerCards = split(playerHand, "+")
299299 let playerValue = playerScore
300300 let dealerCards = split(dealerHand, "+")
301301 let dealerValue = getScore(dealerCards)
302302 let allPlayerNumbers = (((((nil :+ getNumber(playerCards[0])) :+ getNumber(playerCards[1])) :+ getNumber(playerCards[2])) :+ getNumber(playerCards[3])) :+ getNumber(playerCards[4]))
303303 let allDealerNumbers = (((((nil :+ getNumber(dealerCards[0])) :+ getNumber(dealerCards[1])) :+ getNumber(dealerCards[2])) :+ getNumber(dealerCards[3])) :+ getNumber(dealerCards[4]))
304304 if (if (if ((indexOf(dealerHand, "13") != unit))
305305 then (indexOf(dealerHand, "14") != unit)
306306 else false)
307307 then true
308308 else (dealerValue >= 1))
309309 then if ((playerValue == dealerValue))
310310 then if ((playerValue == 9))
311311 then (ante + (ante * 2))
312312 else if (if ((playerValue == 8))
313313 then true
314314 else (playerValue == 4))
315315 then if ((allDealerNumbers[4] > allPlayerNumbers[4]))
316316 then 0
317317 else if ((allDealerNumbers[4] == allPlayerNumbers[4]))
318318 then (ante + (ante * 2))
319319 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
320320 else if ((playerValue == 7))
321321 then if ((allDealerNumbers[1] > allPlayerNumbers[1]))
322322 then 0
323323 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
324324 else if ((playerValue == 6))
325325 then if ((allDealerNumbers[2] > allPlayerNumbers[2]))
326326 then 0
327327 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
328328 else if ((playerValue == 5))
329329 then {
330330 let highestCardThere = whoHasHighestCard(allPlayerNumbers, allDealerNumbers)
331331 if ((highestCardThere == 1))
332332 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
333333 else if ((highestCardThere == 2))
334334 then 0
335335 else (ante + (ante * 2))
336336 }
337337 else if ((playerValue == 3))
338338 then if ((allDealerNumbers[2] > allPlayerNumbers[2]))
339339 then 0
340340 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
341341 else if (if ((playerValue == 2))
342342 then true
343343 else (playerValue == 1))
344344 then {
345345 let playersHighestPair = highestPairNumber(allPlayerNumbers)
346346 let dealersHighestPair = highestPairNumber(allDealerNumbers)
347347 if ((dealersHighestPair > playersHighestPair))
348348 then 0
349349 else if ((playersHighestPair > dealersHighestPair))
350350 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
351351 else {
352352 let dealersHighestNonPair = getHighestNonPairNumber(allDealerNumbers)
353353 let playerssHighestNonPair = getHighestNonPairNumber(allPlayerNumbers)
354354 if ((playerValue == 2))
355355 then {
356356 let playersLowestPair = lowestPairNumber(allPlayerNumbers)
357357 let dealersLowestPair = lowestPairNumber(allDealerNumbers)
358358 if ((dealersLowestPair > playersLowestPair))
359359 then 0
360360 else if ((playersLowestPair > dealersLowestPair))
361361 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
362362 else if ((dealersHighestNonPair > playerssHighestNonPair))
363363 then 0
364364 else if ((playerssHighestNonPair > dealersHighestNonPair))
365365 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
366366 else (ante + (ante * 2))
367367 }
368368 else if ((dealersHighestNonPair > playerssHighestNonPair))
369369 then 0
370370 else if ((playerssHighestNonPair > dealersHighestNonPair))
371371 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
372372 else {
373373 let dealerssecondHighestNonPair = secondHighestNonPairOfPairHand(allDealerNumbers)
374374 let playerssecondHighestNonPair = secondHighestNonPairOfPairHand(allPlayerNumbers)
375375 if ((dealerssecondHighestNonPair > playerssecondHighestNonPair))
376376 then 0
377377 else if ((playerssecondHighestNonPair > dealerssecondHighestNonPair))
378378 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
379379 else {
380380 let dealersthirdHighestNonPair = thirdHighestNonPairOfPairHand(allDealerNumbers)
381381 let playersthirdHighestNonPair = thirdHighestNonPairOfPairHand(allPlayerNumbers)
382382 if ((dealersthirdHighestNonPair > playersthirdHighestNonPair))
383383 then 0
384384 else if ((playersthirdHighestNonPair > dealersthirdHighestNonPair))
385385 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
386386 else (ante + (ante * 2))
387387 }
388388 }
389389 }
390390 }
391391 else {
392392 let highestCardThere = whoHasHighestCard(allPlayerNumbers, allDealerNumbers)
393393 if ((highestCardThere == 1))
394394 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
395395 else if ((highestCardThere == 2))
396396 then 0
397397 else (ante + (ante * 2))
398398 }
399399 else if ((playerValue > dealerValue))
400400 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
401401 else 0
402402 else (ante * 4)
403403 }
404404
405405
406406 @Callable(i)
407407 func testPairSingleCards (orderedCards) = {
408408 let hand = split(orderedCards, "+")
409409 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
410410 throw(((((toString(getHighestNonPairNumber(allNumbers)) + "-") + toString(secondHighestNonPairOfPairHand(allNumbers))) + "-") + toString(thirdHighestNonPairOfPairHand(allNumbers))))
411411 }
412412
413413
414414
415415 @Callable(i)
416416 func testPayout (playerHand,dealerHand,ante,playerScore) = throw(toString(getPlayerPayout(playerHand, dealerHand, ante, playerScore)))
417417
418418
419419
420420 @Callable(i)
421421 func initGame () = if (checkPermission(i.callerPublicKey))
422422 then throw("initGame_FORBBIDEN")
423423 else match gamesSetupGetCounter() {
424424 case GAMESCOUNTER: Int =>
425425 throw("INIT_ALREADY_DONE")
426426 case _ =>
427-[IntegerEntry(setupGamesCounterLabel, 0), IntegerEntry(usedGamesCounterLabel, 0), IntegerEntry(gameMaxBetLabel, 100000000), StringEntry(dealerQueueLabel, "")]
427+[IntegerEntry(setupGamesCounterLabel, 0), IntegerEntry(usedGamesCounterLabel, 0), IntegerEntry(gameMaxBetLabel, 200000000), StringEntry(dealerQueueLabel, "")]
428428 }
429429
430430
431431
432432 @Callable(i)
433433 func testScore (orderedCards) = throw((("Score is " + toString(getScore(split(orderedCards, "+")))) + "."))
434434
435435
436436
437437 @Callable(i)
438438 func testHighestPair (orderedCards) = {
439439 let hand = split(orderedCards, "+")
440440 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
441441 throw((("Highest Pairs is " + toString(highestPairNumber(allNumbers))) + "."))
442442 }
443443
444444
445445
446446 @Callable(i)
447447 func testLowestPair (orderedCards) = {
448448 let hand = split(orderedCards, "+")
449449 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
450450 throw((("Highest Pairs is " + toString(lowestPairNumber(allNumbers))) + "."))
451451 }
452452
453453
454454
455455 @Callable(i)
456456 func revealResults (currentGame,card3,dealerOrderedCards) = if (checkPermission(i.callerPublicKey))
457457 then throw("setupGame_FORBBIDEN")
458458 else {
459459 let dealerQueue = value(getDealerQueue())
460460 let nextGameToProcess = split(dealerQueue, ",")[1]
461461 if ((nextGameToProcess == toString(currentGame)))
462462 then if (verifyCard(card3, currentGame, 3))
463463 then {
464464 let ante = value(getGameAnteAmount(currentGame))
465465 let address = value(addressFromString(value(getGamePlayer(currentGame))))
466466 let playersOrderedCards = value(getGameSortedHandCards(currentGame, "PLAYER"))
467467 let payout = getPlayerPayout(playersOrderedCards, dealerOrderedCards, ante, value(getGameHandScore(currentGame, "PLAYER")))
468468 [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)]
469469 }
470470 else throw("One of the cards failed to be verified.")
471471 else throw(("The next game to process is " + nextGameToProcess))
472472 }
473473
474474
475475
476476 @Callable(i)
477477 func foldOrRaise (action) = {
478478 let address = toBase58String(i.caller.bytes)
479479 if (if ((action != "fold"))
480480 then (action != "raise")
481481 else false)
482482 then throw("Invalid action.")
483483 else {
484484 let currentGame = value(getPlayerCurrentGame(address))
485485 if (value((getGameState(currentGame) != 2)))
486486 then throw("Game is not in correct state.")
487487 else if ((action == "raise"))
488488 then {
489489 let ante = value(getGameAnteAmount(currentGame))
490490 let pay = i.payments[0].amount
491491 if (if ((size(i.payments) != 1))
492492 then true
493493 else (pay != (ante * 2)))
494494 then throw((("Payment must be 2x the ante (" + toString((ante * 2))) + ")"))
495495 else [IntegerEntry(getGameStateLabel(currentGame), 3), StringEntry(dealerQueueLabel, ((value(getDealerQueue()) + ",") + toString(currentGame)))]
496496 }
497497 else [IntegerEntry(getGameStateLabel(currentGame), 6)]
498498 }
499499 }
500500
501501
502502
503503 @Callable(i)
504504 func revealCards (currentGame,card0,card1,card2,playerOrderedCards) = if (checkPermission(i.callerPublicKey))
505505 then throw("setupGame_FORBBIDEN")
506506 else {
507507 let dealerQueue = value(getDealerQueue())
508508 let nextGameToProcess = split(dealerQueue, ",")[1]
509509 if ((nextGameToProcess == toString(currentGame)))
510510 then {
511511 let allPlayersCards = (card0 + card1)
512512 let orderedCards = split(playerOrderedCards, "+")
513513 if (true)
514514 then if (if (if (if ((value(getGameState(currentGame)) == 1))
515515 then verifyCard(card0, currentGame, 0)
516516 else false)
517517 then verifyCard(card1, currentGame, 1)
518518 else false)
519519 then verifyCard(card2, currentGame, 2)
520520 else false)
521521 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))]
522522 else throw("One of the cards failed to be verified or game is not in state 1.")
523523 else throw("Ordered cards should be sorted from smallest to largest.")
524524 }
525525 else throw(("The next game to process is " + nextGameToProcess))
526526 }
527527
528528
529529
530530 @Callable(i)
531531 func startGame () = if ((size(i.payments) != 1))
532532 then throw("Only one mayment allowed")
533533 else {
534534 let p = i.payments[0]
535535 let ante = p.amount
536536 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- }
537+ if ((ante > value(gamesMaxBet())))
538+ then throw("Max bet exceeded")
539+ else if ((value(gamesUsedGetCounter()) >= value(gamesSetupGetCounter())))
540+ then throw("No available set up games to use.")
541+ else match getPlayerCurrentGame(address) {
542+ case CURRENTGAME: Int =>
543+ if ((4 > value(getGameState(CURRENTGAME))))
544+ then throw((("Game " + toString(CURRENTGAME)) + " is still in progress."))
545+ else createGameMetadata(address, ante)
546+ case _: Unit =>
547+ createGameMetadata(address, ante)
548+ case _ =>
549+ throw("Match error")
550+ }
549551 }
550552
551553
552554
553555 @Callable(i)
554556 func setupGame (gameNumber,cards0,cards1,cards2,cards3) = if (checkPermission(i.callerPublicKey))
555557 then throw("setupGame_FORBBIDEN")
556558 else match gamesSetupGetCounter() {
557559 case SETUPGAMESCOUNTER: Int =>
558560 let randomizer = (toInt(sha256((take(lastBlock.generationSignature, 16) + take(i.transactionId, 16)))) % 2)
559561 let currentGame = (SETUPGAMESCOUNTER + 1)
560562 if ((gameNumber != currentGame))
561563 then throw("Wrong game number.")
562564 else if (((randomizer % 2) == 1))
563565 then getGameSetup(currentGame, randomizer, cards3, cards2, cards1, cards0)
564566 else getGameSetup(currentGame, randomizer, cards0, cards1, cards2, cards3)
565567 case _ =>
566568 throw("InitGame Required")
567569 }
568570
569571
570572 @Verifier(tx)
571573 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
572574

github/deemru/w8io/169f3d6 
64.91 ms