2020.09.28 21:16 [2261195] smart account 3P8qJyxUqizCWWtEn2zsLZVPzZAjdNGppB1 > SELF 0.00000000 Waves

{ "type": 13, "id": "DAp3FXNwCmmFvqGTfsjkuTPjS4H5g5pMowgYRpeBvdt", "fee": 1000000, "feeAssetId": null, "timestamp": 1601317004512, "version": 1, "sender": "3P8qJyxUqizCWWtEn2zsLZVPzZAjdNGppB1", "senderPublicKey": "HGVrLrtmJhSigh8z7HZvZPThVzQpT5YsqPDaQia6EreW", "proofs": [ "3XibKa7CyD4ySpKkWWRSXgvQ4wMwG3bcPoukyLrMq9Eb1mphsNG3MwagGVPFdeGFv4RFhz9U8wzGESt78hcmeH71" ], "script": "base64:AAIEAAAAAAAAABYIAhIDCgEIEg0KCwgBAgECAQIBAgECAAAAKAEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkAAAAAAAAAAAABAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AgAAAAABAAAACmtleUZhY3RvcnkAAAAAAgAAAAslc19fZmFjdG9yeQEAAAAIa2V5UHJpY2UAAAABAAAADGN1cnJlbmN5Q29kZQkAASwAAAACAgAAAA0lcyVzX19wcmljZV9fBQAAAAxjdXJyZW5jeUNvZGUBAAAADWtleUxhc3RIZWlnaHQAAAABAAAADGN1cnJlbmN5Q29kZQkAASwAAAACAgAAABIlcyVzX19sYXN0SGVpZ2h0X18FAAAADGN1cnJlbmN5Q29kZQEAAAAQa2V5UHJpY2VCeUhlaWdodAAAAAIAAAAMY3VycmVuY3lDb2RlAAAAAWgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFyVzJXMlZF9fcHJpY2VCeUhlaWdodF9fBQAAAAxjdXJyZW5jeUNvZGUCAAAAAl9fCQABpAAAAAEFAAAAAWgBAAAABmtleUlkeAAAAAEAAAAMY3VycmVuY3lDb2RlCQABLAAAAAICAAAAEiVzJXNfX2lkeEN1cnJlbnRfXwUAAAAMY3VycmVuY3lDb2RlAQAAAA1rZXlJZHgySGVpZ2h0AAAAAgAAAAxjdXJyZW5jeUNvZGUAAAADaWR4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABQlcyVzJWRfX2lkeDJIZWlnaHRfXwUAAAAMY3VycmVuY3lDb2RlAgAAAAJfXwkAAaQAAAABBQAAAANpZHgBAAAADWtleUhlaWdodDJJZHgAAAACAAAADGN1cnJlbmN5Q29kZQAAAAFoCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABQlcyVzJWRfX2hlaWdodDJJZHhfXwUAAAAMY3VycmVuY3lDb2RlAgAAAAJfXwkAAaQAAAABBQAAAAFoAQAAAAxrZXlJc0Jsb2NrZWQAAAAAAgAAAA0lc19faXNCbG9ja2VkAQAAABJrZXlJc0Jsb2NrZWRTZW5kZXIAAAAAAgAAABclcyVzX19pc0Jsb2NrZWRfX3NlbmRlcgEAAAASa2V5SXNCbG9ja2VkUmVhc29uAAAAAAIAAAAXJXMlc19faXNCbG9ja2VkX19yZWFzb24BAAAACmtleU9yYWNsZXMAAAAAAgAAABUlcyVzX19jb25maWdfX29yYWNsZXMBAAAAEmtleUJsYWNrU3dhcm1QcmljZQAAAAEAAAABaAkAASwAAAACAgAAACQlcyVzJWRfX2lzQmxvY2tlZF9fYmxhY2tTd2FybVByaWNlX18JAAGkAAAAAQUAAAABaAAAAAAKZmFjdG9yeUFjYwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMJAQAAAAprZXlGYWN0b3J5AAAAAAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAASTm8gY29uZmlnIGF0IHRoaXM9CQAEJQAAAAEFAAAABHRoaXMCAAAACSBmb3Iga2V5PQkBAAAACmtleUZhY3RvcnkAAAAAAQAAABJrZXlGYWN0b3J5QXNzZXRDZmcAAAABAAAAD2Fzc2V0QWRkcmVzc1N0cgkAASwAAAACCQABLAAAAAICAAAAEyVzJXMlc19fZGVmb0Fzc2V0X18FAAAAD2Fzc2V0QWRkcmVzc1N0cgIAAAAIX19jb25maWcBAAAAIGtleUZhY3RvcnlEZWZvQWRkcmVzc0J5QXNzZXRDb2RlAAAAAQAAAAlhc3NldENvZGUJAAEsAAAAAgkAASwAAAACAgAAABMlcyVzJXNfX2RlZm9Bc3NldF9fBQAAAAlhc3NldENvZGUCAAAAFF9fYWRkcmVzc0J5QXNzZXRDb2RlAAAAABBJZHhEZWZvQXNzZXRDb2RlAAAAAAAAAAABAAAAAA5JZHhEZWZvQXNzZXRJZAAAAAAAAAAAAgAAAAASSWR4RGVmb0Fzc2V0U3RhdHVzAAAAAAAAAAADAAAAABBJZHhQcmljZURlY2ltYWxzAAAAAAAAAAAEAAAAAA5JZHhCYXNlQXNzZXRJZAAAAAAAAAAABQAAAAAYSWR4T3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAAAAAAAAGAAAAAA5JZHhNaW5Jbml0UG9vbAAAAAAAAAAABwAAAAAVSWR4UHJpY2VPcmFjbGVBZGRyZXNzAAAAAAAAAAAIAAAAABBJZHhNaW5CdXlQYXltZW50AAAAAAAAAAAJAAAAABFJZHhNaW5TZWxsUGF5bWVudAAAAAAAAAAACgAAAAASSWR4QnV5TG9ja0ludGVydmFsAAAAAAAAAAALAAAAABNJZHhTZWxsTG9ja0ludGVydmFsAAAAAAAAAAAMAAAAABBJZHhCdXlGZWVQZXJjZW50AAAAAAAAAAANAAAAABFJZHhTZWxsRmVlUGVyY2VudAAAAAAAAAAADgEAAAAcZmFjdG9yeVJlYWRBc3NldENmZ0J5QWRkcmVzcwAAAAEAAAAPYXNzZXRBZGRyZXNzU3RyCQAEtQAAAAIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjCQEAAAASa2V5RmFjdG9yeUFzc2V0Q2ZnAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABVObyBjb25maWcgYXQgZmFjdG9yeT0JAAQlAAAAAQUAAAAKZmFjdG9yeUFjYwIAAAAJIGZvciBrZXk9CQEAAAASa2V5RmFjdG9yeUFzc2V0Q2ZnAAAAAQUAAAAPYXNzZXRBZGRyZXNzU3RyAgAAAAJfXwEAAAAZZmFjdG9yeVJlYWRBc3NldENmZ0J5Q29kZQAAAAEAAAAJYXNzZXRDb2RlBAAAAA9hc3NldEFkZHJlc3NTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAApmYWN0b3J5QWNjCQEAAAAga2V5RmFjdG9yeURlZm9BZGRyZXNzQnlBc3NldENvZGUAAAABBQAAAAlhc3NldENvZGUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFU5vIGNvbmZpZyBhdCBmYWN0b3J5PQkABCUAAAABBQAAAApmYWN0b3J5QWNjAgAAAAkgZm9y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ZQkAAZsAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAQV0FWRVNERUZPUFJFRklYXwUAAAAMY3VycmVuY3lDb2RlAgAAAAFfCQABpAAAAAEFAAAABmhlaWdodAIAAAABXwkAAaQAAAABBQAAAAVwcmljZQAAAAIAAAABaQEAAAAVY2FsbEVtZXJnZW5jeVNodXRkb3duAAAAAQAAAAZyZWFzb24EAAAAGkF1dG9FbWVyZ2VuY3lPcmFjbGVBZGRyZXNzAgAAACMzUDZYdG4zYzI0WWhNemVmV1VvZVJ6NjN5WlE3dmRtRVdvcAQAAAANY2FsbGVyQWRkcmVzcwkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQEAAAACIT0AAAACBQAAABpBdXRvRW1lcmdlbmN5T3JhY2xlQWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwkAAAIAAAABAgAAACZjYWxsZXIgbXVzdCBiZSBvbmUgYW4gZW1lcmdlbmN5IG9yYWNsZQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAADGtleUlzQmxvY2tlZAAAAAAGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlJc0Jsb2NrZWRTZW5kZXIAAAAABQAAAA1jYWxsZXJBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlJc0Jsb2NrZWRSZWFzb24AAAAABQAAAAZyZWFzb24FAAAAA25pbAAAAAFpAQAAABRmaW5hbGl6ZUN1cnJlbnRQcmljZQAAAAsAAAAMY3VycmVuY3lDb2RlAAAABnByaWNlMQAAAAVzaWduMQAAAAZwcmljZTIAAAAFc2lnbjIAAAAGcHJpY2UzAAAABXNpZ24zAAAABnByaWNlNAAAAAVzaWduNAAAAAZwcmljZTUAAAAFc2lnbjUEAAAABXByaWNlCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAAhrZXlQcmljZQAAAAEFAAAADGN1cnJlbmN5Q29kZQAAAAAAAAAAAAQAAAADaWR4CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAAAZrZXlJZHgAAAABBQAAAAxjdXJyZW5jeUNvZGUAAAAAAAAAAAAEAAAAC2N1cnJlbmN5Q2ZnCAkBAAAAGWZhY3RvcnlSZWFkQXNzZXRDZmdCeUNvZGUAAAABBQAAAAxjdXJyZW5jeUNvZGUAAAACXzIDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkBAAAAAiE9AAAAAgkAAZEAAAACBQAAAAtjdXJyZW5jeUNmZwUAAAASSWR4RGVmb0Fzc2V0U3RhdHVzAgAAAAZJU1NVRUQJAAACAAAAAQkAASwAAAACCQABLAAAAAIFAAAADGN1cnJlbmN5Q29kZQIAAAAhIGhhcyBub3QgYmVlbiBpc3N1ZWQgeWV0OiBzdGF0dXM9CQABkQAAAAIFAAAAC2N1cnJlbmN5Q2ZnBQAAABJJZHhEZWZvQXNzZXRTdGF0dXMDCQEAAAACIT0AAAACCQEAAAARcmVhZFByaWNlQnlIZWlnaHQAAAACBQAAAAxjdXJyZW5jeUNvZGUFAAAABmhlaWdodAAAAAAAAAAAAAkAAAIAAAABAgAAAA93YWl0IG5leHQgYmxvY2sDCQEAAAACIT0AAAACCQABkQAAAAIFAAAAEXB1YktleU9yYWNsZXNMaXN0CQAAagAAAAIFAAAABmhlaWdodAAAAAAAAAAABQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAaT3V0IG9mIHR1cm4gZmluYWxpemF0aW9uOiAJAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAB0gYmxvY2sgc2hvdWxkIGJlIGZpbmFsaXplIGJ5IAkAAZEAAAACBQAAABFwdWJLZXlPcmFjbGVzTGlzdAkAAGoAAAACBQAAAAZoZWlnaHQAAAAAAAAAAAUEAAAABnByaWNlcwkABEwAAAACAwkACcQAAAADCQEAAAASZm9ybWF0dGluZ1ByaWNlTXNnAAAAAgUAAAAMY3VycmVuY3lDb2RlBQAAAAZwcmljZTEFAAAABXNpZ24xCQACWQAAAAEJAAGRAAAAAgUAAAARcHViS2V5T3JhY2xlc0xpc3QAAAAAAAAAAAAFAAAABnByaWNlMQAAAAAAAAAAAAkABEwAAAACAwkACcQAAAADCQEAAAASZm9ybWF0dGluZ1ByaWNlTXNnAAAAAgUAAAAMY3VycmVuY3lDb2RlBQAAAAZwcmljZTIFAAAABXNpZ24yCQACWQAAAAEJAAGRAAAAAgUAAAARcHViS2V5T3JhY2xlc0xpc3QAAAAAAAAAAAEFAAAABnByaWNlMgAAAAAAAAAAAAkABEwAAAACAwkACcQAAAADCQEAAAASZm9ybWF0dGluZ1ByaWNlTXNnAAAAAgUAAAAMY3VycmVuY3lDb2RlBQAAAAZwcmljZTMFAAAABXNpZ24zCQACWQAAAAEJAAGRAAAAAgUAAAARcHViS2V5T3JhY2xlc0xpc3QAAAAAAAAAAAIFAAAABnByaWNlMwAAAAAAAAAAAAkABEwAAAACAwkACcQAAAADCQEAAAASZm9ybWF0dGluZ1ByaWNlTXNnAAAAAgUAAAAMY3VycmVuY3lDb2RlBQAAAAZwcmljZTQFAAAABXNpZ240CQACWQAAAAEJAAGRAAAAAgUAAAARcHViS2V5T3JhY2xlc0xpc3QAAAAAAAAAAAMFAAAABnByaWNlNAAAAAAAAAAAAAkABEwAAAACAwkACcQAAAADCQEAAAASZm9ybWF0dGluZ1ByaWNlTXNnAAAAAgUAAAAMY3VycmVuY3lDb2RlBQAAAAZwcmljZTUFAAAABXNpZ241CQACWQAAAAEJAAGRAAAAAgUAAAARcHViS2V5T3JhY2xlc0xpc3QAAAAAAAAAAAQFAAAABnByaWNlNQAAAAAAAAAAAAUAAAADbmlsBAAAAA56ZXJvUHJpY2VDb3VudAkAAGQAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACAwkAAAAAAAACCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAMJAAAAAAAAAgkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAADCQAAAAAAAAIJAAGRAAAAAgUAAAAGcHJpY2VzAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAwkAAAAAAAACCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAMJAAAAAAAAAgkAAZEAAAACBQAAAAZwcmljZXMAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAADCQAAZwAAAAIFAAAADnplcm9QcmljZUNvdW50BQAAAA5taW5QcmljZXNDb3VudAkAAAIAAAABCQABLAAAAAIJAAGkAAAAAQUAAAAObWluUHJpY2VzQ291bnQCAAAAHyBwcmljZXMgb3IgbW9yZSBhcmUgZXF1YWxzIHRvIDAEAAAADXByaWNlc0luUmFuZ2UJAQAAABFmaW5kUHJpY2VzSW5SYW5nZQAAAAEFAAAABnByaWNlcwQAAAATcHJpY2VQcm92aWRpbmdDb3VudAkAAZAAAAABBQAAAA1wcmljZXNJblJhbmdlAwkAAGYAAAACBQAAAA5taW5QcmljZXNDb3VudAUAAAATcHJpY2VQcm92aWRpbmdDb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADpDb3VsZCBub3QgZmluYWxpemUgcHJpY2UgYmVjYXVzZSBvZiBiaWcgdmFyaWF0aW9uOiBoZWlnaHQ9CQABpAAAAAEFAAAABmhlaWdodAIAAAABCgkAAZEAAAACBQAAABFwdWJLZXlPcmFjbGVzTGlzdAAAAAAAAAAAAAIAAAABPQkAAaQAAAABCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAAAAIAAAABCgkAAZEAAAACBQAAABFwdWJLZXlPcmFjbGVzTGlzdAAAAAAAAAAAAQIAAAABPQkAAaQAAAABCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAAAQIAAAABCgkAAZEAAAACBQAAABFwdWJLZXlPcmFjbGVzTGlzdAAAAAAAAAAAAgIAAAABPQkAAaQAAAABCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAAAgIAAAABCgkAAZEAAAACBQAAABFwdWJLZXlPcmFjbGVzTGlzdAAAAAAAAAAAAwIAAAABPQkAAaQAAAABCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAAAwIAAAABCgkAAZEAAAACBQAAABFwdWJLZXlPcmFjbGVzTGlzdAAAAAAAAAAABAIAAAABPQkAAaQAAAABCQABkQAAAAIFAAAABnByaWNlcwAAAAAAAAAABAQAAAAEc3VtMQkAAGQAAAACCQAAZAAAAAIJAAGRAAAAAgUAAAAGcHJpY2VzCQABkQAAAAIFAAAADXByaWNlc0luUmFuZ2UAAAAAAAAAAAAJAAGRAAAAAgUAAAAGcHJpY2VzCQABkQAAAAIFAAAADXByaWNlc0luUmFuZ2UAAAAAAAAAAAEJAAGRAAAAAgUAAAAGcHJpY2VzCQABkQAAAAIFAAAADXByaWNlc0luUmFuZ2UAAAAAAAAAAAIEAAAABHN1bTIDCQAAZwAAAAIFAAAAE3ByaWNlUHJvdmlkaW5nQ291bnQAAAAAAAAAAAQJAABkAAAAAgUAAAAEc3VtMQkAAZEAAAACBQAAAAZwcmljZXMJAAGRAAAAAgUAAAANcHJpY2VzSW5SYW5nZQAAAAAAAAAAAwUAAAAEc3VtMQQAAAAIcHJpY2VTdW0DCQAAZwAAAAIFAAAAE3ByaWNlUHJvdmlkaW5nQ291bnQAAAAAAAAAAAUJAABkAAAAAgUAAAAEc3VtMgkAAZEAAAACBQAAAAZwcmljZXMJAAGRAAAAAgUAAAANcHJpY2VzSW5SYW5nZQAAAAAAAAAABAUAAAAEc3VtMgMJAABnAAAAAgUAAAATcHJpY2VQcm92aWRpbmdDb3VudAAAAAAAAAAABgkAAAIAAAABAgAAAB5JbnZhbGlkIHByaWNlc0luUmFuZ2UgY3JlYXRpb24EAAAACG5ld1ByaWNlCQAAaQAAAAIFAAAACHByaWNlU3VtBQAAABNwcmljZVByb3ZpZGluZ0NvdW50AwMJAQAAAAIhPQAAAAIFAAAABXByaWNlAAAAAAAAAAAAAwkAAGcAAAACBQAAAAhuZXdQcmljZQkAAGQAAAACBQAAAAVwcmljZQkAAGkAAAACCQAAaAAAAAIFAAAABXByaWNlBQAAABJwZXJjZW50UHJpY2VPZmZzZXQAAAAAAAAAAGQGCQAAZwAAAAIJAABlAAAAAgUAAAAFcHJpY2UJAABpAAAAAgkAAGgAAAACBQAAAAVwcmljZQUAAAAScGVyY2VudFByaWNlT2Zmc2V0AAAAAAAAAABkBQAAAAhuZXdQcmljZQcEAAAABnJlYXNvbgIAAAA/YXV0b21hdGljIGVtZXJnZW5jeSBzaHV0ZG93biBiZWNhdXNlIG9mIGxhcmdlIHByaWNlIHZhcmlhYmlsaXR5CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAMa2V5SXNCbG9ja2VkAAAAAAYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUlzQmxvY2tlZFNlbmRlcgAAAAAJAAQlAAAAAQUAAAAEdGhpcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5SXNCbG9ja2VkUmVhc29uAAAAAAUAAAAGcmVhc29uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASa2V5QmxhY2tTd2FybVByaWNlAAAAAQUAAAAGaGVpZ2h0BQAAAAhuZXdQcmljZQUAAAADbmlsBAAAAAZuZXdJZHgJAABkAAAAAgUAAAADaWR4AAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAIa2V5UHJpY2UAAAABBQAAAAxjdXJyZW5jeUNvZGUFAAAACG5ld1ByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5TGFzdEhlaWdodAAAAAEFAAAADGN1cnJlbmN5Q29kZQUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAQa2V5UHJpY2VCeUhlaWdodAAAAAIFAAAADGN1cnJlbmN5Q29kZQUAAAAGaGVpZ2h0BQAAAAhuZXdQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAABmtleUlkeAAAAAEFAAAADGN1cnJlbmN5Q29kZQUAAAAGbmV3SWR4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAANa2V5SWR4MkhlaWdodAAAAAIFAAAADGN1cnJlbmN5Q29kZQUAAAAGbmV3SWR4BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA1rZXlIZWlnaHQySWR4AAAAAgUAAAAMY3VycmVuY3lDb2RlBQAAAAZoZWlnaHQFAAAABm5ld0lkeAUAAAADbmlsAAAAAFtR/6w=", "chainId": 87, "height": 2261195, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: HqesgWUfSxzmXVVUpxRTBd7wtWghGAfy1GDZjvEdETiZ Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func getNumberByAddressAndKey (address,key) = valueOrElse(getInteger(addressFromStringValue(address), key), 0)
5+
6+
7+func getStringByAddressAndKey (address,key) = valueOrElse(getString(address, key), "")
8+
9+
10+func keyFactory () = "%s__factory"
11+
12+
13+func keyPrice (currencyCode) = ("%s%s__price__" + currencyCode)
14+
15+
16+func keyLastHeight (currencyCode) = ("%s%s__lastHeight__" + currencyCode)
17+
18+
19+func keyPriceByHeight (currencyCode,h) = ((("%s%s%d__priceByHeight__" + currencyCode) + "__") + toString(h))
20+
21+
22+func keyIdx (currencyCode) = ("%s%s__idxCurrent__" + currencyCode)
23+
24+
25+func keyIdx2Height (currencyCode,idx) = ((("%s%s%d__idx2Height__" + currencyCode) + "__") + toString(idx))
26+
27+
28+func keyHeight2Idx (currencyCode,h) = ((("%s%s%d__height2Idx__" + currencyCode) + "__") + toString(h))
29+
30+
31+func keyIsBlocked () = "%s__isBlocked"
32+
33+
34+func keyIsBlockedSender () = "%s%s__isBlocked__sender"
35+
36+
37+func keyIsBlockedReason () = "%s%s__isBlocked__reason"
38+
39+
40+func keyOracles () = "%s%s__config__oracles"
41+
42+
43+func keyBlackSwarmPrice (h) = ("%s%s%d__isBlocked__blackSwarmPrice__" + toString(h))
44+
45+
46+let factoryAcc = addressFromStringValue(valueOrErrorMessage(getString(this, keyFactory()), ((("No config at this=" + toString(this)) + " for key=") + keyFactory())))
47+
48+func keyFactoryAssetCfg (assetAddressStr) = (("%s%s%s__defoAsset__" + assetAddressStr) + "__config")
49+
50+
51+func keyFactoryDefoAddressByAssetCode (assetCode) = (("%s%s%s__defoAsset__" + assetCode) + "__addressByAssetCode")
52+
53+
54+let IdxDefoAssetCode = 1
55+
56+let IdxDefoAssetId = 2
57+
58+let IdxDefoAssetStatus = 3
59+
60+let IdxPriceDecimals = 4
61+
62+let IdxBaseAssetId = 5
63+
64+let IdxOverCollateralPercent = 6
65+
66+let IdxMinInitPool = 7
67+
68+let IdxPriceOracleAddress = 8
69+
70+let IdxMinBuyPayment = 9
71+
72+let IdxMinSellPayment = 10
73+
74+let IdxBuyLockInterval = 11
75+
76+let IdxSellLockInterval = 12
77+
78+let IdxBuyFeePercent = 13
79+
80+let IdxSellFeePercent = 14
81+
82+func factoryReadAssetCfgByAddress (assetAddressStr) = split(valueOrErrorMessage(getString(factoryAcc, keyFactoryAssetCfg(assetAddressStr)), ((("No config at factory=" + toString(factoryAcc)) + " for key=") + keyFactoryAssetCfg(assetAddressStr))), "__")
83+
84+
85+func factoryReadAssetCfgByCode (assetCode) = {
86+ let assetAddressStr = valueOrErrorMessage(getString(factoryAcc, keyFactoryDefoAddressByAssetCode(assetCode)), ((("No config at factory=" + toString(factoryAcc)) + " for key=") + keyFactoryDefoAddressByAssetCode(assetCode)))
87+ $Tuple2(assetAddressStr, factoryReadAssetCfgByAddress(assetAddressStr))
88+ }
89+
90+
91+func readPriceByHeight (currencyCode,h) = valueOrElse(getInteger(this, keyPriceByHeight(currencyCode, h)), 0)
92+
93+
94+let isBlocked = valueOrElse(getBoolean(this, keyIsBlocked()), false)
95+
96+let minPricesCount = 3
97+
98+let percentPriceOffset = 5
99+
100+let pubKeyOraclesList = split(valueOrErrorMessage(getString(this, keyOracles()), ("No oracles specified by key=" + keyOracles())), ",")
101+
102+func findPricesInRange (prices) = {
103+ let minPercentBound = 90
104+ let maxPercentBound = 110
105+ let p0 = prices[0]
106+ let check0 = if ((0 >= prices[0]))
107+ then [0]
108+ else {
109+ let p01 = ((prices[1] * 100) / p0)
110+ let p02 = ((prices[2] * 100) / p0)
111+ let p03 = ((prices[3] * 100) / p0)
112+ let p04 = ((prices[4] * 100) / p0)
113+ let array1 = if (if ((maxPercentBound > p01))
114+ then (p01 > minPercentBound)
115+ else false)
116+ then [1, 0]
117+ else [0]
118+ let array2 = if (if ((maxPercentBound > p02))
119+ then (p02 > minPercentBound)
120+ else false)
121+ then 2 :: array1
122+ else array1
123+ let array3 = if (if ((maxPercentBound > p03))
124+ then (p03 > minPercentBound)
125+ else false)
126+ then 3 :: array2
127+ else array2
128+ if (if ((maxPercentBound > p04))
129+ then (p04 > minPercentBound)
130+ else false)
131+ then 4 :: array3
132+ else array3
133+ }
134+ let check1 = if ((size(check0) >= minPricesCount))
135+ then check0
136+ else {
137+ let p1 = prices[1]
138+ if ((0 >= p1))
139+ then [1]
140+ else {
141+ let p10 = ((prices[0] * 100) / p1)
142+ let p12 = ((prices[2] * 100) / p1)
143+ let p13 = ((prices[3] * 100) / p1)
144+ let p14 = ((prices[4] * 100) / p1)
145+ let array1 = if (if ((maxPercentBound > p10))
146+ then (p10 > minPercentBound)
147+ else false)
148+ then [0, 1]
149+ else [1]
150+ let array2 = if (if ((maxPercentBound > p12))
151+ then (p12 > minPercentBound)
152+ else false)
153+ then 2 :: array1
154+ else array1
155+ let array3 = if (if ((maxPercentBound > p13))
156+ then (p13 > minPercentBound)
157+ else false)
158+ then 3 :: array2
159+ else array2
160+ if (if ((maxPercentBound > p14))
161+ then (p14 > minPercentBound)
162+ else false)
163+ then 4 :: array3
164+ else array3
165+ }
166+ }
167+ let check2 = if ((size(check1) >= minPricesCount))
168+ then check1
169+ else {
170+ let p2 = prices[2]
171+ if ((0 >= p2))
172+ then [2]
173+ else {
174+ let p20 = ((prices[0] * 100) / p2)
175+ let p21 = ((prices[1] * 100) / p2)
176+ let p23 = ((prices[3] * 100) / p2)
177+ let p24 = ((prices[4] * 100) / p2)
178+ let array1 = if (if ((maxPercentBound > p20))
179+ then (p20 > minPercentBound)
180+ else false)
181+ then [0, 2]
182+ else [2]
183+ let array2 = if (if ((maxPercentBound > p21))
184+ then (p21 > minPercentBound)
185+ else false)
186+ then 1 :: array1
187+ else array1
188+ let array3 = if (if ((maxPercentBound > p23))
189+ then (p23 > minPercentBound)
190+ else false)
191+ then 3 :: array2
192+ else array2
193+ if (if ((maxPercentBound > p24))
194+ then (p24 > minPercentBound)
195+ else false)
196+ then 4 :: array3
197+ else array3
198+ }
199+ }
200+ let check3 = if ((size(check2) >= minPricesCount))
201+ then check2
202+ else {
203+ let p3 = prices[3]
204+ if ((0 >= p3))
205+ then [3]
206+ else {
207+ let p30 = ((prices[0] * 100) / p3)
208+ let p31 = ((prices[1] * 100) / p3)
209+ let p32 = ((prices[2] * 100) / p3)
210+ let p34 = ((prices[4] * 100) / p3)
211+ let array1 = if (if ((maxPercentBound > p30))
212+ then (p30 > minPercentBound)
213+ else false)
214+ then [0, 3]
215+ else [3]
216+ let array2 = if (if ((maxPercentBound > p31))
217+ then (p31 > minPercentBound)
218+ else false)
219+ then 1 :: array1
220+ else array1
221+ let array3 = if (if ((maxPercentBound > p32))
222+ then (p32 > minPercentBound)
223+ else false)
224+ then 2 :: array2
225+ else array2
226+ if (if ((maxPercentBound > p34))
227+ then (p34 > minPercentBound)
228+ else false)
229+ then 4 :: array3
230+ else array3
231+ }
232+ }
233+ if ((size(check3) >= minPricesCount))
234+ then check3
235+ else {
236+ let p4 = prices[4]
237+ if ((0 >= p4))
238+ then [4]
239+ else {
240+ let p40 = ((prices[0] * 100) / p4)
241+ let p41 = ((prices[1] * 100) / p4)
242+ let p42 = ((prices[2] * 100) / p4)
243+ let p43 = ((prices[3] * 100) / p4)
244+ let array1 = if (if ((maxPercentBound > p40))
245+ then (p40 > minPercentBound)
246+ else false)
247+ then [0, 4]
248+ else [4]
249+ let array2 = if (if ((maxPercentBound > p41))
250+ then (p41 > minPercentBound)
251+ else false)
252+ then 1 :: array1
253+ else array1
254+ let array3 = if (if ((maxPercentBound > p42))
255+ then (p42 > minPercentBound)
256+ else false)
257+ then 2 :: array2
258+ else array2
259+ if (if ((maxPercentBound > p43))
260+ then (p43 > minPercentBound)
261+ else false)
262+ then 3 :: array3
263+ else array3
264+ }
265+ }
266+ }
267+
268+
269+func formattingPriceMsg (currencyCode,price) = toBytes(((((("WAVESDEFOPREFIX_" + currencyCode) + "_") + toString(height)) + "_") + toString(price)))
270+
271+
272+@Callable(i)
273+func callEmergencyShutdown (reason) = {
274+ let AutoEmergencyOracleAddress = "3P6Xtn3c24YhMzefWUoeRz63yZQ7vdmEWop"
275+ let callerAddress = toString(i.caller)
276+ if ((AutoEmergencyOracleAddress != callerAddress))
277+ then throw("caller must be one an emergency oracle")
278+ else [BooleanEntry(keyIsBlocked(), true), StringEntry(keyIsBlockedSender(), callerAddress), StringEntry(keyIsBlockedReason(), reason)]
279+ }
280+
281+
282+
283+@Callable(i)
284+func finalizeCurrentPrice (currencyCode,price1,sign1,price2,sign2,price3,sign3,price4,sign4,price5,sign5) = {
285+ let price = valueOrElse(getInteger(this, keyPrice(currencyCode)), 0)
286+ let idx = valueOrElse(getInteger(this, keyIdx(currencyCode)), 0)
287+ let currencyCfg = factoryReadAssetCfgByCode(currencyCode)._2
288+ if (isBlocked)
289+ then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
290+ else if ((currencyCfg[IdxDefoAssetStatus] != "ISSUED"))
291+ then throw(((currencyCode + " has not been issued yet: status=") + currencyCfg[IdxDefoAssetStatus]))
292+ else if ((readPriceByHeight(currencyCode, height) != 0))
293+ then throw("wait next block")
294+ else if ((pubKeyOraclesList[(height % 5)] != toBase58String(i.callerPublicKey)))
295+ then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + pubKeyOraclesList[(height % 5)]))
296+ else {
297+ let prices = [if (sigVerify_8Kb(formattingPriceMsg(currencyCode, price1), sign1, fromBase58String(pubKeyOraclesList[0])))
298+ then price1
299+ else 0, if (sigVerify_8Kb(formattingPriceMsg(currencyCode, price2), sign2, fromBase58String(pubKeyOraclesList[1])))
300+ then price2
301+ else 0, if (sigVerify_8Kb(formattingPriceMsg(currencyCode, price3), sign3, fromBase58String(pubKeyOraclesList[2])))
302+ then price3
303+ else 0, if (sigVerify_8Kb(formattingPriceMsg(currencyCode, price4), sign4, fromBase58String(pubKeyOraclesList[3])))
304+ then price4
305+ else 0, if (sigVerify_8Kb(formattingPriceMsg(currencyCode, price5), sign5, fromBase58String(pubKeyOraclesList[4])))
306+ then price5
307+ else 0]
308+ let zeroPriceCount = (((((if ((prices[0] == 0))
309+ then 1
310+ else 0) + (if ((prices[1] == 0))
311+ then 1
312+ else 0)) + (if ((prices[2] == 0))
313+ then 1
314+ else 0)) + (if ((prices[3] == 0))
315+ then 1
316+ else 0)) + (if ((prices[4] == 0))
317+ then 1
318+ else 0))
319+ if ((zeroPriceCount >= minPricesCount))
320+ then throw((toString(minPricesCount) + " prices or more are equals to 0"))
321+ else {
322+ let pricesInRange = findPricesInRange(prices)
323+ let priceProvidingCount = size(pricesInRange)
324+ if ((minPricesCount > priceProvidingCount))
325+ then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
326+") + pubKeyOraclesList[0]) + "=") + toString(prices[0])) + "
327+") + pubKeyOraclesList[1]) + "=") + toString(prices[1])) + "
328+") + pubKeyOraclesList[2]) + "=") + toString(prices[2])) + "
329+") + pubKeyOraclesList[3]) + "=") + toString(prices[3])) + "
330+") + pubKeyOraclesList[4]) + "=") + toString(prices[4])))
331+ else {
332+ let sum1 = ((prices[pricesInRange[0]] + prices[pricesInRange[1]]) + prices[pricesInRange[2]])
333+ let sum2 = if ((priceProvidingCount >= 4))
334+ then (sum1 + prices[pricesInRange[3]])
335+ else sum1
336+ let priceSum = if ((priceProvidingCount >= 5))
337+ then (sum2 + prices[pricesInRange[4]])
338+ else sum2
339+ if ((priceProvidingCount >= 6))
340+ then throw("Invalid pricesInRange creation")
341+ else {
342+ let newPrice = (priceSum / priceProvidingCount)
343+ if (if ((price != 0))
344+ then if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
345+ then true
346+ else ((price - ((price * percentPriceOffset) / 100)) >= newPrice)
347+ else false)
348+ then {
349+ let reason = "automatic emergency shutdown because of large price variability"
350+[BooleanEntry(keyIsBlocked(), true), StringEntry(keyIsBlockedSender(), toString(this)), StringEntry(keyIsBlockedReason(), reason), IntegerEntry(keyBlackSwarmPrice(height), newPrice)]
351+ }
352+ else {
353+ let newIdx = (idx + 1)
354+[IntegerEntry(keyPrice(currencyCode), newPrice), IntegerEntry(keyLastHeight(currencyCode), height), IntegerEntry(keyPriceByHeight(currencyCode, height), newPrice), IntegerEntry(keyIdx(currencyCode), newIdx), IntegerEntry(keyIdx2Height(currencyCode, newIdx), height), IntegerEntry(keyHeight2Idx(currencyCode, height), newIdx)]
355+ }
356+ }
357+ }
358+ }
359+ }
360+ }
361+
362+

github/deemru/w8io/786bc32 
34.32 ms