tx · 7FPD2CEFkUFV5HATaKY49urCzbCp1Xc9DFjXRXGfqreX

3MsbpfvuRpptuDXciE92ycHju68V3LwnwqX:  -0.01000000 Waves

2019.10.14 15:23 [719601] smart account 3MsbpfvuRpptuDXciE92ycHju68V3LwnwqX > SELF 0.00000000 Waves

{ "type": 13, "id": "7FPD2CEFkUFV5HATaKY49urCzbCp1Xc9DFjXRXGfqreX", "fee": 1000000, "feeAssetId": null, "timestamp": 1571055826981, "version": 1, "sender": "3MsbpfvuRpptuDXciE92ycHju68V3LwnwqX", "senderPublicKey": "244aeZVym2WiS29HQ8kbPp8KGy558VZTrNKUyoGcRNYx", "proofs": [ "32Fi9gAMMjmy3ZkLHAsV99MFX6Ea1ZdTE6PwJV46uz3jscmUVnzLs8bJfx4EBHadPJXxGmH71KvUZHz1RbEEUd4Y" ], "script": "base64:AAIDAAAAAAAAAA0IARIDCgEBEgQKAgEIAAAAIQAAAAAHV0FWRUxFVAkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gAAAAABU1SVEVDAAAAAAAAAABkAAAAAApwbXRPblN0YXJ0CQAAaAAAAAIAAAAAAAAAAAoFAAAABU1SVEVDAAAAABBwYXJ0eU93bmVyUHViS2V5CQACWQAAAAECAAAALEZDYVA0akxoTGF3ekVxYndBUUdBVnZQUUJ2MmgzTGRFUkN4N2Zja0R2bnpyAAAAABFwYXJ0eU93bmVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAQcGFydHlPd25lclB1YktleQAAAAANbGVhc2luZ1BlcmlvZAAAAAAAAAknwAAAAAAGd2luQW10CQAAaAAAAAIAAAAAAAAAAAEFAAAAB1dBVkVMRVQAAAAADW1pbkhlaWdodERpZmYAAAAAAAAAAAEAAAAADW1heEhlaWdodERpZmYAAAAAAAAAAAMAAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAAAACvrwAAAAAA5ibG9ja3NQZXJSb3VuZAAAAAAAAAAADAAAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAAAAAAAgAAAAAA01SVAkAAlkAAAABAgAAACw4YjRqRTdYMXlDTmNiRjRZWFpHQktjOFQ1eGRpdDdiMWdFTnh4eDMxZGF1YQAAAAAGTWluRkVFCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAHV0FWRUxFVAAAAAAAAAAD6AAAAAAMSWR4V2luSGVpZ2h0AAAAAAAAAAAAAAAAAAxJZHhXaW5QdWJLZXkAAAAAAAAAAAEAAAAADElkeExlYXNpbmdJZAAAAAAAAAAAAgEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQAAAAVyb3VuZAMJAABmAAAAAgAAAAAAAAAAAAUAAAAFcm91bmQJAAACAAAAAQIAAAAUSW52YWxpZCByb3VuZCBudW1iZXIJAAEsAAAAAgIAAAAFcm91bmQJAAGkAAAAAQUAAAAFcm91bmQBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQAAAAVyb3VuZAQAAAAMcm91bmREYXRhT3B0CQAEHQAAAAIFAAAABHRoaXMJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMcm91bmREYXRhU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADHJvdW5kRGF0YU9wdAkBAAAAB2V4dHJhY3QAAAABBQAAAAxyb3VuZERhdGFPcHQCAAAAAAQAAAAUcGFydHlPd25lckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAEXBhcnR5T3duZXJBZGRyZXNzAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAAJAAS1AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAFfCQAETAAAAAICAAAAATAJAARMAAAAAgkAAaQAAAABBQAAAApwbXRPblN0YXJ0CQAETAAAAAIFAAAAFHBhcnR5T3duZXJBZGRyZXNzU3RyCQAETAAAAAICAAAACVVOREVGSU5FRAUAAAADbmlsAQAAACVyZWFkTGFzdFBsYXllcnNBZGRyRnJvbVJvdW5kc1NoYXJlZFN0AAAAAAQAAAAOc2hhcmVkU3RhdGVPcHQJAAQdAAAAAgUAAAAEdGhpcwIAAAARUm91bmRzU2hhcmVkU3RhdGUEAAAADnNoYXJlZFN0YXRlU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADnNoYXJlZFN0YXRlT3B0CQEAAAAHZXh0cmFjdAAAAAEFAAAADnNoYXJlZFN0YXRlT3B0AgAAAAADCQEAAAACIT0AAAACBQAAAA5zaGFyZWRTdGF0ZVN0cgIAAAAACQABkQAAAAIJAAS1AAAAAgUAAAAOc2hhcmVkU3RhdGVTdHICAAAAAV8AAAAAAAAAAAECAAAAAAEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAYAAAAEdHlwZQAAAAVyb3VuZAAAAAxuZXdXaW5IZWlnaHQAAAAPbmV3V2luUHViS2V5U3RyAAAADG5ld1dpblB1YktleQAAAAtsZWFzaW5nSWQ1OAQAAAAPbmV3V2luSGVpZ2h0U3RyCQABpAAAAAEFAAAADG5ld1dpbkhlaWdodAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAETU9WRQQAAAAQbmV3V2luQWRkcmVzc1N0cgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAAxuZXdXaW5QdWJLZXkEAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAQAAACVyZWFkTGFzdFBsYXllcnNBZGRyRnJvbVJvdW5kc1NoYXJlZFN0AAAAAAQAAAASbmV3TGFzdFBsYXllcnNBZGRyAwkBAAAAAiE9AAAAAgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgIAAAAACQABLAAAAAIJAAEsAAAAAgIAAAABLQUAAAAQbmV3V2luQWRkcmVzc1N0cgkBAAAACWRyb3BSaWdodAAAAAIFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAABkAAAAAgkAATEAAAABBQAAABBuZXdXaW5BZGRyZXNzU3RyAAAAAAAAAAABCQABLAAAAAICAAAAAS0FAAAAEG5ld1dpbkFkZHJlc3NTdHIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA9uZXdXaW5IZWlnaHRTdHICAAAAAV8FAAAAD25ld1dpblB1YktleVN0cgIAAAABXwUAAAALbGVhc2luZ0lkNTgJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAEVJvdW5kc1NoYXJlZFN0YXRlCQABLAAAAAIJAAEsAAAAAgUAAAAPbmV3V2luSGVpZ2h0U3RyAgAAAAFfBQAAABJuZXdMYXN0UGxheWVyc0FkZHIFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAHTEVBU0lORwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldFJvdW5kRGF0YUtleU9yRmFpbAAAAAEFAAAABXJvdW5kCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAPbmV3V2luUHViS2V5U3RyAgAAAAFfBQAAAAtsZWFzaW5nSWQ1OAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAwVW5zdXBwb3J0ZWQgdHlwZSBpbiB3cml0ZVNldE9mUm91bmREYXRhIG1ldGhvZDogBQAAAAR0eXBlAAAAAAZvZmZzZXQJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAMY3VyclJvdW5kTnVtAwkAAGcAAAACBQAAAAZvZmZzZXQAAAAAAAAAAAAJAABpAAAAAgUAAAAGb2Zmc2V0BQAAAA5ibG9ja3NQZXJSb3VuZAkAAAIAAAABCQABLAAAAAICAAAALVBsZWFzZSBkbyBub3QgaHVycnkuIE1SVCBwYXJ0eSB3aWxsIHN0YXJ0IG9uIAkAAaQAAAABBQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAPY3VyclJvdW5kSGVpZ2h0CQAAagAAAAIFAAAABm9mZnNldAUAAAAOYmxvY2tzUGVyUm91bmQAAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0CQAAZAAAAAIJAABoAAAAAgUAAAAMY3VyclJvdW5kTnVtBQAAAA5ibG9ja3NQZXJSb3VuZAUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kCQAAZAAAAAIFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BQAAABRibG9ja3NQZXJDb21wZXRpdGlvbgAAAAARY3VyclJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAADGN1cnJSb3VuZE51bQAAAAANY3VycldpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEWN1cnJSb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5IZWlnaHQAAAAADWN1cnJNaW5QbXRBbXQFAAAACnBtdE9uU3RhcnQAAAAADGlzUGF1c2VCeVdpbgMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAA1jdXJyV2luSGVpZ2h0CQAAZgAAAAIFAAAADWN1cnJXaW5IZWlnaHQFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BwAAAAANaXNQYXVzZUJ5VGltZQkAAGYAAAACBQAAAA9jdXJyUm91bmRIZWlnaHQFAAAAFGJsb2Nrc1BlckNvbXBldGl0aW9uAAAAAAdpc1BhdXNlAwUAAAAMaXNQYXVzZUJ5V2luBgUAAAANaXNQYXVzZUJ5VGltZQAAAAANaXNDb21wZXRpdGlvbgkBAAAAASEAAAABBQAAAAdpc1BhdXNlAAAAAgAAAANpbnYBAAAABG1vdmUAAAABAAAADG5ld1dpbkhlaWdodAQAAAAPbWluTmV3V2luSGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAUAAAANbWluSGVpZ2h0RGlmZgQAAAAPbWF4TmV3V2luSGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAUAAAANbWF4SGVpZ2h0RGlmZgQAAAARbmV3V2luSGVpZ2h0VmFsaWQDCQAAZwAAAAIFAAAAD21pbk5ld1dpbkhlaWdodAUAAAAXY3VyclJvdW5kQ29tcGV0aXRpb25FbmQJAAAAAAAAAgUAAAAMbmV3V2luSGVpZ2h0BQAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAMJAABnAAAAAgUAAAAMbmV3V2luSGVpZ2h0BQAAAA9taW5OZXdXaW5IZWlnaHQJAABnAAAAAgUAAAAPbWF4TmV3V2luSGVpZ2h0BQAAAAxuZXdXaW5IZWlnaHQHBAAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAkBAAAAB2V4dHJhY3QAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAAACAAAAAQIAAAA6UGxlYXNlIGF0dGFjaCBwYXltZW50IHdpdGggTVJUIHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAQAAAAIhPQAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAA01SVAkAAAIAAAABAgAAAD1QbGVhc2UgdXNlIE1SVCBhcyBhIHBheW1lbnQgYXNzZXQgdG8gcGFydGljaXBhdGUgaW4gTVJUIHBhcnR5AwkAAGYAAAACBQAAAA1jdXJyTWluUG10QW10CAUAAAAHcGF5bWVudAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACAgAAAEVTb3JyeSBteSBmcmllbmQgYnV0IHlvdXIgcGF5bWVudCBpcyB0byBzbWFsbC4gQ3VycmVudCBtaW4gcGF5bWVudCBpcyAJAAGkAAAAAQUAAAANY3Vyck1pblBtdEFtdAMJAQAAAAEhAAAAAQUAAAARbmV3V2luSGVpZ2h0VmFsaWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAVU29ycnksIG5ld1dpbkhlaWdodD0gCQABpAAAAAEFAAAADG5ld1dpbkhlaWdodAIAAAALaXMgb3V0IG9mIFsJAAGkAAAAAQUAAAAPbWluTmV3V2luSGVpZ2h0AgAAAAIsIAkAAaQAAAABBQAAAA9tYXhOZXdXaW5IZWlnaHQCAAAAB10gcmFuZ2UDBQAAAAdpc1BhdXNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFTb3JyeSBidXQgcm91bmQgIwkAAaQAAAABBQAAAAxjdXJyUm91bmROdW0CAAAADSBpcyBmaW5pc2hlZC4JAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABgIAAAAETU9WRQUAAAAMY3VyclJvdW5kTnVtBQAAAAxuZXdXaW5IZWlnaHQJAAJYAAAAAQgFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5AgAAAAlVTkRFRklORUQAAAADaW52AQAAABFyZWdpc3RlckxlYXNpbmdUeAAAAAIAAAAFcm91bmQAAAALbGVhc2luZ0lkNTgEAAAACWxlYXNpbmdJZAkAAlkAAAABBQAAAAtsZWFzaW5nSWQ1OAQAAAANcm91bmREYXRhTGlzdAkBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQUAAAAFcm91bmQEAAAADHdpbm5lclB1YktleQkAAlkAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQMJAABmAAAAAgUAAAAFcm91bmQFAAAADGN1cnJSb3VuZE51bQkAAAIAAAABAgAAAD5JbXBvc3NpYmxlIHRvIHJlZ2lzdGVyIGxlYXNpbmcgdHJhbnNhY3Rpb24gZm9yIHJvdW5kIGluIGZ1dHVyZQMDCQAAAAAAAAIFAAAABXJvdW5kBQAAAAxjdXJyUm91bmROdW0FAAAADWlzQ29tcGV0aXRpb24HCQAAAgAAAAECAAAAT0ltcG9zc2libGUgdG8gcmVnaXN0ZXIgbGVhc2luZyB0cmFuc2FjdGlvbiAtIHdpbm5lciBoYXMgbm90IGJlZW4gZGV0ZXJtaW5lZCB5ZXQDCQEAAAACIT0AAAACCQABMQAAAAEFAAAAC2xlYXNpbmdJZDU4AAAAAAAAAAAsCQAAAgAAAAECAAAAJUludmFsaWQgbGVhc2luZyB0cmFuc2FjdGlvbiBpZCBsZW5ndGgDCQAAZwAAAAIAAAAAAAAAAAAJAADIAAAAAQUAAAAJbGVhc2luZ0lkCQAAAgAAAAECAAAANkxlYXNpbmcgdHJhbnNhY3Rpb24gaWQgaXMgbm90IGVuY29kZWQgYXMgQmFzZTU4IGZvcm1hdAMJAQAAAAlpc0RlZmluZWQAAAABCQAD6QAAAAEFAAAACWxlYXNpbmdJZAkAAAIAAAABAgAAADRQYXNzZWQgbGVhc2luZ0lkNTggaGFzIGFscmVhZHkgZXhpc3RlZCBpbiBibG9ja2NoYWluAwkBAAAAAiE9AAAAAgkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhMZWFzaW5nSWQCAAAACVVOREVGSU5FRAkAAAIAAAABCQABLAAAAAICAAAAMExlYXNpbmcgdHggaWQgaGFzIGFscmVhZHkgcmVnaXN0cmVyZWQgZm9yIHJvdW5kIAkAAaQAAAABBQAAAAVyb3VuZAMJAQAAAAIhPQAAAAIIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5BQAAAAx3aW5uZXJQdWJLZXkJAAACAAAAAQIAAAAxTGVhc2luZyB0eCBjYW4gYmUgcmVnaXN0ZXJlZCBieSByb3VuZCB3aW5uZXIgb25seQQAAAAOcm91bmRXaW5IZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5IZWlnaHQJAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABgIAAAAHTEVBU0lORwUAAAAFcm91bmQFAAAADnJvdW5kV2luSGVpZ2h0CQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQkAAZsAAAABAgAAAAAFAAAAC2xlYXNpbmdJZDU4AAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAASbGVhc2luZ1BlcmlvZEVuZGVkCQAAZgAAAAIFAAAABmhlaWdodAkAAGQAAAACBQAAABFibG9ja3NPbkdhbWVTdGFydAUAAAANbGVhc2luZ1BlcmlvZAQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAEExlYXNlVHJhbnNhY3Rpb24EAAAAA2x0eAUAAAAHJG1hdGNoMAQAAAADc2lnCQABkQAAAAIIBQAAAANsdHgAAAAGcHJvb2ZzAAAAAAAAAAAABAAAAAVyb3VuZAkABLEAAAABCQABkQAAAAIIBQAAAANsdHgAAAAGcHJvb2ZzAAAAAAAAAAABBAAAAA1yb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAOcm91bmRXaW5QdWJLZXkJAAJZAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5QdWJLZXkEAAAAE3JlZ2lzdGVyZWRMZWFzaW5nSWQJAAJZAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhMZWFzaW5nSWQDBQAAABJsZWFzaW5nUGVyaW9kRW5kZWQJAAACAAAAAQIAAAAnU29ycnkgYnV0IGxlYXNpbmcgcGVyaW9kIGhhcyBiZWVuIGVuZGVkAwkBAAAAASEAAAABCQAB9AAAAAMIBQAAAANsdHgAAAAJYm9keUJ5dGVzBQAAAANzaWcFAAAADnJvdW5kV2luUHViS2V5CQAAAgAAAAECAAAASkludmFsaWQgbGVhc2luZyB0cmFuc2FjdGlvbiBzaWduYXR1cmUuIExlYXNpbmcgaXMgYWxsb3dlZCBmb3Igd2lubmVyIG9ubHkuAwkBAAAAAiE9AAAAAggFAAAAA2x0eAAAAAJpZAUAAAATcmVnaXN0ZXJlZExlYXNpbmdJZAkAAAIAAAABAgAAAD9MZWFzaW5nIHRyYW5zYWN0aW9uIGlkIGRvZXNuJ3QgbWF0Y2ggd2l0aCByZWdpc3RlcmVkIGxlYXNpbmcgaWQDCQEAAAACIT0AAAACCAUAAAADbHR4AAAABmFtb3VudAUAAAAGd2luQW10CQAAAgAAAAEJAAEsAAAAAgIAAAApSW1wb3NzaWJsZSB0byBsZWFzZSBsZXNzIG9yIGdyZWF0ZXIgdGhhbiAJAAGkAAAAAQUAAAAGd2luQW10AwkBAAAAAiE9AAAAAggFAAAAA2x0eAAAAANmZWUFAAAABk1pbkZFRQkAAAIAAAABCQABLAAAAAICAAAAMkltcG9zc2libGUgdG8gbGVhc2Ugd2l0aCBmZWUgbGVzcyBvciBncmVhdGVyIHRoYW4gCQABpAAAAAEFAAAABk1pbkZFRQYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFkxlYXNlQ2FuY2VsVHJhbnNhY3Rpb24EAAAABGNsdHgFAAAAByRtYXRjaDADCQEAAAABIQAAAAEFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAAD5NUlQgcGFydHkgaGFzIG5vdCBmaW5pc2hlZCB5ZXQuIExlYXNpbmcgQ2FuY2VsIGlzIG5vdCBhbGxvd2VkLgMJAQAAAAEhAAAAAQkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEHBhcnR5T3duZXJQdWJLZXkJAAACAAAAAQIAAAAtTGVhc2luZyBDYW5jZWwgaXMgYWxsb3dlZCB0byBQYXJ0eSBPd25lciBvbmx5AwkBAAAAAiE9AAAAAggFAAAABGNsdHgAAAADZmVlBQAAAAZNaW5GRUUJAAACAAAAAQkAASwAAAACAgAAADtJbXBvc3NpYmxlIHRvIGNhbmNsZSBsZWFzaW5nIHdpdGggZmVlIGxlc3Mgb3IgZ3JlYXRlciB0aGFuIAkAAaQAAAABBQAAAAZNaW5GRUUGAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDADCQEAAAABIQAAAAEFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAADhNUlQgcGFydHkgaGFzIG5vdCBmaW5pc2hlZCB5ZXQuIFRyYW5zZmVyIGlzIG5vdCBhbGxvd2VkLgMJAQAAAAIhPQAAAAIICQAEJAAAAAEIBQAAAAN0dHgAAAAJcmVjaXBpZW50AAAABWJ5dGVzCAUAAAARcGFydHlPd25lckFkZHJlc3MAAAAFYnl0ZXMJAAACAAAAAQIAAAAvVHJhbnNmZXIgaXMgYWxsb3dlZCB0byBQYXJ0eSBPd25lciBhZGRyZXNzIG9ubHkDCQEAAAABIQAAAAEJAAH0AAAAAwgFAAAAA3R0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAA3R0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEHBhcnR5T3duZXJQdWJLZXkJAAACAAAAAQIAAAApVHJhbnNmZXIgaXMgYWxsb3dlZCBmb3IgUGFydHkgT3duZXIgb25seS4GAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAADc3R4BQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQcSAnhY", "chainId": 84, "height": 719601, "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 = 719600
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 currLastPlayersAddr = readLastPlayersAddrFromRoundsSharedSt()
72+ let newLastPlayersAddr = if ((currLastPlayersAddr != ""))
73+ then (("-" + newWinAddressStr) + dropRight(currLastPlayersAddr, (size(newWinAddressStr) + 1)))
74+ else ("-" + newWinAddressStr)
75+ WriteSet([DataEntry(getRoundDataKeyOrFail(round), ((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58)), DataEntry("RoundsSharedState", ((newWinHeightStr + "_") + newLastPlayersAddr))])
76+ }
77+ else if ((type == "LEASING"))
78+ then WriteSet([DataEntry(getRoundDataKeyOrFail(round), ((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58))])
79+ else throw(("Unsupported type in writeSetOfRoundData method: " + type))
80+ }
81+
82+
83+let offset = (height - blocksOnGameStart)
84+
85+let currRoundNum = if ((offset >= 0))
86+ then (offset / blocksPerRound)
87+ else throw(("Please do not hurry. MRT party will start on " + toString(blocksOnGameStart)))
88+
89+let currRoundHeight = (offset % blocksPerRound)
90+
91+let currRoundHeightStart = ((currRoundNum * blocksPerRound) + blocksOnGameStart)
92+
93+let currRoundCompetitionEnd = (currRoundHeightStart + blocksPerCompetition)
94+
95+let currRoundDataList = readRoundDataListOrFail(currRoundNum)
96+
97+let currWinHeight = parseIntValue(currRoundDataList[IdxWinHeight])
98+
99+let currMinPmtAmt = pmtOnStart
100+
101+let isPauseByWin = if ((height >= currWinHeight))
102+ then (currWinHeight > currRoundHeightStart)
103+ else false
104+
105+let isPauseByTime = (currRoundHeight > blocksPerCompetition)
106+
107+let isPause = if (isPauseByWin)
108+ then true
109+ else isPauseByTime
110+
111+let isCompetition = !(isPause)
112+
113+@Callable(inv)
114+func move (newWinHeight) = {
115+ let minNewWinHeight = (height + minHeightDiff)
116+ let maxNewWinHeight = (height + maxHeightDiff)
117+ let newWinHeightValid = if ((minNewWinHeight >= currRoundCompetitionEnd))
118+ then (newWinHeight == currRoundCompetitionEnd)
119+ else if ((newWinHeight >= minNewWinHeight))
120+ then (maxNewWinHeight >= newWinHeight)
121+ else false
122+ let payment = if (isDefined(inv.payment))
123+ then extract(inv.payment)
124+ else throw("Please attach payment with MRT to participate in MRT party")
125+ if ((payment.assetId != MRT))
126+ then throw("Please use MRT as a payment asset to participate in MRT party")
127+ else if ((currMinPmtAmt > payment.amount))
128+ then throw(("Sorry my friend but your payment is to small. Current min payment is " + toString(currMinPmtAmt)))
129+ else if (!(newWinHeightValid))
130+ then throw((((((("Sorry, newWinHeight= " + toString(newWinHeight)) + "is out of [") + toString(minNewWinHeight)) + ", ") + toString(maxNewWinHeight)) + "] range"))
131+ else if (isPause)
132+ then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
133+ else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toBase58String(inv.callerPublicKey), inv.callerPublicKey, "UNDEFINED")
134+ }
135+
136+
137+
138+@Callable(inv)
139+func registerLeasingTx (round,leasingId58) = {
140+ let leasingId = fromBase58String(leasingId58)
141+ let roundDataList = readRoundDataListOrFail(round)
142+ let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
143+ if ((round > currRoundNum))
144+ then throw("Impossible to register leasing transaction for round in future")
145+ else if (if ((round == currRoundNum))
146+ then isCompetition
147+ else false)
148+ then throw("Impossible to register leasing transaction - winner has not been determined yet")
149+ else if ((size(leasingId58) != 44))
150+ then throw("Invalid leasing transaction id length")
151+ else if ((0 >= size(leasingId)))
152+ then throw("Leasing transaction id is not encoded as Base58 format")
153+ else if (isDefined(transactionHeightById(leasingId)))
154+ then throw("Passed leasingId58 has already existed in blockchain")
155+ else if ((roundDataList[IdxLeasingId] != "UNDEFINED"))
156+ then throw(("Leasing tx id has already registrered for round " + toString(round)))
157+ else if ((inv.callerPublicKey != winnerPubKey))
158+ then throw("Leasing tx can be registered by round winner only")
159+ else {
160+ let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
161+ writeSetOfRoundData("LEASING", round, roundWinHeight, roundDataList[IdxWinPubKey], toBytes(""), leasingId58)
162+ }
163+ }
164+
165+
166+@Verifier(tx)
167+func verify () = {
168+ let leasingPeriodEnded = (height > (blocksOnGameStart + leasingPeriod))
169+ match tx {
170+ case ltx: LeaseTransaction =>
171+ let sig = ltx.proofs[0]
172+ let round = toInt(ltx.proofs[1])
173+ let roundDataList = readRoundDataListOrFail(round)
174+ let roundWinPubKey = fromBase58String(roundDataList[IdxWinPubKey])
175+ let registeredLeasingId = fromBase58String(roundDataList[IdxLeasingId])
176+ if (leasingPeriodEnded)
177+ then throw("Sorry but leasing period has been ended")
178+ else if (!(sigVerify(ltx.bodyBytes, sig, roundWinPubKey)))
179+ then throw("Invalid leasing transaction signature. Leasing is allowed for winner only.")
180+ else if ((ltx.id != registeredLeasingId))
181+ then throw("Leasing transaction id doesn't match with registered leasing id")
182+ else if ((ltx.amount != winAmt))
183+ then throw(("Impossible to lease less or greater than " + toString(winAmt)))
184+ else if ((ltx.fee != MinFEE))
185+ then throw(("Impossible to lease with fee less or greater than " + toString(MinFEE)))
186+ else true
187+ case cltx: LeaseCancelTransaction =>
188+ if (!(leasingPeriodEnded))
189+ then throw("MRT party has not finished yet. Leasing Cancel is not allowed.")
190+ else if (!(sigVerify(tx.bodyBytes, tx.proofs[0], partyOwnerPubKey)))
191+ then throw("Leasing Cancel is allowed to Party Owner only")
192+ else if ((cltx.fee != MinFEE))
193+ then throw(("Impossible to cancle leasing with fee less or greater than " + toString(MinFEE)))
194+ else true
195+ case ttx: TransferTransaction =>
196+ if (!(leasingPeriodEnded))
197+ then throw("MRT party has not finished yet. Transfer is not allowed.")
198+ else if ((addressFromRecipient(ttx.recipient).bytes != partyOwnerAddress.bytes))
199+ then throw("Transfer is allowed to Party Owner address only")
200+ else if (!(sigVerify(ttx.bodyBytes, ttx.proofs[0], partyOwnerPubKey)))
201+ then throw("Transfer is allowed for Party Owner only.")
202+ else true
203+ case stx: SetScriptTransaction =>
204+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
205+ case _ =>
206+ false
207+ }
208+ }
209+

github/deemru/w8io/169f3d6 
30.28 ms