tx · EDKDtCMdc6jjsufMo9btdTCZZPuHdaLx47nQ1E9itWuW

3N3r4MinAUDWtFQukE1VDzFMXw9BpcRtFMQ:  -0.01000000 Waves

2019.10.18 13:37 [725338] smart account 3N3r4MinAUDWtFQukE1VDzFMXw9BpcRtFMQ > SELF 0.00000000 Waves

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

github/deemru/w8io/3ef1775 
30.97 ms