tx · 4QFSXuiHT5KaHfZiNZuJgHH8pdW4xw3t1w5if4QVwwfM

3N5BMUtGn5dNhV66VhZ5tBkGQ363pooftYj:  -0.01000000 Waves

2019.10.23 16:23 [732795] smart account 3N5BMUtGn5dNhV66VhZ5tBkGQ363pooftYj > SELF 0.00000000 Waves

{ "type": 13, "id": "4QFSXuiHT5KaHfZiNZuJgHH8pdW4xw3t1w5if4QVwwfM", "fee": 1000000, "feeAssetId": null, "timestamp": 1571837050629, "version": 1, "sender": "3N5BMUtGn5dNhV66VhZ5tBkGQ363pooftYj", "senderPublicKey": "A69FNFdVBzAjiNugmY9dpnGvdZcXttF63iGrxmUrnCZA", "proofs": [ "5mTLkZXSesTgLXqJ88m4964AufvXCUACLKoTt7LNcCrLBzCiV7RyBcRDMvtmX4zV1FPK5t4Jgms4D8HUjfd8tEyV" ], "script": "base64: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AAAACQAEtQAAAAIFAAAADnNoYXJlZFN0YXRlU3RyAgAAAAFfCQAETAAAAAICAAAAAAkABEwAAAACAgAAAAEwCQAETAAAAAICAAAAAAUAAAADbmlsAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABwAAAAR0eXBlAAAABXJvdW5kAAAADG5ld1dpbkhlaWdodAAAAA9uZXdXaW5QdWJLZXlTdHIAAAAMbmV3V2luUHViS2V5AAAAC2xlYXNpbmdJZDU4AAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0BAAAAA9uZXdXaW5IZWlnaHRTdHIJAAGkAAAAAQUAAAAMbmV3V2luSGVpZ2h0BAAAAAlyb3VuZERhdGEJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQUAAAAFcm91bmQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAPbmV3V2luUHViS2V5U3RyAgAAAAFfBQAAAAtsZWFzaW5nSWQ1OAIAAAABXwkAAaQAAAABBQAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAETU9WRQQAAAAQbmV3V2luQWRkcmVzc1N0cgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAAxuZXdXaW5QdWJLZXkEAAAADWFkZHJlc3NMZW5ndGgJAAExAAAAAQUAAAAQbmV3V2luQWRkcmVzc1N0cgQAAAALc2hhcmVkU3RhdGUJAQAAAA9yZWFkU2hhcmVkU3RhdGUAAAAABAAAABVuZXdUb3RhbEdhbWVzQ291bnRTdHIJAAGkAAAAAQkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALc2hhcmVkU3RhdGUAAAAAAAAAAAEAAAAAAAAAAAEEAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAAGRAAAAAgUAAAALc2hhcmVkU3RhdGUAAAAAAAAAAAIEAAAAEm5ld0xhc3RQbGF5ZXJzQWRkcgMDCQEAAAACIT0AAAACBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyAgAAAAAJAABmAAAAAgkAATEAAAABBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQAAaAAAAAIJAABkAAAAAgUAAAANYWRkcmVzc0xlbmd0aAAAAAAAAAAAAQAAAAAAAAAACgcJAAEsAAAAAgkAASwAAAACAgAAAAEtBQAAABBuZXdXaW5BZGRyZXNzU3RyCQEAAAAJZHJvcFJpZ2h0AAAAAgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkAAGQAAAACBQAAAA1hZGRyZXNzTGVuZ3RoAAAAAAAAAAABCQABLAAAAAIJAAEsAAAAAgIAAAABLQUAAAAQbmV3V2luQWRkcmVzc1N0cgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAlyb3VuZERhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAEVJvdW5kc1NoYXJlZFN0YXRlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAVbmV3VG90YWxHYW1lc0NvdW50U3RyAgAAAAFfBQAAABJuZXdMYXN0UGxheWVyc0FkZHIFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAHTEVBU0lORwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAlyb3VuZERhdGEFAAAAA25pbAkAAAIAAAABCQABLAAAAAICAAAAMFVuc3VwcG9ydGVkIHR5cGUgaW4gd3JpdGVTZXRPZlJvdW5kRGF0YSBtZXRob2Q6IAUAAAAEdHlwZQAAAAAGb2Zmc2V0CQAAZQAAAAIFAAAABmhlaWdodAUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAADGN1cnJSb3VuZE51bQMJAABnAAAAAgUAAAAGb2Zmc2V0AAAAAAAAAAAACQAAaQAAAAIFAAAABm9mZnNldAUAAAAOYmxvY2tzUGVyUm91bmQJAAACAAAAAQkAASwAAAACAgAAAC1QbGVhc2UgZG8gbm90IGh1cnJ5LiBNUlQgcGFydHkgd2lsbCBzdGFydCBvbiAJAAGkAAAAAQUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAD2N1cnJSb3VuZEhlaWdodAkAAGoAAAACBQAAAAZvZmZzZXQFAAAADmJsb2Nrc1BlclJvdW5kAAAAABRjdXJyUm91bmRIZWlnaHRTdGFydAkAAGQAAAACCQAAaAAAAAIFAAAADGN1cnJSb3VuZE51bQUAAAAOYmxvY2tzUGVyUm91bmQFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAkAAGQAAAACBQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAUAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAEWN1cnJSb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAxjdXJyUm91bmROdW0AAAAADWN1cnJXaW5IZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABFjdXJyUm91bmREYXRhTGlzdAUAAAAMSWR4V2luSGVpZ2h0AAAAAA1jdXJyTWluUG10QW10BQAAAAdwbXRTdGVwAQAAAA1pc1dpbkJ5SGVpZ2h0AAAAAQAAAAFoCQAAZwAAAAIFAAAABmhlaWdodAUAAAABaAAAAAAcYXRMZWFzdE9uZU1vdmVJblJvdW5kUHJlc2VudAkAAGYAAAACBQAAAA1jdXJyV2luSGVpZ2h0BQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAAAAAAWZmlyc3RDb3VudGRvd25GaW5pc2hlZAMJAAAAAAAAAgUAAAANY3VycldpbkhlaWdodAAAAAAAAAAAAAkBAAAADWlzV2luQnlIZWlnaHQAAAABCQAAZAAAAAIFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BQAAAApoZWlnaHRTdGVwBwAAAAAMaXNQYXVzZUJ5V2luAwkBAAAADWlzV2luQnlIZWlnaHQAAAABBQAAAA1jdXJyV2luSGVpZ2h0BQAAABxhdExlYXN0T25lTW92ZUluUm91bmRQcmVzZW50BwAAAAANaXNQYXVzZUJ5VGltZQMJAABmAAAAAgUAAAAPY3VyclJvdW5kSGVpZ2h0BQAAABRibG9ja3NQZXJDb21wZXRpdGlvbgYFAAAAFmZpcnN0Q291bnRkb3duRmluaXNoZWQAAAAAB2lzUGF1c2UDBQAAAAxpc1BhdXNlQnlXaW4GBQAAAA1pc1BhdXNlQnlUaW1lAAAAAA1pc0NvbXBldGl0aW9uCQEAAAABIQAAAAEFAAAAB2lzUGF1c2UAAAACAAAAA2ludgEAAAAEbW92ZQAAAAAEAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAApoZWlnaHRTdGVwBAAAAAxuZXdXaW5IZWlnaHQDCQAAZwAAAAIFAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQFAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kBQAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAUAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAQAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAA2ludgAAAAdwYXltZW50CQAAAgAAAAECAAAAOlBsZWFzZSBhdHRhY2ggcGF5bWVudCB3aXRoIE1SVCB0byBwYXJ0aWNpcGF0ZSBpbiBNUlQgcGFydHkDCQAAZwAAAAIFAAAADGN1cnJSb3VuZE51bQUAAAAJbWF4Um91bmRzCQAAAgAAAAECAAAAEU1SVCBwYXJ0eSBpcyBvdmVyAwUAAAAHaXNQYXVzZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARU29ycnkgYnV0IHJvdW5kICMJAAGkAAAAAQUAAAAMY3VyclJvdW5kTnVtAgAAAA0gaXMgZmluaXNoZWQuAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAADTVJUCQAAAgAAAAECAAAAPVBsZWFzZSB1c2UgTVJUIGFzIGEgcGF5bWVudCBhc3NldCB0byBwYXJ0aWNpcGF0ZSBpbiBNUlQgcGFydHkDCQAAZgAAAAIFAAAADWN1cnJNaW5QbXRBbXQIBQAAAAdwYXltZW50AAAABmFtb3VudAkAAAIAAAABCQABLAAAAAICAAAARVNvcnJ5IG15IGZyaWVuZCBidXQgeW91ciBwYXltZW50IGlzIHRvIHNtYWxsLiBDdXJyZW50IG1pbiBwYXltZW50IGlzIAkAAaQAAAABBQAAAA1jdXJyTWluUG10QW10CQEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAcCAAAABE1PVkUFAAAADGN1cnJSb3VuZE51bQUAAAAMbmV3V2luSGVpZ2h0CQACWAAAAAEIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5CAUAAAADaW52AAAAD2NhbGxlclB1YmxpY0tleQIAAAABPwAAAAAAAAAAAAAAAANpbnYBAAAAEXJlZ2lzdGVyTGVhc2luZ1R4AAAAAgAAAAVyb3VuZAAAAAtsZWFzaW5nSWQ1OAQAAAAJbGVhc2luZ0lkCQACWQAAAAEFAAAAC2xlYXNpbmdJZDU4BAAAAA1yb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAPcHJldkxlYXNpbmdJZDU4CQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeExlYXNpbmdJZAQAAAANcHJldkxlYXNpbmdJZAMJAAAAAAAAAgUAAAAPcHJldkxlYXNpbmdJZDU4AgAAAAE/CQACWQAAAAECAAAAB2VtcHR5aWQJAAJZAAAAAQUAAAAPcHJldkxlYXNpbmdJZDU4BAAAAAx3aW5uZXJQdWJLZXkJAAJZAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5QdWJLZXkEAAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAVSWR4TGVhc2luZ0lkVmFsaWRUaWxsAwkAAGYAAAACBQAAAAVyb3VuZAUAAAAMY3VyclJvdW5kTnVtCQAAAgAAAAECAAAAPkltcG9zc2libGUgdG8gcmVnaXN0ZXIgbGVhc2luZyB0cmFuc2FjdGlvbiBmb3Igcm91bmQgaW4gZnV0dXJlAwMJAAAAAAAAAgUAAAAFcm91bmQFAAAADGN1cnJSb3VuZE51bQUAAAANaXNDb21wZXRpdGlvbgcJAAACAAAAAQIAAABPSW1wb3NzaWJsZSB0byByZWdpc3RlciBsZWFzaW5nIHRyYW5zYWN0aW9uIC0gd2lubmVyIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIHlldAMJAABmAAAAAgkAAMgAAAABBQAAAAlsZWFzaW5nSWQAAAAAAAAAAGQJAAACAAAAAQIAAAAlSW52YWxpZCBsZWFzaW5nIHRyYW5zYWN0aW9uIGlkIGxlbmd0aAMJAABnAAAAAgAAAAAAAAAAAAkAAMgAAAABBQAAAAlsZWFzaW5nSWQJAAACAAAAAQIAAAA2TGVhc2luZyB0cmFuc2FjdGlvbiBpZCBpcyBub3QgZW5jb2RlZCBhcyBCYXNlNTggZm9ybWF0AwkBAAAACWlzRGVmaW5lZAAAAAEJAAPpAAAAAQUAAAAJbGVhc2luZ0lkCQAAAgAAAAECAAAAMlBhc3NlZCBsZWFzaW5nSWQgaGFzIGFscmVhZHkgZXhpc3RlZCBpbiBibG9ja2NoYWluAwkBAAAACWlzRGVmaW5lZAAAAAEJAAPpAAAAAQUAAAANcHJldkxlYXNpbmdJZAkAAAIAAAABAgAAAD9QcmV2aW91cyByZWdpc3RlcmVkIGxlYXNpbmdJZCBoYXMgYWxyZWFkeSBleGlzdGVkIGluIGJsb2NrY2hhaW4DAwkBAAAAAiE9AAAAAgUAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQAAAAAAAAAAAAJAABmAAAAAgUAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQFAAAABmhlaWdodAcJAAACAAAAAQkAASwAAAACAgAAAChMZWFzaW5nIGlkIGNhbiBiZSByZS1yZWdpc3RlcmVkIG9ubHkgb24gCQABpAAAAAEFAAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0AwkBAAAAAiE9AAAAAggFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADHdpbm5lclB1YktleQkAAAIAAAABAgAAADFMZWFzaW5nIHR4IGNhbiBiZSByZWdpc3RlcmVkIGJ5IHJvdW5kIHdpbm5lciBvbmx5BAAAAA5yb3VuZFdpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpbkhlaWdodAkBAAAAE3dyaXRlU2V0T2ZSb3VuZERhdGEAAAAHAgAAAAdMRUFTSU5HBQAAAAVyb3VuZAUAAAAOcm91bmRXaW5IZWlnaHQJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5CQABmwAAAAECAAAAAAUAAAALbGVhc2luZ0lkNTgJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABFsZWFzaW5nSWRMaWZldGltZQAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAGYAAAACBQAAAAZoZWlnaHQJAABkAAAAAgkAAGQAAAACBQAAABFibG9ja3NPbkdhbWVTdGFydAkAAGgAAAACBQAAAAltYXhSb3VuZHMFAAAADmJsb2Nrc1BlclJvdW5kBQAAAA1sZWFzaW5nUGVyaW9kBAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAQTGVhc2VUcmFuc2FjdGlvbgQAAAADbHR4BQAAAAckbWF0Y2gwBAAAAANzaWcJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAAEAAAADnJvdW5kQmFzZTU4U3RyCQACWAAAAAEJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAEEAAAABXJvdW5kCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAS2AAAAAQkBAAAACnByb29mVG9TdHIAAAABBQAAAA5yb3VuZEJhc2U1OFN0cgIAAAA9RXJyb3IgZHVyaW5nIGNvbnZlcnRpbmcgcm91bmQgbnVtIGludG8gaW50ZWdlciByZXByZXNlbnRhdGlvbgQAAAANcm91bmREYXRhTGlzdAkBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQUAAAAFcm91bmQEAAAADnJvdW5kV2luUHViS2V5CQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5BAAAABNyZWdpc3RlcmVkTGVhc2luZ0lkCQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4TGVhc2luZ0lkBAAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAAFUlkeExlYXNpbmdJZFZhbGlkVGlsbAMFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAACdTb3JyeSBidXQgbGVhc2luZyBwZXJpb2QgaGFzIGJlZW4gZW5kZWQDCQAAZgAAAAIFAAAABmhlaWdodAkAAGUAAAACBQAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAUAAAAXbGVhc2luZ0lkRGlmZkluTGlmZXRpbWUJAAACAAAAAQIAAABCU29ycnkgYnV0IGxpZmV0aW1lIG9mIHlvdXIgbGVhc2luZyB0cmFuc2FjdGlvbiBpZCBoYXMgYmVlbiBleHBpcmVkAwkBAAAAASEAAAABCQAB9AAAAAMIBQAAAANsdHgAAAAJYm9keUJ5dGVzBQAAAANzaWcFAAAADnJvdW5kV2luUHViS2V5CQAAAgAAAAECAAAASkludmFsaWQgbGVhc2luZyB0cmFuc2FjdGlvbiBzaWduYXR1cmUuIExlYXNpbmcgaXMgYWxsb3dlZCBmb3Igd2lubmVyIG9ubHkuAwkBAAAAAiE9AAAAAggFAAAAA2x0eAAAAAJpZAUAAAATcmVnaXN0ZXJlZExlYXNpbmdJZAkAAAIAAAABAgAAAD9MZWFzaW5nIHRyYW5zYWN0aW9uIGlkIGRvZXNuJ3QgbWF0Y2ggd2l0aCByZWdpc3RlcmVkIGxlYXNpbmcgaWQDCQEAAAACIT0AAAACCAUAAAADbHR4AAAABmFtb3VudAUAAAAKbGVhc2luZ0FtdAkAAAIAAAABCQABLAAAAAICAAAAKUltcG9zc2libGUgdG8gbGVhc2UgbGVzcyBvciBncmVhdGVyIHRoYW4gCQABpAAAAAEFAAAACmxlYXNpbmdBbXQDCQEAAAACIT0AAAACCAUAAAADbHR4AAAAA2ZlZQUAAAAGTWluRkVFCQAAAgAAAAEJAAEsAAAAAgIAAAAySW1wb3NzaWJsZSB0byBsZWFzZSB3aXRoIGZlZSBsZXNzIG9yIGdyZWF0ZXIgdGhhbiAJAAGkAAAAAQUAAAAGTWluRkVFBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAWTGVhc2VDYW5jZWxUcmFuc2FjdGlvbgQAAAAEY2x0eAUAAAAHJG1hdGNoMAMJAQAAAAEhAAAAAQUAAAASbGVhc2luZ1BlcmlvZEVuZGVkCQAAAgAAAAECAAAAPk1SVCBwYXJ0eSBoYXMgbm90IGZpbmlzaGVkIHlldC4gTGVhc2luZyBDYW5jZWwgaXMgbm90IGFsbG93ZWQuAwkBAAAAASEAAAABCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAQcGFydHlPd25lclB1YktleQkAAAIAAAABAgAAAC1MZWFzaW5nIENhbmNlbCBpcyBhbGxvd2VkIHRvIFBhcnR5IE93bmVyIG9ubHkDCQEAAAACIT0AAAACCAUAAAAEY2x0eAAAAANmZWUFAAAABk1pbkZFRQkAAAIAAAABCQABLAAAAAICAAAAO0ltcG9zc2libGUgdG8gY2FuY2xlIGxlYXNpbmcgd2l0aCBmZWUgbGVzcyBvciBncmVhdGVyIHRoYW4gCQABpAAAAAEFAAAABk1pbkZFRQYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAA3R0eAUAAAAHJG1hdGNoMAMJAQAAAAEhAAAAAQUAAAASbGVhc2luZ1BlcmlvZEVuZGVkCQAAAgAAAAECAAAAOE1SVCBwYXJ0eSBoYXMgbm90IGZpbmlzaGVkIHlldC4gVHJhbnNmZXIgaXMgbm90IGFsbG93ZWQuAwkBAAAAASEAAAABCQAB9AAAAAMIBQAAAAN0dHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAN0dHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAABBwYXJ0eU93bmVyUHViS2V5CQAAAgAAAAECAAAAKVRyYW5zZmVyIGlzIGFsbG93ZWQgZm9yIFBhcnR5IE93bmVyIG9ubHkuAwkBAAAAAiE9AAAAAggFAAAAA3R0eAAAAANmZWUFAAAABk1pbkZFRQkAAAIAAAABCQABLAAAAAICAAAANUltcG9zc2libGUgdG8gdHJhbnNmZXIgd2l0aCBmZWUgbGVzcyBvciBncmVhdGVyIHRoYW4gCQABpAAAAAEFAAAABk1pbkZFRQYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAANzdHgFAAAAByRtYXRjaDAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5B0T9Krw=", "chainId": 84, "height": 732795, "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 = 2
9+
10+let pmtStep = (10 * MRTEC)
11+
12+let partyOwnerPubKey = fromBase58String("4f8jYJccCjarVgc8FHn5ms5YLkpi6PfHpxTnmjQZMkJk")
13+
14+let partyOwnerAddress = addressFromPublicKey(partyOwnerPubKey)
15+
16+let leasingPeriod = 3
17+
18+let leasingIdLifetime = 3
19+
20+let leasingIdDiffInLifetime = 1
21+
22+let leasingAmt = (1 * WAVELET)
23+
24+let heightStep = 2
25+
26+let blocksOnGameStart = 732796
27+
28+let blocksPerRound = 5
29+
30+let blocksPerCompetition = 3
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 convertChar (charBase58) = {
45+ let B0 = "q"
46+ let B1 = "r"
47+ let B2 = "s"
48+ let B3 = "t"
49+ let B4 = "u"
50+ let B5 = "v"
51+ let B6 = "w"
52+ let B7 = "x"
53+ let B8 = "y"
54+ let B9 = "z"
55+ if ((charBase58 == B0))
56+ then "0"
57+ else if ((charBase58 == B1))
58+ then "1"
59+ else if ((charBase58 == B2))
60+ then "2"
61+ else if ((charBase58 == B3))
62+ then "3"
63+ else if ((charBase58 == B4))
64+ then "4"
65+ else if ((charBase58 == B5))
66+ then "5"
67+ else if ((charBase58 == B6))
68+ then "6"
69+ else if ((charBase58 == B7))
70+ then "7"
71+ else if ((charBase58 == B8))
72+ then "8"
73+ else if ((charBase58 == B9))
74+ then "9"
75+ else throw("Unsupported char")
76+ }
77+
78+
79+func proofToStr (roundNumProof) = {
80+ let s = size(roundNumProof)
81+ if ((s > 2))
82+ then throw("Invalid ecoded round - size couldn't be greater than 2")
83+ else if ((0 >= s))
84+ then throw("Invalid ecoded round - size couldn't be less than or equals 0")
85+ else if ((s == 1))
86+ then convertChar(take(roundNumProof, 1))
87+ else if ((s == 2))
88+ then (convertChar(take(roundNumProof, 1)) + convertChar(take(drop(roundNumProof, 1), 1)))
89+ else throw("Invalid encoded round")
90+ }
91+
92+
93+func getRoundDataKeyOrFail (round) = if ((0 > round))
94+ then throw("Invalid round number")
95+ else ("round" + toString(round))
96+
97+
98+func readRoundDataListOrFail (round) = {
99+ let roundDataOpt = getString(this, getRoundDataKeyOrFail(round))
100+ let roundDataStr = if (isDefined(roundDataOpt))
101+ then extract(roundDataOpt)
102+ else ""
103+ let partyOwnerAddressStr = toBase58String(partyOwnerAddress.bytes)
104+ if ((roundDataStr != ""))
105+ then split(roundDataStr, "_")
106+ else ["0", toString(pmtStep), partyOwnerAddressStr, "?", "0"]
107+ }
108+
109+
110+func readSharedState () = {
111+ let sharedStateOpt = getString(this, "RoundsSharedState")
112+ let sharedStateStr = if (isDefined(sharedStateOpt))
113+ then extract(sharedStateOpt)
114+ else ""
115+ if ((sharedStateStr != ""))
116+ then split(sharedStateStr, "_")
117+ else ["", "0", ""]
118+ }
119+
120+
121+func writeSetOfRoundData (type,round,newWinHeight,newWinPubKeyStr,newWinPubKey,leasingId58,leaseIdExpirationHeight) = {
122+ let newWinHeightStr = toString(newWinHeight)
123+ let roundData = DataEntry(getRoundDataKeyOrFail(round), ((((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58) + "_") + toString(leaseIdExpirationHeight)))
124+ if ((type == "MOVE"))
125+ then {
126+ let newWinAddressStr = toString(addressFromPublicKey(newWinPubKey))
127+ let addressLength = size(newWinAddressStr)
128+ let sharedState = readSharedState()
129+ let newTotalGamesCountStr = toString((parseIntValue(sharedState[1]) + 1))
130+ let currLastPlayersAddr = sharedState[2]
131+ let newLastPlayersAddr = if (if ((currLastPlayersAddr != ""))
132+ then (size(currLastPlayersAddr) > ((addressLength + 1) * 10))
133+ else false)
134+ then (("-" + newWinAddressStr) + dropRight(currLastPlayersAddr, (addressLength + 1)))
135+ else (("-" + newWinAddressStr) + currLastPlayersAddr)
136+ WriteSet([roundData, DataEntry("RoundsSharedState", ((((newWinHeightStr + "_") + newTotalGamesCountStr) + "_") + newLastPlayersAddr))])
137+ }
138+ else if ((type == "LEASING"))
139+ then WriteSet([roundData])
140+ else throw(("Unsupported type in writeSetOfRoundData method: " + type))
141+ }
142+
143+
144+let offset = (height - blocksOnGameStart)
145+
146+let currRoundNum = if ((offset >= 0))
147+ then (offset / blocksPerRound)
148+ else throw(("Please do not hurry. MRT party will start on " + toString(blocksOnGameStart)))
149+
150+let currRoundHeight = (offset % blocksPerRound)
151+
152+let currRoundHeightStart = ((currRoundNum * blocksPerRound) + blocksOnGameStart)
153+
154+let currRoundCompetitionEnd = (currRoundHeightStart + blocksPerCompetition)
155+
156+let currRoundDataList = readRoundDataListOrFail(currRoundNum)
157+
158+let currWinHeight = parseIntValue(currRoundDataList[IdxWinHeight])
159+
160+let currMinPmtAmt = pmtStep
161+
162+func isWinByHeight (h) = (height >= h)
163+
164+
165+let atLeastOneMoveInRoundPresent = (currWinHeight > currRoundHeightStart)
166+
167+let firstCountdownFinished = if ((currWinHeight == 0))
168+ then isWinByHeight((currRoundHeightStart + heightStep))
169+ else false
170+
171+let isPauseByWin = if (isWinByHeight(currWinHeight))
172+ then atLeastOneMoveInRoundPresent
173+ else false
174+
175+let isPauseByTime = if ((currRoundHeight > blocksPerCompetition))
176+ then true
177+ else firstCountdownFinished
178+
179+let isPause = if (isPauseByWin)
180+ then true
181+ else isPauseByTime
182+
183+let isCompetition = !(isPause)
184+
185+@Callable(inv)
186+func move () = {
187+ let overflowedNewWinHeight = (height + heightStep)
188+ let newWinHeight = if ((overflowedNewWinHeight >= currRoundCompetitionEnd))
189+ then currRoundCompetitionEnd
190+ else overflowedNewWinHeight
191+ let payment = if (isDefined(inv.payment))
192+ then extract(inv.payment)
193+ else throw("Please attach payment with MRT to participate in MRT party")
194+ if ((currRoundNum >= maxRounds))
195+ then throw("MRT party is over")
196+ else if (isPause)
197+ then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
198+ else if ((payment.assetId != MRT))
199+ then throw("Please use MRT as a payment asset to participate in MRT party")
200+ else if ((currMinPmtAmt > payment.amount))
201+ then throw(("Sorry my friend but your payment is to small. Current min payment is " + toString(currMinPmtAmt)))
202+ else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toBase58String(inv.callerPublicKey), inv.callerPublicKey, "?", 0)
203+ }
204+
205+
206+
207+@Callable(inv)
208+func registerLeasingTx (round,leasingId58) = {
209+ let leasingId = fromBase58String(leasingId58)
210+ let roundDataList = readRoundDataListOrFail(round)
211+ let prevLeasingId58 = roundDataList[IdxLeasingId]
212+ let prevLeasingId = if ((prevLeasingId58 == "?"))
213+ then fromBase58String("emptyid")
214+ else fromBase58String(prevLeasingId58)
215+ let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
216+ let leaseIdExpirationHeight = parseIntValue(roundDataList[IdxLeasingIdValidTill])
217+ if ((round > currRoundNum))
218+ then throw("Impossible to register leasing transaction for round in future")
219+ else if (if ((round == currRoundNum))
220+ then isCompetition
221+ else false)
222+ then throw("Impossible to register leasing transaction - winner has not been determined yet")
223+ else if ((size(leasingId) > 100))
224+ then throw("Invalid leasing transaction id length")
225+ else if ((0 >= size(leasingId)))
226+ then throw("Leasing transaction id is not encoded as Base58 format")
227+ else if (isDefined(transactionHeightById(leasingId)))
228+ then throw("Passed leasingId has already existed in blockchain")
229+ else if (isDefined(transactionHeightById(prevLeasingId)))
230+ then throw("Previous registered leasingId has already existed in blockchain")
231+ else if (if ((leaseIdExpirationHeight != 0))
232+ then (leaseIdExpirationHeight > height)
233+ else false)
234+ then throw(("Leasing id can be re-registered only on " + toString(leaseIdExpirationHeight)))
235+ else if ((inv.callerPublicKey != winnerPubKey))
236+ then throw("Leasing tx can be registered by round winner only")
237+ else {
238+ let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
239+ writeSetOfRoundData("LEASING", round, roundWinHeight, roundDataList[IdxWinPubKey], toBytes(""), leasingId58, (height + leasingIdLifetime))
240+ }
241+ }
242+
243+
244+@Verifier(tx)
245+func verify () = {
246+ let leasingPeriodEnded = (height > ((blocksOnGameStart + (maxRounds * blocksPerRound)) + leasingPeriod))
247+ match tx {
248+ case ltx: LeaseTransaction =>
249+ let sig = ltx.proofs[0]
250+ let roundBase58Str = toBase58String(ltx.proofs[1])
251+ let round = valueOrErrorMessage(parseInt(proofToStr(roundBase58Str)), "Error during converting round num into integer representation")
252+ let roundDataList = readRoundDataListOrFail(round)
253+ let roundWinPubKey = fromBase58String(roundDataList[IdxWinPubKey])
254+ let registeredLeasingId = fromBase58String(roundDataList[IdxLeasingId])
255+ let leaseIdExpirationHeight = parseIntValue(roundDataList[IdxLeasingIdValidTill])
256+ if (leasingPeriodEnded)
257+ then throw("Sorry but leasing period has been ended")
258+ else if ((height > (leaseIdExpirationHeight - leasingIdDiffInLifetime)))
259+ then throw("Sorry but lifetime of your leasing transaction id has been expired")
260+ else if (!(sigVerify(ltx.bodyBytes, sig, roundWinPubKey)))
261+ then throw("Invalid leasing transaction signature. Leasing is allowed for winner only.")
262+ else if ((ltx.id != registeredLeasingId))
263+ then throw("Leasing transaction id doesn't match with registered leasing id")
264+ else if ((ltx.amount != leasingAmt))
265+ then throw(("Impossible to lease less or greater than " + toString(leasingAmt)))
266+ else if ((ltx.fee != MinFEE))
267+ then throw(("Impossible to lease with fee less or greater than " + toString(MinFEE)))
268+ else true
269+ case cltx: LeaseCancelTransaction =>
270+ if (!(leasingPeriodEnded))
271+ then throw("MRT party has not finished yet. Leasing Cancel is not allowed.")
272+ else if (!(sigVerify(tx.bodyBytes, tx.proofs[0], partyOwnerPubKey)))
273+ then throw("Leasing Cancel is allowed to Party Owner only")
274+ else if ((cltx.fee != MinFEE))
275+ then throw(("Impossible to cancle leasing with fee less or greater than " + toString(MinFEE)))
276+ else true
277+ case ttx: TransferTransaction =>
278+ if (!(leasingPeriodEnded))
279+ then throw("MRT party has not finished yet. Transfer is not allowed.")
280+ else if (!(sigVerify(ttx.bodyBytes, ttx.proofs[0], partyOwnerPubKey)))
281+ then throw("Transfer is allowed for Party Owner only.")
282+ else if ((ttx.fee != MinFEE))
283+ then throw(("Impossible to transfer with fee less or greater than " + toString(MinFEE)))
284+ else true
285+ case stx: SetScriptTransaction =>
286+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
287+ case _ =>
288+ false
289+ }
290+ }
291+

github/deemru/w8io/3ef1775 
34.21 ms