tx · 6eJji6CzbbfUXfGrUSQsbE72BHTfYr4Q1vXd1cT3xacZ

3MrLfLnxg33SrHA9N2UUajz2itFrT81DSNh:  -0.01000000 Waves

2019.10.14 15:30 [719607] smart account 3MrLfLnxg33SrHA9N2UUajz2itFrT81DSNh > SELF 0.00000000 Waves

{ "type": 13, "id": "6eJji6CzbbfUXfGrUSQsbE72BHTfYr4Q1vXd1cT3xacZ", "fee": 1000000, "feeAssetId": null, "timestamp": 1571056276734, "version": 1, "sender": "3MrLfLnxg33SrHA9N2UUajz2itFrT81DSNh", "senderPublicKey": "9DwD5rSAi4eVN5K9iWqH7sSSGgyDJF7TzydqWCnp6scb", "proofs": [ "66zx25XF4CGzwWAyFT7UgXrreJJ8iMgQf8dQahEvdWVSy7aFw6QRfSatbb8YaTBUDXeVDc7dzcNqSRk6wHJGDZCR" ], "script": "base64:AAIDAAAAAAAAAA0IARIDCgEBEgQKAgEIAAAAIQAAAAAHV0FWRUxFVAkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gAAAAABU1SVEVDAAAAAAAAAABkAAAAAApwbXRPblN0YXJ0CQAAaAAAAAIAAAAAAAAAAAoFAAAABU1SVEVDAAAAABBwYXJ0eU93bmVyUHViS2V5CQACWQAAAAECAAAALEZDYVA0akxoTGF3ekVxYndBUUdBVnZQUUJ2MmgzTGRFUkN4N2Zja0R2bnpyAAAAABFwYXJ0eU93bmVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAQcGFydHlPd25lclB1YktleQAAAAANbGVhc2luZ1BlcmlvZAAAAAAAAAknwAAAAAAGd2luQW10CQAAaAAAAAIAAAAAAAAAAAEFAAAAB1dBVkVMRVQAAAAADW1pbkhlaWdodERpZmYAAAAAAAAAAAEAAAAADW1heEhlaWdodERpZmYAAAAAAAAAAAMAAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAAAACvr3AAAAAA5ibG9ja3NQZXJSb3VuZAAAAAAAAAAADAAAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAAAAAAAgAAAAAA01SVAkAAlkAAAABAgAAACw4YjRqRTdYMXlDTmNiRjRZWFpHQktjOFQ1eGRpdDdiMWdFTnh4eDMxZGF1YQAAAAAGTWluRkVFCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAHV0FWRUxFVAAAAAAAAAAD6AAAAAAMSWR4V2luSGVpZ2h0AAAAAAAAAAAAAAAAAAxJZHhXaW5QdWJLZXkAAAAAAAAAAAEAAAAADElkeExlYXNpbmdJZAAAAAAAAAAAAgEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQAAAAVyb3VuZAMJAABmAAAAAgAAAAAAAAAAAAUAAAAFcm91bmQJAAACAAAAAQIAAAAUSW52YWxpZCByb3VuZCBudW1iZXIJAAEsAAAAAgIAAAAFcm91bmQJAAGkAAAAAQUAAAAFcm91bmQBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQAAAAVyb3VuZAQAAAAMcm91bmREYXRhT3B0CQAEHQAAAAIFAAAABHRoaXMJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMcm91bmREYXRhU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADHJvdW5kRGF0YU9wdAkBAAAAB2V4dHJhY3QAAAABBQAAAAxyb3VuZERhdGFPcHQCAAAAAAQAAAAUcGFydHlPd25lckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAEXBhcnR5T3duZXJBZGRyZXNzAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAAJAAS1AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAFfCQAETAAAAAICAAAAATAJAARMAAAAAgkAAaQAAAABBQAAAApwbXRPblN0YXJ0CQAETAAAAAIFAAAAFHBhcnR5T3duZXJBZGRyZXNzU3RyCQAETAAAAAICAAAACVVOREVGSU5FRAUAAAADbmlsAQAAACVyZWFkTGFzdFBsYXllcnNBZGRyRnJvbVJvdW5kc1NoYXJlZFN0AAAAAAQAAAAOc2hhcmVkU3RhdGVPcHQJAAQdAAAAAgUAAAAEdGhpcwIAAAARUm91bmRzU2hhcmVkU3RhdGUEAAAADnNoYXJlZFN0YXRlU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADnNoYXJlZFN0YXRlT3B0CQEAAAAHZXh0cmFjdAAAAAEFAAAADnNoYXJlZFN0YXRlT3B0AgAAAAADCQEAAAACIT0AAAACBQAAAA5zaGFyZWRTdGF0ZVN0cgIAAAAACQABkQAAAAIJAAS1AAAAAgUAAAAOc2hhcmVkU3RhdGVTdHICAAAAAV8AAAAAAAAAAAECAAAAAAEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAYAAAAEdHlwZQAAAAVyb3VuZAAAAAxuZXdXaW5IZWlnaHQAAAAPbmV3V2luUHViS2V5U3RyAAAADG5ld1dpblB1YktleQAAAAtsZWFzaW5nSWQ1OAQAAAAPbmV3V2luSGVpZ2h0U3RyCQABpAAAAAEFAAAADG5ld1dpbkhlaWdodAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAETU9WRQQAAAAQbmV3V2luQWRkcmVzc1N0cgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAAxuZXdXaW5QdWJLZXkEAAAADWFkZHJlc3NMZW5ndGgJAAExAAAAAQUAAAAQbmV3V2luQWRkcmVzc1N0cgQAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkBAAAAJXJlYWRMYXN0UGxheWVyc0FkZHJGcm9tUm91bmRzU2hhcmVkU3QAAAAABAAAABJuZXdMYXN0UGxheWVyc0FkZHIDAwkBAAAAAiE9AAAAAgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgIAAAAACQAAZgAAAAIJAAExAAAAAQUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkAAGgAAAACCQAAZAAAAAIFAAAADWFkZHJlc3NMZW5ndGgAAAAAAAAAAAEAAAAAAAAAABQHCQABLAAAAAIJAAEsAAAAAgIAAAABLQUAAAAQbmV3V2luQWRkcmVzc1N0cgkBAAAACWRyb3BSaWdodAAAAAIFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAABkAAAAAgUAAAANYWRkcmVzc0xlbmd0aAAAAAAAAAAAAQkAASwAAAACCQABLAAAAAICAAAAAS0FAAAAEG5ld1dpbkFkZHJlc3NTdHIFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA9uZXdXaW5IZWlnaHRTdHICAAAAAV8FAAAAD25ld1dpblB1YktleVN0cgIAAAABXwUAAAALbGVhc2luZ0lkNTgJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAEVJvdW5kc1NoYXJlZFN0YXRlCQABLAAAAAIJAAEsAAAAAgUAAAAPbmV3V2luSGVpZ2h0U3RyAgAAAAFfBQAAABJuZXdMYXN0UGxheWVyc0FkZHIFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAHTEVBU0lORwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldFJvdW5kRGF0YUtleU9yRmFpbAAAAAEFAAAABXJvdW5kCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAPbmV3V2luUHViS2V5U3RyAgAAAAFfBQAAAAtsZWFzaW5nSWQ1OAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAwVW5zdXBwb3J0ZWQgdHlwZSBpbiB3cml0ZVNldE9mUm91bmREYXRhIG1ldGhvZDogBQAAAAR0eXBlAAAAAAZvZmZzZXQJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAMY3VyclJvdW5kTnVtAwkAAGcAAAACBQAAAAZvZmZzZXQAAAAAAAAAAAAJAABpAAAAAgUAAAAGb2Zmc2V0BQAAAA5ibG9ja3NQZXJSb3VuZAkAAAIAAAABCQABLAAAAAICAAAALVBsZWFzZSBkbyBub3QgaHVycnkuIE1SVCBwYXJ0eSB3aWxsIHN0YXJ0IG9uIAkAAaQAAAABBQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAPY3VyclJvdW5kSGVpZ2h0CQAAagAAAAIFAAAABm9mZnNldAUAAAAOYmxvY2tzUGVyUm91bmQAAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0CQAAZAAAAAIJAABoAAAAAgUAAAAMY3VyclJvdW5kTnVtBQAAAA5ibG9ja3NQZXJSb3VuZAUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kCQAAZAAAAAIFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BQAAABRibG9ja3NQZXJDb21wZXRpdGlvbgAAAAARY3VyclJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAADGN1cnJSb3VuZE51bQAAAAANY3VycldpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEWN1cnJSb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5IZWlnaHQAAAAADWN1cnJNaW5QbXRBbXQFAAAACnBtdE9uU3RhcnQAAAAADGlzUGF1c2VCeVdpbgMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAA1jdXJyV2luSGVpZ2h0CQAAZgAAAAIFAAAADWN1cnJXaW5IZWlnaHQFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BwAAAAANaXNQYXVzZUJ5VGltZQkAAGYAAAACBQAAAA9jdXJyUm91bmRIZWlnaHQFAAAAFGJsb2Nrc1BlckNvbXBldGl0aW9uAAAAAAdpc1BhdXNlAwUAAAAMaXNQYXVzZUJ5V2luBgUAAAANaXNQYXVzZUJ5VGltZQAAAAANaXNDb21wZXRpdGlvbgkBAAAAASEAAAABBQAAAAdpc1BhdXNlAAAAAgAAAANpbnYBAAAABG1vdmUAAAABAAAADG5ld1dpbkhlaWdodAQAAAAPbWluTmV3V2luSGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAUAAAANbWluSGVpZ2h0RGlmZgQAAAAPbWF4TmV3V2luSGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAUAAAANbWF4SGVpZ2h0RGlmZgQAAAARbmV3V2luSGVpZ2h0VmFsaWQDCQAAZwAAAAIFAAAAD21pbk5ld1dpbkhlaWdodAUAAAAXY3VyclJvdW5kQ29tcGV0aXRpb25FbmQJAAAAAAAAAgUAAAAMbmV3V2luSGVpZ2h0BQAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAMJAABnAAAAAgUAAAAMbmV3V2luSGVpZ2h0BQAAAA9taW5OZXdXaW5IZWlnaHQJAABnAAAAAgUAAAAPbWF4TmV3V2luSGVpZ2h0BQAAAAxuZXdXaW5IZWlnaHQHBAAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAkBAAAAB2V4dHJhY3QAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAAACAAAAAQIAAAA6UGxlYXNlIGF0dGFjaCBwYXltZW50IHdpdGggTVJUIHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAQAAAAIhPQAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAA01SVAkAAAIAAAABAgAAAD1QbGVhc2UgdXNlIE1SVCBhcyBhIHBheW1lbnQgYXNzZXQgdG8gcGFydGljaXBhdGUgaW4gTVJUIHBhcnR5AwkAAGYAAAACBQAAAA1jdXJyTWluUG10QW10CAUAAAAHcGF5bWVudAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAAEVTb3JyeSBteSBmcmllbmQgYnV0IHlvdXIgcGF5bWVudCBpcyB0byBzbWFsbC4gQ3VycmVudCBtaW4gcGF5bWVudCBpcyAJAAGkAAAAAQUAAAANY3Vyck1pblBtdEFtdAMJAQAAAAEhAAAAAQUAAAARbmV3V2luSGVpZ2h0VmFsaWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAVU29ycnksIG5ld1dpbkhlaWdodD0gCQABpAAAAAEFAAAADG5ld1dpbkhlaWdodAIAAAALaXMgb3V0IG9mIFsJAAGkAAAAAQUAAAAPbWluTmV3V2luSGVpZ2h0AgAAAAIsIAkAAaQAAAABBQAAAA9tYXhOZXdXaW5IZWlnaHQCAAAAB10gcmFuZ2UDBQAAAAdpc1BhdXNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFTb3JyeSBidXQgcm91bmQgIwkAAaQAAAABBQAAAAxjdXJyUm91bmROdW0CAAAADSBpcyBmaW5pc2hlZC4JAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABgIAAAAETU9WRQUAAAAMY3VyclJvdW5kTnVtBQAAAAxuZXdXaW5IZWlnaHQJAAJYAAAAAQgFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5AgAAAAlVTkRFRklORUQAAAADaW52AQAAABFyZWdpc3RlckxlYXNpbmdUeAAAAAIAAAAFcm91bmQAAAALbGVhc2luZ0lkNTgEAAAACWxlYXNpbmdJZAkAAlkAAAABBQAAAAtsZWFzaW5nSWQ1OAQAAAANcm91bmREYXRhTGlzdAkBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQUAAAAFcm91bmQEAAAADHdpbm5lclB1YktleQkAAlkAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQMJAABmAAAAAgUAAAAFcm91bmQFAAAADGN1cnJSb3VuZE51bQkAAAIAAAABAgAAAD5JbXBvc3NpYmxlIHRvIHJlZ2lzdGVyIGxlYXNpbmcgdHJhbnNhY3Rpb24gZm9yIHJvdW5kIGluIGZ1dHVyZQMDCQAAAAAAAAIFAAAABXJvdW5kBQAAAAxjdXJyUm91bmROdW0FAAAADWlzQ29tcGV0aXRpb24HCQAAAgAAAAECAAAAT0ltcG9zc2libGUgdG8gcmVnaXN0ZXIgbGVhc2luZyB0cmFuc2FjdGlvbiAtIHdpbm5lciBoYXMgbm90IGJlZW4gZGV0ZXJtaW5lZCB5ZXQDCQEAAAACIT0AAAACCQABMQAAAAEFAAAAC2xlYXNpbmdJZDU4AAAAAAAAAAAsCQAAAgAAAAECAAAAJUludmFsaWQgbGVhc2luZyB0cmFuc2FjdGlvbiBpZCBsZW5ndGgDCQAAZwAAAAIAAAAAAAAAAAAJAADIAAAAAQUAAAAJbGVhc2luZ0lkCQAAAgAAAAECAAAANkxlYXNpbmcgdHJhbnNhY3Rpb24gaWQgaXMgbm90IGVuY29kZWQgYXMgQmFzZTU4IGZvcm1hdAMJAQAAAAlpc0RlZmluZWQAAAABCQAD6QAAAAEFAAAACWxlYXNpbmdJZAkAAAIAAAABAgAAADRQYXNzZWQgbGVhc2luZ0lkNTggaGFzIGFscmVhZHkgZXhpc3RlZCBpbiBibG9ja2NoYWluAwkBAAAAAiE9AAAAAgkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhMZWFzaW5nSWQCAAAACVVOREVGSU5FRAkAAAIAAAABCQABLAAAAAICAAAAMExlYXNpbmcgdHggaWQgaGFzIGFscmVhZHkgcmVnaXN0cmVyZWQgZm9yIHJvdW5kIAkAAaQAAAABBQAAAAVyb3VuZAMJAQAAAAIhPQAAAAIIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5BQAAAAx3aW5uZXJQdWJLZXkJAAACAAAAAQIAAAAxTGVhc2luZyB0eCBjYW4gYmUgcmVnaXN0ZXJlZCBieSByb3VuZCB3aW5uZXIgb25seQQAAAAOcm91bmRXaW5IZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5IZWlnaHQJAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABgIAAAAHTEVBU0lORwUAAAAFcm91bmQFAAAADnJvdW5kV2luSGVpZ2h0CQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQkAAZsAAAABAgAAAAAFAAAAC2xlYXNpbmdJZDU4AAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAASbGVhc2luZ1BlcmlvZEVuZGVkCQAAZgAAAAIFAAAABmhlaWdodAkAAGQAAAACBQAAABFibG9ja3NPbkdhbWVTdGFydAUAAAANbGVhc2luZ1BlcmlvZAQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAEExlYXNlVHJhbnNhY3Rpb24EAAAAA2x0eAUAAAAHJG1hdGNoMAQAAAADc2lnCQABkQAAAAIIBQAAAANsdHgAAAAGcHJvb2ZzAAAAAAAAAAAABAAAAAVyb3VuZAkABLEAAAABCQABkQAAAAIIBQAAAANsdHgAAAAGcHJvb2ZzAAAAAAAAAAABBAAAAA1yb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAOcm91bmRXaW5QdWJLZXkJAAJZAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5QdWJLZXkEAAAAE3JlZ2lzdGVyZWRMZWFzaW5nSWQJAAJZAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhMZWFzaW5nSWQDBQAAABJsZWFzaW5nUGVyaW9kRW5kZWQJAAACAAAAAQIAAAAnU29ycnkgYnV0IGxlYXNpbmcgcGVyaW9kIGhhcyBiZWVuIGVuZGVkAwkBAAAAASEAAAABCQAB9AAAAAMIBQAAAANsdHgAAAAJYm9keUJ5dGVzBQAAAANzaWcFAAAADnJvdW5kV2luUHViS2V5CQAAAgAAAAECAAAASkludmFsaWQgbGVhc2luZyB0cmFuc2FjdGlvbiBzaWduYXR1cmUuIExlYXNpbmcgaXMgYWxsb3dlZCBmb3Igd2lubmVyIG9ubHkuAwkBAAAAAiE9AAAAAggFAAAAA2x0eAAAAAJpZAUAAAATcmVnaXN0ZXJlZExlYXNpbmdJZAkAAAIAAAABAgAAAD9MZWFzaW5nIHRyYW5zYWN0aW9uIGlkIGRvZXNuJ3QgbWF0Y2ggd2l0aCByZWdpc3RlcmVkIGxlYXNpbmcgaWQDCQEAAAACIT0AAAACCAUAAAADbHR4AAAABmFtb3VudAUAAAAGd2luQW10CQAAAgAAAAEJAAEsAAAAAgIAAAApSW1wb3NzaWJsZSB0byBsZWFzZSBsZXNzIG9yIGdyZWF0ZXIgdGhhbiAJAAGkAAAAAQUAAAAGd2luQW10AwkBAAAAAiE9AAAAAggFAAAAA2x0eAAAAANmZWUFAAAABk1pbkZFRQkAAAIAAAABCQABLAAAAAICAAAAMkltcG9zc2libGUgdG8gbGVhc2Ugd2l0aCBmZWUgbGVzcyBvciBncmVhdGVyIHRoYW4gCQABpAAAAAEFAAAABk1pbkZFRQYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFkxlYXNlQ2FuY2VsVHJhbnNhY3Rpb24EAAAABGNsdHgFAAAAByRtYXRjaDADCQEAAAABIQAAAAEFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAAD5NUlQgcGFydHkgaGFzIG5vdCBmaW5pc2hlZCB5ZXQuIExlYXNpbmcgQ2FuY2VsIGlzIG5vdCBhbGxvd2VkLgMJAQAAAAEhAAAAAQkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEHBhcnR5T3duZXJQdWJLZXkJAAACAAAAAQIAAAAtTGVhc2luZyBDYW5jZWwgaXMgYWxsb3dlZCB0byBQYXJ0eSBPd25lciBvbmx5AwkBAAAAAiE9AAAAAggFAAAABGNsdHgAAAADZmVlBQAAAAZNaW5GRUUJAAACAAAAAQkAASwAAAACAgAAADtJbXBvc3NpYmxlIHRvIGNhbmNsZSBsZWFzaW5nIHdpdGggZmVlIGxlc3Mgb3IgZ3JlYXRlciB0aGFuIAkAAaQAAAABBQAAAAZNaW5GRUUGAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDADCQEAAAABIQAAAAEFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAADhNUlQgcGFydHkgaGFzIG5vdCBmaW5pc2hlZCB5ZXQuIFRyYW5zZmVyIGlzIG5vdCBhbGxvd2VkLgMJAQAAAAIhPQAAAAIICQAEJAAAAAEIBQAAAAN0dHgAAAAJcmVjaXBpZW50AAAABWJ5dGVzCAUAAAARcGFydHlPd25lckFkZHJlc3MAAAAFYnl0ZXMJAAACAAAAAQIAAAAvVHJhbnNmZXIgaXMgYWxsb3dlZCB0byBQYXJ0eSBPd25lciBhZGRyZXNzIG9ubHkDCQEAAAABIQAAAAEJAAH0AAAAAwgFAAAAA3R0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAA3R0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEHBhcnR5T3duZXJQdWJLZXkJAAACAAAAAQIAAAApVHJhbnNmZXIgaXMgYWxsb3dlZCBmb3IgUGFydHkgT3duZXIgb25seS4GAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAADc3R4BQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQfhflGO", "chainId": 84, "height": 719607, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let WAVELET = ((100 * 1000) * 1000)
5+
6+let MRTEC = 100
7+
8+let pmtOnStart = (10 * MRTEC)
9+
10+let partyOwnerPubKey = fromBase58String("FCaP4jLhLawzEqbwAQGAVvPQBv2h3LdERCx7fckDvnzr")
11+
12+let partyOwnerAddress = addressFromPublicKey(partyOwnerPubKey)
13+
14+let leasingPeriod = 600000
15+
16+let winAmt = (1 * WAVELET)
17+
18+let minHeightDiff = 1
19+
20+let maxHeightDiff = 3
21+
22+let blocksOnGameStart = 719607
23+
24+let blocksPerRound = 12
25+
26+let blocksPerCompetition = 8
27+
28+let MRT = fromBase58String("8b4jE7X1yCNcbF4YXZGBKc8T5xdit7b1gENxxx31daua")
29+
30+let MinFEE = ((5 * WAVELET) / 1000)
31+
32+let IdxWinHeight = 0
33+
34+let IdxWinPubKey = 1
35+
36+let IdxLeasingId = 2
37+
38+func getRoundDataKeyOrFail (round) = if ((0 > round))
39+ then throw("Invalid round number")
40+ else ("round" + toString(round))
41+
42+
43+func readRoundDataListOrFail (round) = {
44+ let roundDataOpt = getString(this, getRoundDataKeyOrFail(round))
45+ let roundDataStr = if (isDefined(roundDataOpt))
46+ then extract(roundDataOpt)
47+ else ""
48+ let partyOwnerAddressStr = toBase58String(partyOwnerAddress.bytes)
49+ if ((roundDataStr != ""))
50+ then split(roundDataStr, "_")
51+ else ["0", toString(pmtOnStart), partyOwnerAddressStr, "UNDEFINED"]
52+ }
53+
54+
55+func readLastPlayersAddrFromRoundsSharedSt () = {
56+ let sharedStateOpt = getString(this, "RoundsSharedState")
57+ let sharedStateStr = if (isDefined(sharedStateOpt))
58+ then extract(sharedStateOpt)
59+ else ""
60+ if ((sharedStateStr != ""))
61+ then split(sharedStateStr, "_")[1]
62+ else ""
63+ }
64+
65+
66+func writeSetOfRoundData (type,round,newWinHeight,newWinPubKeyStr,newWinPubKey,leasingId58) = {
67+ let newWinHeightStr = toString(newWinHeight)
68+ if ((type == "MOVE"))
69+ then {
70+ let newWinAddressStr = toString(addressFromPublicKey(newWinPubKey))
71+ let addressLength = size(newWinAddressStr)
72+ let currLastPlayersAddr = readLastPlayersAddrFromRoundsSharedSt()
73+ let newLastPlayersAddr = if (if ((currLastPlayersAddr != ""))
74+ then (size(currLastPlayersAddr) > ((addressLength + 1) * 20))
75+ else false)
76+ then (("-" + newWinAddressStr) + dropRight(currLastPlayersAddr, (addressLength + 1)))
77+ else (("-" + newWinAddressStr) + currLastPlayersAddr)
78+ WriteSet([DataEntry(getRoundDataKeyOrFail(round), ((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58)), DataEntry("RoundsSharedState", ((newWinHeightStr + "_") + newLastPlayersAddr))])
79+ }
80+ else if ((type == "LEASING"))
81+ then WriteSet([DataEntry(getRoundDataKeyOrFail(round), ((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58))])
82+ else throw(("Unsupported type in writeSetOfRoundData method: " + type))
83+ }
84+
85+
86+let offset = (height - blocksOnGameStart)
87+
88+let currRoundNum = if ((offset >= 0))
89+ then (offset / blocksPerRound)
90+ else throw(("Please do not hurry. MRT party will start on " + toString(blocksOnGameStart)))
91+
92+let currRoundHeight = (offset % blocksPerRound)
93+
94+let currRoundHeightStart = ((currRoundNum * blocksPerRound) + blocksOnGameStart)
95+
96+let currRoundCompetitionEnd = (currRoundHeightStart + blocksPerCompetition)
97+
98+let currRoundDataList = readRoundDataListOrFail(currRoundNum)
99+
100+let currWinHeight = parseIntValue(currRoundDataList[IdxWinHeight])
101+
102+let currMinPmtAmt = pmtOnStart
103+
104+let isPauseByWin = if ((height >= currWinHeight))
105+ then (currWinHeight > currRoundHeightStart)
106+ else false
107+
108+let isPauseByTime = (currRoundHeight > blocksPerCompetition)
109+
110+let isPause = if (isPauseByWin)
111+ then true
112+ else isPauseByTime
113+
114+let isCompetition = !(isPause)
115+
116+@Callable(inv)
117+func move (newWinHeight) = {
118+ let minNewWinHeight = (height + minHeightDiff)
119+ let maxNewWinHeight = (height + maxHeightDiff)
120+ let newWinHeightValid = if ((minNewWinHeight >= currRoundCompetitionEnd))
121+ then (newWinHeight == currRoundCompetitionEnd)
122+ else if ((newWinHeight >= minNewWinHeight))
123+ then (maxNewWinHeight >= newWinHeight)
124+ else false
125+ let payment = if (isDefined(inv.payment))
126+ then extract(inv.payment)
127+ else throw("Please attach payment with MRT to participate in MRT party")
128+ if ((payment.assetId != MRT))
129+ then throw("Please use MRT as a payment asset to participate in MRT party")
130+ else if ((currMinPmtAmt > payment.amount))
131+ then throw(("Sorry my friend but your payment is to small. Current min payment is " + toString(currMinPmtAmt)))
132+ else if (!(newWinHeightValid))
133+ then throw((((((("Sorry, newWinHeight= " + toString(newWinHeight)) + "is out of [") + toString(minNewWinHeight)) + ", ") + toString(maxNewWinHeight)) + "] range"))
134+ else if (isPause)
135+ then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
136+ else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toBase58String(inv.callerPublicKey), inv.callerPublicKey, "UNDEFINED")
137+ }
138+
139+
140+
141+@Callable(inv)
142+func registerLeasingTx (round,leasingId58) = {
143+ let leasingId = fromBase58String(leasingId58)
144+ let roundDataList = readRoundDataListOrFail(round)
145+ let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
146+ if ((round > currRoundNum))
147+ then throw("Impossible to register leasing transaction for round in future")
148+ else if (if ((round == currRoundNum))
149+ then isCompetition
150+ else false)
151+ then throw("Impossible to register leasing transaction - winner has not been determined yet")
152+ else if ((size(leasingId58) != 44))
153+ then throw("Invalid leasing transaction id length")
154+ else if ((0 >= size(leasingId)))
155+ then throw("Leasing transaction id is not encoded as Base58 format")
156+ else if (isDefined(transactionHeightById(leasingId)))
157+ then throw("Passed leasingId58 has already existed in blockchain")
158+ else if ((roundDataList[IdxLeasingId] != "UNDEFINED"))
159+ then throw(("Leasing tx id has already registrered for round " + toString(round)))
160+ else if ((inv.callerPublicKey != winnerPubKey))
161+ then throw("Leasing tx can be registered by round winner only")
162+ else {
163+ let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
164+ writeSetOfRoundData("LEASING", round, roundWinHeight, roundDataList[IdxWinPubKey], toBytes(""), leasingId58)
165+ }
166+ }
167+
168+
169+@Verifier(tx)
170+func verify () = {
171+ let leasingPeriodEnded = (height > (blocksOnGameStart + leasingPeriod))
172+ match tx {
173+ case ltx: LeaseTransaction =>
174+ let sig = ltx.proofs[0]
175+ let round = toInt(ltx.proofs[1])
176+ let roundDataList = readRoundDataListOrFail(round)
177+ let roundWinPubKey = fromBase58String(roundDataList[IdxWinPubKey])
178+ let registeredLeasingId = fromBase58String(roundDataList[IdxLeasingId])
179+ if (leasingPeriodEnded)
180+ then throw("Sorry but leasing period has been ended")
181+ else if (!(sigVerify(ltx.bodyBytes, sig, roundWinPubKey)))
182+ then throw("Invalid leasing transaction signature. Leasing is allowed for winner only.")
183+ else if ((ltx.id != registeredLeasingId))
184+ then throw("Leasing transaction id doesn't match with registered leasing id")
185+ else if ((ltx.amount != winAmt))
186+ then throw(("Impossible to lease less or greater than " + toString(winAmt)))
187+ else if ((ltx.fee != MinFEE))
188+ then throw(("Impossible to lease with fee less or greater than " + toString(MinFEE)))
189+ else true
190+ case cltx: LeaseCancelTransaction =>
191+ if (!(leasingPeriodEnded))
192+ then throw("MRT party has not finished yet. Leasing Cancel is not allowed.")
193+ else if (!(sigVerify(tx.bodyBytes, tx.proofs[0], partyOwnerPubKey)))
194+ then throw("Leasing Cancel is allowed to Party Owner only")
195+ else if ((cltx.fee != MinFEE))
196+ then throw(("Impossible to cancle leasing with fee less or greater than " + toString(MinFEE)))
197+ else true
198+ case ttx: TransferTransaction =>
199+ if (!(leasingPeriodEnded))
200+ then throw("MRT party has not finished yet. Transfer is not allowed.")
201+ else if ((addressFromRecipient(ttx.recipient).bytes != partyOwnerAddress.bytes))
202+ then throw("Transfer is allowed to Party Owner address only")
203+ else if (!(sigVerify(ttx.bodyBytes, ttx.proofs[0], partyOwnerPubKey)))
204+ then throw("Transfer is allowed for Party Owner only.")
205+ else true
206+ case stx: SetScriptTransaction =>
207+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
208+ case _ =>
209+ false
210+ }
211+ }
212+

github/deemru/w8io/026f985 
24.30 ms