tx · HDyJQMac5nkcrPLB3TwWRE1HX1NgS4mF8yqoW1KgzmHb

3N5RZzJX5VLb937k1HkfCPj464fa6a916hj:  -0.02000000 Waves

2019.10.21 19:06 [730061] smart account 3N5RZzJX5VLb937k1HkfCPj464fa6a916hj > SELF 0.00000000 Waves

{ "type": 13, "id": "HDyJQMac5nkcrPLB3TwWRE1HX1NgS4mF8yqoW1KgzmHb", "fee": 2000000, "feeAssetId": null, "timestamp": 1571674032575, "version": 1, "sender": "3N5RZzJX5VLb937k1HkfCPj464fa6a916hj", "senderPublicKey": "DabN1B19F6fW9mT8w79uNApEku9kf5cVL1kBhoDGqvoN", "proofs": [ "5HgE3vBomwAmZARkMvUkDHQFr5yYvxfRzeYhUw2bu7JTwJZvcufsqPn7mzNAQVbXPokF1qxaz8yNhYMGPkaPu8hR" ], "script": "base64:AAIDAAAAAAAAAAoIARIAEgQKAgEIAAAAKQAAAAAHV0FWRUxFVAkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gAAAAABU1SVEVDAAAAAAAAAABkAAAAAAltYXhSb3VuZHMAAAAAAAX14QAAAAAAB3BtdFN0ZXAJAABoAAAAAgAAAAAAAAAACgUAAAAFTVJURUMAAAAAEHBhcnR5T3duZXJQdWJLZXkJAAJZAAAAAQIAAAAsRkNhUDRqTGhMYXd6RXFid0FRR0FWdlBRQnYyaDNMZEVSQ3g3ZmNrRHZuenIAAAAAEXBhcnR5T3duZXJBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAABBwYXJ0eU93bmVyUHViS2V5AAAAAA1sZWFzaW5nUGVyaW9kAAAAAAAACSfAAAAAABFsZWFzaW5nSWRMaWZldGltZQAAAAAAAAAAlgAAAAAXbGVhc2luZ0lkRGlmZkluTGlmZXRpbWUAAAAAAAAAAAoAAAAACmxlYXNpbmdBbXQJAABoAAAAAgAAAAAAAAAAAQUAAAAHV0FWRUxFVAAAAAAKaGVpZ2h0U3RlcAAAAAAAAAAAAgAAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAAAALIdQAAAAADmJsb2Nrc1BlclJvdW5kAAAAAAAAAAAMAAAAABRibG9ja3NQZXJDb21wZXRpdGlvbgAAAAAAAAAACAAAAAADTVJUCQACWQAAAAECAAAALDhiNGpFN1gxeUNOY2JGNFlYWkdCS2M4VDV4ZGl0N2IxZ0VOeHh4MzFkYXVhAAAAAAZNaW5GRUUJAABpAAAAAgkAAGgAAAACAAAAAAAAAAAFBQAAAAdXQVZFTEVUAAAAAAAAAAPoAAAAAAxJZHhXaW5IZWlnaHQAAAAAAAAAAAAAAAAADElkeFdpblB1YktleQAAAAAAAAAAAQAAAAAMSWR4TGVhc2luZ0lkAAAAAAAAAAACAAAAABVJZHhMZWFzaW5nSWRWYWxpZFRpbGwAAAAAAAAAAAMBAAAAC2NvbnZlcnRDaGFyAAAAAQAAAARjaGFyBAAAAAJCMAkAAZsAAAABAgAAAAFxBAAAAAJCMQkAAZsAAAABAgAAAAFyBAAAAAJCMgkAAZsAAAABAgAAAAFzBAAAAAJCMwkAAZsAAAABAgAAAAF0BAAAAAJCNAkAAZsAAAABAgAAAAF1BAAAAAJCNQkAAZsAAAABAgAAAAF2BAAAAAJCNgkAAZsAAAABAgAAAAF3BAAAAAJCNwkAAZsAAAABAgAAAAF4BAAAAAJCOAkAAZsAAAABAgAAAAF5BAAAAAJCOQkAAZsAAAABAgAAAAF6AwkAAAAAAAACBQAAAARjaGFyBQAAAAJCMAIAAAABMAMJAAAAAAAAAgUAAAAEY2hhcgUAAAACQjECAAAAATEDCQAAAAAAAAIFAAAABGNoYXIFAAAAAkIyAgAAAAEyAwkAAAAAAAACBQAAAARjaGFyBQAAAAJCMwIAAAABMwMJAAAAAAAAAgUAAAAEY2hhcgUAAAACQjQCAAAAATQDCQAAAAAAAAIFAAAABGNoYXIFAAAAAkI1AgAAAAE1AwkAAAAAAAACBQAAAARjaGFyBQAAAAJCNgIAAAABNgMJAAAAAAAAAgUAAAAEY2hhcgUAAAACQjcCAAAAATcDCQAAAAAAAAIFAAAABGNoYXIFAAAAAkI4AgAAAAE4AwkAAAAAAAACBQAAAARjaGFyBQAAAAJCOQIAAAABOQkAAAIAAAABAgAAABBVbnN1cHBvcnRlZCBjaGFyAQAAAApwcm9vZlRvU3RyAAAAAQAAAA1yb3VuZE51bVByb29mBAAAAAFzCQAAyAAAAAEFAAAADXJvdW5kTnVtUHJvb2YDCQAAZgAAAAIFAAAAAXMAAAAAAAAAAAIJAAACAAAAAQIAAAA2SW52YWxpZCBlY29kZWQgcm91bmQgLSBzaXplIGNvdWxkbid0IGJlIGdyZWF0ZXIgdGhhbiAyAwkAAGcAAAACAAAAAAAAAAAABQAAAAFzCQAAAgAAAAECAAAAPUludmFsaWQgZWNvZGVkIHJvdW5kIC0gc2l6ZSBjb3VsZG4ndCBiZSBsZXNzIHRoYW4gb3IgZXF1YWxzIDADCQAAAAAAAAIFAAAAAXMAAAAAAAAAAAEJAQAAAAtjb252ZXJ0Q2hhcgAAAAEJAADJAAAAAgUAAAANcm91bmROdW1Qcm9vZgAAAAAAAAAAAQMJAAAAAAAAAgUAAAABcwAAAAAAAAAAAgkAASwAAAACCQEAAAALY29udmVydENoYXIAAAABCQAAyQAAAAIFAAAADXJvdW5kTnVtUHJvb2YAAAAAAAAAAAEJAQAAAAtjb252ZXJ0Q2hhcgAAAAEJAADJAAAAAgkAAMoAAAACBQAAAA1yb3VuZE51bVByb29mAAAAAAAAAAABAAAAAAAAAAABCQAAAgAAAAECAAAAFUludmFsaWQgZW5jb2RlZCByb3VuZAEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQAAAAVyb3VuZAMJAABmAAAAAgAAAAAAAAAAAAUAAAAFcm91bmQJAAACAAAAAQIAAAAUSW52YWxpZCByb3VuZCBudW1iZXIJAAEsAAAAAgIAAAAFcm91bmQJAAGkAAAAAQUAAAAFcm91bmQBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQAAAAVyb3VuZAQAAAAMcm91bmREYXRhT3B0CQAEHQAAAAIFAAAABHRoaXMJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMcm91bmREYXRhU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADHJvdW5kRGF0YU9wdAkBAAAAB2V4dHJhY3QAAAABBQAAAAxyb3VuZERhdGFPcHQCAAAAAAQAAAAUcGFydHlPd25lckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAEXBhcnR5T3duZXJBZGRyZXNzAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAAJAAS1AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAFfCQAETAAAAAICAAAAATAJAARMAAAAAgkAAaQAAAABBQAAAAdwbXRTdGVwCQAETAAAAAIFAAAAFHBhcnR5T3duZXJBZGRyZXNzU3RyCQAETAAAAAICAAAAAT8JAARMAAAAAgIAAAABMAUAAAADbmlsAQAAAA9yZWFkU2hhcmVkU3RhdGUAAAAABAAAAA5zaGFyZWRTdGF0ZU9wdAkABB0AAAACBQAAAAR0aGlzAgAAABFSb3VuZHNTaGFyZWRTdGF0ZQQAAAAOc2hhcmVkU3RhdGVTdHIDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAOc2hhcmVkU3RhdGVPcHQJAQAAAAdleHRyYWN0AAAAAQUAAAAOc2hhcmVkU3RhdGVPcHQCAAAAAAMJAQAAAAIhPQAAAAIFAAAADnNoYXJlZFN0YXRlU3RyAgAAAAAJAAS1AAAAAgUAAAAOc2hhcmVkU3RhdGVTdHICAAAAAV8JAARMAAAAAgIAAAAACQAETAAAAAICAAAAATAJAARMAAAAAgIAAAAABQAAAANuaWwBAAAAE3dyaXRlU2V0T2ZSb3VuZERhdGEAAAAHAAAABHR5cGUAAAAFcm91bmQAAAAMbmV3V2luSGVpZ2h0AAAAD25ld1dpblB1YktleVN0cgAAAAxuZXdXaW5QdWJLZXkAAAALbGVhc2luZ0lkNTgAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQEAAAAD25ld1dpbkhlaWdodFN0cgkAAaQAAAABBQAAAAxuZXdXaW5IZWlnaHQEAAAACXJvdW5kRGF0YQkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAPbmV3V2luSGVpZ2h0U3RyAgAAAAFfBQAAAA9uZXdXaW5QdWJLZXlTdHICAAAAAV8FAAAAC2xlYXNpbmdJZDU4AgAAAAFfCQABpAAAAAEFAAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0AwkAAAAAAAACBQAAAAR0eXBlAgAAAARNT1ZFBAAAABBuZXdXaW5BZGRyZXNzU3RyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAADG5ld1dpblB1YktleQQAAAANYWRkcmVzc0xlbmd0aAkAATEAAAABBQAAABBuZXdXaW5BZGRyZXNzU3RyBAAAAAtzaGFyZWRTdGF0ZQkBAAAAD3JlYWRTaGFyZWRTdGF0ZQAAAAAEAAAAFW5ld1RvdGFsR2FtZXNDb3VudFN0cgkAAaQAAAABCQAAZAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAtzaGFyZWRTdGF0ZQAAAAAAAAAAAQAAAAAAAAAAAQQAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkAAZEAAAACBQAAAAtzaGFyZWRTdGF0ZQAAAAAAAAAAAgQAAAASbmV3TGFzdFBsYXllcnNBZGRyAwMJAQAAAAIhPQAAAAIFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHICAAAAAAkAAGYAAAACCQABMQAAAAEFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAABoAAAAAgkAAGQAAAACBQAAAA1hZGRyZXNzTGVuZ3RoAAAAAAAAAAABAAAAAAAAAAAKBwkAASwAAAACCQABLAAAAAICAAAAAS0FAAAAEG5ld1dpbkFkZHJlc3NTdHIJAQAAAAlkcm9wUmlnaHQAAAACBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQAAZAAAAAIFAAAADWFkZHJlc3NMZW5ndGgAAAAAAAAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAEtBQAAABBuZXdXaW5BZGRyZXNzU3RyBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIFAAAACXJvdW5kRGF0YQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAARUm91bmRzU2hhcmVkU3RhdGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAPbmV3V2luSGVpZ2h0U3RyAgAAAAFfBQAAABVuZXdUb3RhbEdhbWVzQ291bnRTdHICAAAAAV8FAAAAEm5ld0xhc3RQbGF5ZXJzQWRkcgUAAAADbmlsAwkAAAAAAAACBQAAAAR0eXBlAgAAAAdMRUFTSU5HCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIFAAAACXJvdW5kRGF0YQUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAwVW5zdXBwb3J0ZWQgdHlwZSBpbiB3cml0ZVNldE9mUm91bmREYXRhIG1ldGhvZDogBQAAAAR0eXBlAAAAAAZvZmZzZXQJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAMY3VyclJvdW5kTnVtAwkAAGcAAAACBQAAAAZvZmZzZXQAAAAAAAAAAAAJAABpAAAAAgUAAAAGb2Zmc2V0BQAAAA5ibG9ja3NQZXJSb3VuZAkAAAIAAAABCQABLAAAAAICAAAALVBsZWFzZSBkbyBub3QgaHVycnkuIE1SVCBwYXJ0eSB3aWxsIHN0YXJ0IG9uIAkAAaQAAAABBQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAPY3VyclJvdW5kSGVpZ2h0CQAAagAAAAIFAAAABm9mZnNldAUAAAAOYmxvY2tzUGVyUm91bmQAAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0CQAAZAAAAAIJAABoAAAAAgUAAAAMY3VyclJvdW5kTnVtBQAAAA5ibG9ja3NQZXJSb3VuZAUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kCQAAZAAAAAIFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BQAAABRibG9ja3NQZXJDb21wZXRpdGlvbgAAAAARY3VyclJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAADGN1cnJSb3VuZE51bQAAAAANY3VycldpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEWN1cnJSb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5IZWlnaHQAAAAADWN1cnJNaW5QbXRBbXQFAAAAB3BtdFN0ZXABAAAADWlzV2luQnlIZWlnaHQAAAABAAAAAWgJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAAFoAAAAABxhdExlYXN0T25lTW92ZUluUm91bmRQcmVzZW50CQAAZgAAAAIFAAAADWN1cnJXaW5IZWlnaHQFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0AAAAABZmaXJzdENvdW50ZG93bkZpbmlzaGVkAwkAAAAAAAACBQAAAA1jdXJyV2luSGVpZ2h0AAAAAAAAAAAACQEAAAANaXNXaW5CeUhlaWdodAAAAAEJAABkAAAAAgUAAAAUY3VyclJvdW5kSGVpZ2h0U3RhcnQFAAAACmhlaWdodFN0ZXAHAAAAAAxpc1BhdXNlQnlXaW4DCQEAAAANaXNXaW5CeUhlaWdodAAAAAEFAAAADWN1cnJXaW5IZWlnaHQFAAAAHGF0TGVhc3RPbmVNb3ZlSW5Sb3VuZFByZXNlbnQHAAAAAA1pc1BhdXNlQnlUaW1lAwkAAGYAAAACBQAAAA9jdXJyUm91bmRIZWlnaHQFAAAAFGJsb2Nrc1BlckNvbXBldGl0aW9uBgUAAAAWZmlyc3RDb3VudGRvd25GaW5pc2hlZAAAAAAHaXNQYXVzZQMFAAAADGlzUGF1c2VCeVdpbgYFAAAADWlzUGF1c2VCeVRpbWUAAAAADWlzQ29tcGV0aXRpb24JAQAAAAEhAAAAAQUAAAAHaXNQYXVzZQAAAAIAAAADaW52AQAAAARtb3ZlAAAAAAQAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAkAAGQAAAACBQAAAAZoZWlnaHQFAAAACmhlaWdodFN0ZXAEAAAADG5ld1dpbkhlaWdodAMJAABnAAAAAgUAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAUAAAAXY3VyclJvdW5kQ29tcGV0aXRpb25FbmQFAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kBQAAABZvdmVyZmxvd2VkTmV3V2luSGVpZ2h0BAAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAkBAAAAB2V4dHJhY3QAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAAACAAAAAQIAAAA6UGxlYXNlIGF0dGFjaCBwYXltZW50IHdpdGggTVJUIHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAABnAAAAAgUAAAAMY3VyclJvdW5kTnVtBQAAAAltYXhSb3VuZHMJAAACAAAAAQIAAAARTVJUIHBhcnR5IGlzIG92ZXIDBQAAAAdpc1BhdXNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFTb3JyeSBidXQgcm91bmQgIwkAAaQAAAABBQAAAAxjdXJyUm91bmROdW0CAAAADSBpcyBmaW5pc2hlZC4DCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAANNUlQJAAACAAAAAQIAAAA9UGxlYXNlIHVzZSBNUlQgYXMgYSBwYXltZW50IGFzc2V0IHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAABmAAAAAgUAAAANY3Vyck1pblBtdEFtdAgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAABFU29ycnkgbXkgZnJpZW5kIGJ1dCB5b3VyIHBheW1lbnQgaXMgdG8gc21hbGwuIEN1cnJlbnQgbWluIHBheW1lbnQgaXMgCQABpAAAAAEFAAAADWN1cnJNaW5QbXRBbXQJAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABwIAAAAETU9WRQUAAAAMY3VyclJvdW5kTnVtBQAAAAxuZXdXaW5IZWlnaHQJAAJYAAAAAQgFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5AgAAAAE/AAAAAAAAAAAAAAAAA2ludgEAAAARcmVnaXN0ZXJMZWFzaW5nVHgAAAACAAAABXJvdW5kAAAAC2xlYXNpbmdJZDU4BAAAAAlsZWFzaW5nSWQJAAJZAAAAAQUAAAALbGVhc2luZ0lkNTgEAAAADXJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAABXJvdW5kBAAAAAx3aW5uZXJQdWJLZXkJAAJZAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5QdWJLZXkEAAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAVSWR4TGVhc2luZ0lkVmFsaWRUaWxsAwkAAGYAAAACBQAAAAVyb3VuZAUAAAAMY3VyclJvdW5kTnVtCQAAAgAAAAECAAAAPkltcG9zc2libGUgdG8gcmVnaXN0ZXIgbGVhc2luZyB0cmFuc2FjdGlvbiBmb3Igcm91bmQgaW4gZnV0dXJlAwMJAAAAAAAAAgUAAAAFcm91bmQFAAAADGN1cnJSb3VuZE51bQUAAAANaXNDb21wZXRpdGlvbgcJAAACAAAAAQIAAABPSW1wb3NzaWJsZSB0byByZWdpc3RlciBsZWFzaW5nIHRyYW5zYWN0aW9uIC0gd2lubmVyIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIHlldAMJAABmAAAAAgkAAMgAAAABCQACWQAAAAEFAAAAC2xlYXNpbmdJZDU4AAAAAAAAAABkCQAAAgAAAAECAAAAJUludmFsaWQgbGVhc2luZyB0cmFuc2FjdGlvbiBpZCBsZW5ndGgDCQAAZwAAAAIAAAAAAAAAAAAJAADIAAAAAQUAAAAJbGVhc2luZ0lkCQAAAgAAAAECAAAANkxlYXNpbmcgdHJhbnNhY3Rpb24gaWQgaXMgbm90IGVuY29kZWQgYXMgQmFzZTU4IGZvcm1hdAMJAQAAAAlpc0RlZmluZWQAAAABCQAD6QAAAAEFAAAACWxlYXNpbmdJZAkAAAIAAAABAgAAADJQYXNzZWQgbGVhc2luZ0lkIGhhcyBhbHJlYWR5IGV4aXN0ZWQgaW4gYmxvY2tjaGFpbgMDCQEAAAACIT0AAAACBQAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAAAAAAAAAAAAAkAAGYAAAACBQAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAUAAAAGaGVpZ2h0BwkAAAIAAAABCQABLAAAAAICAAAAKExlYXNpbmcgaWQgY2FuIGJlIHJlLXJlZ2lzdGVyZWQgb25seSBvbiAJAAGkAAAAAQUAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQDCQEAAAACIT0AAAACCAUAAAADaW52AAAAD2NhbGxlclB1YmxpY0tleQUAAAAMd2lubmVyUHViS2V5CQAAAgAAAAECAAAAMUxlYXNpbmcgdHggY2FuIGJlIHJlZ2lzdGVyZWQgYnkgcm91bmQgd2lubmVyIG9ubHkEAAAADnJvdW5kV2luSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luSGVpZ2h0CQEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAcCAAAAB0xFQVNJTkcFAAAABXJvdW5kBQAAAA5yb3VuZFdpbkhlaWdodAkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5QdWJLZXkJAAGbAAAAAQIAAAAABQAAAAtsZWFzaW5nSWQ1OAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAEWxlYXNpbmdJZExpZmV0aW1lAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAASbGVhc2luZ1BlcmlvZEVuZGVkCQAAZgAAAAIFAAAABmhlaWdodAkAAGQAAAACCQAAZAAAAAIFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0CQAAaAAAAAIFAAAACW1heFJvdW5kcwUAAAAOYmxvY2tzUGVyUm91bmQFAAAADWxlYXNpbmdQZXJpb2QEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABBMZWFzZVRyYW5zYWN0aW9uBAAAAANsdHgFAAAAByRtYXRjaDAEAAAAA3NpZwkAAZEAAAACCAUAAAADbHR4AAAABnByb29mcwAAAAAAAAAAAAQAAAAFcm91bmQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABLYAAAABCQEAAAAKcHJvb2ZUb1N0cgAAAAEJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAECAAAAPUVycm9yIGR1cmluZyBjb252ZXJ0aW5nIHJvdW5kIG51bSBpbnRvIGludGVnZXIgcmVwcmVzZW50YXRpb24EAAAADXJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAABXJvdW5kBAAAAA5yb3VuZFdpblB1YktleQkAAlkAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQQAAAATcmVnaXN0ZXJlZExlYXNpbmdJZAkAAlkAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeExlYXNpbmdJZAQAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAABVJZHhMZWFzaW5nSWRWYWxpZFRpbGwDBQAAABJsZWFzaW5nUGVyaW9kRW5kZWQJAAACAAAAAQIAAAAnU29ycnkgYnV0IGxlYXNpbmcgcGVyaW9kIGhhcyBiZWVuIGVuZGVkAwkAAGYAAAACBQAAAAZoZWlnaHQJAABlAAAAAgUAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQFAAAAF2xlYXNpbmdJZERpZmZJbkxpZmV0aW1lCQAAAgAAAAECAAAAQlNvcnJ5IGJ1dCBsaWZldGltZSBvZiB5b3VyIGxlYXNpbmcgdHJhbnNhY3Rpb24gaWQgaGFzIGJlZW4gZXhwaXJlZAMJAQAAAAEhAAAAAQkAAfQAAAADCAUA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", "chainId": 84, "height": 730061, "spentComplexity": 0 } View: original | compacted Prev: CYLbhWCHrzcmRfRVXMg1kmjEn4CBSv2bYbo84iYwQgAB Next: 2sf4X7K8DBxdeQxhfCYeT12kCq7v6fn8rFVKpDGUcXVi Diff:
OldNewDifferences
4242 let IdxLeasingIdValidTill = 3
4343
4444 func convertChar (char) = {
45- let B0 = toBytes("0")
46- let B1 = toBytes("1")
47- let B2 = toBytes("2")
48- let B3 = toBytes("3")
49- let B4 = toBytes("4")
50- let B5 = toBytes("5")
51- let B6 = toBytes("6")
52- let B7 = toBytes("7")
53- let B8 = toBytes("8")
54- let B9 = toBytes("9")
45+ let B0 = toBytes("q")
46+ let B1 = toBytes("r")
47+ let B2 = toBytes("s")
48+ let B3 = toBytes("t")
49+ let B4 = toBytes("u")
50+ let B5 = toBytes("v")
51+ let B6 = toBytes("w")
52+ let B7 = toBytes("x")
53+ let B8 = toBytes("y")
54+ let B9 = toBytes("z")
5555 if ((char == B0))
5656 then "0"
5757 else if ((char == B1))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let WAVELET = ((100 * 1000) * 1000)
55
66 let MRTEC = 100
77
88 let maxRounds = 100000000
99
1010 let pmtStep = (10 * MRTEC)
1111
1212 let partyOwnerPubKey = fromBase58String("FCaP4jLhLawzEqbwAQGAVvPQBv2h3LdERCx7fckDvnzr")
1313
1414 let partyOwnerAddress = addressFromPublicKey(partyOwnerPubKey)
1515
1616 let leasingPeriod = 600000
1717
1818 let leasingIdLifetime = 150
1919
2020 let leasingIdDiffInLifetime = 10
2121
2222 let leasingAmt = (1 * WAVELET)
2323
2424 let heightStep = 2
2525
2626 let blocksOnGameStart = 729556
2727
2828 let blocksPerRound = 12
2929
3030 let blocksPerCompetition = 8
3131
3232 let MRT = fromBase58String("8b4jE7X1yCNcbF4YXZGBKc8T5xdit7b1gENxxx31daua")
3333
3434 let MinFEE = ((5 * WAVELET) / 1000)
3535
3636 let IdxWinHeight = 0
3737
3838 let IdxWinPubKey = 1
3939
4040 let IdxLeasingId = 2
4141
4242 let IdxLeasingIdValidTill = 3
4343
4444 func convertChar (char) = {
45- let B0 = toBytes("0")
46- let B1 = toBytes("1")
47- let B2 = toBytes("2")
48- let B3 = toBytes("3")
49- let B4 = toBytes("4")
50- let B5 = toBytes("5")
51- let B6 = toBytes("6")
52- let B7 = toBytes("7")
53- let B8 = toBytes("8")
54- let B9 = toBytes("9")
45+ let B0 = toBytes("q")
46+ let B1 = toBytes("r")
47+ let B2 = toBytes("s")
48+ let B3 = toBytes("t")
49+ let B4 = toBytes("u")
50+ let B5 = toBytes("v")
51+ let B6 = toBytes("w")
52+ let B7 = toBytes("x")
53+ let B8 = toBytes("y")
54+ let B9 = toBytes("z")
5555 if ((char == B0))
5656 then "0"
5757 else if ((char == B1))
5858 then "1"
5959 else if ((char == B2))
6060 then "2"
6161 else if ((char == B3))
6262 then "3"
6363 else if ((char == B4))
6464 then "4"
6565 else if ((char == B5))
6666 then "5"
6767 else if ((char == B6))
6868 then "6"
6969 else if ((char == B7))
7070 then "7"
7171 else if ((char == B8))
7272 then "8"
7373 else if ((char == B9))
7474 then "9"
7575 else throw("Unsupported char")
7676 }
7777
7878
7979 func proofToStr (roundNumProof) = {
8080 let s = size(roundNumProof)
8181 if ((s > 2))
8282 then throw("Invalid ecoded round - size couldn't be greater than 2")
8383 else if ((0 >= s))
8484 then throw("Invalid ecoded round - size couldn't be less than or equals 0")
8585 else if ((s == 1))
8686 then convertChar(take(roundNumProof, 1))
8787 else if ((s == 2))
8888 then (convertChar(take(roundNumProof, 1)) + convertChar(take(drop(roundNumProof, 1), 1)))
8989 else throw("Invalid encoded round")
9090 }
9191
9292
9393 func getRoundDataKeyOrFail (round) = if ((0 > round))
9494 then throw("Invalid round number")
9595 else ("round" + toString(round))
9696
9797
9898 func readRoundDataListOrFail (round) = {
9999 let roundDataOpt = getString(this, getRoundDataKeyOrFail(round))
100100 let roundDataStr = if (isDefined(roundDataOpt))
101101 then extract(roundDataOpt)
102102 else ""
103103 let partyOwnerAddressStr = toBase58String(partyOwnerAddress.bytes)
104104 if ((roundDataStr != ""))
105105 then split(roundDataStr, "_")
106106 else ["0", toString(pmtStep), partyOwnerAddressStr, "?", "0"]
107107 }
108108
109109
110110 func readSharedState () = {
111111 let sharedStateOpt = getString(this, "RoundsSharedState")
112112 let sharedStateStr = if (isDefined(sharedStateOpt))
113113 then extract(sharedStateOpt)
114114 else ""
115115 if ((sharedStateStr != ""))
116116 then split(sharedStateStr, "_")
117117 else ["", "0", ""]
118118 }
119119
120120
121121 func writeSetOfRoundData (type,round,newWinHeight,newWinPubKeyStr,newWinPubKey,leasingId58,leaseIdExpirationHeight) = {
122122 let newWinHeightStr = toString(newWinHeight)
123123 let roundData = DataEntry(getRoundDataKeyOrFail(round), ((((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58) + "_") + toString(leaseIdExpirationHeight)))
124124 if ((type == "MOVE"))
125125 then {
126126 let newWinAddressStr = toString(addressFromPublicKey(newWinPubKey))
127127 let addressLength = size(newWinAddressStr)
128128 let sharedState = readSharedState()
129129 let newTotalGamesCountStr = toString((parseIntValue(sharedState[1]) + 1))
130130 let currLastPlayersAddr = sharedState[2]
131131 let newLastPlayersAddr = if (if ((currLastPlayersAddr != ""))
132132 then (size(currLastPlayersAddr) > ((addressLength + 1) * 10))
133133 else false)
134134 then (("-" + newWinAddressStr) + dropRight(currLastPlayersAddr, (addressLength + 1)))
135135 else (("-" + newWinAddressStr) + currLastPlayersAddr)
136136 WriteSet([roundData, DataEntry("RoundsSharedState", ((((newWinHeightStr + "_") + newTotalGamesCountStr) + "_") + newLastPlayersAddr))])
137137 }
138138 else if ((type == "LEASING"))
139139 then WriteSet([roundData])
140140 else throw(("Unsupported type in writeSetOfRoundData method: " + type))
141141 }
142142
143143
144144 let offset = (height - blocksOnGameStart)
145145
146146 let currRoundNum = if ((offset >= 0))
147147 then (offset / blocksPerRound)
148148 else throw(("Please do not hurry. MRT party will start on " + toString(blocksOnGameStart)))
149149
150150 let currRoundHeight = (offset % blocksPerRound)
151151
152152 let currRoundHeightStart = ((currRoundNum * blocksPerRound) + blocksOnGameStart)
153153
154154 let currRoundCompetitionEnd = (currRoundHeightStart + blocksPerCompetition)
155155
156156 let currRoundDataList = readRoundDataListOrFail(currRoundNum)
157157
158158 let currWinHeight = parseIntValue(currRoundDataList[IdxWinHeight])
159159
160160 let currMinPmtAmt = pmtStep
161161
162162 func isWinByHeight (h) = (height >= h)
163163
164164
165165 let atLeastOneMoveInRoundPresent = (currWinHeight > currRoundHeightStart)
166166
167167 let firstCountdownFinished = if ((currWinHeight == 0))
168168 then isWinByHeight((currRoundHeightStart + heightStep))
169169 else false
170170
171171 let isPauseByWin = if (isWinByHeight(currWinHeight))
172172 then atLeastOneMoveInRoundPresent
173173 else false
174174
175175 let isPauseByTime = if ((currRoundHeight > blocksPerCompetition))
176176 then true
177177 else firstCountdownFinished
178178
179179 let isPause = if (isPauseByWin)
180180 then true
181181 else isPauseByTime
182182
183183 let isCompetition = !(isPause)
184184
185185 @Callable(inv)
186186 func move () = {
187187 let overflowedNewWinHeight = (height + heightStep)
188188 let newWinHeight = if ((overflowedNewWinHeight >= currRoundCompetitionEnd))
189189 then currRoundCompetitionEnd
190190 else overflowedNewWinHeight
191191 let payment = if (isDefined(inv.payment))
192192 then extract(inv.payment)
193193 else throw("Please attach payment with MRT to participate in MRT party")
194194 if ((currRoundNum >= maxRounds))
195195 then throw("MRT party is over")
196196 else if (isPause)
197197 then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
198198 else if ((payment.assetId != MRT))
199199 then throw("Please use MRT as a payment asset to participate in MRT party")
200200 else if ((currMinPmtAmt > payment.amount))
201201 then throw(("Sorry my friend but your payment is to small. Current min payment is " + toString(currMinPmtAmt)))
202202 else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toBase58String(inv.callerPublicKey), inv.callerPublicKey, "?", 0)
203203 }
204204
205205
206206
207207 @Callable(inv)
208208 func registerLeasingTx (round,leasingId58) = {
209209 let leasingId = fromBase58String(leasingId58)
210210 let roundDataList = readRoundDataListOrFail(round)
211211 let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
212212 let leaseIdExpirationHeight = parseIntValue(roundDataList[IdxLeasingIdValidTill])
213213 if ((round > currRoundNum))
214214 then throw("Impossible to register leasing transaction for round in future")
215215 else if (if ((round == currRoundNum))
216216 then isCompetition
217217 else false)
218218 then throw("Impossible to register leasing transaction - winner has not been determined yet")
219219 else if ((size(fromBase58String(leasingId58)) > 100))
220220 then throw("Invalid leasing transaction id length")
221221 else if ((0 >= size(leasingId)))
222222 then throw("Leasing transaction id is not encoded as Base58 format")
223223 else if (isDefined(transactionHeightById(leasingId)))
224224 then throw("Passed leasingId has already existed in blockchain")
225225 else if (if ((leaseIdExpirationHeight != 0))
226226 then (leaseIdExpirationHeight > height)
227227 else false)
228228 then throw(("Leasing id can be re-registered only on " + toString(leaseIdExpirationHeight)))
229229 else if ((inv.callerPublicKey != winnerPubKey))
230230 then throw("Leasing tx can be registered by round winner only")
231231 else {
232232 let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
233233 writeSetOfRoundData("LEASING", round, roundWinHeight, roundDataList[IdxWinPubKey], toBytes(""), leasingId58, (height + leasingIdLifetime))
234234 }
235235 }
236236
237237
238238 @Verifier(tx)
239239 func verify () = {
240240 let leasingPeriodEnded = (height > ((blocksOnGameStart + (maxRounds * blocksPerRound)) + leasingPeriod))
241241 match tx {
242242 case ltx: LeaseTransaction =>
243243 let sig = ltx.proofs[0]
244244 let round = valueOrErrorMessage(parseInt(proofToStr(ltx.proofs[1])), "Error during converting round num into integer representation")
245245 let roundDataList = readRoundDataListOrFail(round)
246246 let roundWinPubKey = fromBase58String(roundDataList[IdxWinPubKey])
247247 let registeredLeasingId = fromBase58String(roundDataList[IdxLeasingId])
248248 let leaseIdExpirationHeight = parseIntValue(roundDataList[IdxLeasingIdValidTill])
249249 if (leasingPeriodEnded)
250250 then throw("Sorry but leasing period has been ended")
251251 else if ((height > (leaseIdExpirationHeight - leasingIdDiffInLifetime)))
252252 then throw("Sorry but lifetime of your leasing transaction id has been expired")
253253 else if (!(sigVerify(ltx.bodyBytes, sig, roundWinPubKey)))
254254 then throw("Invalid leasing transaction signature. Leasing is allowed for winner only.")
255255 else if ((ltx.id != registeredLeasingId))
256256 then throw("Leasing transaction id doesn't match with registered leasing id")
257257 else if ((ltx.amount != leasingAmt))
258258 then throw(("Impossible to lease less or greater than " + toString(leasingAmt)))
259259 else if ((ltx.fee != MinFEE))
260260 then throw(("Impossible to lease with fee less or greater than " + toString(MinFEE)))
261261 else true
262262 case cltx: LeaseCancelTransaction =>
263263 if (!(leasingPeriodEnded))
264264 then throw("MRT party has not finished yet. Leasing Cancel is not allowed.")
265265 else if (!(sigVerify(tx.bodyBytes, tx.proofs[0], partyOwnerPubKey)))
266266 then throw("Leasing Cancel is allowed to Party Owner only")
267267 else if ((cltx.fee != MinFEE))
268268 then throw(("Impossible to cancle leasing with fee less or greater than " + toString(MinFEE)))
269269 else true
270270 case ttx: TransferTransaction =>
271271 if (!(leasingPeriodEnded))
272272 then throw("MRT party has not finished yet. Transfer is not allowed.")
273273 else if ((addressFromRecipient(ttx.recipient).bytes != partyOwnerAddress.bytes))
274274 then throw("Transfer is allowed to Party Owner address only")
275275 else if (!(sigVerify(ttx.bodyBytes, ttx.proofs[0], partyOwnerPubKey)))
276276 then throw("Transfer is allowed for Party Owner only.")
277277 else true
278278 case stx: SetScriptTransaction =>
279279 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
280280 case _ =>
281281 false
282282 }
283283 }
284284

github/deemru/w8io/169f3d6 
55.74 ms