tx · 7yn3thdZb2YS1R1AHqwPEmmCoeS4eAMTf3rpNj2Q217T

3N6hQF6HBBQ5JCKB8Xs17Q61wkG3VrLvbGd:  -0.25000000 Waves

2022.06.23 04:01 [2108370] smart account 3N6hQF6HBBQ5JCKB8Xs17Q61wkG3VrLvbGd > SELF 0.00000000 Waves

{ "type": 13, "id": "7yn3thdZb2YS1R1AHqwPEmmCoeS4eAMTf3rpNj2Q217T", "fee": 25000000, "feeAssetId": null, "timestamp": 1655946101963, "version": 2, "chainId": 84, "sender": "3N6hQF6HBBQ5JCKB8Xs17Q61wkG3VrLvbGd", "senderPublicKey": "7Hi4o6vBstRs79NMVMjEove52dmP87RAcvNDAXN8C4Wi", "proofs": [ "4osAqffwFxjFkvLUZ77euLArfUbDoPB6sHCUqDcksHoK4qKfCtNEca8rYr4c4HwXjeHWwdncMhr9WUx5PRbqnjkM" ], "script": "base64:AAIFAAAAAAAAAEAIAhIDCgEIEgYKBAgIAQESABIDCgEIEgMKAQgSAwoBCBIFCgMBCAgSAwoBCBIHCgUBCAgICBIAEgcKBQEICAgIAAAANAAAAAATZ2FtZU1hc3RlclB1YmxpY0tleQEAAAAgCVtWLb6QRBGPos09/+6UZ1rqwLcux/sEpPq4M8FKu1gAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAY9iYXNlNjQ6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF4aTV6eTFINlQycFF4N3FnTXBoOXM3L1dnODE5c29iOUF2UXNHc2MzRHp6NVpqVGtodk5MUVBmMXd0UStqVkNJVDhTQWpnUFZXV1AzWUk4b3pHektXNDlTcUxpYVNxbVU1R240cGpSOU5ZSXFzTkRKbVgrOUdNcEYxZGVybVBWNUhFWXhCTVEyTkFrTXNXQTFYSVljL2FJYTBmL3dWZ01lMjA5TVVNMm9Vd3lFS0ExcUFFSm1zUWtYQ2pKT0FBa1VRSGk2SFR5dW9RcWp0NU9abG9TK2l4MndOeXlmdEJqM3dwTmdROHcrSmFJNmh0ZzdObWw3L05lb3VrdUlkdFVTejluSmk0YXNHY285allyN3EwdGdWRFFsNk5sQkhNTjZDTkphaHBQWk4vWU5BYitDekFpdFpHbE5jV0lhd0xGZWMxZlpPTzhoYmFIVHVRODQzajZqVlFJREFRQUIAAAAAFnNldHVwR2FtZXNDb3VudGVyTGFiZWwCAAAAE0dfU0VUVVBHQU1FU0NPVU5URVIAAAAAFXVzZWRHYW1lc0NvdW50ZXJMYWJlbAIAAAASR19VU0VER0FNRVNDT1VOVEVSAAAAABBkZWFsZXJRdWV1ZUxhYmVsAgAAAA1HX0RFQUxFUlFVRVVFAAAAAA9nYW1lTWF4QmV0TGFiZWwCAAAACEdfTUFYQkVUAQAAAAtnYW1lc01heEJldAAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAPZ2FtZU1heEJldExhYmVsAQAAABRnYW1lc1NldHVwR2V0Q291bnRlcgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAWc2V0dXBHYW1lc0NvdW50ZXJMYWJlbAEAAAATZ2FtZXNVc2VkR2V0Q291bnRlcgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAVdXNlZEdhbWVzQ291bnRlckxhYmVsAQAAAA5nZXREZWFsZXJRdWV1ZQAAAAAJAAQdAAAAAgUAAAAEdGhpcwUAAAAQZGVhbGVyUXVldWVMYWJlbAEAAAAaZ2V0R2FtZUNhcmRzU2lnbmF0dXJlTGFiZWwAAAACAAAACmdhbWVOdW1iZXIAAAAEY2FyZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAKZ2FtZU51bWJlcgIAAAAPX0NBUkRTSUdOQVRVUkVfCQABpAAAAAEFAAAABGNhcmQBAAAAEWdldEdhbWVDYXJkc0xhYmVsAAAAAgAAAApnYW1lTnVtYmVyAAAABGNhcmQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAABl9DQVJEXwkAAaQAAAABBQAAAARjYXJkAQAAABZnZXRHYW1lU29ydGVkSGFuZExhYmVsAAAAAgAAAApnYW1lTnVtYmVyAAAAA3dobwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAApnYW1lTnVtYmVyAgAAAAFfBQAAAAN3aG8CAAAAC19TT1JURURIQU5EAQAAABVnZXRHYW1lSGFuZFNjb3JlTGFiZWwAAAACAAAACmdhbWVOdW1iZXIAAAADd2hvCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAAV8FAAAAA3dobwIAAAAGX1NDT1JFAQAAABZnZXRHYW1lQW50ZUFtb3VudExhYmVsAAAAAQAAAApnYW1lTnVtYmVyCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAKZ2FtZU51bWJlcgIAAAAFX0FOVEUBAAAAEmdldEdhbWVQbGF5ZXJMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAB19QTEFZRVIBAAAAEmdldEdhbWVQYXlvdXRMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAB19QQVlPVVQBAAAAEWdldEdhbWVTdGF0ZUxhYmVsAAAAAQAAAApnYW1lTnVtYmVyCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAAKZ2FtZU51bWJlcgIAAAAGX1NUQVRFAQAAABpnZXRHYW1lU2h1ZmZlbE9mZmVzZXRMYWJlbAAAAAEAAAAKZ2FtZU51bWJlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAACmdhbWVOdW1iZXICAAAAB19PRkZTRVQBAAAAFWdldEdhbWVDYXJkc1NpZ25hdHVyZQAAAAIAAAAKZ2FtZU51bWJlcgAAAARjYXJkCQAEHQAAAAIFAAAABHRoaXMJAQAAABpnZXRHYW1lQ2FyZHNTaWduYXR1cmVMYWJlbAAAAAIFAAAACmdhbWVOdW1iZXIFAAAABGNhcmQBAAAAFmdldEdhbWVTb3J0ZWRIYW5kQ2FyZHMAAAACAAAACmdhbWVOdW1iZXIAAAADd2hvCQAEHQAAAAIFAAAABHRoaXMJAQAAABZnZXRHYW1lU29ydGVkSGFuZExhYmVsAAAAAgUAAAAKZ2FtZU51bWJlcgUAAAADd2hvAQAAABBnZXRHYW1lSGFuZFNjb3JlAAAAAgAAAApnYW1lTnVtYmVyAAAAA3dobwkABBoAAAACBQAAAAR0aGlzCQEAAAAVZ2V0R2FtZUhhbmRTY29yZUxhYmVsAAAAAgUAAAAKZ2FtZU51bWJlcgUAAAADd2hvAQAAAAxnZXRHYW1lQ2FyZHMAAAACAAAACmdhbWVOdW1iZXIAAAAEY2FyZAkABB0AAAACBQAAAAR0aGlzCQEAAAARZ2V0R2FtZUNhcmRzTGFiZWwAAAACBQAAAApnYW1lTnVtYmVyBQAAAARjYXJkAQAAAA1nZXRHYW1lUGxheWVyAAAAAQAAAApnYW1lTnVtYmVyCQAEHQAAAAIFAAAABHRoaXMJAQAAABJnZXRHYW1lUGxheWVyTGFiZWwAAAABBQAAAApnYW1lTnVtYmVyAQAAAAxnZXRHYW1lU3RhdGUAAAABAAAACmdhbWVOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAEWdldEdhbWVTdGF0ZUxhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAARZ2V0R2FtZUFudGVBbW91bnQAAAABAAAACmdhbWVOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFmdldEdhbWVBbnRlQW1vdW50TGFiZWwAAAABBQAAAApnYW1lTnVtYmVyAQAAABVnZXRHYW1lU2h1ZmZlbE9mZmVzZXQAAAABAAAACmdhbWVOdW1iZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAGmdldEdhbWVTaHVmZmVsT2ZmZXNldExhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAANZ2V0R2FtZVBheW91dAAAAAEAAAAKZ2FtZU51bWJlcgkABBoAAAACBQAAAAR0aGlzCQEAAAASZ2V0R2FtZVBheW91dExhYmVsAAAAAQUAAAAKZ2FtZU51bWJlcgEAAAAZZ2V0UGxheWVyQ3VycmVudEdhbWVMYWJlbAAAAAEAAAAHYWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAAAlBfBQAAAAdhZGRyZXNzAgAAAAxfQ1VSUkVOVEdBTUUBAAAAFGdldFBsYXllckN1cnJlbnRHYW1lAAAAAQAAAAdhZGRyZXNzCQAEGgAAAAIFAAAABHRoaXMJAQAAABlnZXRQbGF5ZXJDdXJyZW50R2FtZUxhYmVsAAAAAQUAAAAHYWRkcmVzcwEAAAAKdmVyaWZ5Q2FyZAAAAAMAAAAEY2FyZAAAAApnYW1lTnVtYmVyAAAACmNhcmROdW1iZXIJAAooAAAABAUAAAAGU0hBMjU2CQABmwAAAAEFAAAABGNhcmQJAAJbAAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEJAQAAABVnZXRHYW1lQ2FyZHNTaWduYXR1cmUAAAACBQAAAApnYW1lTnVtYmVyBQAAAApjYXJkTnVtYmVyAgAAAAEgAAAAAAAAAAAABQAAAAlSU0FQVUJMSUMBAAAAD2NoZWNrUGVybWlzc2lvbgAAAAEAAAAPY2FsbGVyUHVibGljS2V5CQEAAAACIT0AAAACBQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAE2dhbWVNYXN0ZXJQdWJsaWNLZXkBAAAAEmNyZWF0ZUdhbWVNZXRhZGF0YQAAAAIAAAAHYWRkcmVzcwAAAARhbnRlBAAAAA1nYW1lVG9SZXNlcnZlCQAAZAAAAAIJAQAAAAV2YWx1ZQAAAAEJAQAAABNnYW1lc1VzZWRHZXRDb3VudGVyAAAAAAAAAAAAAAAAAQQAAAALZGVhbGVyUXVldWUJAQAAAAV2YWx1ZQAAAAEJAQAAAA5nZXREZWFsZXJRdWV1ZQAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFXVzZWRHYW1lc0NvdW50ZXJMYWJlbAUAAAANZ2FtZVRvUmVzZXJ2ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAGWdldFBsYXllckN1cnJlbnRHYW1lTGFiZWwAAAABBQAAAAdhZGRyZXNzBQAAAA1nYW1lVG9SZXNlcnZlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0R2FtZVN0YXRlTGFiZWwAAAABBQAAAA1nYW1lVG9SZXNlcnZlAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWZ2V0R2FtZUFudGVBbW91bnRMYWJlbAAAAAEFAAAADWdhbWVUb1Jlc2VydmUFAAAABGFudGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAQZGVhbGVyUXVldWVMYWJlbAkAASwAAAACCQABLAAAAAIJAQAAAAV2YWx1ZQAAAAEJAQAAAA5nZXREZWFsZXJRdWV1ZQAAAAACAAAAASwJAAGkAAAAAQUAAAANZ2FtZVRvUmVzZXJ2ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0R2FtZVBsYXllckxhYmVsAAAAAQUAAAANZ2FtZVRvUmVzZXJ2ZQUAAAAHYWRkcmVzcwUAAAADbmlsAQAAAAxnZXRHYW1lU2V0dXAAAAAGAAAACmdhbWVOdW1iZXIAAAAKcmFuZG9taXplcgAAAAZjYXJkczAAAAAGY2FyZHMxAAAABmNhcmRzMgAAAAZjYXJkczMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFnNldHVwR2FtZXNDb3VudGVyTGFiZWwFAAAACmdhbWVOdW1iZXIJAARMAAAAAgkBAAAADEludGVn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AgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIEAAAAFWRlYWxlcnNIaWdoZXN0Tm9uUGFpcgkBAAAAF2dldEhpZ2hlc3ROb25QYWlyTnVtYmVyAAAAAQUAAAAQYWxsRGVhbGVyTnVtYmVycwQAAAAWcGxheWVyc3NIaWdoZXN0Tm9uUGFpcgkBAAAAF2dldEhpZ2hlc3ROb25QYWlyTnVtYmVyAAAAAQUAAAAQYWxsUGxheWVyTnVtYmVycwMJAAAAAAAAAgUAAAALcGxheWVyVmFsdWUAAAAAAAAAAAIEAAAAEXBsYXllcnNMb3dlc3RQYWlyCQEAAAAQbG93ZXN0UGFpck51bWJlcgAAAAEFAAAAEGFsbFBsYXllck51bWJlcnMEAAAAEWRlYWxlcnNMb3dlc3RQYWlyCQEAAAAQbG93ZXN0UGFpck51bWJlcgAAAAEFAAAAEGFsbERlYWxlck51bWJlcnMDCQAAZgAAAAIFAAAAEWRlYWxlcnNMb3dlc3RQYWlyBQAAABFwbGF5ZXJzTG93ZXN0UGFpcgAAAAAAAAAAAAMJAABmAAAAAgUAAAARcGxheWVyc0xvd2VzdFBhaXIFAAAAEWRlYWxlcnNMb3dlc3RQYWlyCQAAZAAAAAIJAABoAAAAAgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIDCQAAZgAAAAIFAAAAFWRlYWxlcnNIaWdoZXN0Tm9uUGFpcgUAAAAWcGxheWVyc3NIaWdoZXN0Tm9uUGFpcgAAAAAAAAAAAAMJAABmAAAAAgUAAAAWcGxheWVyc3NIaWdoZXN0Tm9uUGFpcgUAAAAVZGVhbGVyc0hpZ2hlc3ROb25QYWlyCQAAZAAAAAIJAABoAAAAAgkAAGgAAAACCQEAAAAQcGF5b3V0TXVsdGlwbGllcgAAAAEFAAAAC3BsYXllclZhbHVlBQAAAARhbnRlAAAAAAAAAAACCQAAaAAAAAIFAAAABGFudGUAAAAAAAAAAAIJAABkAAAAAgUAAAAEYW50ZQkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACAwkAAGYAAAACBQAAABVkZWFsZXJzSGlnaGVzdE5vblBhaXIFAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIAAAAAAAAAAAADCQAAZgAAAAIFAAAAFnBsYXllcnNzSGlnaGVzdE5vblBhaXIFAAAAFWRlYWxlcnNIaWdoZXN0Tm9uUGFpcgkAAGQAAAACCQAAaAAAAAIJAABoAAAAAgkBAAAAEHBheW91dE11bHRpcGxpZXIAAAABBQAAAAtwbGF5ZXJWYWx1ZQUAAAAEYW50ZQAAAAAAAAAAAgkAAGgAAAACBQAAAARhbnRlAAAAAAAAAAACBAAAABtkZWFsZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIJAQAAAB5zZWNvbmRIaWdoZXN0Tm9uUGFpck9mUGFpckhhbmQAAAABBQAAABBhbGxEZWFsZXJOdW1iZXJzBAAAABtwbGF5ZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIJAQAAAB5zZWNvbmRIaWdoZXN0Tm9uUGFpck9mUGFpckhhbmQAAAABBQAAABBhbGxQbGF5ZXJOdW1iZXJzAwkAAGYAAAACBQAAABtkZWFsZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIFAAAAG3BsYXllcnNzZWNvbmRIaWdoZXN0Tm9uUGFpcgAAAAAAAAAAAAMJAABmAAAAAgUAAAAbcGxheWVyc3NlY29uZEhpZ2hlc3ROb25QYWlyBQAAABtkZWFsZXJzc2Vjb25kSGlnaGVzdE5vblBhaXIJAABkAAAAAgkAAGgAAAACCQAAaAAAAAIJAQAAABBwYXlvdXRNdWx0aXBsaWVyAAAAAQUAAAALcGxheWVyVmFsdWUFAAAABGFudGUAAAAAAAAAAAIJAABoAAAAAgUAAAAEYW50ZQAAAAAAAAAAAgQAAAAaZGVhbGVyc3RoaXJkSGlnaGVzdE5vblBhaXIJAQAAAB10aGlyZEhpZ2hlc3ROb25QYWlyT2ZQYWlySGFuZAAAAAEFAAAAEGFsbERlYWxlck51bWJlcnMEAAAAGnBsYXllcnN0aGlyZEhpZ2hlc3ROb25QYWlyCQEAAAAddGhpcmRIaWdoZXN0Tm9uUGFpck9mUGFpckhhbmQAAAABBQAAABBh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ZQQAAAAHYWRkcmVzcwkBAAAABXZhbHVlAAAAAQkABCYAAAABCQEAAAAFdmFsdWUAAAABCQEAAAANZ2V0R2FtZVBsYXllcgAAAAEFAAAAC2N1cnJlbnRHYW1lBAAAABNwbGF5ZXJzT3JkZXJlZENhcmRzCQEAAAAFdmFsdWUAAAABCQEAAAAWZ2V0R2FtZVNvcnRlZEhhbmRDYXJkcwAAAAIFAAAAC2N1cnJlbnRHYW1lAgAAAAZQTEFZRVIEAAAABnBheW91dAkBAAAAD2dldFBsYXllclBheW91dAAAAAQFAAAAE3BsYXllcnNPcmRlcmVkQ2FyZHMFAAAAEmRlYWxlck9yZGVyZWRDYXJkcwUAAAAEYW50ZQkBAAAABXZhbHVlAAAAAQkBAAAAEGdldEdhbWVIYW5kU2NvcmUAAAACBQAAAAtjdXJyZW50R2FtZQIAAAAGUExBWUVSCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAARZ2V0R2FtZVN0YXRlTGFiZWwAAAABBQAAAAtjdXJyZW50R2FtZQAAAAAAAAAABAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABBkZWFsZXJRdWV1ZUxhYmVsCQEAAAAJdGFrZVJpZ2h0AAAAAgUAAAALZGVhbGVyUXVldWUJAABlAAAAAgkAATEAAAABBQAAAAtkZWFsZXJRdWV1ZQkAAGQAAAACAAAAAAAAAAABCQABMQAAAAEJAAGkAAAAAQUAAAALY3VycmVudEdhbWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABJnZXRHYW1lUGF5b3V0TGFiZWwAAAABBQAAAAtjdXJyZW50R2FtZQUAAAAGcGF5b3V0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABZnZXRHYW1lU29ydGVkSGFuZExhYmVsAAAAAgUAAAALY3VycmVudEdhbWUCAAAABkRFQUxFUgUAAAASZGVhbGVyT3JkZXJlZENhcmRzCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAB2FkZHJlc3MFAAAABnBheW91dAUAAAAEdW5pdAUAAAADbmlsCQAAAgAAAAECAAAAJ09uZSBvZiB0aGUgY2FyZHMgZmFpbGVk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", "height": 2108370, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2sNPzij6vdf6Jke68FAFWb66eypjxbkc2zAaB8TbiJjj Next: F5DbcWSHBWG7Fp4ezaMBBFDWXAd8Qx1Grsk4SAzkAsV1 Diff:
OldNewDifferences
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let gameMasterPublicKey = base58'dXSycWNMKh4G5mfmZr7x2RSpZRWYvibNLat93oNRhG3'
5-
6-let gameToken = base58'AJRyxpsv9Z4v46eg9b5TpnVXn3DteJYPHRJSbMckYPWw'
75
86 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxi5zy1H6T2pQx7qgMph9s7/Wg819sob9AvQsGsc3Dzz5ZjTkhvNLQPf1wtQ+jVCIT8SAjgPVWWP3YI8ozGzKW49SqLiaSqmU5Gn4pjR9NYIqsNDJmX+9GMpF1dermPV5HEYxBMQ2NAkMsWA1XIYc/aIa0f/wVgMe209MUM2oUwyEKA1qAEJmsQkXCjJOAAkUQHi6HTyuoQqjt5OZloS+ix2wNyyftBj3wpNgQ8w+JaI6htg7Nml7/NeoukuIdtUSz9nJi4asGco9jYr7q0tgVDQl6NlBHMN6CNJahpPZN/YNAb+CzAitZGlNcWIawLFec1fZOO8hbaHTuQ843j6jVQIDAQAB")
97
467465 let address = value(addressFromString(value(getGamePlayer(currentGame))))
468466 let playersOrderedCards = value(getGameSortedHandCards(currentGame, "PLAYER"))
469467 let payout = getPlayerPayout(playersOrderedCards, dealerOrderedCards, ante, value(getGameHandScore(currentGame, "PLAYER")))
470-[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, gameToken)]
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)]
471469 }
472470 else throw("One of the cards failed to be verified.")
473471 else throw(("The next game to process is " + nextGameToProcess))
490488 then {
491489 let ante = value(getGameAnteAmount(currentGame))
492490 let pay = (i.payments[0].amount + i.fee)
493- if (if (if ((i.feeAssetId != gameToken))
494- then true
495- else (size(i.payments) != 1))
491+ if (if ((size(i.payments) != 1))
496492 then true
497493 else (pay != (ante * 2)))
498- then throw((((("Fee must be in " + toBase58String(gameToken)) + " and be 2x the ante (") + toString((ante * 2))) + ")"))
494+ then throw((("Fee must be 2x the ante (" + toString((ante * 2))) + ")"))
499495 else [IntegerEntry(getGameStateLabel(currentGame), 3), StringEntry(dealerQueueLabel, ((value(getDealerQueue()) + ",") + toString(currentGame)))]
500496 }
501497 else [IntegerEntry(getGameStateLabel(currentGame), 6)]
532528
533529
534530 @Callable(i)
535-func startGame () = if (if ((i.feeAssetId != gameToken))
536- then true
537- else (size(i.payments) != 1))
538- then throw(("Fee must be in " + toBase58String(gameToken)))
531+func startGame () = if ((size(i.payments) != 1))
532+ then throw("Only one mayment allowed")
539533 else {
540534 let p = i.payments[0]
541535 let ante = (p.amount + i.fee)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let gameMasterPublicKey = base58'dXSycWNMKh4G5mfmZr7x2RSpZRWYvibNLat93oNRhG3'
5-
6-let gameToken = base58'AJRyxpsv9Z4v46eg9b5TpnVXn3DteJYPHRJSbMckYPWw'
75
86 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxi5zy1H6T2pQx7qgMph9s7/Wg819sob9AvQsGsc3Dzz5ZjTkhvNLQPf1wtQ+jVCIT8SAjgPVWWP3YI8ozGzKW49SqLiaSqmU5Gn4pjR9NYIqsNDJmX+9GMpF1dermPV5HEYxBMQ2NAkMsWA1XIYc/aIa0f/wVgMe209MUM2oUwyEKA1qAEJmsQkXCjJOAAkUQHi6HTyuoQqjt5OZloS+ix2wNyyftBj3wpNgQ8w+JaI6htg7Nml7/NeoukuIdtUSz9nJi4asGco9jYr7q0tgVDQl6NlBHMN6CNJahpPZN/YNAb+CzAitZGlNcWIawLFec1fZOO8hbaHTuQ843j6jVQIDAQAB")
97
108 let setupGamesCounterLabel = "G_SETUPGAMESCOUNTER"
119
1210 let usedGamesCounterLabel = "G_USEDGAMESCOUNTER"
1311
1412 let dealerQueueLabel = "G_DEALERQUEUE"
1513
1614 let gameMaxBetLabel = "G_MAXBET"
1715
1816 func gamesMaxBet () = getInteger(this, gameMaxBetLabel)
1917
2018
2119 func gamesSetupGetCounter () = getInteger(this, setupGamesCounterLabel)
2220
2321
2422 func gamesUsedGetCounter () = getInteger(this, usedGamesCounterLabel)
2523
2624
2725 func getDealerQueue () = getString(this, dealerQueueLabel)
2826
2927
3028 func getGameCardsSignatureLabel (gameNumber,card) = ((("G_" + toString(gameNumber)) + "_CARDSIGNATURE_") + toString(card))
3129
3230
3331 func getGameCardsLabel (gameNumber,card) = ((("G_" + toString(gameNumber)) + "_CARD_") + toString(card))
3432
3533
3634 func getGameSortedHandLabel (gameNumber,who) = (((("G_" + toString(gameNumber)) + "_") + who) + "_SORTEDHAND")
3735
3836
3937 func getGameHandScoreLabel (gameNumber,who) = (((("G_" + toString(gameNumber)) + "_") + who) + "_SCORE")
4038
4139
4240 func getGameAnteAmountLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_ANTE")
4341
4442
4543 func getGamePlayerLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_PLAYER")
4644
4745
4846 func getGamePayoutLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_PAYOUT")
4947
5048
5149 func getGameStateLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_STATE")
5250
5351
5452 func getGameShuffelOffesetLabel (gameNumber) = (("G_" + toString(gameNumber)) + "_OFFSET")
5553
5654
5755 func getGameCardsSignature (gameNumber,card) = getString(this, getGameCardsSignatureLabel(gameNumber, card))
5856
5957
6058 func getGameSortedHandCards (gameNumber,who) = getString(this, getGameSortedHandLabel(gameNumber, who))
6159
6260
6361 func getGameHandScore (gameNumber,who) = getInteger(this, getGameHandScoreLabel(gameNumber, who))
6462
6563
6664 func getGameCards (gameNumber,card) = getString(this, getGameCardsLabel(gameNumber, card))
6765
6866
6967 func getGamePlayer (gameNumber) = getString(this, getGamePlayerLabel(gameNumber))
7068
7169
7270 func getGameState (gameNumber) = getInteger(this, getGameStateLabel(gameNumber))
7371
7472
7573 func getGameAnteAmount (gameNumber) = getInteger(this, getGameAnteAmountLabel(gameNumber))
7674
7775
7876 func getGameShuffelOffeset (gameNumber) = getInteger(this, getGameShuffelOffesetLabel(gameNumber))
7977
8078
8179 func getGamePayout (gameNumber) = getInteger(this, getGamePayoutLabel(gameNumber))
8280
8381
8482 func getPlayerCurrentGameLabel (address) = (("P_" + address) + "_CURRENTGAME")
8583
8684
8785 func getPlayerCurrentGame (address) = getInteger(this, getPlayerCurrentGameLabel(address))
8886
8987
9088 func verifyCard (card,gameNumber,cardNumber) = rsaVerify_16Kb(SHA256, toBytes(card), fromBase64String(split(value(getGameCardsSignature(gameNumber, cardNumber)), " ")[0]), RSAPUBLIC)
9189
9290
9391 func checkPermission (callerPublicKey) = (callerPublicKey != gameMasterPublicKey)
9492
9593
9694 func createGameMetadata (address,ante) = {
9795 let gameToReserve = (value(gamesUsedGetCounter()) + 1)
9896 let dealerQueue = value(getDealerQueue())
9997 [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)]
10098 }
10199
102100
103101 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)]
104102
105103
106104 func getSuit (card) = split(card, "/")[1]
107105
108106
109107 func getNumber (card) = value(parseInt(split(card, "/")[0]))
110108
111109
112110 func isFourOfAKind (hand) = if (if ((hand[0] == hand[3]))
113111 then true
114112 else (hand[1] == hand[4]))
115113 then true
116114 else false
117115
118116
119117 func isFullHouse (hand) = if (if (if ((hand[0] == hand[2]))
120118 then (hand[3] == hand[4])
121119 else false)
122120 then true
123121 else if ((hand[0] == hand[1]))
124122 then (hand[2] == hand[4])
125123 else false)
126124 then true
127125 else false
128126
129127
130128 func isFlush (hand) = {
131129 let firstSuit = hand[0]
132130 if (if (if (if ((hand[1] == firstSuit))
133131 then (hand[2] == firstSuit)
134132 else false)
135133 then (hand[3] == firstSuit)
136134 else false)
137135 then (hand[4] == firstSuit)
138136 else false)
139137 then true
140138 else false
141139 }
142140
143141
144142 func isStraight (hand) = {
145143 let largest = hand[4]
146144 if (if (if (if ((hand[3] == (largest - 1)))
147145 then (hand[2] == (largest - 2))
148146 else false)
149147 then (hand[1] == (largest - 3))
150148 else false)
151149 then (hand[0] == (largest - 4))
152150 else false)
153151 then true
154152 else false
155153 }
156154
157155
158156 func isThreeOfKind (hand) = if (if (if ((hand[0] == hand[2]))
159157 then true
160158 else (hand[1] == hand[3]))
161159 then true
162160 else (hand[2] == hand[4]))
163161 then true
164162 else false
165163
166164
167165 func isTwoPair (hand) = {
168166 let numberOfPairs = 0
169167 let matching = [(hand[0] == hand[1]), (hand[1] == hand[2]), (hand[2] == hand[3]), (hand[3] == hand[4])]
170168 if (if (if ((indexOf(matching, true) != lastIndexOf(matching, true)))
171169 then (indexOf(matching, true) != unit)
172170 else false)
173171 then (lastIndexOf(matching, true) != unit)
174172 else false)
175173 then true
176174 else false
177175 }
178176
179177
180178 func isOnePair (hand) = if (if (if (if ((hand[0] == hand[1]))
181179 then true
182180 else (hand[1] == hand[2]))
183181 then true
184182 else (hand[2] == hand[3]))
185183 then true
186184 else (hand[3] == hand[4]))
187185 then true
188186 else false
189187
190188
191189 func getScore (hand) = {
192190 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
193191 let allSuits = (((((nil :+ getSuit(hand[0])) :+ getSuit(hand[1])) :+ getSuit(hand[2])) :+ getSuit(hand[3])) :+ getSuit(hand[4]))
194192 if (isStraight(allNumbers))
195193 then if (isFlush(allSuits))
196194 then if ((allNumbers[4] == 14))
197195 then 9
198196 else 8
199197 else 4
200198 else if (isFourOfAKind(allNumbers))
201199 then 7
202200 else if (isFullHouse(allNumbers))
203201 then 6
204202 else if (isFlush(allSuits))
205203 then 5
206204 else if (isThreeOfKind(allNumbers))
207205 then 3
208206 else if (isTwoPair(allNumbers))
209207 then 2
210208 else if (isOnePair(allNumbers))
211209 then 1
212210 else 0
213211 }
214212
215213
216214 func payoutMultiplier (playerScore) = if ((playerScore == 9))
217215 then 101
218216 else if ((playerScore == 8))
219217 then 51
220218 else if ((playerScore == 7))
221219 then 21
222220 else if ((playerScore == 6))
223221 then 8
224222 else if ((playerScore == 5))
225223 then 6
226224 else if ((playerScore == 4))
227225 then 5
228226 else if ((playerScore == 3))
229227 then 4
230228 else if ((playerScore == 2))
231229 then 3
232230 else 2
233231
234232
235233 func whoHasHighestCard (allPlayerNumbers,allDealerNumbers) = if ((allDealerNumbers[4] > allPlayerNumbers[4]))
236234 then 2
237235 else if ((allPlayerNumbers[4] > allDealerNumbers[4]))
238236 then 1
239237 else if ((allDealerNumbers[3] > allPlayerNumbers[3]))
240238 then 2
241239 else if ((allPlayerNumbers[3] > allDealerNumbers[3]))
242240 then 1
243241 else if ((allDealerNumbers[2] > allPlayerNumbers[2]))
244242 then 2
245243 else if ((allPlayerNumbers[2] > allDealerNumbers[2]))
246244 then 1
247245 else if ((allDealerNumbers[1] > allPlayerNumbers[1]))
248246 then 2
249247 else if ((allPlayerNumbers[1] > allDealerNumbers[1]))
250248 then 1
251249 else if ((allDealerNumbers[0] > allPlayerNumbers[0]))
252250 then 2
253251 else if ((allPlayerNumbers[0] > allDealerNumbers[0]))
254252 then 1
255253 else 0
256254
257255
258256 func highestPairNumber (cardNumbers) = if ((cardNumbers[4] == cardNumbers[3]))
259257 then cardNumbers[4]
260258 else if ((cardNumbers[3] == cardNumbers[2]))
261259 then cardNumbers[3]
262260 else if ((cardNumbers[2] == cardNumbers[1]))
263261 then cardNumbers[2]
264262 else if ((cardNumbers[1] == cardNumbers[0]))
265263 then cardNumbers[1]
266264 else -1
267265
268266
269267 func lowestPairNumber (cardNumbers) = if ((cardNumbers[0] == cardNumbers[1]))
270268 then cardNumbers[1]
271269 else if ((cardNumbers[1] == cardNumbers[2]))
272270 then cardNumbers[1]
273271 else if ((cardNumbers[2] == cardNumbers[3]))
274272 then cardNumbers[2]
275273 else if ((cardNumbers[3] == cardNumbers[4]))
276274 then cardNumbers[3]
277275 else -1
278276
279277
280278 func getHighestNonPairNumber (cardNumbers) = if ((cardNumbers[4] != cardNumbers[3]))
281279 then cardNumbers[4]
282280 else if ((cardNumbers[2] != cardNumbers[1]))
283281 then cardNumbers[2]
284282 else cardNumbers[0]
285283
286284
287285 func secondHighestNonPairOfPairHand (cardNumbers) = if ((cardNumbers[3] == cardNumbers[2]))
288286 then cardNumbers[1]
289287 else if ((cardNumbers[2] == cardNumbers[1]))
290288 then cardNumbers[3]
291289 else cardNumbers[2]
292290
293291
294292 func thirdHighestNonPairOfPairHand (cardNumbers) = if ((cardNumbers[0] == cardNumbers[1]))
295293 then cardNumbers[2]
296294 else cardNumbers[0]
297295
298296
299297 func getPlayerPayout (playerHand,dealerHand,ante,playerScore) = {
300298 let playerCards = split(playerHand, "+")
301299 let playerValue = playerScore
302300 let dealerCards = split(dealerHand, "+")
303301 let dealerValue = getScore(dealerCards)
304302 let allPlayerNumbers = (((((nil :+ getNumber(playerCards[0])) :+ getNumber(playerCards[1])) :+ getNumber(playerCards[2])) :+ getNumber(playerCards[3])) :+ getNumber(playerCards[4]))
305303 let allDealerNumbers = (((((nil :+ getNumber(dealerCards[0])) :+ getNumber(dealerCards[1])) :+ getNumber(dealerCards[2])) :+ getNumber(dealerCards[3])) :+ getNumber(dealerCards[4]))
306304 if (if (if ((indexOf(dealerHand, "13") != unit))
307305 then (indexOf(dealerHand, "14") != unit)
308306 else false)
309307 then true
310308 else (dealerValue >= 1))
311309 then if ((playerValue == dealerValue))
312310 then if ((playerValue == 9))
313311 then (ante + (ante * 2))
314312 else if (if ((playerValue == 8))
315313 then true
316314 else (playerValue == 4))
317315 then if ((allDealerNumbers[4] > allPlayerNumbers[4]))
318316 then 0
319317 else if ((allDealerNumbers[4] == allPlayerNumbers[4]))
320318 then (ante + (ante * 2))
321319 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
322320 else if ((playerValue == 7))
323321 then if ((allDealerNumbers[1] > allPlayerNumbers[1]))
324322 then 0
325323 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
326324 else if ((playerValue == 6))
327325 then if ((allDealerNumbers[2] > allPlayerNumbers[2]))
328326 then 0
329327 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
330328 else if ((playerValue == 5))
331329 then {
332330 let highestCardThere = whoHasHighestCard(allPlayerNumbers, allDealerNumbers)
333331 if ((highestCardThere == 1))
334332 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
335333 else if ((highestCardThere == 2))
336334 then 0
337335 else (ante + (ante * 2))
338336 }
339337 else if ((playerValue == 3))
340338 then if ((allDealerNumbers[2] > allPlayerNumbers[2]))
341339 then 0
342340 else (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
343341 else if (if ((playerValue == 2))
344342 then true
345343 else (playerValue == 1))
346344 then {
347345 let playersHighestPair = highestPairNumber(allPlayerNumbers)
348346 let dealersHighestPair = highestPairNumber(allDealerNumbers)
349347 if ((dealersHighestPair > playersHighestPair))
350348 then 0
351349 else if ((playersHighestPair > dealersHighestPair))
352350 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
353351 else {
354352 let dealersHighestNonPair = getHighestNonPairNumber(allDealerNumbers)
355353 let playerssHighestNonPair = getHighestNonPairNumber(allPlayerNumbers)
356354 if ((playerValue == 2))
357355 then {
358356 let playersLowestPair = lowestPairNumber(allPlayerNumbers)
359357 let dealersLowestPair = lowestPairNumber(allDealerNumbers)
360358 if ((dealersLowestPair > playersLowestPair))
361359 then 0
362360 else if ((playersLowestPair > dealersLowestPair))
363361 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
364362 else if ((dealersHighestNonPair > playerssHighestNonPair))
365363 then 0
366364 else if ((playerssHighestNonPair > dealersHighestNonPair))
367365 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
368366 else (ante + (ante * 2))
369367 }
370368 else if ((dealersHighestNonPair > playerssHighestNonPair))
371369 then 0
372370 else if ((playerssHighestNonPair > dealersHighestNonPair))
373371 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
374372 else {
375373 let dealerssecondHighestNonPair = secondHighestNonPairOfPairHand(allDealerNumbers)
376374 let playerssecondHighestNonPair = secondHighestNonPairOfPairHand(allPlayerNumbers)
377375 if ((dealerssecondHighestNonPair > playerssecondHighestNonPair))
378376 then 0
379377 else if ((playerssecondHighestNonPair > dealerssecondHighestNonPair))
380378 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
381379 else {
382380 let dealersthirdHighestNonPair = thirdHighestNonPairOfPairHand(allDealerNumbers)
383381 let playersthirdHighestNonPair = thirdHighestNonPairOfPairHand(allPlayerNumbers)
384382 if ((dealersthirdHighestNonPair > playersthirdHighestNonPair))
385383 then 0
386384 else if ((playersthirdHighestNonPair > dealersthirdHighestNonPair))
387385 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
388386 else (ante + (ante * 2))
389387 }
390388 }
391389 }
392390 }
393391 else {
394392 let highestCardThere = whoHasHighestCard(allPlayerNumbers, allDealerNumbers)
395393 if ((highestCardThere == 1))
396394 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
397395 else if ((highestCardThere == 2))
398396 then 0
399397 else (ante + (ante * 2))
400398 }
401399 else if ((playerValue > dealerValue))
402400 then (((payoutMultiplier(playerValue) * ante) * 2) + (ante * 2))
403401 else 0
404402 else (ante * 4)
405403 }
406404
407405
408406 @Callable(i)
409407 func testPairSingleCards (orderedCards) = {
410408 let hand = split(orderedCards, "+")
411409 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
412410 throw(((((toString(getHighestNonPairNumber(allNumbers)) + "-") + toString(secondHighestNonPairOfPairHand(allNumbers))) + "-") + toString(thirdHighestNonPairOfPairHand(allNumbers))))
413411 }
414412
415413
416414
417415 @Callable(i)
418416 func testPayout (playerHand,dealerHand,ante,playerScore) = throw(toString(getPlayerPayout(playerHand, dealerHand, ante, playerScore)))
419417
420418
421419
422420 @Callable(i)
423421 func initGame () = if (checkPermission(i.callerPublicKey))
424422 then throw("initGame_FORBBIDEN")
425423 else match gamesSetupGetCounter() {
426424 case GAMESCOUNTER: Int =>
427425 throw("INIT_ALREADY_DONE")
428426 case _ =>
429427 [IntegerEntry(setupGamesCounterLabel, 0), IntegerEntry(usedGamesCounterLabel, 0), IntegerEntry(gameMaxBetLabel, 100000000), StringEntry(dealerQueueLabel, "")]
430428 }
431429
432430
433431
434432 @Callable(i)
435433 func testScore (orderedCards) = throw((("Score is " + toString(getScore(split(orderedCards, "+")))) + "."))
436434
437435
438436
439437 @Callable(i)
440438 func testHighestPair (orderedCards) = {
441439 let hand = split(orderedCards, "+")
442440 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
443441 throw((("Highest Pairs is " + toString(highestPairNumber(allNumbers))) + "."))
444442 }
445443
446444
447445
448446 @Callable(i)
449447 func testLowestPair (orderedCards) = {
450448 let hand = split(orderedCards, "+")
451449 let allNumbers = (((((nil :+ getNumber(hand[0])) :+ getNumber(hand[1])) :+ getNumber(hand[2])) :+ getNumber(hand[3])) :+ getNumber(hand[4]))
452450 throw((("Highest Pairs is " + toString(lowestPairNumber(allNumbers))) + "."))
453451 }
454452
455453
456454
457455 @Callable(i)
458456 func revealResults (currentGame,card3,dealerOrderedCards) = if (checkPermission(i.callerPublicKey))
459457 then throw("setupGame_FORBBIDEN")
460458 else {
461459 let dealerQueue = value(getDealerQueue())
462460 let nextGameToProcess = split(dealerQueue, ",")[1]
463461 if ((nextGameToProcess == toString(currentGame)))
464462 then if (true)
465463 then {
466464 let ante = value(getGameAnteAmount(currentGame))
467465 let address = value(addressFromString(value(getGamePlayer(currentGame))))
468466 let playersOrderedCards = value(getGameSortedHandCards(currentGame, "PLAYER"))
469467 let payout = getPlayerPayout(playersOrderedCards, dealerOrderedCards, ante, value(getGameHandScore(currentGame, "PLAYER")))
470-[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, gameToken)]
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)]
471469 }
472470 else throw("One of the cards failed to be verified.")
473471 else throw(("The next game to process is " + nextGameToProcess))
474472 }
475473
476474
477475
478476 @Callable(i)
479477 func foldOrRaise (action) = {
480478 let address = toBase58String(i.caller.bytes)
481479 if (if ((action != "fold"))
482480 then (action != "raise")
483481 else false)
484482 then throw("Invalid action.")
485483 else {
486484 let currentGame = value(getPlayerCurrentGame(address))
487485 if (value((getGameState(currentGame) != 2)))
488486 then throw("Game is not in correct state.")
489487 else if ((action == "raise"))
490488 then {
491489 let ante = value(getGameAnteAmount(currentGame))
492490 let pay = (i.payments[0].amount + i.fee)
493- if (if (if ((i.feeAssetId != gameToken))
494- then true
495- else (size(i.payments) != 1))
491+ if (if ((size(i.payments) != 1))
496492 then true
497493 else (pay != (ante * 2)))
498- then throw((((("Fee must be in " + toBase58String(gameToken)) + " and be 2x the ante (") + toString((ante * 2))) + ")"))
494+ then throw((("Fee must be 2x the ante (" + toString((ante * 2))) + ")"))
499495 else [IntegerEntry(getGameStateLabel(currentGame), 3), StringEntry(dealerQueueLabel, ((value(getDealerQueue()) + ",") + toString(currentGame)))]
500496 }
501497 else [IntegerEntry(getGameStateLabel(currentGame), 6)]
502498 }
503499 }
504500
505501
506502
507503 @Callable(i)
508504 func revealCards (currentGame,card0,card1,card2,playerOrderedCards) = if (checkPermission(i.callerPublicKey))
509505 then throw("setupGame_FORBBIDEN")
510506 else {
511507 let dealerQueue = value(getDealerQueue())
512508 let nextGameToProcess = split(dealerQueue, ",")[1]
513509 if ((nextGameToProcess == toString(currentGame)))
514510 then {
515511 let allPlayersCards = (card0 + card1)
516512 let orderedCards = split(playerOrderedCards, "+")
517513 if (true)
518514 then if (if (if (if ((value(getGameState(currentGame)) == 1))
519515 then verifyCard(card0, currentGame, 0)
520516 else false)
521517 then verifyCard(card1, currentGame, 1)
522518 else false)
523519 then verifyCard(card2, currentGame, 2)
524520 else false)
525521 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))]
526522 else throw("One of the cards failed to be verified or game is not in state 1.")
527523 else throw("Ordered cards should be sorted from smallest to largest.")
528524 }
529525 else throw(("The next game to process is " + nextGameToProcess))
530526 }
531527
532528
533529
534530 @Callable(i)
535-func startGame () = if (if ((i.feeAssetId != gameToken))
536- then true
537- else (size(i.payments) != 1))
538- then throw(("Fee must be in " + toBase58String(gameToken)))
531+func startGame () = if ((size(i.payments) != 1))
532+ then throw("Only one mayment allowed")
539533 else {
540534 let p = i.payments[0]
541535 let ante = (p.amount + i.fee)
542536 let address = toBase58String(i.caller.bytes)
543537 if ((value(gamesUsedGetCounter()) >= value(gamesSetupGetCounter())))
544538 then throw("No available set up games to use.")
545539 else match getPlayerCurrentGame(address) {
546540 case CURRENTGAME: Int =>
547541 if ((4 > value(getGameState(CURRENTGAME))))
548542 then throw((("Game " + toString(CURRENTGAME)) + " is still in progress."))
549543 else createGameMetadata(address, ante)
550544 case _: Unit =>
551545 createGameMetadata(address, ante)
552546 case _ =>
553547 throw("Match error")
554548 }
555549 }
556550
557551
558552
559553 @Callable(i)
560554 func setupGame (gameNumber,cards0,cards1,cards2,cards3) = if (checkPermission(i.callerPublicKey))
561555 then throw("setupGame_FORBBIDEN")
562556 else match gamesSetupGetCounter() {
563557 case SETUPGAMESCOUNTER: Int =>
564558 let randomizer = (toInt(sha256((take(lastBlock.generationSignature, 16) + take(i.transactionId, 16)))) % 2)
565559 let currentGame = (SETUPGAMESCOUNTER + 1)
566560 if ((gameNumber != currentGame))
567561 then throw("Wrong game number.")
568562 else if (((randomizer % 2) == 1))
569563 then getGameSetup(currentGame, randomizer, cards3, cards2, cards1, cards0)
570564 else getGameSetup(currentGame, randomizer, cards0, cards1, cards2, cards3)
571565 case _ =>
572566 throw("InitGame Required")
573567 }
574568
575569
576570 @Verifier(tx)
577571 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
578572

github/deemru/w8io/169f3d6 
323.29 ms