tx · A9CYWVzAXZK6d3siYTnguqjwG1yca73bNAdqaNSJ88uB

3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89:  -0.01400000 Waves

2019.08.24 13:30 [645100] smart account 3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89 > SELF 0.00000000 Waves

{ "type": 13, "id": "A9CYWVzAXZK6d3siYTnguqjwG1yca73bNAdqaNSJ88uB", "fee": 1400000, "feeAssetId": null, "timestamp": 1566642633765, "version": 1, "sender": "3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89", "senderPublicKey": "FgbqvGasMMrXxbhwrsgEiCgJLjXPjgn8kHxsZiVmLrkb", "proofs": [ "2LdsgqnCgTegy69y57wt5jFK3nQM493mFHfNLUfASbBvsBpJa3H3zLLfyxFxfW9FhruNAY2EkTwWK8ic8jwwPBGe" ], "script": "base64:AAIDAAAAAAAAAAAAAAAsAAAAAAlSU0FQVUJMSUMJAAJbAAAAAQIAAAN0TFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVSjJWRU5EUVZOWlEwTlJSRFUxWms1Nll6QlhSamRVUVU1Q1oydHhhR3RwUnpsM01FSkJVVlZHUVVSQmFrMVJjM2REVVZsRVZsRlJSMFYzU2tzS1ZVUkZWVTFDU1VkQk1WVkZRMmhOVEUxRVFYUldSVlpVVmtNeFUxVXdSWGRJYUdOT1RWUkJkMDVVU1RSTlJFbDNUMFJWZUZkb1kwNU5ha0YzVGxSSk1RcE5SRWwzVDBSVmVGZHFRV3BOVVhOM1ExRlpSRlpSVVVkRmQwcExWVVJGVlUxQ1NVZEJNVlZGUTJoTlRFMUVRWFJXUlZaVVZrTXhVMVV3UlhkbldqaDNDa1JSV1VwTGIxcEphSFpqVGtGUlJVSkNVVUZFWjFrd1FVMUpSMHBCYjBkQ1FVNUhSVmxZZEdablJGSnNWMVZUUkc0emFHRlpORTVXVmxGcFMwazVRM29LVkdodmRXRTVLMFI0U25WcGMyVjVlbTFDUW1VM1VtOW9NVkpRY1dSMmJYUlBTRzFGVUdKS0sydFlXbGxvWW05NmVsQlNZa1pIU0VOS2VVSm1RMHg2VVFwbVZtOXpPUzl4VlZFNE9IVTRNMkl3VTBaQk1rMUhiVkZYVVVGc1VuUk1lVFkyUld0U05ISkVVbmRVYWpKRWVsSTBSVVZZWjBWTGNFbDJiemhXUW5NdkNqTXJjMGhNUmpORlUyZEJhRUZuVFVKQlFVVjNSRkZaU2t0dldrbG9kbU5PUVZGRlJrSlJRVVJuV1VWQlJWbzJiVmhHUm5FelFYcG1ZWEZYU0cxRGVURUtRVkpxYkdGMVdVRmhPRnB0VlVadVRHMHdaVzFuT1dSclZrSktOak5oUlhGQlVtaDBiMnMyWWtSUlJIcFRTbmhwVEhCRFJVWTJSelJpTDA1MkwwMHZUUXBNZVdoUUswOXZUMVJ0UlZSTlpXZEJWbEZOY1RjeFkyaHZWa3A1VDBaRk5VSjBVV0UyVFM5c1EwaEZUM2xoTlZGVlptOVNSakpJUmpsRmFsSkdORFJMQ2pOUFN5dDFNMmwyVkZOcU0zcDNhblJ3ZFdSWk5WaHZQUW90TFMwdExV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U3RyAAAAAQUAAAAKcmF3RGF0YVN0cgEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAA5SRVNFUlZBVElPTktFWQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAB5WYWxpZGF0ZUFuZEluY3JlYXNlUmVzZXJ2ZWRBbXQAAAABAAAABndpbkFtdAQAAAARbmV3UmVzZXJ2ZWRBbW91bnQJAABkAAAAAgkBAAAAEkV4dHJhY3RSZXNlcnZlZEFtdAAAAAAFAAAABndpbkFtdAQAAAAHYmFsYW5jZQkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMDCQAAZgAAAAIFAAAAEW5ld1Jlc2VydmVkQW1vdW50BQAAAAdiYWxhbmNlCQAAAgAAAAECAAAAWUluc3VmZmljaWVudCBmdW5kcyBvbiBSdXNzaWFuIFJvdWxldHRlIGFjY291bnQuIFRyYW5zYWN0aW9uIHdhcyByZWplY3RlZCBmb3IgeW91ciBzYWZldHkuBQAAABFuZXdSZXNlcnZlZEFtb3VudAEAAAAQSW5jcmVtZW50R2FtZU51bQAAAAAEAAAAB2dhbWVOdW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAPR0FNRVNDT1VOVEVSS0VZAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAA251bQUAAAAHJG1hdGNoMAUAAAADbnVtAAAAAAAAAAAACQAAZAAAAAIFAAAAB2dhbWVOdW0AAAAAAAAAAAEBAAAAE0RlY3JlYXNlUmVzZXJ2ZWRBbXQAAAACAAAABmdhbWVJZAAAAAZ3aW5BbXQEAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAAZQAAAAIJAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAABQAAAAZ3aW5BbXQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAAAgAAAAECAAAAR0ludmFsaWQgUnVzc2lhbiBSb3VsZXR0ZSBhY2NvdW50IHN0YXRlIC0gcmVzZXJ2ZWQgYW1vdW50IGlzIGxl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AgAAAAE0AwkAAAAAAAACBQAAAAJiNQAAAAAAAAAAAAIAAAABNQMJAAAAAAAAAgUAAAACYjYAAAAAAAAAAAACAAAAATYJAAACAAAAAQIAAAAaQmV0IGFtb3VudCBpcyBub3QgaW4gcmFuZ2UBAAAAC0lzUGxheWVyV2luAAAAAgAAAAxwbGF5ZXJDaG9pY2UAAAAHcmFuZFN0cgQAAAAHcmFuZEludAkBAAAADXBhcnNlSW50VmFsdWUAAAABBQAAAAdyYW5kU3RyBAAAAAtjaG9pY2VBcnJheQkABLUAAAACBQAAAAxwbGF5ZXJDaG9pY2UCAAAAAAMJAAAAAAAAAgkAAZEAAAACBQAAAAtjaG9pY2VBcnJheQkAAGUAAAACBQAAAAdyYW5kSW50AAAAAAAAAAABAgAAAAEwBgcBAAAADFdpblNjcmlwdFNldAAAAAYAAAAGZ2FtZUlkAAAADXBsYXllckFkZHJlc3MAAAAGd2luQW10AAAADm5ld0dhbWVEYXRhU3RyAAAADHdpbkJ5VGltZW91dAAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAOd1NldENvbW1vbkRhdGEJAARMAAAAAgUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMFAAAAA25pbAQAAAAOdFNldENvbW1vbkRhdGEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANcGxheWVyQWRkcmVzcwUAAAAGd2luQW10BQAAAAR1bml0BQAAAANuaWwDBQAAAAx3aW5CeVRpbWVvdXQEAAAAFm5ld0dhbWVEYXRhU3RyQWRqdXN0ZWQJAAEsAAAAAgkAASwAAAACBQAAAA5uZXdHYW1lRGF0YVN0cgIAAAABXwkBAAAAE0Zvcm1hdEdhbWVEYXRhUGFyYW0AAAABAgAAAAdUSU1FT1VUBAAAAAhnYW1lRGF0YQkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAWbmV3R2FtZURhdGFTdHJBZGp1c3RlZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgUAAAAIZ2FtZURhdGEFAAAADndTZXRDb21tb25EYXRhCQEAAAALVHJhbnNmZXJTZXQAAAABBQAAAA50U2V0Q29tbW9uRGF0YQQAAAAIZ2FtZURhdGEJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAhnYW1lRGF0YQUAAAAOd1NldENvbW1vbkRhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnRTZXRDb21tb25EYXRhAAAAAgAAAAFpAQAAAANiZXQAAAABAAAADHBsYXllckNob2ljZQQAAAAKbmV3R2FtZU51bQkBAAAAEEluY3JlbWVudEdhbWVOdW0AAAAABAAAAAZnYW1lSWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAADWJldE5vdEluV2F2ZXMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADWZlZU5vdEluV2F2ZXMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAABndpbkFtdAkBAAAAGlZhbGlkYXRlQmV0QW5kRGVmaW5lV2luQW10AAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAADHBsYXllckNob2ljZQQAAAAIdHhJZFVzZWQJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAABmdhbWVJZAMFAAAADWJldE5vdEluV2F2ZXMJAAACAAAAAQIAAAAbQmV0IGFtb3VudCBtdXN0IGJlIGluIFdhdmVzAwUAAAANZmVlTm90SW5XYXZlcwkAAAIAAAABAgAAACJUcmFuc2FjdGlvbidzIGZlZSBtdXN0IGJlIGluIFdhdmVzAwUAAAAIdHhJZFVzZWQJAAACAAAAAQIAAAAvUGFzc2VkIHR4SWQgaGFkIGJlZW4gdXNlZCBiZWZvcmUuIEdhbWUgYWJvcnRlZC4EAAAADnBsYXllclB1YktleTU4CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAALZ2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAADlNUQVRFU1VCTUlUVEVEBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAAZoZWlnaHQFAAAABndpbkFtdAIAAAAABAAAABByZWFkYWJsZUdhbWVEYXRhCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAOU1RBVEVTVUJNSVRURUQCAAAAAV8FAAAADHBsYXllckNob2ljZQIAAAABXwUAAAAOcGxheWVyUHViS2V5NTgCAAAAAV8JAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAFfCQABpAAAAAEFAAAABndpbkFtdAQAAAAOc2VydmVyVHJhbnNmZXIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGU0VSVkVSBQAAAApDT01NSVNTSU9OBQAAAAR1bml0BQAAAANuaWwEAAAAB2JldERhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZCQEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQUAAAAGd2luQW10CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA9HQU1FU0NPVU5URVJLRVkFAAAACm5ld0dhbWVOdW0JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAALZ2FtZURhdGFTdHIFAAAAA25pbAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEFAAAAB2JldERhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnNlcnZlclRyYW5zZmVyAAAAAWkBAAAACHdpdGhkcmF3AAAAAgAAAAZnYW1lSWQAAAAHcnNhU2lnbgQAAAAMZ2FtZURhdGFMaXN0CQEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAMSWR4R2FtZVN0YXRlBAAAAAxwbGF5ZXJDaG9pY2UJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAA9JZHhQbGF5ZXJDaG9pY2UEAAAADXN0YXJ0ZWRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAEElkeFN0YXJ0ZWRIZWlnaHQEAAAABndpbkFtdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAJSWR4V2luQW10BAAAAA5wbGF5ZXJQdWJLZXk1OAkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAEUlkeFBsYXllclB1YktleTU4BAAAAA1wbGF5ZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAADnBsYXllclB1YktleTU4BAAAAAx3aW5CeVRpbWVvdXQJAABmAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAADXN0YXJ0ZWRIZWlnaHQFAAAAE1JBTkRPUkFDTEVUSU1FRlJBTUUEAAAAEWRlY3JlYXNlZFJlc2VydmVzCQEAAAATRGVjcmVhc2VSZXNlcnZlZEFtdAAAAAIFAAAABmdhbWVJZAUAAAAGd2luQW10AwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQDBQAAAAx3aW5CeVRpbWVvdXQEAAAAB3JhbmRTdHIJAQAAAAlnZXRXaW5TdHIAAAABBQAAAAxwbGF5ZXJDaG9pY2UEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAAhTVEFURVdPTgUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAGd2luQW10BQAAAAdyYW5kU3RyCQEAAAAMV2luU2NyaXB0U2V0AAAABgUAAAAGZ2FtZUlkBQAAAA1wbGF5ZXJBZGRyZXNzBQAAAAZ3aW5BbXQFAAAADm5ld0dhbWVEYXRhU3RyBQAAAAx3aW5CeVRpbWVvdXQFAAAAEWRlY3JlYXNlZFJlc2VydmVzBAAAAAdyYW5kSW50CQEAAAAPR2VuZXJhdGVSYW5kSW50AAAAAgUAAAAGZ2FtZUlkBQAAAAdyc2FTaWduBAAAAAdyYW5kU3RyCQEAAAAJUmFuZFRvU3RyAAAAAQUAAAAHcmFuZEludAMJAQAAAAtJc1BsYXllcldpbgAAAAIFAAAADHBsYXllckNob2ljZQUAAAAHcmFuZFN0cgQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAZ3aW5BbXQFAAAAB3JhbmRTdHIJAQAAAAxXaW5TY3JpcHRTZXQAAAAGBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAGBQAAAAlTVEFURUxPU1QFAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAABndpbkFtdAUAAAAHcmFuZFN0cgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAA5uZXdHYW1lRGF0YVN0cgkABEwAAAACBQAAABFkZWNyZWFzZWRSZXNlcnZlcwUAAAADbmlsAAAAAGhSVSw=", "chainId": 84, "height": 645100, "spentComplexity": 0 } View: original | compacted Prev: GcHJTdZxhKzhVin24jFkp1fwVYt9ubJdnHdQnVDYSexi Next: CEfkDDCEVBTm83r1dci8usyHeSJRUvK6j2reM8puAWmq Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let RSAPUBLIC = fromBase64String("base64:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ2VENDQVNZQ0NRRDU1Zk56YzBXRjdUQU5CZ2txaGtpRzl3MEJBUVVGQURBak1Rc3dDUVlEVlFRR0V3SksKVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdIaGNOTVRBd05USTRNREl3T0RVeFdoY05NakF3TlRJMQpNREl3T0RVeFdqQWpNUXN3Q1FZRFZRUUdFd0pLVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdnWjh3CkRRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5HRVlYdGZnRFJsV1VTRG4zaGFZNE5WVlFpS0k5Q3oKVGhvdWE5K0R4SnVpc2V5em1CQmU3Um9oMVJQcWR2bXRPSG1FUGJKK2tYWlloYm96elBSYkZHSENKeUJmQ0x6UQpmVm9zOS9xVVE4OHU4M2IwU0ZBMk1HbVFXUUFsUnRMeTY2RWtSNHJEUndUajJEelI0RUVYZ0VLcEl2bzhWQnMvCjMrc0hMRjNFU2dBaEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBRVo2bVhGRnEzQXpmYXFXSG1DeTEKQVJqbGF1WUFhOFptVUZuTG0wZW1nOWRrVkJKNjNhRXFBUmh0b2s2YkRRRHpTSnhpTHBDRUY2RzRiL052L00vTQpMeWhQK09vT1RtRVRNZWdBVlFNcTcxY2hvVkp5T0ZFNUJ0UWE2TS9sQ0hFT3lhNVFVZm9SRjJIRjlFalJGNDRLCjNPSyt1M2l2VFNqM3p3anRwdWRZNVhvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t")
4+let RSAPUBLIC = fromBase64String("LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ2VENDQVNZQ0NRRDU1Zk56YzBXRjdUQU5CZ2txaGtpRzl3MEJBUVVGQURBak1Rc3dDUVlEVlFRR0V3SksKVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdIaGNOTVRBd05USTRNREl3T0RVeFdoY05NakF3TlRJMQpNREl3T0RVeFdqQWpNUXN3Q1FZRFZRUUdFd0pLVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdnWjh3CkRRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5HRVlYdGZnRFJsV1VTRG4zaGFZNE5WVlFpS0k5Q3oKVGhvdWE5K0R4SnVpc2V5em1CQmU3Um9oMVJQcWR2bXRPSG1FUGJKK2tYWlloYm96elBSYkZHSENKeUJmQ0x6UQpmVm9zOS9xVVE4OHU4M2IwU0ZBMk1HbVFXUUFsUnRMeTY2RWtSNHJEUndUajJEelI0RUVYZ0VLcEl2bzhWQnMvCjMrc0hMRjNFU2dBaEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBRVo2bVhGRnEzQXpmYXFXSG1DeTEKQVJqbGF1WUFhOFptVUZuTG0wZW1nOWRrVkJKNjNhRXFBUmh0b2s2YkRRRHpTSnhpTHBDRUY2RzRiL052L00vTQpMeWhQK09vT1RtRVRNZWdBVlFNcTcxY2hvVkp5T0ZFNUJ0UWE2TS9sQ0hFT3lhNVFVZm9SRjJIRjlFalJGNDRLCjNPSyt1M2l2VFNqM3p3anRwdWRZNVhvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t")
55
66 let SERVER = addressFromStringValue("3NAPoUBwL7jaPW3ngVF3dT5b68q4eaHAiiC")
77
281281
282282 @Callable(i)
283283 func bet (playerChoice) = {
284- let bb = toBase64String(toBytes("-----BEGIN CERTIFICATE-----
285-MIIBvTCCASYCCQD55fNzc0WF7TANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJK
286-UDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwHhcNMTAwNTI4MDIwODUxWhcNMjAwNTI1
287-MDIwODUxWjAjMQswCQYDVQQGEwJKUDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwgZ8w
288-DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANGEYXtfgDRlWUSDn3haY4NVVQiKI9Cz
289-Thoua9+DxJuiseyzmBBe7Roh1RPqdvmtOHmEPbJ+kXZYhbozzPRbFGHCJyBfCLzQ
290-fVos9/qUQ88u83b0SFA2MGmQWQAlRtLy66EkR4rDRwTj2DzR4EEXgEKpIvo8VBs/
291-3+sHLF3ESgAhAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAEZ6mXFFq3AzfaqWHmCy1
292-ARjlauYAa8ZmUFnLm0emg9dkVBJ63aEqARhtok6bDQDzSJxiLpCEF6G4b/Nv/M/M
293-LyhP+OoOTmETMegAVQMq71choVJyOFE5BtQa6M/lCHEOya5QUfoRF2HF9EjRF44K
294-3OK+u3ivTSj3zwjtpudY5Xo=
295------END CERTIFICATE-----"))
296- let RSAPUBLIC1 = fromBase64String(bb)
297- throw(("PEM:" + toUtf8String(RSAPUBLIC1)))
284+ let newGameNum = IncrementGameNum()
285+ let gameId = toBase58String(i.transactionId)
286+ let pmt = extract(i.payment)
287+ let betNotInWaves = isDefined(pmt.assetId)
288+ let feeNotInWaves = isDefined(pmt.assetId)
289+ let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
290+ let txIdUsed = isDefined(getString(this, gameId))
291+ if (betNotInWaves)
292+ then throw("Bet amount must be in Waves")
293+ else if (feeNotInWaves)
294+ then throw("Transaction's fee must be in Waves")
295+ else if (txIdUsed)
296+ then throw("Passed txId had been used before. Game aborted.")
297+ else {
298+ let playerPubKey58 = toBase58String(i.callerPublicKey)
299+ let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
300+ let readableGameData = ((((((((STATESUBMITTED + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(height)) + "_") + toString(winAmt))
301+ let serverTransfer = [ScriptTransfer(SERVER, COMMISSION, unit)]
302+ let betData = [DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]
303+ ScriptResult(WriteSet(betData), TransferSet(serverTransfer))
304+ }
298305 }
299306
300307
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let RSAPUBLIC = fromBase64String("base64:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ2VENDQVNZQ0NRRDU1Zk56YzBXRjdUQU5CZ2txaGtpRzl3MEJBUVVGQURBak1Rc3dDUVlEVlFRR0V3SksKVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdIaGNOTVRBd05USTRNREl3T0RVeFdoY05NakF3TlRJMQpNREl3T0RVeFdqQWpNUXN3Q1FZRFZRUUdFd0pLVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdnWjh3CkRRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5HRVlYdGZnRFJsV1VTRG4zaGFZNE5WVlFpS0k5Q3oKVGhvdWE5K0R4SnVpc2V5em1CQmU3Um9oMVJQcWR2bXRPSG1FUGJKK2tYWlloYm96elBSYkZHSENKeUJmQ0x6UQpmVm9zOS9xVVE4OHU4M2IwU0ZBMk1HbVFXUUFsUnRMeTY2RWtSNHJEUndUajJEelI0RUVYZ0VLcEl2bzhWQnMvCjMrc0hMRjNFU2dBaEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBRVo2bVhGRnEzQXpmYXFXSG1DeTEKQVJqbGF1WUFhOFptVUZuTG0wZW1nOWRrVkJKNjNhRXFBUmh0b2s2YkRRRHpTSnhpTHBDRUY2RzRiL052L00vTQpMeWhQK09vT1RtRVRNZWdBVlFNcTcxY2hvVkp5T0ZFNUJ0UWE2TS9sQ0hFT3lhNVFVZm9SRjJIRjlFalJGNDRLCjNPSyt1M2l2VFNqM3p3anRwdWRZNVhvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t")
4+let RSAPUBLIC = fromBase64String("LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ2VENDQVNZQ0NRRDU1Zk56YzBXRjdUQU5CZ2txaGtpRzl3MEJBUVVGQURBak1Rc3dDUVlEVlFRR0V3SksKVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdIaGNOTVRBd05USTRNREl3T0RVeFdoY05NakF3TlRJMQpNREl3T0RVeFdqQWpNUXN3Q1FZRFZRUUdFd0pLVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdnWjh3CkRRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5HRVlYdGZnRFJsV1VTRG4zaGFZNE5WVlFpS0k5Q3oKVGhvdWE5K0R4SnVpc2V5em1CQmU3Um9oMVJQcWR2bXRPSG1FUGJKK2tYWlloYm96elBSYkZHSENKeUJmQ0x6UQpmVm9zOS9xVVE4OHU4M2IwU0ZBMk1HbVFXUUFsUnRMeTY2RWtSNHJEUndUajJEelI0RUVYZ0VLcEl2bzhWQnMvCjMrc0hMRjNFU2dBaEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBRVo2bVhGRnEzQXpmYXFXSG1DeTEKQVJqbGF1WUFhOFptVUZuTG0wZW1nOWRrVkJKNjNhRXFBUmh0b2s2YkRRRHpTSnhpTHBDRUY2RzRiL052L00vTQpMeWhQK09vT1RtRVRNZWdBVlFNcTcxY2hvVkp5T0ZFNUJ0UWE2TS9sQ0hFT3lhNVFVZm9SRjJIRjlFalJGNDRLCjNPSyt1M2l2VFNqM3p3anRwdWRZNVhvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t")
55
66 let SERVER = addressFromStringValue("3NAPoUBwL7jaPW3ngVF3dT5b68q4eaHAiiC")
77
88 let RANDORACLETIMEFRAME = 4320
99
1010 let WAVELET = ((100 * 1000) * 1000)
1111
1212 let COMMISSION = ((9 * WAVELET) / 1000)
1313
1414 let BET1 = (1 * WAVELET)
1515
1616 let BET2 = (2 * WAVELET)
1717
1818 let BET4 = (4 * WAVELET)
1919
2020 let BET8 = (8 * WAVELET)
2121
2222 let BET14 = (14 * WAVELET)
2323
2424 let RATEMULT = 10000
2525
2626 let RATE1 = 39655
2727
2828 let RATE2 = 24600
2929
3030 let RATE3 = 19000
3131
3232 let RATE4 = 14200
3333
3434 let RATE5 = 11400
3535
3636 let IdxGameState = 0
3737
3838 let IdxPlayerChoice = 1
3939
4040 let IdxPlayerPubKey58 = 2
4141
4242 let IdxStartedHeight = 3
4343
4444 let IdxWinAmt = 4
4545
4646 let IdxRandOrEmpty = 5
4747
4848 let GAMESCOUNTERKEY = "$GAME_NUM"
4949
5050 let RESERVATIONKEY = "$RESERVED_AMOUNT"
5151
5252 let STATESUBMITTED = "SUBMITTED"
5353
5454 let STATEWON = "WON"
5555
5656 let STATELOST = "LOST"
5757
5858 func getAnswer (playerChoice) = BET14
5959
6060
6161 func GenerateRandInt (gameId,rsaSign) = {
6262 let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
6363 if (rsaSigValid)
6464 then {
6565 let rand = (toInt(sha256(rsaSign)) % 6)
6666 if ((0 > rand))
6767 then ((-1 * rand) + 1)
6868 else (rand + 1)
6969 }
7070 else throw("Invalid RSA signature")
7171 }
7272
7373
7474 func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
7575 then drop(remaining, 1)
7676 else remaining
7777
7878
7979 func ParseNextAttribute (remaining) = {
8080 let s = size(remaining)
8181 if ((s > 0))
8282 then {
8383 let nn = parseIntValue(take(remaining, 2))
8484 let v = take(drop(remaining, 2), nn)
8585 let tmpRemaining = drop(remaining, (nn + 2))
8686 let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
8787 [v, remainingState]
8888 }
8989 else throw("Empty string was passed into parseNextAttribute func")
9090 }
9191
9292
9393 func ParseGameRawDataStr (rawStateStr) = {
9494 let gameState = ParseNextAttribute(rawStateStr)
9595 let playerChoice = ParseNextAttribute(gameState[1])
9696 let playerPubKey58 = ParseNextAttribute(playerChoice[1])
9797 let startedHeight = ParseNextAttribute(playerPubKey58[1])
9898 let winAmt = ParseNextAttribute(startedHeight[1])
9999 [gameState[0], playerChoice[0], playerPubKey58[0], startedHeight[0], winAmt[0]]
100100 }
101101
102102
103103 func ExtractGameDataList (gameId) = {
104104 let rawDataStr = match getString(this, gameId) {
105105 case str: String =>
106106 str
107107 case _ =>
108108 throw(("Couldn't find game by " + gameId))
109109 }
110110 ParseGameRawDataStr(rawDataStr)
111111 }
112112
113113
114114 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
115115 case a: Int =>
116116 a
117117 case _ =>
118118 0
119119 }
120120
121121
122122 func ValidateAndIncreaseReservedAmt (winAmt) = {
123123 let newReservedAmount = (ExtractReservedAmt() + winAmt)
124124 let balance = wavesBalance(this)
125125 if ((newReservedAmount > balance))
126126 then throw("Insufficient funds on Russian Roulette account. Transaction was rejected for your safety.")
127127 else newReservedAmount
128128 }
129129
130130
131131 func IncrementGameNum () = {
132132 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
133133 case num: Int =>
134134 num
135135 case _ =>
136136 0
137137 }
138138 (gameNum + 1)
139139 }
140140
141141
142142 func DecreaseReservedAmt (gameId,winAmt) = {
143143 let newReservedAmount = (ExtractReservedAmt() - winAmt)
144144 if ((0 > newReservedAmount))
145145 then throw("Invalid Russian Roulette account state - reserved amount is less than 0")
146146 else DataEntry(RESERVATIONKEY, newReservedAmount)
147147 }
148148
149149
150150 func FormatGameDataParam (p) = {
151151 let s = size(p)
152152 if ((s == 0))
153153 then throw("Parameter size must be greater then 0")
154154 else if ((s > 99))
155155 then throw("Parameter size must be less then 100")
156156 else if ((10 > s))
157157 then (("0" + toString(s)) + p)
158158 else (toString(s) + p)
159159 }
160160
161161
162162 func FormatGameDataStr (gameState,playerChoice,playerPubKey58,startedHeight,winAmt,randOrEmpty) = {
163163 let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerChoice)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(startedHeight))) + "_") + FormatGameDataParam(toString(winAmt)))
164164 if ((randOrEmpty == ""))
165165 then fullStateStr
166166 else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
167167 }
168168
169169
170170 func RandToStr (r) = if ((r == 1))
171171 then "1"
172172 else if ((r == 2))
173173 then "2"
174174 else if ((r == 3))
175175 then "3"
176176 else if ((r == 4))
177177 then "4"
178178 else if ((r == 5))
179179 then "5"
180180 else if ((r == 6))
181181 then "6"
182182 else throw(("Unsupported r parameter passed: expected=[1,...,6] actual=" + toString(r)))
183183
184184
185185 func ValidateBetAndDefineWinAmt (betAmt,playerChoice) = {
186186 let betAmtValid = if (if (if (if (if ((betAmt == (BET1 + COMMISSION)))
187187 then true
188188 else (betAmt == (BET2 + COMMISSION)))
189189 then true
190190 else (betAmt == (BET4 + COMMISSION)))
191191 then true
192192 else (betAmt == (BET8 + COMMISSION)))
193193 then true
194194 else (betAmt == (BET14 + COMMISSION)))
195195 then true
196196 else false
197197 if (betAmtValid)
198198 then {
199199 let bulletsCount = size(playerChoice)
200200 let bet = (betAmt - COMMISSION)
201201 let b1 = parseIntValue(take(playerChoice, 1))
202202 let forB2 = drop(playerChoice, 1)
203203 let b2 = parseIntValue(take(forB2, 1))
204204 let forB3 = drop(forB2, 1)
205205 let b3 = parseIntValue(take(forB3, 1))
206206 let forB4 = drop(forB3, 1)
207207 let b4 = parseIntValue(take(forB4, 1))
208208 let forB5 = drop(forB4, 1)
209209 let b5 = parseIntValue(take(forB5, 1))
210210 let forB6 = drop(forB5, 1)
211211 let b6 = parseIntValue(take(forB6, 1))
212212 let activeBullets = (((((b1 + b2) + b3) + b4) + b5) + b6)
213213 if ((activeBullets == 5))
214214 then ((bet * RATE1) / RATEMULT)
215215 else if ((activeBullets == 4))
216216 then ((bet * RATE2) / RATEMULT)
217217 else if ((activeBullets == 3))
218218 then ((bet * RATE3) / RATEMULT)
219219 else if ((activeBullets == 2))
220220 then ((bet * RATE4) / RATEMULT)
221221 else if ((activeBullets == 1))
222222 then ((bet * RATE5) / RATEMULT)
223223 else throw(("Invalid player's choice, active bullets = " + toString(activeBullets)))
224224 }
225225 else throw("Bet amount is not in range")
226226 }
227227
228228
229229 func getWinStr (playerChoice) = {
230230 let b1 = parseIntValue(take(playerChoice, 1))
231231 let forB2 = drop(playerChoice, 1)
232232 let b2 = parseIntValue(take(forB2, 1))
233233 let forB3 = drop(playerChoice, 1)
234234 let b3 = parseIntValue(take(forB3, 1))
235235 let forB4 = drop(playerChoice, 1)
236236 let b4 = parseIntValue(take(forB4, 1))
237237 let forB5 = drop(playerChoice, 1)
238238 let b5 = parseIntValue(take(forB5, 1))
239239 let forB6 = drop(playerChoice, 1)
240240 let b6 = parseIntValue(take(forB6, 1))
241241 if ((b1 == 0))
242242 then "1"
243243 else if ((b2 == 0))
244244 then "2"
245245 else if ((b3 == 0))
246246 then "3"
247247 else if ((b4 == 0))
248248 then "4"
249249 else if ((b5 == 0))
250250 then "5"
251251 else if ((b6 == 0))
252252 then "6"
253253 else throw("Bet amount is not in range")
254254 }
255255
256256
257257 func IsPlayerWin (playerChoice,randStr) = {
258258 let randInt = parseIntValue(randStr)
259259 let choiceArray = split(playerChoice, "")
260260 if ((choiceArray[(randInt - 1)] == "0"))
261261 then true
262262 else false
263263 }
264264
265265
266266 func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,winByTimeout,decreasedReserves) = {
267267 let wSetCommonData = [decreasedReserves]
268268 let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, unit)]
269269 if (winByTimeout)
270270 then {
271271 let newGameDataStrAdjusted = ((newGameDataStr + "_") + FormatGameDataParam("TIMEOUT"))
272272 let gameData = DataEntry(gameId, newGameDataStrAdjusted)
273273 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
274274 }
275275 else {
276276 let gameData = DataEntry(gameId, newGameDataStr)
277277 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
278278 }
279279 }
280280
281281
282282 @Callable(i)
283283 func bet (playerChoice) = {
284- let bb = toBase64String(toBytes("-----BEGIN CERTIFICATE-----
285-MIIBvTCCASYCCQD55fNzc0WF7TANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJK
286-UDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwHhcNMTAwNTI4MDIwODUxWhcNMjAwNTI1
287-MDIwODUxWjAjMQswCQYDVQQGEwJKUDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwgZ8w
288-DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANGEYXtfgDRlWUSDn3haY4NVVQiKI9Cz
289-Thoua9+DxJuiseyzmBBe7Roh1RPqdvmtOHmEPbJ+kXZYhbozzPRbFGHCJyBfCLzQ
290-fVos9/qUQ88u83b0SFA2MGmQWQAlRtLy66EkR4rDRwTj2DzR4EEXgEKpIvo8VBs/
291-3+sHLF3ESgAhAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAEZ6mXFFq3AzfaqWHmCy1
292-ARjlauYAa8ZmUFnLm0emg9dkVBJ63aEqARhtok6bDQDzSJxiLpCEF6G4b/Nv/M/M
293-LyhP+OoOTmETMegAVQMq71choVJyOFE5BtQa6M/lCHEOya5QUfoRF2HF9EjRF44K
294-3OK+u3ivTSj3zwjtpudY5Xo=
295------END CERTIFICATE-----"))
296- let RSAPUBLIC1 = fromBase64String(bb)
297- throw(("PEM:" + toUtf8String(RSAPUBLIC1)))
284+ let newGameNum = IncrementGameNum()
285+ let gameId = toBase58String(i.transactionId)
286+ let pmt = extract(i.payment)
287+ let betNotInWaves = isDefined(pmt.assetId)
288+ let feeNotInWaves = isDefined(pmt.assetId)
289+ let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
290+ let txIdUsed = isDefined(getString(this, gameId))
291+ if (betNotInWaves)
292+ then throw("Bet amount must be in Waves")
293+ else if (feeNotInWaves)
294+ then throw("Transaction's fee must be in Waves")
295+ else if (txIdUsed)
296+ then throw("Passed txId had been used before. Game aborted.")
297+ else {
298+ let playerPubKey58 = toBase58String(i.callerPublicKey)
299+ let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
300+ let readableGameData = ((((((((STATESUBMITTED + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(height)) + "_") + toString(winAmt))
301+ let serverTransfer = [ScriptTransfer(SERVER, COMMISSION, unit)]
302+ let betData = [DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]
303+ ScriptResult(WriteSet(betData), TransferSet(serverTransfer))
304+ }
298305 }
299306
300307
301308
302309 @Callable(i)
303310 func withdraw (gameId,rsaSign) = {
304311 let gameDataList = ExtractGameDataList(gameId)
305312 let gameState = gameDataList[IdxGameState]
306313 let playerChoice = gameDataList[IdxPlayerChoice]
307314 let startedHeight = parseIntValue(gameDataList[IdxStartedHeight])
308315 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
309316 let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
310317 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
311318 let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
312319 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
313320 if ((gameState != STATESUBMITTED))
314321 then throw("Invalid game state for passed gameId")
315322 else if (winByTimeout)
316323 then {
317324 let randStr = getWinStr(playerChoice)
318325 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
319326 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
320327 }
321328 else {
322329 let randInt = GenerateRandInt(gameId, rsaSign)
323330 let randStr = RandToStr(randInt)
324331 if (IsPlayerWin(playerChoice, randStr))
325332 then {
326333 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
327334 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
328335 }
329336 else {
330337 let newGameDataStr = FormatGameDataStr(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
331338 WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
332339 }
333340 }
334341 }
335342
336343

github/deemru/w8io/169f3d6 
53.63 ms