tx · 3yw7zFcvuEwctzsT7ES5CVKRjDJXyucA3oZ51hoPxwNn

3MwXptvjuiooCc7j4rKHGpkSJk4JhHx3sCC:  -0.01000000 Waves

2019.10.18 12:31 [725275] smart account 3MwXptvjuiooCc7j4rKHGpkSJk4JhHx3sCC > SELF 0.00000000 Waves

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

github/deemru/w8io/169f3d6 
42.99 ms