tx · GawxSjonCFpX9hvmiVpypnusXyJ5qb19VEbeKGi9ufdB

3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89:  -0.01400000 Waves

2019.08.21 13:08 [640744] smart account 3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89 > SELF 0.00000000 Waves

{ "type": 13, "id": "GawxSjonCFpX9hvmiVpypnusXyJ5qb19VEbeKGi9ufdB", "fee": 1400000, "feeAssetId": null, "timestamp": 1566382098085, "version": 1, "sender": "3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89", "senderPublicKey": "FgbqvGasMMrXxbhwrsgEiCgJLjXPjgn8kHxsZiVmLrkb", "proofs": [ "3jUvGpQuyZWpZ3XbkwdS5oa4soDG4Ry3y3cyAgAqNPJGLp4rPTx44ZANviCWTbCmN9ywMQXSHj2dMMCxDAeUhrZE" ], "script": "base64:AAIDAAAAAAAAAAAAAAArAAAAAAlSU0FQVUJMSUMJAAJbAAAAAQIAAAGPYmFzZTY0Ok1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBbGVtcjk1SjFqWlVzN2NKbXJtbWxONHpvN1lWc0JKekllSmRrOExERkdoVUtTSTZ5ZnMyMFp5SmUyMSs2R0p3Tm5LVVUxVXlvYzE3d1NXTUtrclowTU12WUUrWjVBaWlqdkJLNHNTSjNJZ0dqZFU4L05oSThDQkR1MEYreFJNOXEzVEIzTExiRHk1c0JkdWRZZkhmc1VPYytNVHZBRDY5bjI3ZGIyUmg4K3laUU10dWJrdVRRTnA4OXNwaEhRYUxHeVFGYU5sSy9OYTNsRng2b21xemFhMWdqb3BsVXI2cnZZS2dmQUlDVUIzelZtSlNoaUVpN3c3UjBoV2xOUkQzcWNaakNVT05TcEZvNFdiemtuR09henc4NEIrSU1JRm5JcFhXelFMOFJYMHZOY2ZzQnZMRGZNNmsyWmFjcXd5TUthTExxaWdkQmlHZEo3VyswbE9TdE9RSURBUUFCAAAAABNSQU5ET1JBQ0xFVElNRUZSQU1FAAAAAAAAABDgAAAAAAdXQVZFTEVUCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAAKQ09NTUlTU0lPTgkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAkFAAAAB1dBVkVMRVQAAAAAAAAAA+gAAAAABEJFVDEJAABoAAAAAgAAAAAAAAAAAQUAAAAHV0FWRUxFVAAAAAAEQkVUMgkAAGgAAAACAAAAAAAAAAACBQAAAAdXQVZFTEVUAAAAAARCRVQ0CQAAaAAAAAIAAAAAAAAAAAQFAAAAB1dBVkVMRVQAAAAABEJFVDgJAABoAAAAAgAAAAAAAAAACAUAAAAHV0FWRUxFVAAAAAAFQkVUMTQJAABoAAAAAgAAAAAAAAAADgUAAAAHV0FWRUxFVAAAAAAIUkFURU1VTFQAAAAAAAAAJxAAAAAABVJBVEUxAAAAAAAAAJrnAAAAAAVSQVRFMgAAAAAAAABgGAAAAAAFUkFURTMAAAAAAAAASjgAAAAABVJBVEU0AAAAAAAAADd4AAAAAAVSQVRFNQAAAAAAAAAsiAAA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OAAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAADXN0YXJ0ZWRIZWlnaHQAAAAAAAAAAAAJAARMAAAAAgkAAZEAAAACBQAAAAZ3aW5BbXQAAAAAAAAAAAAFAAAAA25pbAEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEAAAAGZ2FtZUlkBAAAAApyYXdEYXRhU3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAABmdhbWVJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAANzdHIFAAAAByRtYXRjaDAFAAAAA3N0cgkAAAIAAAABCQABLAAAAAICAAAAFkNvdWxkbid0IGZpbmQgZ2FtZSBieSAFAAAABmdhbWVJZAkBAAAAE1BhcnNlR2FtZVJhd0RhdGFTdHIAAAABBQAAAApyYXdEYXRhU3RyAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAABAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAADlJFU0VSVkFUSU9OS0VZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAHlZhbGlkYXRlQW5kSW5jcmVhc2VSZXNlcnZlZEFtdAAAAAEAAAAGd2luQW10BAAAABFuZXdSZXNlcnZlZEFtb3VudAkAAGQAAAACCQEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAUAAAAGd2luQW10BAAAAAdiYWxhbmNlCQEAAAAMd2F2ZXNCYWxhbmNlAAAAAQUAAAAEdGhpcwMJAABmAAAAAgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQFAAAAB2JhbGFuY2UJAAACAAAAAQIAAABZSW5zdWZmaWNpZW50IGZ1bmRzIG9uIFJ1c3NpYW4gUm91bGV0dGUgYWNjb3VudC4gVHJhbnNhY3Rpb24gd2FzIHJlamVjdGVkIGZvciB5b3VyIHNhZmV0eS4FAAAAEW5ld1Jlc2VydmVkQW1vdW50AQAAABBJbmNyZW1lbnRHYW1lTnVtAAAAAAQAAAAHZ2FtZU51bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAA9HQU1FU0NPVU5URVJLRVkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAADbnVtBQAAAAckbWF0Y2gwBQAAAANudW0AAAAAAAAAAAAJAABkAAAAAgUAAAAHZ2FtZU51bQAAAAAAAAAAAQEAAAATRGVjcmVhc2VSZXNlcnZlZEFtdAAAAAIAAAAGZ2FtZUlkAAAABndpbkFtdAQAAAARbmV3UmVzZXJ2ZWRBbW91bnQJAABlAAAAAgkBAAAAEkV4dHJhY3RSZXNlcnZlZEFtdAAAAAAFAAAABndpbkFtdAMJAABmAAAAAgAAAAAAAAAAAAUAAAARbmV3UmVzZXJ2ZWRBbW91bnQJAAACAAAAAQIAAABHSW52YWxpZCBSdXNzaWFuIFJvdWxldHRlIGFjY291bnQgc3RhdGUgLSByZXNlcnZlZCBhbW91bnQgaXMgbGVzcyB0aGFuIDAJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5SRVNFUlZBVElPTktFWQUAAAARbmV3UmVzZXJ2ZWRBbW91bnQBAAAAE0Zvcm1hdEdhbWVEYXRhUGFyYW0AAAABAAAAAXAEAAAAAXMJAAExAAAAAQUAAAABcAMJAAAAAAAAAgUAAAABcwAAAAAAAAAAAAkAAAIAAAABAgAAACVQYXJhbWV0ZXIgc2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhlbiAwAwkAAGYAAAACBQAAAAFzAAAAAAAAAABjCQAAAgAAAAECAAAAJFBhcmFtZXRlciBzaXplIG11c3QgYmUgbGVzcyB0aGVuIDEwMAMJAABmAAAAAgAAAAAAAAAACgUAAAABcwkAASwAAAACCQABLAAAAAICAAAAATAJAAGkAAAAAQUAAAABcwUAAAABcAkAASwAAAACCQABpAAAAAEFAAAAAXMFAAAAAXABAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgAAAAlnYW1lU3RhdGUAAAAMcGxheWVyQ2hvaWNlAAAADnBsYXllclB1YktleTU4AAAADXN0YXJ0ZWRIZWlnaHQAAAAGd2luQW10AAAAC3JhbmRPckVtcHR5BAAAAAxmdWxsU3RhdGVTdHIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQEAAAATRm9ybWF0R2FtZURhdGFQYXJhbQAAAAEFAAAACWdhbWVTdGF0ZQIAAAABXwkBAAAAE0Zvcm1hdEdhbWVEYXRhUGFyYW0AAAABBQAAAAxwbGF5ZXJDaG9pY2UCAAAAAV8JAQAAABNGb3JtYXRHYW1lRGF0YVBhcmFtAAAAAQUAAAAOcGxheWVyUHViS2V5NTgCAAAAAV8JAQAAABNGb3JtYXRHYW1lRGF0YVBhcmFtAAAAAQkAAaQAAAABBQAAAA1zdGFydGVkSGVpZ2h0AgAAAAFfCQEAAAATRm9ybWF0R2FtZURhdGFQYXJhbQAAAAEJAAGkAAAAAQUAAAAGd2luQW10AwkAAAAAAAACBQAAAAtyYW5kT3JFbXB0eQIAAAAABQAAAAxmdWxsU3RhdGVTdHIJAAEsAAAAAgkAASwAAAACBQAAAAxmdWxsU3RhdGVTdHICAAAAAV8JAQAAABNGb3JtYXRHYW1lRGF0YVBhcmFtAAAAAQUAAAALcmFuZE9yRW1wdHkBAAAACVJhbmRUb1N0cgAAAAEAAAABcgMJAAAAAAAAAgUAAAABcgAAAAAAAAAAAQIAAAABMQMJAAAAAAAAAgUAAAABcgAAAAAAAAAAAgIAAAABMgMJAAAAAAAAAgUAAAABcgAAAAAAAAAAAwIAAAABMwMJAAAAAAAAAgUAAAABcgAAAAAAAAAABAIAAAABNAMJAAAAAAAAAgUAAAABcgAAAAAAAAAABQIAAAABNQMJAAAAAAAAAgUAAAABcgAAAAAAAAAABgIAAAABNgkAAAIAAAABCQABLAAAAAICAAAAOlVuc3VwcG9ydGVkIHIgcGFyYW1ldGVyIHBhc3NlZDogZXhwZWN0ZWQ9WzEsLi4uLDZdIGFjdHVhbD0JAAGkAAAAAQUAAAABcgEAAAAaVmFsaWRhdGVCZXRBbmREZWZpbmVXaW5BbXQAAAACAAAABmJldEFtdAAAAAxwbGF5ZXJDaG9pY2UEAAAAC2JldEFtdFZhbGlkAwMDAwMJAAAAAAAAAgUAAAAGYmV0QW10CQAAZAAAAAIFAAAABEJFVDEFAAAACkNPTU1JU1NJT04GCQAAAAAAAAIFAAAABmJldEFtdAkAAGQAAAACBQAAAARCRVQyBQAAAApDT01NSVNTSU9OBgkAAAAAAAACBQAAAAZiZXRBbXQJAABkAAAAAgUAAAAEQkVUNAUAAAAKQ09NTUlTU0lPTgYJAAAAAAAAAgUAAAAGYmV0QW10CQAAZAAAAAIFAAAABEJFVDgFAAAACkNPTU1JU1NJT04GCQAAAAAAAAIFAAAABmJldEFtdAkAAGQAAAACBQAAAAVCRVQxNAUAAAAKQ09NTUlTU0lPTgYHAwUAAAALYmV0QW10VmFsaWQEAAAADGJ1bGxldHNDb3VudAkAATEAAAABBQAAAAxwbGF5ZXJDaG9pY2UEAAAAA2JldAkAAGUAAAACBQAAAAZiZXRBbXQFAAAACkNPTU1JU1NJT04EAAAAAmIxCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAEvAAAAAgUAAAAMcGxheWVyQ2hvaWNlAAAAAAAAAAABBAAAAAVmb3JCMgkAATAAAAACBQAAAAxwbGF5ZXJDaG9pY2UAAAAAAAAAAAEEAAAAAmIyCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAEvAAAAAgUAAAAFZm9yQjIAAAAAAAAAAAEEAAAABWZvckIzCQABMAAAAAIFAAAADHBsYXllckNob2ljZQAAAAAAAAAAAQQAAAACYjMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAS8AAAACBQAAAAVmb3JCMwAAAAAAAAAAAQQAAAAFZm9yQjQJAAEwAAAAAgUAAAAMcGxheWVyQ2hvaWNlAAAAAAAAAAABBAAAAAJiNAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABLwAAAAIFAAAABWZvckI0AAAAAAAAAAABBAAAAAVmb3JCNQkAATAAAAACBQAAAAxwbGF5ZXJDaG9pY2UAAAAAAAAAAAEEAAAAAmI1CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAEvAAAAAgUAAAAFZm9yQjUAAAAAAAAAAAEEAAAABWZvckI2CQABMAAAAAIFAAAADHBsYXllckNob2ljZQAAAAAAAAAAAQQAAAACYjYJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAS8AAAACBQAAAAVmb3JCNgAAAAAAAAAAAQQAAAANYWN0aXZlQnVsbGV0cwkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAAmIxBQAAAAJiMgUAAAACYjMFAAAAAmI0BQAAAAJiNQUAAAACYjYDCQAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAAAEJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAFQmV0OiAJAAGkAAAAAQUAAAADYmV0AgAAAAQgYjE9CQABpAAAAAEFAAAAAmIxAgAAAAQgYjI9CQABpAAAAAEFAAAAAmIyAgAAAAQgYjM9CQABpAAAAAEFAAAAAmIzAgAAAAQgYjQ9CQABpAAAAAEFAAAAAmI0AgAAAAQgYjU9CQABpAAAAAEFAAAAAmI1AgAAAAQgYjY9CQABpAAAAAEFAAAAAmI2AgAAABMuIEFjdGl2ZSBidWxsZXRzID0gCQABpAAAAAEFAAAADWFjdGl2ZUJ1bGxldHMFAAAADWFjdGl2ZUJ1bGxldHMJAAACAAAAAQIAAAAaQmV0IGFtb3VudCBpcyBub3QgaW4gcmFuZ2UBAAAACWdldFdpblN0cgAAAAEAAAAMcGxheWVyQ2hvaWNlBAAAAAJiMQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABLwAAAAIFAAAADHBsYXllckNob2ljZQAAAAAAAAAAAQQAAAAFZm9yQjIJAAEwAAAAAgUAAAAMcGxheWVyQ2hvaWNlAAAAAAAAAAABBAAAAAJiMgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABLwAAAAIFAAAABWZvckIyAAAAAAAAAAABBAAAAAVmb3JCMwkAATAAAAACBQAAAAxwbGF5ZXJDaG9pY2UAAAAAAAAAAAEEAAAAAmIzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAEvAAAAAgUAAAAFZm9yQjMAAAAAAAAAAAEEAAAABWZvckI0CQABMAAAAAIFAAAADHBsYXllckNob2ljZQAAAAAAAAAAAQQAAAACYjQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAS8AAAACBQAAAAVmb3JCNAAAAAAAAAAAAQQAAAAFZm9yQjUJAAEwAAAAAgUAAAAMcGxheWVyQ2hvaWNlAAAAAAAAAAABBAAAAAJiNQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABLwAAAAIFAAAABWZvckI1AAAAAAAAAAABBAAAAAVmb3JCNgkAATAAAAACBQAAAAxwbGF5ZXJDaG9pY2UAAAAAAAAAAAEEAAAAAmI2CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAEvAAAAAgUAAAAFZm9yQjYAAAAAAAAAAAEDCQAAAAAAAAIFAAAAAmIxAAAAAAAAAAAAAgAAAAExAwkAAAAAAAACBQAAAAJiMgAAAAAAAAAAAAIAAAABMgMJAAAAAAAAAgUAAAACYjMAAAAAAAAAAAACAAAAATMDCQAAAAAAAAIFAAAAAmI0AAAAAAAAAAAAAgAAAAE0AwkAAAAAAAACBQAAAAJiNQAAAAAAAAAAAAIAAAABNQMJAAAAAAAAAgUAAAACYjYAAAAAAAAAAAACAAAAATYJAAACAAAAAQIAAAAaQmV0IGFtb3VudCBpcyBub3QgaW4gcmFuZ2UBAAAAC0lzUGxheWVyV2luAAAAAgAAAAxwbGF5ZXJDaG9pY2UAAAAHcmFuZFN0cgQAAAAHcmFuZEludAkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAAAdyYW5kU3RyBAAAAAtjaG9pY2VBcnJheQkABLUAAAACBQAAAAxwbGF5ZXJDaG9pY2UCAAAAAAMJAAAAAAAAAgkAAZEAAAACBQAAAAtjaG9pY2VBcnJheQkAAGUAAAACBQAAAAdyYW5kSW50AAAAAAAAAAABAgAAAAEwBgcBAAAADFdpblNjcmlwdFNldAAAAAYAAAAGZ2FtZUlkAAAADXBsYXllckFkZHJlc3MAAAAGd2luQW10AAAADm5ld0dhbWVEYXRhU3RyAAAADHdpbkJ5VGltZW91dAAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAOd1NldENvbW1vbkRhdGEJAARMAAAAAgUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMFAAAAA25pbAQAAAAOdFNldENvbW1vbkRhdGEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANcGxheWVyQWRkcmVzcwUAAAAGd2luQW10BQAAAAR1bml0BQAAAANuaWwDBQAAAAx3aW5CeVRpbWVvdXQEAAAAFm5ld0dhbWVEYXRhU3RyQWRqdXN0ZWQJAAEsAAAAAgkAASwAAAACBQAAAA5uZXdHYW1lRGF0YVN0cgIAAAABXwkBAAAAE0Zvcm1hdEdhbWVEYXRhUGFyYW0AAAABAgAAAAdUSU1FT1VUBAAAAAhnYW1lRGF0YQkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAWbmV3R2FtZURhdGFTdHJBZGp1c3RlZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgUAAAAIZ2FtZURhdGEFAAAADndTZXRDb21tb25EYXRhCQEAAAALVHJhbnNmZXJTZXQAAAABBQAAAA50U2V0Q29tbW9uRGF0YQQAAAAIZ2FtZURhdGEJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAhnYW1lRGF0YQUAAAAOd1NldENvbW1vbkRhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnRTZXRDb21tb25EYXRhAAAAAgAAAAFpAQAAAANiZXQAAAABAAAADHBsYXllckNob2ljZQQAAAAKbmV3R2FtZU51bQkBAAAAEEluY3JlbWVudEdhbWVOdW0AAAAABAAAAAZnYW1lSWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAADWJldE5vdEluV2F2ZXMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADWZlZU5vdEluV2F2ZXMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAABndpbkFtdAkBAAAAGlZhbGlkYXRlQmV0QW5kRGVmaW5lV2luQW10AAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAADHBsYXllckNob2ljZQQAAAAIdHhJZFVzZWQJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAABmdhbWVJZAMFAAAADWJldE5vdEluV2F2ZXMJAAACAAAAAQIAAAAbQmV0IGFtb3VudCBtdXN0IGJlIGluIFdhdmVzAwUAAAANZmVlTm90SW5XYXZlcwkAAAIAAAABAgAAACJUcmFuc2FjdGlvbidzIGZlZSBtdXN0IGJlIGluIFdhdmVzAwUAAAAIdHhJZFVzZWQJAAACAAAAAQIAAAAvUGFzc2VkIHR4SWQgaGFkIGJlZW4gdXNlZCBiZWZvcmUuIEdhbWUgYWJvcnRlZC4EAAAADnBsYXllclB1YktleTU4CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAALZ2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAADlNUQVRFU1VCTUlUVEVEBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAAZoZWlnaHQFAAAABndpbkFtdAIAAAAABAAAABByZWFkYWJsZUdhbWVEYXRhCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAOU1RBVEVTVUJNSVRURUQCAAAAAV8FAAAADHBsYXllckNob2ljZQIAAAABXwUAAAAOcGxheWVyUHViS2V5NTgCAAAAAV8JAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAFfCQABpAAAAAEFAAAABndpbkFtdAQAAAAGU0VSVkVSCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADnNlcnZlclRyYW5zZmVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABlNFUlZFUgUAAAAKQ09NTUlTU0lPTgUAAAAEdW5pdAUAAAADbmlsBAAAAAdiZXREYXRhCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA5SRVNFUlZBVElPTktFWQkBAAAAHlZhbGlkYXRlQW5kSW5jcmVhc2VSZXNlcnZlZEFtdAAAAAEFAAAABndpbkFtdAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAPR0FNRVNDT1VOVEVSS0VZBQAAAApuZXdHYW1lTnVtCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAAlHYW1lIERhdGEFAAAAEHJlYWRhYmxlR2FtZURhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAALZ2FtZURhdGFTdHIFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEFAAAAB2JldERhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnNlcnZlclRyYW5zZmVyAAAAAWkBAAAACHdpdGhkcmF3AAAAAgAAAAZnYW1lSWQAAAAHcnNhU2lnbgQAAAAMZ2FtZURhdGFMaXN0CQEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAMSWR4R2FtZVN0YXRlBAAAAAxwbGF5ZXJDaG9pY2UJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAA9JZHhQbGF5ZXJDaG9pY2UEAAAADXN0YXJ0ZWRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAEElkeFN0YXJ0ZWRIZWlnaHQEAAAABndpbkFtdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAJSWR4V2luQW10BAAAAA5wbGF5ZXJQdWJLZXk1OAkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAEUlkeFBsYXllclB1YktleTU4BAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADnBsYXllclB1YktleTU4BAAAAAx3aW5CeVRpbWVvdXQJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADXN0YXJ0ZWRIZWlnaHQFAAAAE1JBTkRPUkFDTEVUSU1FRlJBTUUEAAAAEWRlY3JlYXNlZFJlc2VydmVzCQEAAAATRGVjcmVhc2VSZXNlcnZlZEFtdAAAAAIFAAAABmdhbWVJZAUAAAAGd2luQW10AwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQDBQAAAAx3aW5CeVRpbWVvdXQEAAAAB3JhbmRTdHIJAQAAAAlnZXRXaW5TdHIAAAABBQAAAAxwbGF5ZXJDaG9pY2UEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAAhTVEFURVdPTgUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAGd2luQW10BQAAAAdyYW5kU3RyCQEAAAAMV2luU2NyaXB0U2V0AAAABgUAAAAGZ2FtZUlkBQAAAA1wbGF5ZXJBZGRyZXNzBQAAAAZ3aW5BbXQFAAAADm5ld0dhbWVEYXRhU3RyBQAAAAx3aW5CeVRpbWVvdXQFAAAAEWRlY3JlYXNlZFJlc2VydmVzBAAAAAdyYW5kSW50CQEAAAAPR2VuZXJhdGVSYW5kSW50AAAAAgUAAAAGZ2FtZUlkBQAAAAdyc2FTaWduBAAAAAdyYW5kU3RyCQEAAAAJUmFuZFRvU3RyAAAAAQUAAAAHcmFuZEludAMJAQAAAAtJc1BsYXllcldpbgAAAAIFAAAADHBsYXllckNob2ljZQUAAAAHcmFuZFN0cgQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAZ3aW5BbXQFAAAAB3JhbmRTdHIJAQAAAAxXaW5TY3JpcHRTZXQAAAAGBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAAlTVEFURUxPU1QFAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAABndpbkFtdAUAAAAHcmFuZFN0cgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAA5uZXdHYW1lRGF0YVN0cgkABEwAAAACBQAAABFkZWNyZWFzZWRSZXNlcnZlcwUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAADdHR4BQAAAAckbWF0Y2gwCQAAZwAAAAIJAABlAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMIBQAAAAN0dHgAAAAGYW1vdW50CQEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAA3N0eAUAAAAHJG1hdGNoMAYHB6NpWt0=", "chainId": 84, "height": 640744, "spentComplexity": 0 } View: original | compacted Prev: 65zCB97AL4TGB3Jm6htRqgiYezDSYwDBd95ziDC8qRhp Next: CRdoQEkbM84J9ppPCpRrj3q2B2Wv9nxhNrx2aapU8FKc Diff:
OldNewDifferences
208208 let forB6 = drop(playerChoice, 1)
209209 let b6 = parseIntValue(take(forB6, 1))
210210 let activeBullets = (((((b1 + b2) + b3) + b4) + b5) + b6)
211- if ((activeBullets == 5))
212- then ((bet * RATE1) / RATEMULT)
213- else if ((activeBullets == 4))
214- then ((bet * RATE2) / RATEMULT)
215- else if ((activeBullets == 3))
216- then ((bet * RATE3) / RATEMULT)
217- else if ((activeBullets == 2))
218- then ((bet * RATE4) / RATEMULT)
219- else if ((activeBullets == 1))
220- then ((bet * RATE5) / RATEMULT)
221- else throw(("Invalid player's choice, active bullets = " + toString(activeBullets)))
211+ if ((1 == 1))
212+ then throw(((((((((((((((("Bet: " + toString(bet)) + " b1=") + toString(b1)) + " b2=") + toString(b2)) + " b3=") + toString(b3)) + " b4=") + toString(b4)) + " b5=") + toString(b5)) + " b6=") + toString(b6)) + ". Active bullets = ") + toString(activeBullets)))
213+ else activeBullets
222214 }
223215 else throw("Bet amount is not in range")
224216 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlemr95J1jZUs7cJmrmmlN4zo7YVsBJzIeJdk8LDFGhUKSI6yfs20ZyJe21+6GJwNnKUU1Uyoc17wSWMKkrZ0MMvYE+Z5AiijvBK4sSJ3IgGjdU8/NhI8CBDu0F+xRM9q3TB3LLbDy5sBdudYfHfsUOc+MTvAD69n27db2Rh8+yZQMtubkuTQNp89sphHQaLGyQFaNlK/Na3lFx6omqzaa1gjoplUr6rvYKgfAICUB3zVmJShiEi7w7R0hWlNRD3qcZjCUONSpFo4WbzknGOazw84B+IMIFnIpXWzQL8RX0vNcfsBvLDfM6k2ZacqwyMKaLLqigdBiGdJ7W+0lOStOQIDAQAB")
55
66 let RANDORACLETIMEFRAME = 4320
77
88 let WAVELET = ((100 * 1000) * 1000)
99
1010 let COMMISSION = ((9 * WAVELET) / 1000)
1111
1212 let BET1 = (1 * WAVELET)
1313
1414 let BET2 = (2 * WAVELET)
1515
1616 let BET4 = (4 * WAVELET)
1717
1818 let BET8 = (8 * WAVELET)
1919
2020 let BET14 = (14 * WAVELET)
2121
2222 let RATEMULT = 10000
2323
2424 let RATE1 = 39655
2525
2626 let RATE2 = 24600
2727
2828 let RATE3 = 19000
2929
3030 let RATE4 = 14200
3131
3232 let RATE5 = 11400
3333
3434 let IdxGameState = 0
3535
3636 let IdxPlayerChoice = 1
3737
3838 let IdxPlayerPubKey58 = 2
3939
4040 let IdxStartedHeight = 3
4141
4242 let IdxWinAmt = 4
4343
4444 let IdxRandOrEmpty = 5
4545
4646 let GAMESCOUNTERKEY = "$GAME_NUM"
4747
4848 let RESERVATIONKEY = "$RESERVED_AMOUNT"
4949
5050 let STATESUBMITTED = "SUBMITTED"
5151
5252 let STATEWON = "WON"
5353
5454 let STATELOST = "LOST"
5555
5656 func getAnswer (playerChoice) = BET14
5757
5858
5959 func GenerateRandInt (gameId,rsaSign) = {
6060 let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
6161 if (rsaSigValid)
6262 then {
6363 let rand = (toInt(sha256(rsaSign)) % 6)
6464 if ((0 > rand))
6565 then ((-1 * rand) + 1)
6666 else (rand + 1)
6767 }
6868 else throw("Invalid RSA signature")
6969 }
7070
7171
7272 func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
7373 then drop(remaining, 1)
7474 else remaining
7575
7676
7777 func ParseNextAttribute (remaining) = {
7878 let s = size(remaining)
7979 if ((s > 0))
8080 then {
8181 let nn = parseIntValue(take(remaining, 2))
8282 let v = take(drop(remaining, 2), nn)
8383 let tmpRemaining = drop(remaining, (nn + 2))
8484 let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
8585 [v, remainingState]
8686 }
8787 else throw("Empty string was passed into parseNextAttribute func")
8888 }
8989
9090
9191 func ParseGameRawDataStr (rawStateStr) = {
9292 let gameState = ParseNextAttribute(rawStateStr)
9393 let playerChoice = ParseNextAttribute(gameState[1])
9494 let playerPubKey58 = ParseNextAttribute(playerChoice[1])
9595 let startedHeight = ParseNextAttribute(playerPubKey58[1])
9696 let winAmt = ParseNextAttribute(startedHeight[1])
9797 [gameState[0], playerChoice[0], playerPubKey58[0], startedHeight[0], winAmt[0]]
9898 }
9999
100100
101101 func ExtractGameDataList (gameId) = {
102102 let rawDataStr = match getString(this, gameId) {
103103 case str: String =>
104104 str
105105 case _ =>
106106 throw(("Couldn't find game by " + gameId))
107107 }
108108 ParseGameRawDataStr(rawDataStr)
109109 }
110110
111111
112112 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
113113 case a: Int =>
114114 a
115115 case _ =>
116116 0
117117 }
118118
119119
120120 func ValidateAndIncreaseReservedAmt (winAmt) = {
121121 let newReservedAmount = (ExtractReservedAmt() + winAmt)
122122 let balance = wavesBalance(this)
123123 if ((newReservedAmount > balance))
124124 then throw("Insufficient funds on Russian Roulette account. Transaction was rejected for your safety.")
125125 else newReservedAmount
126126 }
127127
128128
129129 func IncrementGameNum () = {
130130 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
131131 case num: Int =>
132132 num
133133 case _ =>
134134 0
135135 }
136136 (gameNum + 1)
137137 }
138138
139139
140140 func DecreaseReservedAmt (gameId,winAmt) = {
141141 let newReservedAmount = (ExtractReservedAmt() - winAmt)
142142 if ((0 > newReservedAmount))
143143 then throw("Invalid Russian Roulette account state - reserved amount is less than 0")
144144 else DataEntry(RESERVATIONKEY, newReservedAmount)
145145 }
146146
147147
148148 func FormatGameDataParam (p) = {
149149 let s = size(p)
150150 if ((s == 0))
151151 then throw("Parameter size must be greater then 0")
152152 else if ((s > 99))
153153 then throw("Parameter size must be less then 100")
154154 else if ((10 > s))
155155 then (("0" + toString(s)) + p)
156156 else (toString(s) + p)
157157 }
158158
159159
160160 func FormatGameDataStr (gameState,playerChoice,playerPubKey58,startedHeight,winAmt,randOrEmpty) = {
161161 let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerChoice)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(startedHeight))) + "_") + FormatGameDataParam(toString(winAmt)))
162162 if ((randOrEmpty == ""))
163163 then fullStateStr
164164 else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
165165 }
166166
167167
168168 func RandToStr (r) = if ((r == 1))
169169 then "1"
170170 else if ((r == 2))
171171 then "2"
172172 else if ((r == 3))
173173 then "3"
174174 else if ((r == 4))
175175 then "4"
176176 else if ((r == 5))
177177 then "5"
178178 else if ((r == 6))
179179 then "6"
180180 else throw(("Unsupported r parameter passed: expected=[1,...,6] actual=" + toString(r)))
181181
182182
183183 func ValidateBetAndDefineWinAmt (betAmt,playerChoice) = {
184184 let betAmtValid = if (if (if (if (if ((betAmt == (BET1 + COMMISSION)))
185185 then true
186186 else (betAmt == (BET2 + COMMISSION)))
187187 then true
188188 else (betAmt == (BET4 + COMMISSION)))
189189 then true
190190 else (betAmt == (BET8 + COMMISSION)))
191191 then true
192192 else (betAmt == (BET14 + COMMISSION)))
193193 then true
194194 else false
195195 if (betAmtValid)
196196 then {
197197 let bulletsCount = size(playerChoice)
198198 let bet = (betAmt - COMMISSION)
199199 let b1 = parseIntValue(take(playerChoice, 1))
200200 let forB2 = drop(playerChoice, 1)
201201 let b2 = parseIntValue(take(forB2, 1))
202202 let forB3 = drop(playerChoice, 1)
203203 let b3 = parseIntValue(take(forB3, 1))
204204 let forB4 = drop(playerChoice, 1)
205205 let b4 = parseIntValue(take(forB4, 1))
206206 let forB5 = drop(playerChoice, 1)
207207 let b5 = parseIntValue(take(forB5, 1))
208208 let forB6 = drop(playerChoice, 1)
209209 let b6 = parseIntValue(take(forB6, 1))
210210 let activeBullets = (((((b1 + b2) + b3) + b4) + b5) + b6)
211- if ((activeBullets == 5))
212- then ((bet * RATE1) / RATEMULT)
213- else if ((activeBullets == 4))
214- then ((bet * RATE2) / RATEMULT)
215- else if ((activeBullets == 3))
216- then ((bet * RATE3) / RATEMULT)
217- else if ((activeBullets == 2))
218- then ((bet * RATE4) / RATEMULT)
219- else if ((activeBullets == 1))
220- then ((bet * RATE5) / RATEMULT)
221- else throw(("Invalid player's choice, active bullets = " + toString(activeBullets)))
211+ if ((1 == 1))
212+ then throw(((((((((((((((("Bet: " + toString(bet)) + " b1=") + toString(b1)) + " b2=") + toString(b2)) + " b3=") + toString(b3)) + " b4=") + toString(b4)) + " b5=") + toString(b5)) + " b6=") + toString(b6)) + ". Active bullets = ") + toString(activeBullets)))
213+ else activeBullets
222214 }
223215 else throw("Bet amount is not in range")
224216 }
225217
226218
227219 func getWinStr (playerChoice) = {
228220 let b1 = parseIntValue(take(playerChoice, 1))
229221 let forB2 = drop(playerChoice, 1)
230222 let b2 = parseIntValue(take(forB2, 1))
231223 let forB3 = drop(playerChoice, 1)
232224 let b3 = parseIntValue(take(forB3, 1))
233225 let forB4 = drop(playerChoice, 1)
234226 let b4 = parseIntValue(take(forB4, 1))
235227 let forB5 = drop(playerChoice, 1)
236228 let b5 = parseIntValue(take(forB5, 1))
237229 let forB6 = drop(playerChoice, 1)
238230 let b6 = parseIntValue(take(forB6, 1))
239231 if ((b1 == 0))
240232 then "1"
241233 else if ((b2 == 0))
242234 then "2"
243235 else if ((b3 == 0))
244236 then "3"
245237 else if ((b4 == 0))
246238 then "4"
247239 else if ((b5 == 0))
248240 then "5"
249241 else if ((b6 == 0))
250242 then "6"
251243 else throw("Bet amount is not in range")
252244 }
253245
254246
255247 func IsPlayerWin (playerChoice,randStr) = {
256248 let randInt = parseIntValue(randStr)
257249 let choiceArray = split(playerChoice, "")
258250 if ((choiceArray[(randInt - 1)] == "0"))
259251 then true
260252 else false
261253 }
262254
263255
264256 func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,winByTimeout,decreasedReserves) = {
265257 let wSetCommonData = [decreasedReserves]
266258 let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, unit)]
267259 if (winByTimeout)
268260 then {
269261 let newGameDataStrAdjusted = ((newGameDataStr + "_") + FormatGameDataParam("TIMEOUT"))
270262 let gameData = DataEntry(gameId, newGameDataStrAdjusted)
271263 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
272264 }
273265 else {
274266 let gameData = DataEntry(gameId, newGameDataStr)
275267 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
276268 }
277269 }
278270
279271
280272 @Callable(i)
281273 func bet (playerChoice) = {
282274 let newGameNum = IncrementGameNum()
283275 let gameId = toBase58String(i.transactionId)
284276 let pmt = extract(i.payment)
285277 let betNotInWaves = isDefined(pmt.assetId)
286278 let feeNotInWaves = isDefined(pmt.assetId)
287279 let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
288280 let txIdUsed = isDefined(getString(this, gameId))
289281 if (betNotInWaves)
290282 then throw("Bet amount must be in Waves")
291283 else if (feeNotInWaves)
292284 then throw("Transaction's fee must be in Waves")
293285 else if (txIdUsed)
294286 then throw("Passed txId had been used before. Game aborted.")
295287 else {
296288 let playerPubKey58 = toBase58String(i.callerPublicKey)
297289 let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
298290 let readableGameData = ((((((((STATESUBMITTED + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(height)) + "_") + toString(winAmt))
299291 let SERVER = addressFromPublicKey(i.callerPublicKey)
300292 let serverTransfer = [ScriptTransfer(SERVER, COMMISSION, unit)]
301293 let betData = [DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry("Game Data", readableGameData), DataEntry(gameId, gameDataStr)]
302294 ScriptResult(WriteSet(betData), TransferSet(serverTransfer))
303295 }
304296 }
305297
306298
307299
308300 @Callable(i)
309301 func withdraw (gameId,rsaSign) = {
310302 let gameDataList = ExtractGameDataList(gameId)
311303 let gameState = gameDataList[IdxGameState]
312304 let playerChoice = gameDataList[IdxPlayerChoice]
313305 let startedHeight = parseIntValue(gameDataList[IdxStartedHeight])
314306 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
315307 let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
316308 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
317309 let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
318310 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
319311 if ((gameState != STATESUBMITTED))
320312 then throw("Invalid game state for passed gameId")
321313 else if (winByTimeout)
322314 then {
323315 let randStr = getWinStr(playerChoice)
324316 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
325317 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
326318 }
327319 else {
328320 let randInt = GenerateRandInt(gameId, rsaSign)
329321 let randStr = RandToStr(randInt)
330322 if (IsPlayerWin(playerChoice, randStr))
331323 then {
332324 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
333325 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
334326 }
335327 else {
336328 let newGameDataStr = FormatGameDataStr(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
337329 WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
338330 }
339331 }
340332 }
341333
342334
343335 @Verifier(tx)
344336 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
345337 then match tx {
346338 case ttx: TransferTransaction =>
347339 ((wavesBalance(this) - ttx.amount) >= ExtractReservedAmt())
348340 case stx: SetScriptTransaction =>
349341 true
350342 case _ =>
351343 false
352344 }
353345 else false
354346

github/deemru/w8io/873ac7e 
83.51 ms