tx · DEjKjDSzeXKqssSvxZS65SSyUrXrzxT8pDzSb9DNH3qp

3N3Pa64xyiF4tMZy7rP9HoAps6s2ideQZD9:  -0.01000000 Waves

2019.10.18 15:18 [725436] smart account 3N3Pa64xyiF4tMZy7rP9HoAps6s2ideQZD9 > SELF 0.00000000 Waves

{ "type": 13, "id": "DEjKjDSzeXKqssSvxZS65SSyUrXrzxT8pDzSb9DNH3qp", "fee": 1000000, "feeAssetId": null, "timestamp": 1571401184724, "version": 1, "sender": "3N3Pa64xyiF4tMZy7rP9HoAps6s2ideQZD9", "senderPublicKey": "AXF3veiyfKsCkJFHSq12ZxDW5FtgUYncZvjjD5FK3voU", "proofs": [ "42YCrvEjDVvaGYYBwCaTidXJYFmZVfQmUbqVGbrzXucRhufgZHYzzcFrnYqNCfTNAY2MrxFn6wokiihVSGpxQdQT" ], "script": "base64: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AAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0BAAAAA9uZXdXaW5IZWlnaHRTdHIJAAGkAAAAAQUAAAAMbmV3V2luSGVpZ2h0BAAAAAlyb3VuZERhdGEJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQUAAAAFcm91bmQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAPbmV3V2luUHViS2V5U3RyAgAAAAFfBQAAAAtsZWFzaW5nSWQ1OAIAAAABXwkAAaQAAAABBQAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAETU9WRQQAAAAQbmV3V2luQWRkcmVzc1N0cgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAAxuZXdXaW5QdWJLZXkEAAAADWFkZHJlc3NMZW5ndGgJAAExAAAAAQUAAAAQbmV3V2luQWRkcmVzc1N0cgQAAAALc2hhcmVkU3RhdGUJAQAAAA9yZWFkU2hhcmVkU3RhdGUAAAAABAAAABVuZXdUb3RhbEdhbWVzQ291bnRTdHIJAAGkAAAAAQkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALc2hhcmVkU3RhdGUAAAAAAAAAAAEAAAAAAAAAAAEEAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAAGRAAAAAgUAAAALc2hhcmVkU3RhdGUAAAAAAAAAAAIEAAAAEm5ld0xhc3RQbGF5ZXJzQWRkcgMDCQEAAAACIT0AAAACBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyAgAAAAAJAABmAAAAAgkAATEAAAABBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQAAaAAAAAIJAABkAAAAAgUAAAANYWRkcmVzc0xlbmd0aAAAAAAAAAAAAQAAAAAAAAAACgcJAAEsAAAAAgkAASwAAAACAgAAAAEtBQAAABBuZXdXaW5BZGRyZXNzU3RyCQEAAAAJZHJvcFJpZ2h0AAAAAgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkAAGQAAAACBQAAAA1hZGRyZXNzTGVuZ3RoAAAAAAAAAAABCQABLAAAAAIJAAEsAAAAAgIAAAABLQUAAAAQbmV3V2luQWRkcmVzc1N0cgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAlyb3VuZERhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAEVJvdW5kc1NoYXJlZFN0YXRlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAVbmV3VG90YWxHYW1lc0NvdW50U3RyAgAAAAFfBQAAABJuZXdMYXN0UGxheWVyc0FkZHIFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAHTEVBU0lORwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAlyb3VuZERhdGEFAAAAA25pbAkAAAIAAAABCQABLAAAAAICAAAAMFVuc3VwcG9ydGVkIHR5cGUgaW4gd3JpdGVTZXRPZlJvdW5kRGF0YSBtZXRob2Q6IAUAAAAEdHlwZQAAAAAGb2Zmc2V0CQAAZQAAAAIFAAAABmhlaWdodAUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAADGN1cnJSb3VuZE51bQMJAABnAAAAAgUAAAAGb2Zmc2V0AAAAAAAAAAAACQAAaQAAAAIFAAAABm9mZnNldAUAAAAOYmxvY2tzUGVyUm91bmQJAAACAAAAAQkAASwAAAACAgAAAC1QbGVhc2UgZG8gbm90IGh1cnJ5LiBNUlQgcGFydHkgd2lsbCBzdGFydCBvbiAJAAGkAAAAAQUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAD2N1cnJSb3VuZEhlaWdodAkAAGoAAAACBQAAAAZvZmZzZXQFAAAADmJsb2Nrc1BlclJvdW5kAAAAABRjdXJyUm91bmRIZWlnaHRTdGFydAkAAGQAAAACCQAAaAAAAAIFAAAADGN1cnJSb3VuZE51bQUAAAAOYmxvY2tzUGVyUm91bmQFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAkAAGQAAAACBQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAUAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAEWN1cnJSb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAxjdXJyUm91bmROdW0AAAAADWN1cnJXaW5IZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABFjdXJyUm91bmREYXRhTGlzdAUAAAAMSWR4V2luSGVpZ2h0AAAAAA1jdXJyTWluUG10QW10BQAAAAdwbXRTdGVwAQAAAA1pc1dpbkJ5SGVpZ2h0AAAAAQAAAAFoCQAAZwAAAAIFAAAABmhlaWdodAUAAAABaAAAAAAcYXRMZWFzdE9uZU1vdmVJblJvdW5kUHJlc2VudAkAAGYAAAACBQAAAA1jdXJyV2luSGVpZ2h0BQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAAAAAAWZmlyc3RDb3VudGRvd25GaW5pc2hlZAMJAAAAAAAAAgUAAAANY3VycldpbkhlaWdodAAAAAAAAAAAAAkBAAAADWlzV2luQnlIZWlnaHQAAAABCQAAZAAAAAIFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BQAAAApoZWlnaHRTdGVwBwAAAAAMaXNQYXVzZUJ5V2luAwkBAAAADWlzV2luQnlIZWlnaHQAAAABBQAAAA1jdXJyV2luSGVpZ2h0BQAAABxhdExlYXN0T25lTW92ZUluUm91bmRQcmVzZW50BwAAAAANaXNQYXVzZUJ5VGltZQMJAABmAAAAAgUAAAAPY3VyclJvdW5kSGVpZ2h0BQAAABRibG9ja3NQZXJDb21wZXRpdGlvbgYFAAAAFmZpcnN0Q291bnRkb3duRmluaXNoZWQAAAAAB2lzUGF1c2UDBQAAAAxpc1BhdXNlQnlXaW4GBQAAAA1pc1BhdXNlQnlUaW1lAAAAAA1pc0NvbXBldGl0aW9uCQEAAAABIQAAAAEFAAAAB2lzUGF1c2UAAAACAAAAA2ludgEAAAAEbW92ZQAAAAAEAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAApoZWlnaHRTdGVwBAAAAAxuZXdXaW5IZWlnaHQDCQAAZwAAAAIFAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQFAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kBQAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAUAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAQAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAA2ludgAAAAdwYXltZW50CQAAAgAAAAECAAAAOlBsZWFzZSBhdHRhY2ggcGF5bWVudCB3aXRoIE1SVCB0byBwYXJ0aWNpcGF0ZSBpbiBNUlQgcGFydHkDCQAAZwAAAAIFAAAADGN1cnJSb3VuZE51bQUAAAAJbWF4Um91bmRzCQAAAgAAAAECAAAAEU1SVCBwYXJ0eSBpcyBvdmVyAwUAAAAHaXNQYXVzZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARU29ycnkgYnV0IHJvdW5kICMJAAGkAAAAAQUAAAAMY3VyclJvdW5kTnVtAgAAAA0gaXMgZmluaXNoZWQuAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAADTVJUCQAAAgAAAAECAAAAPVBsZWFzZSB1c2UgTVJUIGFzIGEgcGF5bWVudCBhc3NldCB0byBwYXJ0aWNpcGF0ZSBpbiBNUlQgcGFydHkDCQAAZgAAAAIFAAAADWN1cnJNaW5QbXRBbXQIBQAAAAdwYXltZW50AAAABmFtb3VudAkAAAIAAAABCQABLAAAAAICAAAARVNvcnJ5IG15IGZyaWVuZCBidXQgeW91ciBwYXltZW50IGlzIHRvIHNtYWxsLiBDdXJyZW50IG1pbiBwYXltZW50IGlzIAkAAaQAAAABBQAAAA1jdXJyTWluUG10QW10CQEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAcCAAAABE1PVkUFAAAADGN1cnJSb3VuZE51bQUAAAAMbmV3V2luSGVpZ2h0CQACWAAAAAEIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5CAUAAAADaW52AAAAD2NhbGxlclB1YmxpY0tleQIAAAABPwAAAAAAAAAAAAAAAANpbnYBAAAAEXJlZ2lzdGVyTGVhc2luZ1R4AAAAAgAAAAVyb3VuZAAAAAtsZWFzaW5nSWQ1OAQAAAAJbGVhc2luZ0lkCQACWQAAAAEFAAAAC2xlYXNpbmdJZDU4BAAAAA1yb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMd2lubmVyUHViS2V5CQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5BAAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAAFUlkeExlYXNpbmdJZFZhbGlkVGlsbAMJAABmAAAAAgUAAAAFcm91bmQFAAAADGN1cnJSb3VuZE51bQkAAAIAAAABAgAAAD5JbXBvc3NpYmxlIHRvIHJlZ2lzdGVyIGxlYXNpbmcgdHJhbnNhY3Rpb24gZm9yIHJvdW5kIGluIGZ1dHVyZQMDCQAAAAAAAAIFAAAABXJvdW5kBQAAAAxjdXJyUm91bmROdW0FAAAADWlzQ29tcGV0aXRpb24HCQAAAgAAAAECAAAAT0ltcG9zc2libGUgdG8gcmVnaXN0ZXIgbGVhc2luZyB0cmFuc2FjdGlvbiAtIHdpbm5lciBoYXMgbm90IGJlZW4gZGV0ZXJtaW5lZCB5ZXQDCQEAAAACIT0AAAACCQABMQAAAAEFAAAAC2xlYXNpbmdJZDU4AAAAAAAAAAAsCQAAAgAAAAECAAAAJUludmFsaWQgbGVhc2luZyB0cmFuc2FjdGlvbiBpZCBsZW5ndGgDCQAAZwAAAAIAAAAAAAAAAAAJAADIAAAAAQUAAAAJbGVhc2luZ0lkCQAAAgAAAAECAAAANkxlYXNpbmcgdHJhbnNhY3Rpb24gaWQgaXMgbm90IGVuY29kZWQgYXMgQmFzZTU4IGZvcm1hdAMJAQAAAAlpc0RlZmluZWQAAAABCQAD6QAAAAEFAAAACWxlYXNpbmdJZAkAAAIAAAABAgAAADJQYXNzZWQgbGVhc2luZ0lkIGhhcyBhbHJlYWR5IGV4aXN0ZWQgaW4gYmxvY2tjaGFpbgMDCQEAAAACIT0AAAACBQAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAAAAAAAAAAAAAkAAGYAAAACBQAAAAZoZWlnaHQFAAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0BwkAAAIAAAABCQABLAAAAAICAAAAKExlYXNpbmcgaWQgY2FuIGJlIHJlLXJlZ2lzdGVyZWQgb25seSBvbiAJAAGkAAAAAQUAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQDCQEAAAACIT0AAAACCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeExlYXNpbmdJZAIAAAABPwkAAAIAAAABCQABLAAAAAICAAAAL0xlYXNpbmcgdHggaWQgaGFzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3Igcm91bmQgCQABpAAAAAEFAAAABXJvdW5kAwkBAAAAAiE9AAAAAggFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADHdpbm5lclB1YktleQkAAAIAAAABAgAAADFMZWFzaW5nIHR4IGNhbiBiZSByZWdpc3RlcmVkIGJ5IHJvdW5kIHdpbm5lciBvbmx5BAAAAA5yb3VuZFdpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpbkhlaWdodAkBAAAAE3dyaXRlU2V0T2ZSb3VuZERhdGEAAAAHAgAAAAdMRUFTSU5HBQAAAAVyb3VuZAUAAAAOcm91bmRXaW5IZWlnaHQJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5CQABmwAAAAECAAAAAAUAAAALbGVhc2luZ0lkNTgJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABFsZWFzaW5nSWRMaWZldGltZQAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAGYAAAACBQAAAAZoZWlnaHQJAABkAAAAAgkAAGQAAAACBQAAABFibG9ja3NPbkdhbWVTdGFydAkAAGgAAAACBQAAAAltYXhSb3VuZHMFAAAADmJsb2Nrc1BlclJvdW5kBQAAAA1sZWFzaW5nUGVyaW9kBAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAQTGVhc2VUcmFuc2FjdGlvbgQAAAADbHR4BQAAAAckbWF0Y2gwBAAAAANzaWcJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAAEAAAABXJvdW5kCQAEsQAAAAEJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAEEAAAADXJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAABXJvdW5kBAAAAA5yb3VuZFdpblB1YktleQkAAlkAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQQAAAATcmVnaXN0ZXJlZExlYXNpbmdJZAkAAlkAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeExlYXNpbmdJZAQAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAABVJZHhMZWFzaW5nSWRWYWxpZFRpbGwDBQAAABJsZWFzaW5nUGVyaW9kRW5kZWQJAAACAAAAAQIAAAAnU29ycnkgYnV0IGxlYXNpbmcgcGVyaW9kIGhhcyBiZWVuIGVuZGVkAwkAAGYAAAACBQAAAAZoZWlnaHQJAABlAAAAAgUAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQFAAAAF2xlYXNpbmdJZERpZmZJbkxpZmV0aW1lCQAAAgAAAAECAAAAQlNvcnJ5IGJ1dCBsaWZldGltZSBvZiB5b3VyIGxlYXNpbmcgdHJhbnNhY3Rpb24gaWQgaGFzIGJlZW4gZXhwaXJlZAMJAQAAAAEhAAAAAQkAAfQAAAADCAUAAAADbHR4AAAACWJvZHlCeXRlcwUAAAADc2lnBQAAAA5yb3VuZFdpblB1YktleQkAAAIAAAABAgAAAEpJbnZhbGlkIGxlYXNpbmcgdHJhbnNhY3Rpb24gc2lnbmF0dXJlLiBMZWFzaW5nIGlzIGFsbG93ZWQgZm9yIHdpbm5lciBvbmx5LgMJAQAAAAIhPQAAAAIIBQAAAANsdHgAAAACaWQFAAAAE3JlZ2lzdGVyZWRMZWFzaW5nSWQJAAACAAAAAQIAAAA/TGVhc2luZyB0cmFuc2FjdGlvbiBpZCBkb2Vzbid0IG1hdGNoIHdpdGggcmVnaXN0ZXJlZCBsZWFzaW5nIGlkAwkBAAAAAiE9AAAAAggFAAAAA2x0eAAAAAZhbW91bnQFAAAACmxlYXNpbmdBbXQJAAACAAAAAQkAASwAAAACAgAAAClJbXBvc3NpYmxlIHRvIGxlYXNlIGxlc3Mgb3IgZ3JlYXRlciB0aGFuIAkAAaQAAAABBQAAAApsZWFzaW5nQW10AwkBAAAAAiE9AAAAAggFAAAAA2x0eAAAAANmZWUFAAAABk1pbkZFRQkAAAIAAAABCQABLAAAAAICAAAAMkltcG9zc2libGUgdG8gbGVhc2Ugd2l0aCBmZWUgbGVzcyBvciBncmVhdGVyIHRoYW4gCQABpAAAAAEFAAAABk1pbkZFRQYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFkxlYXNlQ2FuY2VsVHJhbnNhY3Rpb24EAAAABGNsdHgFAAAAByRtYXRjaDADCQEAAAABIQAAAAEFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAAD5NUlQgcGFydHkgaGFzIG5vdCBmaW5pc2hlZCB5ZXQuIExlYXNpbmcgQ2FuY2VsIGlzIG5vdCBhbGxvd2VkLgMJAQAAAAEhAAAAAQkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEHBhcnR5T3duZXJQdWJLZXkJAAACAAAAAQIAAAAtTGVhc2luZyBDYW5jZWwgaXMgYWxsb3dlZCB0byBQYXJ0eSBPd25lciBvbmx5AwkBAAAAAiE9AAAAAggFAAAABGNsdHgAAAADZmVlBQAAAAZNaW5GRUUJAAACAAAAAQkAASwAAAACAgAAADtJbXBvc3NpYmxlIHRvIGNhbmNsZSBsZWFzaW5nIHdpdGggZmVlIGxlc3Mgb3IgZ3JlYXRlciB0aGFuIAkAAaQAAAABBQAAAAZNaW5GRUUGAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDADCQEAAAABIQAAAAEFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAADhNUlQgcGFydHkgaGFzIG5vdCBmaW5pc2hlZCB5ZXQuIFRyYW5zZmVyIGlzIG5vdCBhbGxvd2VkLgMJAQAAAAIhPQAAAAIICQAEJAAAAAEIBQAAAAN0dHgAAAAJcmVjaXBpZW50AAAABWJ5dGVzCAUAAAARcGFydHlPd25lckFkZHJlc3MAAAAFYnl0ZXMJAAACAAAAAQIAAAAvVHJhbnNmZXIgaXMgYWxsb3dlZCB0byBQYXJ0eSBPd25lciBhZGRyZXNzIG9ubHkDCQEAAAABIQAAAAEJAAH0AAAAAwgFAAAAA3R0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAA3R0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAEHBhcnR5T3duZXJQdWJLZXkJAAACAAAAAQIAAAApVHJhbnNmZXIgaXMgYWxsb3dlZCBmb3IgUGFydHkgT3duZXIgb25seS4GAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAADc3R4BQAAAAckbWF0Y2gwCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQfUZbzf", "chainId": 84, "height": 725436, "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 pmtStep = (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 leasingAmt = (1 * WAVELET)
23+
24+let heightStep = 2
25+
26+let blocksOnGameStart = 725436
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(pmtStep), 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 = pmtStep
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 != leasingAmt))
211+ then throw(("Impossible to lease less or greater than " + toString(leasingAmt)))
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 
53.07 ms