tx · 9yz99oN4uNTxZAerFTwFSag9x17iKPRgKtJSeHJNesAM

3MzKq9FC8GAeYxYMGZqPZzrXmRwyyK9eRtU:  -0.01400000 Waves

2020.03.23 15:29 [921997] smart account 3MzKq9FC8GAeYxYMGZqPZzrXmRwyyK9eRtU > SELF 0.00000000 Waves

{ "type": 13, "id": "9yz99oN4uNTxZAerFTwFSag9x17iKPRgKtJSeHJNesAM", "fee": 1400000, "feeAssetId": null, "timestamp": 1584966352193, "version": 1, "sender": "3MzKq9FC8GAeYxYMGZqPZzrXmRwyyK9eRtU", "senderPublicKey": "GXTgD3DifeMCqpyW2oL4fX2vdw49UtqWEesdZpaEuEFB", "proofs": [ "4Z56Ct9BpBgzbpLTgC1vdqoL7vnuw7Kk4yBEEWNHHJ9ohsSdmaRP3iePd9rBWoCW1BarfcoRdnX1oYRxLLyDvoN9" ], "script": "base64:AAIDAAAAAAAAAD4IARIGCgQICAEEEggKBggBAQgBARIGCgQIAQEIEgMKAQgSBwoFCAgBCAESBQoDCAEBEgYKBAgBCAESAwoBCAAAACoAAAAAB2FkZHJlc3MCAAAAIzNNektxOUZDOEdBZVl4WU1HWnFQWnpyWG1Sd3l5SzllUnRVAAAAAA5rZXlFdmVudFByZWZpeAIAAAACZV8AAAAAEmtleUV2ZW50RGF0YVByZWZpeAIAAAAFZGF0YV8AAAAAE2tleUV2ZW50UHJpY2VQcmVmaXgCAAAABnByaWNlXwAAAAASa2V5RXZlbnREYXRlUHJlZml4AgAAAAVkYXRlXwAAAAAWa2V5RXZlbnRBdHRlbmRlZVByZWZpeAIAAAACYV8AAAAAGGtleVByb2R1Y2VyQmFsYW5jZVByZWZpeAIAAAAIYmFsYW5jZV8AAAAAGmtleUV2ZW50QW1vdW50VGlja2V0UHJlZml4AgAAAA5hbW91bnRUaWNrZXRzXwAAAAAWa2V5RXZlbnRDYW5jZWxlZFByZWZpeAIAAAAJY2FuY2VsZWRfAAAAABhrZXlFdmVudE1heFRpY2tldHNQcmVmaXgCAAAABG1heF8AAAAAGGtleUV2ZW50UmVxdWlyZXNJZFByZWZpeAIAAAALcmVxdWlyZXNJZF8AAAAAH2tleUV2ZW50VGlja2V0RGVzY3JpcHRpb25QcmVmaXgCAAAAEnRpY2tldERlc2NyaXB0aW9uXwAAAAAVa2V5RXZlbnRUaWNrZXRzUHJlZml4AgAAAAh0aWNrZXRzXwAAAAAETk9ORQIAAAAEbm9uZQAAAAAKY29tbWlzc2lvbgAAAAAAAAAABQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAADbnVtBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABQAAAANudW0BAAAAC2dldFN0ckJ5S2V5AAAAAQAAAANrZXkEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQUAAAAETk9ORQUAAAADc3RyAQAAAAxnZXRCb29sQnlLZXkAAAABAAAAA2tleQQAAAAEYm9vbAQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEHBQAAAARib29sAQAAAAtnZXRFdmVudEtleQAAAAIAAAAIcHJvZHVjZXIAAAAFdGl0bGUJAAEsAAAAAgUAAAAOa2V5RXZlbnRQcmVmaXgJAAJYAAAAAQkAAfcAAAABCQABmwAAAAEJAAEsAAAAAgUAAAAIcHJvZHVjZXIFAAAABXRpdGxlAQAAAA9nZXRFdmVudERhdGFLZXkAAAABAAAABWV2ZW50CQABLAAAAAIFAAAAEmtleUV2ZW50RGF0YVByZWZpeAUAAAAFZXZlbnQBAAAAEGdldEV2ZW50UHJpY2VLZXkAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAABNrZXlFdmVudFByaWNlUHJlZml4CQABpAAAAAEFAAAACHRpY2tldElkAgAAAAFfBQAAAAVldmVudAEAAAAPZ2V0RXZlbnREYXRlS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABJrZXlFdmVudERhdGVQcmVmaXgFAAAABWV2ZW50AQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAABAAAAAR1c2VyAAAAAmlkAAAACHRpY2tldElkAAAABWV2ZW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAWa2V5RXZlbnRBdHRlbmRlZVByZWZpeAkAAlgAAAABCQAB9wAAAAEJAAGbAAAAAQkAASwAAAACBQAAAAR1c2VyBQAAAAJpZAIAAAABXwkAAaQAAAABBQAAAAh0aWNrZXRJZAIAAAABXwUAAAAFZXZlbnQBAAAAEmdldEV2ZW50QmFsYW5jZUtleQAAAAIAAAAHYWNjb3VudAAAAAVldmVudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAYa2V5UHJvZHVjZXJCYWxhbmNlUHJlZml4BQAAAAdhY2NvdW50AgAAAAFfBQAAAAVldmVudAEAAAAYZ2V0RXZlbnRBbW91bnRUaWNrZXRzS2V5AAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAaa2V5RXZlbnRBbW91bnRUaWNrZXRQcmVmaXgJAAGkAAAAAQUAAAAIdGlja2V0SWQCAAAAAV8FAAAABWV2ZW50AQAAABNnZXRFdmVudENhbmNlbGVkS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABZrZXlFdmVudENhbmNlbGVkUHJlZml4BQAAAAVldmVudAEAAAAVZ2V0RXZlbnRSZXF1aXJlc0lkS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABhrZXlFdmVudFJlcXVpcmVzSWRQcmVmaXgFAAAABWV2ZW50AQAAABVnZXRFdmVudE1heFRpY2tldHNLZXkAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAABhrZXlFdmVudE1heFRpY2tldHNQcmVmaXgJAAGkAAAAAQUAAAAIdGlja2V0SWQCAAAAAV8FAAAABWV2ZW50AQAAABxnZXRFdmVudFRpY2tldERlc2NyaXB0aW9uS2V5AAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAfa2V5RXZlbnRUaWNrZXREZXNjcmlwdGlvblByZWZpeAkAAaQAAAABBQAAAAh0aWNrZXRJZAIAAAABXwUAAAAFZXZlbnQBAAAAEmdldEV2ZW50VGlja2V0c0tleQAAAAEAAAAFZXZlbnQJAAEsAAAAAgUAAAAVa2V5RXZlbnRUaWNrZXRzUHJlZml4BQAAAAVldmVudAEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAABGl0ZW0BAAAADWdldEV2ZW50VmFsdWUAAAACAAAACHByb2R1Y2VyAAAABXRpdGxlCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAALZ2V0RXZlbnRLZXkAAAACBQAAAAhwcm9kdWNlcgUAAAAFdGl0bGUBAAAAEmdldEV2ZW50UHJpY2VWYWx1ZQAAAAIAAAAFZXZlbnQAAAAIdGlja2V0SWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRFdmVudFByaWNlS2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkAQAAABFnZXRFdmVudERhdGVWYWx1ZQAAAAEAAAAFZXZlbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9nZXRFdmVudERhdGVLZXkAAAABBQAAAAVldmVudAEAAAAVZ2V0RXZlbnRBdHRlbmRlZVZhbHVlAAAABAAAAAR1c2VyAAAAAmlkAAAACHRpY2tldElkAAAABWV2ZW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAATZ2V0RXZlbnRBdHRlbmRlZUtleQAAAAQFAAAABHVzZXIFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQBAAAAFGdldEV2ZW50QmFsYW5jZVZhbHVlAAAAAgAAAAdhY2NvdW50AAAABWV2ZW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0RXZlbnRCYWxhbmNlS2V5AAAAAgUAAAAHYWNjb3VudAUAAAAFZXZlbnQBAAAAGmdldEV2ZW50QW1vdW50VGlja2V0c1ZhbHVlAAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldEV2ZW50QW1vdW50VGlja2V0c0tleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAEAAAAVZ2V0RXZlbnRDYW5jZWxlZFZhbHVlAAAAAQAAAAVldmVudAkBAAAADGdldEJvb2xCeUtleQAAAAEJAQAAABNnZXRFdmVudENhbmNlbGVkS2V5AAAAAQUAAAAFZXZlbnQBAAAAF2dldEV2ZW50UmVxdWlyZXNJZFZhbHVlAAAAAQAAAAVldmVudAkBAAAADGdldEJvb2xCeUtleQAAAAEJAQAAABVnZXRFdmVudFJlcXVpcmVzSWRLZXkAAAABBQAAAAVldmVudAEAAAAXZ2V0RXZlbnRNYXhUaWNrZXRzVmFsdWUAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0RXZlbnRNYXhUaWNrZXRzS2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkAQAAAB5nZXRFdmVudFRpY2tldERlc2NyaXB0aW9uVmFsdWUAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAcZ2V0RXZlbnRUaWNrZXREZXNjcmlwdGlvbktleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAEAAAAUZ2V0RXZlbnRUaWNrZXRzVmFsdWUAAAABAAAABWV2ZW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0RXZlbnRUaWNrZXRzS2V5AAAAAQUAAAAFZXZlbnQAAAAIAAAAAWkBAAAAC2NyZWF0ZUV2ZW50AAAABAAAAAV0aXRsZQAAAARkYXRhAAAABGRhdGUAAAAKcmVxdWlyZXNJZAQAAAAPcHJvZHVjZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAABWV2ZW50CQEAAAALZ2V0RXZlbnRLZXkAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABXRpdGxlAwkBAAAAAiE9AAAAAgkBAAAADWdldEV2ZW50VmFsdWUAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABXRpdGxlBQAAAAROT05FCQAAAgAAAAECAAAAF1RoZSBldmVudCBhbHJlYWR5IGV4aXN0AwkAAGYAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAEZGF0ZQkAAAIAAAABAgAAABpEYXRlIGNhbm5vdCBiZSBpbiB0aGUgcGFzdAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAC2dldEV2ZW50S2V5AAAAAgUAAAAPcHJvZHVjZXJBZGRyZXNzBQAAAAV0aXRsZQUAAAAPcHJvZHVjZXJBZGRyZXNzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAPZ2V0RXZlbnREYXRhS2V5AAAAAQUAAAAFZXZlbnQFAAAABGRhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRFdmVudERhdGVLZXkAAAABBQAAAAVldmVudAUAAAAEZGF0ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEV2ZW50UmVxdWlyZXNJZEtleQAAAAEFAAAABWV2ZW50BQAAAApyZXF1aXJlc0lkBQAAAANuaWwAAAABaQEAAAARY3JlYXRlRXZlbnRUaWNrZXQAAAAGAAAABWV2ZW50AAAACHRpY2tldElkAAAABXByaWNlAAAAC2Rlc2NyaXB0aW9uAAAADWFtb3VudFRpY2tldHMAAAAJbWF4QW1vdW50BAAAAA1jYWxsZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAD3Byb2R1Y2VyQWRkcmVzcwkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQDCQEAAAACIT0AAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAADWNhbGxlckFkZHJlc3MJAAACAAAAAQIAAABORXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24ndCBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uAwkAAGYAAAACCQAAZAAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAA5OHACQEAAAARZ2V0RXZlbnREYXRlVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAB9UaGlzIGV2ZW50IGhhcyBhbHJlYWR5IGhhcHBlbmVkAwkBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAF1RoaXMgZXZlbnQgd2FzIGNhbmNlbGVkCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAQZ2V0RXZlbnRQcmljZUtleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAUAAAAFcHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRFdmVudEFtb3VudFRpY2tldHNLZXkAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQFAAAADWFtb3VudFRp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IG1heGltdW0gYW1vdW50IHBlciBhdHRlbmRlZQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAABAUAAAALdXNlckFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQJAABkAAAAAgkBAAAAFWdldEV2ZW50QXR0ZW5kZWVWYWx1ZQAAAAQFAAAAC3VzZXJBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50BQAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRFdmVudEJhbGFuY2VLZXkAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABWV2ZW50CQAAZAAAAAIJAQAAABRnZXRFdmVudEJhbGFuY2VWYWx1ZQAAAAIFAAAAD3Byb2R1Y2VyQWRkcmVzcwUAAAAFZXZlbnQIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0RXZlbnRBbW91bnRUaWNrZXRzS2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkCQAAZQAAAAIFAAAAC3RpY2tldHNMZWZ0BQAAAAZhbW91bnQFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MIBQAAAANwbXQAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAALY2FuY2VsRXZlbnQAAAABAAAABWV2ZW50BAAAAA1jYWxsZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACCQEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABBQAAAAVldmVudAUAAAANY2FsbGVyQWRkcmVzcwkAAAIAAAABAgAAAE5FdmVudCBkb2VzIG5vdCBleGlzdCwgb3IgeW91IGRvbid0IGhhdmUgdGhlIGNyZWRlbnRpYWxzIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24DCQAAZgAAAAIJAABkAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAADk4cAJAQAAABFnZXRFdmVudERhdGVWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAH1RoaXMgZXZlbnQgaGFzIGFscmVhZHkgaGFwcGVuZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRFdmVudENhbmNlbGVkS2V5AAAAAQUAAAAFZXZlbnQGBQAAAANuaWwAAAABaQEAAAAHY2hlY2tpbgAAAAUAAAAFZXZlbnQAAAAPYXR0ZW5kZWVBZGRyZXNzAAAABmFtb3VudAAAAAJpZAAAAAh0aWNrZXRJZAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAADWNhbGxlckFkZHJlc3MJAAACAAAAAQIAAABORXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24ndCBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uAwkAAGYAAAACBQAAAAZhbW91bnQJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAAEBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQJAAACAAAAAQIAAAAeWW91IGRvbid0IGhhdmUgZW5vdWdoIHRpY2tldHMuAwkBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAT1RoaXMgZXZlbnQgd2FzIGNhbmNlbGVkLiBZb3UgY2FuIHJlZGVlbSB5b3VyIHRpY2tldCB1c2luZyByZWZ1bmRUaWNrZXQgZnVuY3Rpb24JAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAABAUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50CQAAZQAAAAIJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAAEBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQFAAAABmFtb3VudAUAAAADbmlsAAAAAWkBAAAAEGVkaXRFdmVudFRpY2tldHMAAAADAAAABWV2ZW50AAAACHRpY2tldElkAAAACW5ld0Ftb3VudAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAADWNhbGxlckFkZHJlc3MJAAACAAAAAQIAAABORXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24ndCBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uAwkAAGYAAAACCQAAZAAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAA5OHACQEAAAARZ2V0RXZlbnREYXRlVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAB9UaGlzIGV2ZW50IGhhcyBhbHJlYWR5IGhhcHBlbmVkAwkBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAH1RoaXMgZXZlbnQgd2FzIGFscmVhZHkgY2FuY2VsZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRFdmVudEFtb3VudFRpY2tldHNLZXkAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQFAAAACW5ld0Ftb3VudAUAAAADbmlsAAAAAWkBAAAADHJlZnVuZFRpY2tldAAAAAQAAAAFZXZlbnQAAAAGYW1vdW50AAAAAmlkAAAACHRpY2tldElkBAAAAA9hdHRlbmRlZUFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMJAAAAAAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAABE5PTkUJAAACAAAAAQIAAAAYVGhlIGV2ZW50IGRvZXMgbm90IGV4aXN0AwkAAGYAAAACBQAAAAZhbW91bnQJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAAEBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQJAAACAAAAAQIAAAA6WW91IGRvbid0IGhhdmUgZW5vdWdoIHJlZ2lzdGVyZWQgdGlja2V0cyB3aXRoIHRoaXMgYWRkcmVzcwMJAABmAAAAAgkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAAAAAAAAOThwAkBAAAAEWdldEV2ZW50RGF0ZVZhbHVlAAAAAQUAAAAFZXZlbnQJAAACAAAAAQIAAAAfVGhpcyBldmVudCBoYXMgYWxyZWFkeSBoYXBwZW5lZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAABAUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50CQAAZQAAAAIJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAAEBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQFAAAABmFtb3VudAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAPYXR0ZW5kZWVBZGRyZXNzCQAAaAAAAAIFAAAABmFtb3VudAkBAAAAFWdldEV2ZW50QXR0ZW5kZWVWYWx1ZQAAAAQFAAAAD2F0dGVuZGVlQWRkcmVzcwUAAAACaWQFAAAACHRpY2tldElkBQAAAAVldmVudAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAQAAAAVldmVudAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAdiYWxhbmNlCQEAAAAUZ2V0RXZlbnRCYWxhbmNlVmFsdWUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVldmVudAMJAQAAAAIhPQAAAAIJAQAAABFnZXRFdmVudFZhbHVlQnlJZAAAAAEFAAAABWV2ZW50BQAAAA1jYWxsZXJBZGRyZXNzCQAAAgAAAAECAAAATkV2ZW50IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSB0aGUgY3JlZGVudGlhbHMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbgMJAABnAAAAAgAAAAAAAAAAAAUAAAAHYmFsYW5jZQkAAAIAAAABAgAAABRJbnN1ZmZpY2llbnQgYmFsYW5jZQMJAQAAABVnZXRFdmVudENhbmNlbGVkVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAABdFdmVudCBoYXMgYmVlbiBjYW5jZWxlZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRFdmVudEJhbGFuY2VLZXkAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVldmVudAAAAAAAAAAAAAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAANY2FsbGVyQWRkcmVzcwkAAGUAAAACBQAAAAdiYWxhbmNlCQAAaQAAAAIJAABoAAAAAgUAAAAHYmFsYW5jZQUAAAAKY29tbWlzc2lvbgAAAAAAAAAAZAUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MJAABpAAAAAgkAAGgAAAACBQAAAAdiYWxhbmNlBQAAAApjb21taXNzaW9uAAAAAAAAAABkBQAAAAR1bml0BQAAAANuaWwAAAAAFrCNvA==", "chainId": 84, "height": 921997, "spentComplexity": 0 } View: original | compacted Prev: none Next: 7e5kbaWoC53nzsaAzvo6h1k4Ns157s1jbtXbxauJG8Zf Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let address = "3MzKq9FC8GAeYxYMGZqPZzrXmRwyyK9eRtU"
5+
6+let keyEventPrefix = "e_"
7+
8+let keyEventDataPrefix = "data_"
9+
10+let keyEventPricePrefix = "price_"
11+
12+let keyEventDatePrefix = "date_"
13+
14+let keyEventAttendeePrefix = "a_"
15+
16+let keyProducerBalancePrefix = "balance_"
17+
18+let keyEventAmountTicketPrefix = "amountTickets_"
19+
20+let keyEventCanceledPrefix = "canceled_"
21+
22+let keyEventMaxTicketsPrefix = "max_"
23+
24+let keyEventRequiresIdPrefix = "requiresId_"
25+
26+let keyEventTicketDescriptionPrefix = "ticketDescription_"
27+
28+let keyEventTicketsPrefix = "tickets_"
29+
30+let NONE = "none"
31+
32+let commission = 5
33+
34+func getNumberByKey (key) = {
35+ let num = match getInteger(this, key) {
36+ case a: Int =>
37+ a
38+ case _ =>
39+ 0
40+ }
41+ num
42+ }
43+
44+
45+func getStrByKey (key) = {
46+ let str = match getString(this, key) {
47+ case a: String =>
48+ a
49+ case _ =>
50+ NONE
51+ }
52+ str
53+ }
54+
55+
56+func getBoolByKey (key) = {
57+ let bool = match getBoolean(this, key) {
58+ case a: Boolean =>
59+ a
60+ case _ =>
61+ false
62+ }
63+ bool
64+ }
65+
66+
67+func getEventKey (producer,title) = (keyEventPrefix + toBase58String(sha256(toBytes((producer + title)))))
68+
69+
70+func getEventDataKey (event) = (keyEventDataPrefix + event)
71+
72+
73+func getEventPriceKey (event,ticketId) = (((keyEventPricePrefix + toString(ticketId)) + "_") + event)
74+
75+
76+func getEventDateKey (event) = (keyEventDatePrefix + event)
77+
78+
79+func getEventAttendeeKey (user,id,ticketId,event) = (((((keyEventAttendeePrefix + toBase58String(sha256(toBytes((user + id))))) + "_") + toString(ticketId)) + "_") + event)
80+
81+
82+func getEventBalanceKey (account,event) = (((keyProducerBalancePrefix + account) + "_") + event)
83+
84+
85+func getEventAmountTicketsKey (event,ticketId) = (((keyEventAmountTicketPrefix + toString(ticketId)) + "_") + event)
86+
87+
88+func getEventCanceledKey (event) = (keyEventCanceledPrefix + event)
89+
90+
91+func getEventRequiresIdKey (event) = (keyEventRequiresIdPrefix + event)
92+
93+
94+func getEventMaxTicketsKey (event,ticketId) = (((keyEventMaxTicketsPrefix + toString(ticketId)) + "_") + event)
95+
96+
97+func getEventTicketDescriptionKey (event,ticketId) = (((keyEventTicketDescriptionPrefix + toString(ticketId)) + "_") + event)
98+
99+
100+func getEventTicketsKey (event) = (keyEventTicketsPrefix + event)
101+
102+
103+func getEventValueById (item) = getStrByKey(item)
104+
105+
106+func getEventValue (producer,title) = getStrByKey(getEventKey(producer, title))
107+
108+
109+func getEventPriceValue (event,ticketId) = getNumberByKey(getEventPriceKey(event, ticketId))
110+
111+
112+func getEventDateValue (event) = getNumberByKey(getEventDateKey(event))
113+
114+
115+func getEventAttendeeValue (user,id,ticketId,event) = getNumberByKey(getEventAttendeeKey(user, id, ticketId, event))
116+
117+
118+func getEventBalanceValue (account,event) = getNumberByKey(getEventBalanceKey(account, event))
119+
120+
121+func getEventAmountTicketsValue (event,ticketId) = getNumberByKey(getEventAmountTicketsKey(event, ticketId))
122+
123+
124+func getEventCanceledValue (event) = getBoolByKey(getEventCanceledKey(event))
125+
126+
127+func getEventRequiresIdValue (event) = getBoolByKey(getEventRequiresIdKey(event))
128+
129+
130+func getEventMaxTicketsValue (event,ticketId) = getNumberByKey(getEventMaxTicketsKey(event, ticketId))
131+
132+
133+func getEventTicketDescriptionValue (event,ticketId) = getStrByKey(getEventTicketDescriptionKey(event, ticketId))
134+
135+
136+func getEventTicketsValue (event) = getNumberByKey(getEventTicketsKey(event))
137+
138+
139+@Callable(i)
140+func createEvent (title,data,date,requiresId) = {
141+ let producerAddress = toBase58String(i.caller.bytes)
142+ let event = getEventKey(producerAddress, title)
143+ if ((getEventValue(producerAddress, title) != NONE))
144+ then throw("The event already exist")
145+ else if ((lastBlock.timestamp > date))
146+ then throw("Date cannot be in the past")
147+ else WriteSet([DataEntry(getEventKey(producerAddress, title), producerAddress), DataEntry(getEventDataKey(event), data), DataEntry(getEventDateKey(event), date), DataEntry(getEventRequiresIdKey(event), requiresId)])
148+ }
149+
150+
151+
152+@Callable(i)
153+func createEventTicket (event,ticketId,price,description,amountTickets,maxAmount) = {
154+ let callerAddress = toBase58String(i.caller.bytes)
155+ let producerAddress = getEventValueById(event)
156+ if ((producerAddress != callerAddress))
157+ then throw("Event does not exist, or you don't have the credentials to perform this action")
158+ else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
159+ then throw("This event has already happened")
160+ else if (getEventCanceledValue(event))
161+ then throw("This event was canceled")
162+ else WriteSet([DataEntry(getEventPriceKey(event, ticketId), price), DataEntry(getEventAmountTicketsKey(event, ticketId), amountTickets), DataEntry(getEventMaxTicketsKey(event, ticketId), maxAmount), DataEntry(getEventTicketDescriptionKey(event, ticketId), description)])
163+ }
164+
165+
166+
167+@Callable(i)
168+func purchase (event,ticketId,amount,id) = {
169+ let pmt = extract(i.payment)
170+ if (isDefined(pmt.assetId))
171+ then throw("can use WAVES only at the moment")
172+ else {
173+ let userAddress = toBase58String(i.caller.bytes)
174+ let price = getEventPriceValue(event, ticketId)
175+ let producerAddress = getEventValueById(event)
176+ let ticketsLeft = getEventAmountTicketsValue(event, ticketId)
177+ let attendeeKey = ""
178+ if ((producerAddress == NONE))
179+ then throw("Event does not exist")
180+ else if (((price * amount) > pmt.amount))
181+ then throw(((("You did not send enough money. You sent: " + toString(pmt.amount)) + ". Expected: ") + toString((amount * price))))
182+ else if ((pmt.amount > (price * amount)))
183+ then throw(((("You send too much money. You sent: " + toString(pmt.amount)) + ". Total price: ") + toString((amount * price))))
184+ else if ((0 > (ticketsLeft - amount)))
185+ then throw("Not enough tickets left")
186+ else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
187+ then throw("This event has already happened")
188+ else if (getEventCanceledValue(event))
189+ then throw("This event was canceled")
190+ else if (if (getEventRequiresIdValue(event))
191+ then (id == "")
192+ else false)
193+ then throw("This event requires that you register with a personal ID")
194+ else if ((getEventMaxTicketsValue(event, ticketId) > (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)))
195+ then throw("Amount of Tickets exceeds maximum amount per attendee")
196+ else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(userAddress, id, ticketId, event), (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)), DataEntry(getEventBalanceKey(producerAddress, event), (getEventBalanceValue(producerAddress, event) + pmt.amount)), DataEntry(getEventAmountTicketsKey(event, ticketId), (ticketsLeft - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(address), pmt.amount, unit)]))
197+ }
198+ }
199+
200+
201+
202+@Callable(i)
203+func cancelEvent (event) = {
204+ let callerAddress = toBase58String(i.caller.bytes)
205+ if ((getEventValueById(event) != callerAddress))
206+ then throw("Event does not exist, or you don't have the credentials to perform this action")
207+ else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
208+ then throw("This event has already happened")
209+ else WriteSet([DataEntry(getEventCanceledKey(event), true)])
210+ }
211+
212+
213+
214+@Callable(i)
215+func checkin (event,attendeeAddress,amount,id,ticketId) = {
216+ let callerAddress = toBase58String(i.caller.bytes)
217+ if ((getEventValueById(event) != callerAddress))
218+ then throw("Event does not exist, or you don't have the credentials to perform this action")
219+ else if ((amount > getEventAttendeeValue(attendeeAddress, id, ticketId, event)))
220+ then throw("You don't have enough tickets.")
221+ else if (getEventCanceledValue(event))
222+ then throw("This event was canceled. You can redeem your ticket using refundTicket function")
223+ else WriteSet([DataEntry(getEventAttendeeKey(attendeeAddress, id, ticketId, event), (getEventAttendeeValue(attendeeAddress, id, ticketId, event) - amount))])
224+ }
225+
226+
227+
228+@Callable(i)
229+func editEventTickets (event,ticketId,newAmount) = {
230+ let callerAddress = toBase58String(i.caller.bytes)
231+ if ((getEventValueById(event) != callerAddress))
232+ then throw("Event does not exist, or you don't have the credentials to perform this action")
233+ else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
234+ then throw("This event has already happened")
235+ else if (getEventCanceledValue(event))
236+ then throw("This event was already canceled")
237+ else WriteSet([DataEntry(getEventAmountTicketsKey(event, ticketId), newAmount)])
238+ }
239+
240+
241+
242+@Callable(i)
243+func refundTicket (event,amount,id,ticketId) = {
244+ let attendeeAddress = toBase58String(i.caller.bytes)
245+ if ((getEventValueById(event) == NONE))
246+ then throw("The event does not exist")
247+ else if ((amount > getEventAttendeeValue(attendeeAddress, id, ticketId, event)))
248+ then throw("You don't have enough registered tickets with this address")
249+ else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
250+ then throw("This event has already happened")
251+ else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(attendeeAddress, id, ticketId, event), (getEventAttendeeValue(attendeeAddress, id, ticketId, event) - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(attendeeAddress), (amount * getEventAttendeeValue(attendeeAddress, id, ticketId, event)), unit)]))
252+ }
253+
254+
255+
256+@Callable(i)
257+func withdraw (event) = {
258+ let callerAddress = toBase58String(i.caller.bytes)
259+ let balance = getEventBalanceValue(callerAddress, event)
260+ if ((getEventValueById(event) != callerAddress))
261+ then throw("Event does not exist, or you don't have the credentials to perform this action")
262+ else if ((0 >= balance))
263+ then throw("Insufficient balance")
264+ else if (getEventCanceledValue(event))
265+ then throw("Event has been canceled")
266+ else ScriptResult(WriteSet([DataEntry(getEventBalanceKey(callerAddress, event), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddress), (balance - ((balance * commission) / 100)), unit), ScriptTransfer(addressFromStringValue(address), ((balance * commission) / 100), unit)]))
267+ }
268+
269+

github/deemru/w8io/169f3d6 
48.01 ms