tx · 8zP6zRrnr6RPd2rov9UJ6Hzy5ossHLK3heRUKjbhU3ZH

3Mp7YayxL6HjLfFJjzNYC8E3VTGjanV4bXw:  -0.01000000 Waves

2021.11.19 14:12 [1797843] smart account 3Mp7YayxL6HjLfFJjzNYC8E3VTGjanV4bXw > SELF 0.00000000 Waves

{ "type": 13, "id": "8zP6zRrnr6RPd2rov9UJ6Hzy5ossHLK3heRUKjbhU3ZH", "fee": 1000000, "feeAssetId": null, "timestamp": 1637320352121, "version": 1, "sender": "3Mp7YayxL6HjLfFJjzNYC8E3VTGjanV4bXw", "senderPublicKey": "EDfRSpmRQsE3teBhqfwCYfbjueikP1dLfdfj7kTpGP4P", "proofs": [ "3Uq4d6ivWvvYhS2jNaA4oCmHXLp38cWUyrwxJJhgGxRPEyJW4NBd2aVsUW3UaCkWcXANhji18fNgVaYo29SXdtfZ" ], "script": "base64:AAIFAAAAAAAAACAIAhIICgYICAEBAQgSAwoBARIDCgEBEgMKAQgSAwoBCAAAAEAAAAAAA1NFUAIAAAACX18AAAAABlNDQUxFOAAAAAAAAAAACAAAAAAFTVVMVDgAAAAAAAX14QABAAAAD2dldFN0cmluZ09yRmFpbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAdhZGRyZXNzBQAAAANrZXkJAAEsAAAAAgkAASwAAAACAgAAAA9tYW5kYXRvcnkgdGhpcy4FAAAAA2tleQIAAAAPIGlzIG5vdCBkZWZpbmVkAQAAAAxnZXRJbnRPclplcm8AAAABAAAAA2tleQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkAAAAAAAAAAAABAAAADGdldEludE9yRmFpbAAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQfAAAAAQUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgIAAAAPbWFuZGF0b3J5IHRoaXMuBQAAAANrZXkCAAAADyBpcyBub3QgZGVmaW5lZAEAAAAJYXNBbnlMaXN0AAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAJTGlzdFtBbnldBAAAAAp2YWxBbnlMeXN0BQAAAAckbWF0Y2gwBQAAAAp2YWxBbnlMeXN0CQAAAgAAAAECAAAAG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEAAAAFYXNJbnQAAAABAAAAA3ZhbAQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABnZhbEludAUAAAAHJG1hdGNoMAUAAAAGdmFsSW50CQAAAgAAAAECAAAAFWZhaWwgdG8gY2FzdCBpbnRvIEludAEAAAARa2V5RmFjdG9yeUFkZHJlc3MAAAAAAgAAABwlcyVzX19jb25maWdfX2ZhY3RvcnlBZGRyZXNzAAAAABhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAAAAAAAAAAAAEAAAAAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHAAAAAAAAAAAAIAAAAAFElkeEZhY3RvcnlDZmdJZG9EYXBwAAAAAAAAAAADAAAAABVJZHhGYWN0b3J5Q2ZnVGVhbURhcHAAAAAAAAAAAAQAAAAAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHAAAAAAAAAAAAUAAAAAFUlkeEZhY3RvcnlDZmdSZXN0RGFwcAAAAAAAAAAABgAAAAAZSWR4RmFjdG9yeUNmZ1NsaXBwYWdlRGFwcAAAAAAAAAAABwEAAAANa2V5RmFjdG9yeUNmZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAABprZXlGYWN0b3J5THAyQXNzZXRzTWFwcGluZwAAAAEAAAAKbHBBc3NldFN0cgkABLkAAAACCQAETAAAAAICAAAABiVzJXMlcwkABEwAAAACBQAAAApscEFzc2V0U3RyCQAETAAAAAICAAAAHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAAEGtleUZhY3RvcnlMcExpc3QAAAAAAgAAABAlc19fbHBUb2tlbnNMaXN0AQAAACZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEAAAAKbHBBc3NldFN0cgkABLkAAAACCQAETAAAAAICAAAABiVzJXMlcwkABEwAAAACBQAAAApscEFzc2V0U3RyCQAETAAAAAICAAAAHm1hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAAFGtleUZhY3RvcnlQb29sV2VpZ2h0AAAAAQAAAA9jb250cmFjdEFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAAQlcyVzCQAETAAAAAICAAAACnBvb2xXZWlnaHQJAARMAAAAAgUAAAAPY29udHJhY3RBZGRyZXNzBQAAAANuaWwFAAAAA1NFUAEAAAAYcmVhZEZhY3RvcnlBZGRyZXNzT3JGYWlsAAAAAAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAABAAAACnJlYWRMcExpc3QAAAAACQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgkBAAAAGHJlYWRGYWN0b3J5QWRkcmVzc09yRmFpbAAAAAAJAQAAABBrZXlGYWN0b3J5THBMaXN0AAAAAAIAAAAABQAAAANTRVABAAAAFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsAAAAAQAAAAdmYWN0b3J5CQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAdmYWN0b3J5CQEAAAANa2V5RmFjdG9yeUNmZwAAAAAFAAAAA1NFUAEAAAAYZ2V0Qm9vc3RpbmdBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGUlkeEZhY3RvcnlDZmdCb29zdGluZ0RhcHABAAAAGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwAQAAABdnZXRTdGFraW5nQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABhJZHhGYWN0b3J5Q2ZnU3Rha2luZ0RhcHAAAAAADUlkeENmZ0Fzc2V0SWQAAAAAAAAAAAEAAAAAE0lkeENmZ01pbkxvY2tBbW91bnQAAAAAAAAAAAIAAAAAFUlkeENmZ01pbkxvY2tEdXJhdGlvbgAAAAAAAAAAAwAAAAAVSWR4Q2ZnTWF4TG9ja0R1cmF0aW9uAAAAAAAAAAAEAAAAABJJZHhDZmdNYXRoQ29udHJhY3QAAAAAAAAAAAUBAAAACWtleUNvbmZpZwAAAAACAAAACiVzX19jb25maWcBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAIFAAAABHRoaXMJAQAAAAlrZXlDb25maWcAAAAABQAAAANTRVABAAAADWZvcm1hdENvbmZpZ1MAAAAFAAAAB2Fzc2V0SWQAAAANbWluTG9ja0Ftb3VudAAAAA9taW5Mb2NrRHVyYXRpb24AAAAPbWF4TG9ja0R1cmF0aW9uAAAADG1hdGhDb250cmFjdAkABLkAAAACCQAETAAAAAICAAAACCVzJWQlZCVkCQAETAAAAAIFAAAAB2Fzc2V0SWQJAARMAAAAAgUAAAANbWluTG9ja0Ftb3VudAkABEwAAAACBQAAAA9taW5Mb2NrRHVyYXRpb24JAARMAAAAAgUAAAAPbWF4TG9ja0R1cmF0aW9uCQAETAAAAAIFAAAADG1hdGhDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAADGZvcm1hdENvbmZpZwAAAAUAAAAHYXNzZXRJZAAAAA1taW5Mb2NrQW1vdW50AAAAD21pbkxvY2tEdXJhdGlvbgAAAA9tYXhMb2NrRHVyYXRpb24AAAAMbWF0aENvbnRyYWN0CQEAAAANZm9ybWF0Q29uZmlnUwAAAAUFAAAAB2Fzc2V0SWQJAAGkAAAAAQUAAAANbWluTG9ja0Ftb3VudAkAAaQAAAABBQAAAA9taW5Mb2NrRHVyYXRpb24JAAGkAAAAAQUAAAAPbWF4TG9ja0R1cmF0aW9uBQAAAAxtYXRoQ29udHJhY3QAAAAADklkeExvY2tVc2VyTnVtAAAAAAAAAAABAAAAAA1JZHhMb2NrQW1vdW50AAAAAAAAAAACAAAAAAxJZHhMb2NrU3RhcnQAAAAAAAAAAAMAAAAAD0lkeExvY2tEdXJhdGlvbgAAAAAAAAAABAAAAAANSWR4TG9ja1BhcmFtSwAAAAAAAAAABQAAAAANSWR4TG9ja1BhcmFtQgAAAAAAAAAABgEAAAATa2V5TG9ja1BhcmFtc1JlY29yZAAAAAEAAAALdXNlckFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAAolcyVzX19sb2NrCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAANuaWwFAAAAA1NFUAEAAAAacmVhZExvY2tQYXJhbXNSZWNvcmRPckZhaWwAAAABAAAAC3VzZXJBZGRyZXNzCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAACBQAAAAR0aGlzCQEAAAATa2V5TG9ja1BhcmFtc1JlY29yZAAAAAEFAAAAC3VzZXJBZGRyZXNzBQAAAANTRVABAAAAF2Zvcm1hdExvY2tQYXJhbXNSZWNvcmRTAAAABgAAAAd1c2VyTnVtAAAABmFtb3VudAAAAAVzdGFydAAAAAhkdXJhdGlvbgAAAAZwYXJhbUsAAAAGcGFyYW1CCQAEuQAAAAIJAARMAAAAAgIAAAAMJWQlZCVkJWQlZCVkCQAETAAAAAIFAAAAB3VzZXJOdW0JAARMAAAAAgUAAAAGYW1vdW50CQAETAAAAAIFAAAABXN0YXJ0CQAETAAAAAIFAAAACGR1cmF0aW9uCQAETAAAAAIFAAAABnBhcmFtSwkABEwAAAACBQAAAAZwYXJhbUIFAAAAA25pbAUAAAADU0VQAQAAABZmb3JtYXRMb2NrUGFyYW1zUmVjb3JkAAAABgAAAAd1c2VyTnVtAAAABmFtb3VudAAAAAVzdGFydAAAAAhkdXJhdGlvbgAAAAZwYXJhbUsAAAAGcGFyYW1CCQEAAAAXZm9ybWF0TG9ja1BhcmFtc1JlY29yZFMAAAAGBQAAAAd1c2VyTnVtCQABpAAAAAEFAAAABmFtb3VudAkAAaQAAAABBQAAAAVzdGFydAkAAaQAAAABBQAAAAhkdXJhdGlvbgkAAaQAAAABBQAAAAZwYXJhbUsJAAGkAAAAAQUAAAAGcGFyYW1CAQAAAA5rZXlOZXh0VXNlck51bQAAAAACAAAADyVzX19uZXh0VXNlck51bQEAAAASa2V5VXNlcjJOdW1NYXBwaW5nAAAAAQAAAAt1c2VyQWRkcmVzcwkABLkAAAACCQAETAAAAAICAAAAGSVzJXMlc19fbWFwcGluZ19fdXNlcjJudW0JAARMAAAAAgUAAAALdXNlckFkZHJlc3MFAAAAA25pbAUAAAADU0VQAQAAABJrZXlOdW0yVXNlck1hcHBpbmcAAAABAAAAA251bQkABLkAAAACCQAETAAAAAICAAAAGSVzJXMlc19fbWFwcGluZ19fbnVtMnVzZXIJAARMAAAAAgUAAAADbnVtBQAAAANuaWwFAAAAA1NFUAEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEAAAAHdXNlck51bQkABLkAAAACCQAETAAAAAICAAAAFiVzJWQlc19fcGFyYW1CeVVzZXJOdW0JAARMAAAAAgUAAAAHdXNlck51bQkABEwAAAACAgAAAAZhbW91bnQFAAAAA25pbAUAAAADU0VQAQAAABZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAAAAAQAAAAd1c2VyTnVtCQAEuQAAAAIJAARMAAAAAgIAAAAWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkABEwAAAACBQAAAAd1c2VyTnVtCQAETAAAAAICAAAABXN0YXJ0BQAAAANuaWwFAAAAA1NFUAEAAAAUa2V5TG9ja1BhcmFtRHVyYXRpb24AAAABAAAAB3VzZXJOdW0JAAS5AAAAAgkABEwAAAACAgAAABYlcyVkJXNfX3BhcmFtQnlVc2VyTnVtCQAETAAAAAIFAAAAB3VzZXJOdW0JAARMAAAAAgIAAAAIZHVyYXRpb24FAAAAA25pbAUAAAADU0VQAQAAAA1rZXlMb2NrUGFyYW1LAAAAAQAAAAd1c2VyTnVtCQAEuQAAAAIJAARMAAAAAgIAAAAWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkABEwAAAACBQAAAAd1c2VyTnVtCQAETAAAAAICAAAAAWsFAAAAA25pbAUAAAADU0VQAQAAAA1rZXlMb2NrUGFyYW1CAAAAAQAAAAd1c2VyTnVtCQAEuQAAAAIJAARMAAAAAgIAAAAWJXMlZCVzX19wYXJhbUJ5VXNlck51bQkABEwAAAACBQAAAAd1c2VyTnVtCQAETAAAAAICAAAAAWIFAAAAA25pbAUAAAADU0VQAQAAABVrZXlMb2NrUGFyYW1CeVBlcmlvZEsAAAACAAAAB3VzZXJOdW0AAAAGcGVyaW9kCQAEuQAAAAIJAARMAAAAAgIAAAAXJXMlZCVzJWRfX3BhcmFtQnlQZXJpb2QJAARMAAAAAgUAAAAHdXNlck51bQkABEwAAAACAgAAAAFrCQAETAAAAAIFAAAABnBlcmlvZAUAAAADbmlsBQAAAANTRVABAAAAFWtleUxvY2tQYXJhbUJ5UGVyaW9kQgAAAAIAAAAHdXNlck51bQAAAAZwZXJpb2QJAAS5AAAAAgkABEwAAAACAgAAABclcyVkJXMlZF9fcGFyYW1CeVBlcmlvZAkABEwAAAACBQAAAAd1c2VyTnVtCQAETAAAAAICAAAAAWIJAARMAAAAAgUAAAAGcGVyaW9kBQAAAANuaWwFAAAAA1NFUAEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAAAgAAAB4lcyVzX19zdGF0c19fYWN0aXZlVG90YWxMb2NrZWQBAAAAIGtleVN0YXRzTG9ja3NEdXJhdGlvblN1bUluQmxvY2tzAAAAAAIAAAAlJXMlc19fc3RhdHNfX2xvY2tzRHVyYXRpb25TdW1JbkJsb2NrcwEAAAASa2V5U3RhdHNMb2Nrc0NvdW50AAAAAAIAAAAXJXMlc19fc3RhdHNfX2xvY2tzQ291bnQBAAAAEmtleVN0YXRzVXNlcnNDb3VudAAAAAACAAAAHSVzJXNfX3N0YXRzX19hY3RpdmVVc2Vyc0NvdW50AQAAAAxIaXN0b3J5RW50cnkAAAAIAAAABHR5cGUAAAAEdXNlcgAAAAZhbW91bnQAAAAJbG9ja1N0YXJ0AAAACGR1cmF0aW9uAAAAAWsAAAABYgAAAAFpBAAAAApoaXN0b3J5S0VZCQAEuQAAAAIJAARMAAAAAgIAAAARJXMlcyVzJXNfX2hpc3RvcnkJAARMAAAAAgUAAAAEdHlwZQkABEwAAAACBQAAAAR1c2VyCQAETAAAAAIJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAADbmlsBQAAAANTRVAEAAAAC2hpc3RvcnlEQVRBCQAEuQAAAAIJAARMAAAAAgIAAAAOJWQlZCVkJWQlZCVkJWQJAARMAAAAAgkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAABmhlaWdodAkABEwAAAACCQABpAAAAAEIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAAGkAAAAAQUAAAAGYW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAJbG9ja1N0YXJ0CQAETAAAAAIJAAGkAAAAAQUAAAAIZHVyYXRpb24JAARMAAAAAgkAAaQAAAABBQAAAAFrCQAETAAAAAIJAAGkAAAAAQUAAAABYgUAAAADbmlsBQAAAANTRVAJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACmhpc3RvcnlLRVkFAAAAC2hpc3RvcnlEQVRBAQAAAApTdGF0c0VudHJ5AAAABAAAAA50b3RhbExvY2tlZEluYwAAAAtkdXJhdGlvbkluYwAAAAxsb2NrQ291bnRJbmMAAAANdXNlcnNDb3VudEluYwQAAAAbbG9ja3NEdXJhdGlvblN1bUluQmxvY2tzS0VZCQEAAAAga2V5U3RhdHNMb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MAAAAABAAAAA1sb2Nrc0NvdW50S0VZCQEAAAASa2V5U3RhdHNMb2Nrc0NvdW50AAAAAAQAAAANdXNlcnNDb3VudEtFWQkBAAAAEmtleVN0YXRzVXNlcnNDb3VudAAAAAAEAAAADnRvdGFsQW1vdW50S0VZCQEAAAAXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAABAAAABhsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MJAQAAAAxnZXRJbnRPclplcm8AAAABBQAAAA1sb2Nrc0NvdW50S0VZBAAAAApsb2Nrc0NvdW50CQEAAAAMZ2V0SW50T3JaZXJvAAAAAQUAAAANbG9ja3NDb3VudEtFWQQAAAAKdXNlcnNDb3VudAkBAAAADGdldEludE9yWmVybwAAAAEFAAAADXVzZXJzQ291bnRLRVkEAAAAC3RvdGFsQW1vdW50CQEAAAAMZ2V0SW50T3JaZXJvAAAAAQUAAAAOdG90YWxBbW91bnRLRVkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG2xvY2tzRHVyYXRpb25TdW1JbkJsb2Nrc0tFWQkAAGQAAAACBQAAABhsb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MFAAAAC2R1cmF0aW9uSW5jCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1sb2Nrc0NvdW50S0VZCQAAZAAAAAIFAAAACmxvY2tzQ291bnQFAAAADGxvY2tDb3VudEluYwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANdXNlcnNDb3VudEtFWQkAAGQAAAACBQAAAAp1c2Vyc0NvdW50BQAAAA11c2Vyc0NvdW50SW5jCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA50b3RhbEFtb3VudEtFWQkAAGQAAAACBQAAAAt0b3RhbEFtb3VudAUAAAAOdG90YWxMb2NrZWRJbmMFAAAAA25pbAEAAAAPTG9ja1BhcmFtc0VudHJ5AAAACAAAAAt1c2VyQWRkcmVzcwAAAAd1c2VyTnVtAAAABmFtb3VudAAAAAVzdGFydAAAAAhkdXJhdGlvbgAAAAFrAAAAAWIAAAAGcGVyaW9kBAAAAA11c2VyQW1vdW50S0VZCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAAB3VzZXJOdW0EAAAADXN0YXJ0QmxvY2tLRVkJAQAAABZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAAAAAQUAAAAHdXNlck51bQQAAAALZHVyYXRpb25LRVkJAQAAABRrZXlMb2NrUGFyYW1EdXJhdGlvbgAAAAEFAAAAB3VzZXJOdW0EAAAABGtLRVkJAQAAAA1rZXlMb2NrUGFyYW1LAAAAAQUAAAAHdXNlck51bQQAAAAEYktFWQkBAAAADWtleUxvY2tQYXJhbUIAAAABBQAAAAd1c2VyTnVtBAAAAAtrQnlQZXJpb0tFWQkBAAAAFWtleUxvY2tQYXJhbUJ5UGVyaW9kSwAAAAIFAAAAB3VzZXJOdW0FAAAABnBlcmlvZAQAAAAMYkJ5UGVyaW9kS0VZCQEAAAAVa2V5TG9ja1BhcmFtQnlQZXJpb2RCAAAAAgUAAAAHdXNlck51bQUAAAAGcGVyaW9kCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA11c2VyQW1vdW50S0VZBQAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADXN0YXJ0QmxvY2tLRVkFAAAABXN0YXJ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtkdXJhdGlvbktFWQUAAAAIZHVyYXRpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAABGtLRVkFAAAAAWsJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAABGJLRVkFAAAAAWIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tCeVBlcmlvS0VZBQAAAAFrCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxiQnlQZXJpb2RLRVkFAAAAAWIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleUxvY2tQYXJhbXNSZWNvcmQAAAABBQAAAAt1c2VyQWRkcmVzcwkBAAAAFmZvcm1hdExvY2tQYXJhbXNSZWNvcmQAAAAGBQAAAAd1c2VyTnVtBQAAAAZhbW91bnQFAAAABXN0YXJ0BQAAAAhkdXJhdGlvbgUAAAABawUAAAABYgUAAAADbmlsAQAAACJleHRyYWN0T3B0aW9uYWxQYXltZW50QW1vdW50T3JGYWlsAAAAAgAAAAFpAAAAD2V4cGVjdGVkQXNzZXRJZAMJAABmAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAABtvbmx5IG9uZSBwYXltZW50IGlzIGFsbG93ZWQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAIhPQAAAAIJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAPZXhwZWN0ZWRBc3NldElkCQAAAgAAAAECAAAAG2ludmFsaWQgYXNzZXQgaWQgaW4gcGF5bWVudAgFAAAAA3BtdAAAAAZhbW91bnQAAAAFAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAABgAAABFmYWN0b3J5QWRkcmVzc1N0cgAAAA5sb2NrQXNzZXRJZFN0cgAAAA1taW5Mb2NrQW1vdW50AAAAC21pbkR1cmF0aW9uAAAAC21heER1cmF0aW9uAAAADG1hdGhDb250cmFjdAMJAQAAAAIhPQAAAAIFAAAABHRoaXMIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAAA5ub3QgYXV0aG9yaXplZAkABE4AAAACCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOa2V5TmV4dFVzZXJOdW0AAAAAAAAAAAAAAAAACQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlDb25maWcAAAAACQEAAAAMZm9ybWF0Q29uZmlnAAAABQUAAAAObG9ja0Fzc2V0SWRTdHIFAAAADW1pbkxvY2tBbW91bnQFAAAAC21pbkR1cmF0aW9uBQAAAAttYXhEdXJhdGlvbgUAAAAMbWF0aENvbnRyYWN0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlGYWN0b3J5QWRkcmVzcwAAAAAFAAAAEWZhY3RvcnlBZGRyZXNzU3RyBQAAAANuaWwJAQAAAApTdGF0c0VudHJ5AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFpAQAAAARsb2NrAAAAAQAAAAhkdXJhdGlvbgQAAAAIY2ZnQXJyYXkJAQAAABVyZWFkQ29uZmlnQXJyYXlPckZhaWwAAAAABAAAAAphc3NldElkU3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAAA1JZHhDZmdBc3NldElkBAAAAAdhc3NldElkCQACWQAAAAEFAAAACmFzc2V0SWRTdHIEAAAADW1pbkxvY2tBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAATSWR4Q2ZnTWluTG9ja0Ftb3VudAQAAAAPbWluTG9ja0R1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ01pbkxvY2tEdXJhdGlvbgQAAAAPbWF4TG9ja0R1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ01heExvY2tEdXJhdGlvbgQAAAAMbWF0aENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdNYXRoQ29udHJhY3QDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAANGludmFsaWQgcGF5bWVudCAtIGV4YWN0IG9uZSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAJcG10QW1vdW50CAUAAAADcG10AAAABmFtb3VudAMJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAeaW52YWxpZCBhc3NldCBpcyBpbiBwYXltZW50IC0gBQAAAAphc3NldElkU3RyAgAAAAwgaXMgZXhwZWN0ZWQEAAAADm5leHRVc2VyTnVtS0VZCQEAAAAOa2V5TmV4dFVzZXJOdW0AAAAABAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADnVzZXJJc0V4aXN0aW5nCQEAAAAJaXNEZWZpbmVkAAAAAQkABCIAAAABCQEAAAASa2V5VXNlcjJOdW1NYXBwaW5nAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIEAAAACnVzZXJOdW1TdHIDBQAAAA51c2VySXNFeGlzdGluZwkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAASa2V5VXNlcjJOdW1NYXBwaW5nAAAAAQUAAAAOdXNlckFkZHJlc3NTdHIJAAGkAAAAAQkBAAAADGdldEludE9yRmFpbAAAAAEFAAAADm5leHRVc2VyTnVtS0VZBAAAAAd1c2VyTnVtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEFAAAACnVzZXJOdW1TdHIEAAAACWxvY2tTdGFydAUAAAAGaGVpZ2h0BAAAAA1zdGFydEJsb2NrS0VZCQEAAAAWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawAAAAEFAAAACnVzZXJOdW1TdHIEAAAAC2R1cmF0aW9uS0VZCQEAAAAUa2V5TG9ja1BhcmFtRHVyYXRpb24AAAABBQAAAAp1c2VyTnVtU3RyBAAAAA11c2VyQW1vdW50S0VZCQEAAAAWa2V5TG9ja1BhcmFtVXNlckFtb3VudAAAAAEFAAAACnVzZXJOdW1TdHIEAAAACnVzZXJBbW91bnQJAQAAAAxnZXRJbnRPclplcm8AAAABBQAAAA11c2VyQW1vdW50S0VZAwkAAGYAAAACBQAAAA9taW5Mb2NrRHVyYXRpb24FAAAACGR1cmF0aW9uCQAAAgAAAAEJAAEsAAAAAgIAAAAtcGFzc2VkIGR1cmF0aW9uIGlzIGxlc3MgdGhlbiBtaW5Mb2NrRHVyYXRpb249CQABpAAAAAEFAAAAD21pbkxvY2tEdXJhdGlvbgMJAABmAAAAAgUAAAAIZHVyYXRpb24FAAAAD21heExvY2tEdXJhdGlvbgkAAAIAAAABCQABLAAAAAICAAAAMHBhc3NlZCBkdXJhdGlvbiBpcyBncmVhdGVyIHRoZW4gbWF4TG9ja0R1cmF0aW9uPQkAAaQAAAABBQAAAA9tYXhMb2NrRHVyYXRpb24DAwUAAAAOdXNlcklzRXhpc3RpbmcJAABnAAAAAgkAAGQAAAACCQEAAAAMZ2V0SW50T3JGYWlsAAAAAQUAAAANc3RhcnRCbG9ja0tFWQkBAAAADGdldEludE9yRmFpbAAAAAEFAAAAC2R1cmF0aW9uS0VZBQAAAAlsb2NrU3RhcnQHCQAAAgAAAAECAAAANnRoZXJlIGlzIGFuIGFjdGl2ZSBsb2NrIC0gY29uc2lkZXIgdG8gdXNlIGluY3JlYXNlTG9jawQAAAATZ1d4UGFyYW1zUmVzdWx0TGlzdAkBAAAACWFzQW55TGlzdAAAAAEJAAP8AAAABAUAAAAMbWF0aENvbnRyYWN0AgAAABVjYWxjR3d4UGFyYW1zUkVBRE9OTFkJAARMAAAAAgUAAAAJcG10QW1vdW50CQAETAAAAAIFAAAACWxvY2tTdGFydAkABEwAAAACBQAAAAhkdXJhdGlvbgUAAAADbmlsBQAAAANuaWwEAAAAAWsJAQAAAAVhc0ludAAAAAEJAAGRAAAAAgUAAAATZ1d4UGFyYW1zUmVzdWx0TGlzdAAAAAAAAAAAAAQAAAABYgkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAABNnV3hQYXJhbXNSZXN1bHRMaXN0AAAAAAAAAAABBAAAAAZwZXJpb2QJAAGkAAAAAQkBAAAABWFzSW50AAAAAQkAAZEAAAACBQAAABNnV3hQYXJhbXNSZXN1bHRMaXN0AAAAAAAAAAACBAAAAANhcnIDBQAAAA51c2VySXNFeGlzdGluZwUAAAADbmlsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA5uZXh0VXNlck51bUtFWQkAAGQAAAACBQAAAAd1c2VyTnVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlVc2VyMk51bU1hcHBpbmcAAAABBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAKdXNlck51bVN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5TnVtMlVzZXJNYXBwaW5nAAAAAQUAAAAKdXNlck51bVN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAAA25pbAkABE0AAAACCQAETgAAAAIJAAROAAAAAgUAAAADYXJyCQEAAAAPTG9ja1BhcmFtc0VudHJ5AAAACAUAAAAOdXNlckFkZHJlc3NTdHIFAAAACnVzZXJOdW1TdHIFAAAACXBtdEFtb3VudAUAAAAJbG9ja1N0YXJ0BQAAAAhkdXJhdGlvbgUAAAABawUAAAABYgUAAAAGcGVyaW9kCQEAAAAKU3RhdHNFbnRyeQAAAAQFAAAACXBtdEFtb3VudAUAAAAIZHVyYXRpb24AAAAAAAAAAAEDBQAAAA51c2VySXNFeGlzdGluZwAAAAAAAAAAAAAAAAAAAAAAAQkBAAAADEhpc3RvcnlFbnRyeQAAAAgCAAAABGxvY2sFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAlwbXRBbW91bnQFAAAACWxvY2tTdGFydAUAAAAIZHVyYXRpb24FAAAAAWsFAAAAAWIFAAAAAWkAAAABaQEAAAAMaW5jcmVhc2VMb2NrAAAAAQAAAA1kZWx0YUR1cmF0aW9uBAAAAAhjZmdBcnJheQkBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAEAAAACmFzc2V0SWRTdHIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAADUlkeENmZ0Fzc2V0SWQEAAAAB2Fzc2V0SWQJAAJZAAAAAQUAAAAKYXNzZXRJZFN0cgQAAAAPbWF4TG9ja0R1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFUlkeENmZ01heExvY2tEdXJhdGlvbgQAAAAMbWF0aENvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABAgAAAAAEAAAACXBtdEFtb3VudAkBAAAAImV4dHJhY3RPcHRpb25hbFBheW1lbnRBbW91bnRPckZhaWwAAAACBQAAAAFpBQAAAAdhc3NldElkBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAAWsAAAAAAAAAAAAEAAAAAWIAAAAAAAAAAAAEAAAABnBlcmlvZAIAAAABMAQAAAAPdXNlclJlY29yZEFycmF5CQEAAAAacmVhZExvY2tQYXJhbXNSZWNvcmRPckZhaWwAAAABBQAAAA51c2VyQWRkcmVzc1N0cgQAAAAKdXNlck51bVN0cgkAAZEAAAACBQAAAA91c2VyUmVjb3JkQXJyYXkFAAAADklkeExvY2tVc2VyTnVtBAAAAAp1c2VyQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPdXNlclJlY29yZEFycmF5BQAAAA1JZHhMb2NrQW1vdW50BAAAAAlsb2NrU3RhcnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA91c2VyUmVjb3JkQXJyYXkFAAAADElkeExvY2tTdGFydAQAAAAMbG9ja0R1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPdXNlclJlY29yZEFycmF5BQAAAA9JZHhMb2NrRHVyYXRpb24EAAAAB2xvY2tFbmQJAABkAAAAAgUAAAAJbG9ja1N0YXJ0BQAAAAxsb2NrRHVyYXRpb24EAAAACW5ld0Ftb3VudAkAAGQAAAACBQAAAAp1c2VyQW1vdW50BQAAAAlwbXRBbW91bnQEAAAAD25ld0xvY2tEdXJhdGlvbgkAAGQAAAACBQAAAAxsb2NrRHVyYXRpb24FAAAADWRlbHRhRHVyYXRpb24DCQAAZgAAAAIAAAAAAAAAAAAFAAAADWRlbHRhRHVyYXRpb24JAAACAAAAAQIAAAAaZHVyYXRpb24gaXMgbGVzcyB0aGVuIHplcm8DCQAAZgAAAAIFAAAAD25ld0xvY2tEdXJhdGlvbgUAAAAPbWF4TG9ja0R1cmF0aW9uCQAAAgAAAAEJAAEsAAAAAgIAAABEZGVsdGFEdXJhdGlvbiArIGV4aXN0ZWRMb2NrRHVyYXRpb24gaXMgZ3JlYXRlciB0aGVuIG1heExvY2tEdXJhdGlvbj0JAAGkAAAAAQUAAAAPbWF4TG9ja0R1cmF0aW9uAwMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAAdsb2NrRW5kCQAAZgAAAAIFAAAACnVzZXJBbW91bnQAAAAAAAAAAAAHCQAAAgAAAAECAAAAOXRoZXJlIGlzIGFuIGV4cGlyZWQgbG9jayAtIG5lZWQgdG8gdW5sb2NrIGJlZm9yZSBuZXcgbG9jawkABE0AAAACCQAETgAAAAIJAQAAAA9Mb2NrUGFyYW1zRW50cnkAAAAIBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAKdXNlck51bVN0cgUAAAAJbmV3QW1vdW50BQAAAAlsb2NrU3RhcnQFAAAAD25ld0xvY2tEdXJhdGlvbgUAAAABawUAAAABYgUAAAAGcGVyaW9kCQEAAAAKU3RhdHNFbnRyeQAAAAQFAAAACXBtdEFtb3VudAUAAAANZGVsdGFEdXJhdGlvbgAAAAAAAAAAAAAAAAAAAAAAAAkBAAAADEhpc3RvcnlFbnRyeQAAAAgCAAAABGxvY2sFAAAADnVzZXJBZGRyZXNzU3RyBQAAAAluZXdBbW91bnQFAAAACWxvY2tTdGFydAUAAAAPbmV3TG9ja0R1cmF0aW9uBQAAAAFrBQAAAAFiBQAAAAFpAAAAAWkBAAAABnVubG9jawAAAAEAAAALdXNlckFkZHJlc3MEAAAAD3VzZXJSZWNvcmRBcnJheQkBAAAAGnJlYWRMb2NrUGFyYW1zUmVjb3JkT3JGYWlsAAAAAQUAAAALdXNlckFkZHJlc3MEAAAACnVzZXJOdW1TdHIJAAGRAAAAAgUAAAAPdXNlclJlY29yZEFycmF5BQAAAA5JZHhMb2NrVXNlck51bQQAAAAKdXNlckFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD3VzZXJSZWNvcmRBcnJheQUAAAANSWR4TG9ja0Ftb3VudAQAAAAJbG9ja1N0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPdXNlclJlY29yZEFycmF5BQAAAAxJZHhMb2NrU3RhcnQEAAAADGxvY2tEdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD3VzZXJSZWNvcmRBcnJheQUAAAAPSWR4TG9ja0R1cmF0aW9uBAAAAAdsb2NrRW5kCQAAZAAAAAIFAAAACWxvY2tTdGFydAUAAAAMbG9ja0R1cmF0aW9uBAAAAAhjZmdBcnJheQkBAAAAFXJlYWRDb25maWdBcnJheU9yRmFpbAAAAAAEAAAAB2Fzc2V0SWQJAAJZAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAANSWR4Q2ZnQXNzZXRJZAMJAABnAAAAAgUAAAAHbG9ja0VuZAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAV3YWl0IAkAAaQAAAABBQAAAAdsb2NrRW5kAgAAAAogdG8gdW5sb2NrAwkAAGcAAAACAAAAAAAAAAAABQAAAAp1c2VyQW1vdW50CQAAAgAAAAECAAAAEW5vdGhpbmcgdG8gdW5sb2NrBAAAAAZwZXJpb2QCAAAAATAJAARNAAAAAgkABE0AAAACCQAETgAAAAIJAQAAAA9Mb2NrUGFyYW1zRW50cnkAAAAIBQAAAAt1c2VyQWRkcmVzcwUAAAAKdXNlck51bVN0cgAAAAAAAAAAAAUAAAAJbG9ja1N0YXJ0BQAAAAxsb2NrRHVyYXRpb24AAAAAAAAAAAAAAAAAAAAAAAAFAAAABnBlcmlvZAkBAAAAClN0YXRzRW50cnkAAAAECQEAAAABLQAAAAEFAAAACnVzZXJBbW91bnQAAAAAAAAAAAAAAAAAAAAAAAAA//////////8JAQAAAAxIaXN0b3J5RW50cnkAAAAIAgAAAAZ1bmxvY2sFAAAAC3VzZXJBZGRyZXNzBQAAAAp1c2VyQW1vdW50BQAAAAlsb2NrU3RhcnQFAAAADGxvY2tEdXJhdGlvbgAAAAAAAAAAAAAAAAAAAAAAAAUAAAABaQkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAALdXNlckFkZHJlc3MFAAAACnVzZXJBbW91bnQFAAAAB2Fzc2V0SWQAAAABaQEAAAATZ3d4VXNlckluZm9SRUFET05MWQAAAAEAAAALdXNlckFkZHJlc3MEAAAABUVNUFRZAgAAAAVlbXB0eQQAAAASdXNlcjJOdW1NYXBwaW5nS0VZCQEAAAASa2V5VXNlcjJOdW1NYXBwaW5nAAAAAQUAAAALdXNlckFkZHJlc3MEAAAAB3VzZXJOdW0JAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQUAAAASdXNlcjJOdW1NYXBwaW5nS0VZBQAAAAVFTVBUWQQAAAABawkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAANa2V5TG9ja1BhcmFtSwAAAAEFAAAAB3VzZXJOdW0AAAAAAAAAAAAEAAAAAWIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAADWtleUxvY2tQYXJhbUIAAAABBQAAAAd1c2VyTnVtAAAAAAAAAAAABAAAAA1nd3hBbW91bnRDYWxjCQAAawAAAAMJAABkAAAAAgkAAGgAAAACBQAAAAFrBQAAAAZoZWlnaHQFAAAAAWIAAAAAAAAAAAEFAAAABU1VTFQ4BAAAAAlnd3hBbW91bnQDCQAAZgAAAAIAAAAAAAAAAAAFAAAADWd3eEFtb3VudENhbGMAAAAAAAAAAAAFAAAADWd3eEFtb3VudENhbGMJAAUUAAAAAgUAAAADbmlsCQAETAAAAAIFAAAACWd3eEFtb3VudAUAAAADbmlsAAAAAJtASZU=", "chainId": 84, "height": 1797843, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H5rQEVwko8EvNg8UW1nbsjKUvaC6WAgVNYKNCCzmCB3Z Next: none Diff:
OldNewDifferences
338338 let userNum = valueOrElse(getString(user2NumMappingKEY), EMPTY)
339339 let k = valueOrElse(getInteger(keyLockParamK(userNum)), 0)
340340 let b = valueOrElse(getInteger(keyLockParamB(userNum)), 0)
341- let gwxAmountCalc = fraction(((k * height) + b), 1, SCALE8)
341+ let gwxAmountCalc = fraction(((k * height) + b), 1, MULT8)
342342 let gwxAmount = if ((0 > gwxAmountCalc))
343343 then 0
344344 else gwxAmountCalc
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let SCALE8 = 8
77
88 let MULT8 = 100000000
99
1010 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), (("mandatory this." + key) + " is not defined"))
1111
1212
1313 func getIntOrZero (key) = valueOrElse(getInteger(this, key), 0)
1414
1515
1616 func getIntOrFail (key) = valueOrErrorMessage(getInteger(key), (("mandatory this." + key) + " is not defined"))
1717
1818
1919 func asAnyList (val) = match val {
2020 case valAnyLyst: List[Any] =>
2121 valAnyLyst
2222 case _ =>
2323 throw("fail to cast into List[Any]")
2424 }
2525
2626
2727 func asInt (val) = match val {
2828 case valInt: Int =>
2929 valInt
3030 case _ =>
3131 throw("fail to cast into Int")
3232 }
3333
3434
3535 func keyFactoryAddress () = "%s%s__config__factoryAddress"
3636
3737
3838 let IdxFactoryCfgStakingDapp = 1
3939
4040 let IdxFactoryCfgBoostingDapp = 2
4141
4242 let IdxFactoryCfgIdoDapp = 3
4343
4444 let IdxFactoryCfgTeamDapp = 4
4545
4646 let IdxFactoryCfgEmissionDapp = 5
4747
4848 let IdxFactoryCfgRestDapp = 6
4949
5050 let IdxFactoryCfgSlippageDapp = 7
5151
5252 func keyFactoryCfg () = "%s__factoryConfig"
5353
5454
5555 func keyFactoryLp2AssetsMapping (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
5656
5757
5858 func keyFactoryLpList () = "%s__lpTokensList"
5959
6060
6161 func keyFactoryLpAssetToPoolContractAddress (lpAssetStr) = makeString(["%s%s%s", lpAssetStr, "mappings__lpAsset2PoolContract"], SEP)
6262
6363
6464 func keyFactoryPoolWeight (contractAddress) = makeString(["%s%s", "poolWeight", contractAddress], SEP)
6565
6666
6767 func readFactoryAddressOrFail () = addressFromStringValue(getStringOrFail(this, keyFactoryAddress()))
6868
6969
7070 func readLpList () = split(valueOrElse(getString(readFactoryAddressOrFail(), keyFactoryLpList()), ""), SEP)
7171
7272
7373 func readFactoryCfgOrFail (factory) = split(getStringOrFail(factory, keyFactoryCfg()), SEP)
7474
7575
7676 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
7777
7878
7979 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
8080
8181
8282 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
8383
8484
8585 let IdxCfgAssetId = 1
8686
8787 let IdxCfgMinLockAmount = 2
8888
8989 let IdxCfgMinLockDuration = 3
9090
9191 let IdxCfgMaxLockDuration = 4
9292
9393 let IdxCfgMathContract = 5
9494
9595 func keyConfig () = "%s__config"
9696
9797
9898 func readConfigArrayOrFail () = split(getStringOrFail(this, keyConfig()), SEP)
9999
100100
101101 func formatConfigS (assetId,minLockAmount,minLockDuration,maxLockDuration,mathContract) = makeString(["%s%d%d%d", assetId, minLockAmount, minLockDuration, maxLockDuration, mathContract], SEP)
102102
103103
104104 func formatConfig (assetId,minLockAmount,minLockDuration,maxLockDuration,mathContract) = formatConfigS(assetId, toString(minLockAmount), toString(minLockDuration), toString(maxLockDuration), mathContract)
105105
106106
107107 let IdxLockUserNum = 1
108108
109109 let IdxLockAmount = 2
110110
111111 let IdxLockStart = 3
112112
113113 let IdxLockDuration = 4
114114
115115 let IdxLockParamK = 5
116116
117117 let IdxLockParamB = 6
118118
119119 func keyLockParamsRecord (userAddress) = makeString(["%s%s__lock", userAddress], SEP)
120120
121121
122122 func readLockParamsRecordOrFail (userAddress) = split(getStringOrFail(this, keyLockParamsRecord(userAddress)), SEP)
123123
124124
125125 func formatLockParamsRecordS (userNum,amount,start,duration,paramK,paramB) = makeString(["%d%d%d%d%d%d", userNum, amount, start, duration, paramK, paramB], SEP)
126126
127127
128128 func formatLockParamsRecord (userNum,amount,start,duration,paramK,paramB) = formatLockParamsRecordS(userNum, toString(amount), toString(start), toString(duration), toString(paramK), toString(paramB))
129129
130130
131131 func keyNextUserNum () = "%s__nextUserNum"
132132
133133
134134 func keyUser2NumMapping (userAddress) = makeString(["%s%s%s__mapping__user2num", userAddress], SEP)
135135
136136
137137 func keyNum2UserMapping (num) = makeString(["%s%s%s__mapping__num2user", num], SEP)
138138
139139
140140 func keyLockParamUserAmount (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "amount"], SEP)
141141
142142
143143 func keyLockParamStartBlock (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "start"], SEP)
144144
145145
146146 func keyLockParamDuration (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "duration"], SEP)
147147
148148
149149 func keyLockParamK (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "k"], SEP)
150150
151151
152152 func keyLockParamB (userNum) = makeString(["%s%d%s__paramByUserNum", userNum, "b"], SEP)
153153
154154
155155 func keyLockParamByPeriodK (userNum,period) = makeString(["%s%d%s%d__paramByPeriod", userNum, "k", period], SEP)
156156
157157
158158 func keyLockParamByPeriodB (userNum,period) = makeString(["%s%d%s%d__paramByPeriod", userNum, "b", period], SEP)
159159
160160
161161 func keyLockParamTotalAmount () = "%s%s__stats__activeTotalLocked"
162162
163163
164164 func keyStatsLocksDurationSumInBlocks () = "%s%s__stats__locksDurationSumInBlocks"
165165
166166
167167 func keyStatsLocksCount () = "%s%s__stats__locksCount"
168168
169169
170170 func keyStatsUsersCount () = "%s%s__stats__activeUsersCount"
171171
172172
173173 func HistoryEntry (type,user,amount,lockStart,duration,k,b,i) = {
174174 let historyKEY = makeString(["%s%s%s%s__history", type, user, toBase58String(i.transactionId)], SEP)
175175 let historyDATA = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(amount), toString(lockStart), toString(duration), toString(k), toString(b)], SEP)
176176 StringEntry(historyKEY, historyDATA)
177177 }
178178
179179
180180 func StatsEntry (totalLockedInc,durationInc,lockCountInc,usersCountInc) = {
181181 let locksDurationSumInBlocksKEY = keyStatsLocksDurationSumInBlocks()
182182 let locksCountKEY = keyStatsLocksCount()
183183 let usersCountKEY = keyStatsUsersCount()
184184 let totalAmountKEY = keyLockParamTotalAmount()
185185 let locksDurationSumInBlocks = getIntOrZero(locksCountKEY)
186186 let locksCount = getIntOrZero(locksCountKEY)
187187 let usersCount = getIntOrZero(usersCountKEY)
188188 let totalAmount = getIntOrZero(totalAmountKEY)
189189 [IntegerEntry(locksDurationSumInBlocksKEY, (locksDurationSumInBlocks + durationInc)), IntegerEntry(locksCountKEY, (locksCount + lockCountInc)), IntegerEntry(usersCountKEY, (usersCount + usersCountInc)), IntegerEntry(totalAmountKEY, (totalAmount + totalLockedInc))]
190190 }
191191
192192
193193 func LockParamsEntry (userAddress,userNum,amount,start,duration,k,b,period) = {
194194 let userAmountKEY = keyLockParamUserAmount(userNum)
195195 let startBlockKEY = keyLockParamStartBlock(userNum)
196196 let durationKEY = keyLockParamDuration(userNum)
197197 let kKEY = keyLockParamK(userNum)
198198 let bKEY = keyLockParamB(userNum)
199199 let kByPerioKEY = keyLockParamByPeriodK(userNum, period)
200200 let bByPeriodKEY = keyLockParamByPeriodB(userNum, period)
201201 [IntegerEntry(userAmountKEY, amount), IntegerEntry(startBlockKEY, start), IntegerEntry(durationKEY, duration), IntegerEntry(kKEY, k), IntegerEntry(bKEY, b), IntegerEntry(kByPerioKEY, k), IntegerEntry(bByPeriodKEY, b), StringEntry(keyLockParamsRecord(userAddress), formatLockParamsRecord(userNum, amount, start, duration, k, b))]
202202 }
203203
204204
205205 func extractOptionalPaymentAmountOrFail (i,expectedAssetId) = if ((size(i.payments) > 1))
206206 then throw("only one payment is allowed")
207207 else if ((size(i.payments) == 0))
208208 then 0
209209 else {
210210 let pmt = i.payments[0]
211211 if ((value(pmt.assetId) != expectedAssetId))
212212 then throw("invalid asset id in payment")
213213 else pmt.amount
214214 }
215215
216216
217217 @Callable(i)
218218 func constructor (factoryAddressStr,lockAssetIdStr,minLockAmount,minDuration,maxDuration,mathContract) = if ((this != i.caller))
219219 then throw("not authorized")
220220 else ([IntegerEntry(keyNextUserNum(), 0), StringEntry(keyConfig(), formatConfig(lockAssetIdStr, minLockAmount, minDuration, maxDuration, mathContract)), StringEntry(keyFactoryAddress(), factoryAddressStr)] ++ StatsEntry(0, 0, 0, 0))
221221
222222
223223
224224 @Callable(i)
225225 func lock (duration) = {
226226 let cfgArray = readConfigArrayOrFail()
227227 let assetIdStr = cfgArray[IdxCfgAssetId]
228228 let assetId = fromBase58String(assetIdStr)
229229 let minLockAmount = parseIntValue(cfgArray[IdxCfgMinLockAmount])
230230 let minLockDuration = parseIntValue(cfgArray[IdxCfgMinLockDuration])
231231 let maxLockDuration = parseIntValue(cfgArray[IdxCfgMaxLockDuration])
232232 let mathContract = addressFromStringValue(cfgArray[IdxCfgMathContract])
233233 if ((size(i.payments) != 1))
234234 then throw("invalid payment - exact one payment must be attached")
235235 else {
236236 let pmt = i.payments[0]
237237 let pmtAmount = pmt.amount
238238 if ((assetId != value(pmt.assetId)))
239239 then throw((("invalid asset is in payment - " + assetIdStr) + " is expected"))
240240 else {
241241 let nextUserNumKEY = keyNextUserNum()
242242 let userAddressStr = toString(i.caller)
243243 let userIsExisting = isDefined(getString(keyUser2NumMapping(userAddressStr)))
244244 let userNumStr = if (userIsExisting)
245245 then value(getString(keyUser2NumMapping(userAddressStr)))
246246 else toString(getIntOrFail(nextUserNumKEY))
247247 let userNum = parseIntValue(userNumStr)
248248 let lockStart = height
249249 let startBlockKEY = keyLockParamStartBlock(userNumStr)
250250 let durationKEY = keyLockParamDuration(userNumStr)
251251 let userAmountKEY = keyLockParamUserAmount(userNumStr)
252252 let userAmount = getIntOrZero(userAmountKEY)
253253 if ((minLockDuration > duration))
254254 then throw(("passed duration is less then minLockDuration=" + toString(minLockDuration)))
255255 else if ((duration > maxLockDuration))
256256 then throw(("passed duration is greater then maxLockDuration=" + toString(maxLockDuration)))
257257 else if (if (userIsExisting)
258258 then ((getIntOrFail(startBlockKEY) + getIntOrFail(durationKEY)) >= lockStart)
259259 else false)
260260 then throw("there is an active lock - consider to use increaseLock")
261261 else {
262262 let gWxParamsResultList = asAnyList(invoke(mathContract, "calcGwxParamsREADONLY", [pmtAmount, lockStart, duration], nil))
263263 let k = asInt(gWxParamsResultList[0])
264264 let b = asInt(gWxParamsResultList[1])
265265 let period = toString(asInt(gWxParamsResultList[2]))
266266 let arr = if (userIsExisting)
267267 then nil
268268 else [IntegerEntry(nextUserNumKEY, (userNum + 1)), StringEntry(keyUser2NumMapping(userAddressStr), userNumStr), StringEntry(keyNum2UserMapping(userNumStr), userAddressStr)]
269269 (((arr ++ LockParamsEntry(userAddressStr, userNumStr, pmtAmount, lockStart, duration, k, b, period)) ++ StatsEntry(pmtAmount, duration, 1, if (userIsExisting)
270270 then 0
271271 else 1)) :+ HistoryEntry("lock", userAddressStr, pmtAmount, lockStart, duration, k, b, i))
272272 }
273273 }
274274 }
275275 }
276276
277277
278278
279279 @Callable(i)
280280 func increaseLock (deltaDuration) = {
281281 let cfgArray = readConfigArrayOrFail()
282282 let assetIdStr = cfgArray[IdxCfgAssetId]
283283 let assetId = fromBase58String(assetIdStr)
284284 let maxLockDuration = parseIntValue(cfgArray[IdxCfgMaxLockDuration])
285285 let mathContract = addressFromStringValue("")
286286 let pmtAmount = extractOptionalPaymentAmountOrFail(i, assetId)
287287 let userAddressStr = toString(i.caller)
288288 let k = 0
289289 let b = 0
290290 let period = "0"
291291 let userRecordArray = readLockParamsRecordOrFail(userAddressStr)
292292 let userNumStr = userRecordArray[IdxLockUserNum]
293293 let userAmount = parseIntValue(userRecordArray[IdxLockAmount])
294294 let lockStart = parseIntValue(userRecordArray[IdxLockStart])
295295 let lockDuration = parseIntValue(userRecordArray[IdxLockDuration])
296296 let lockEnd = (lockStart + lockDuration)
297297 let newAmount = (userAmount + pmtAmount)
298298 let newLockDuration = (lockDuration + deltaDuration)
299299 if ((0 > deltaDuration))
300300 then throw("duration is less then zero")
301301 else if ((newLockDuration > maxLockDuration))
302302 then throw(("deltaDuration + existedLockDuration is greater then maxLockDuration=" + toString(maxLockDuration)))
303303 else if (if ((height >= lockEnd))
304304 then (userAmount > 0)
305305 else false)
306306 then throw("there is an expired lock - need to unlock before new lock")
307307 else ((LockParamsEntry(userAddressStr, userNumStr, newAmount, lockStart, newLockDuration, k, b, period) ++ StatsEntry(pmtAmount, deltaDuration, 0, 0)) :+ HistoryEntry("lock", userAddressStr, newAmount, lockStart, newLockDuration, k, b, i))
308308 }
309309
310310
311311
312312 @Callable(i)
313313 func unlock (userAddress) = {
314314 let userRecordArray = readLockParamsRecordOrFail(userAddress)
315315 let userNumStr = userRecordArray[IdxLockUserNum]
316316 let userAmount = parseIntValue(userRecordArray[IdxLockAmount])
317317 let lockStart = parseIntValue(userRecordArray[IdxLockStart])
318318 let lockDuration = parseIntValue(userRecordArray[IdxLockDuration])
319319 let lockEnd = (lockStart + lockDuration)
320320 let cfgArray = readConfigArrayOrFail()
321321 let assetId = fromBase58String(cfgArray[IdxCfgAssetId])
322322 if ((lockEnd >= height))
323323 then throw((("wait " + toString(lockEnd)) + " to unlock"))
324324 else if ((0 >= userAmount))
325325 then throw("nothing to unlock")
326326 else {
327327 let period = "0"
328328 (((LockParamsEntry(userAddress, userNumStr, 0, lockStart, lockDuration, 0, 0, period) ++ StatsEntry(-(userAmount), 0, 0, -1)) :+ HistoryEntry("unlock", userAddress, userAmount, lockStart, lockDuration, 0, 0, i)) :+ ScriptTransfer(addressFromStringValue(userAddress), userAmount, assetId))
329329 }
330330 }
331331
332332
333333
334334 @Callable(i)
335335 func gwxUserInfoREADONLY (userAddress) = {
336336 let EMPTY = "empty"
337337 let user2NumMappingKEY = keyUser2NumMapping(userAddress)
338338 let userNum = valueOrElse(getString(user2NumMappingKEY), EMPTY)
339339 let k = valueOrElse(getInteger(keyLockParamK(userNum)), 0)
340340 let b = valueOrElse(getInteger(keyLockParamB(userNum)), 0)
341- let gwxAmountCalc = fraction(((k * height) + b), 1, SCALE8)
341+ let gwxAmountCalc = fraction(((k * height) + b), 1, MULT8)
342342 let gwxAmount = if ((0 > gwxAmountCalc))
343343 then 0
344344 else gwxAmountCalc
345345 $Tuple2(nil, [gwxAmount])
346346 }
347347
348348

github/deemru/w8io/026f985 
65.98 ms