tx · ofZZG2QRyV8e5Vyf1AUAfP2apq3JEsYRR2RihFRqyhS

3Ms7SA6E2ntk65GZD46LCZyGJjc4XNGuWpw:  -0.01400000 Waves

2022.03.11 17:44 [1959425] smart account 3Ms7SA6E2ntk65GZD46LCZyGJjc4XNGuWpw > SELF 0.00000000 Waves

{ "type": 13, "id": "ofZZG2QRyV8e5Vyf1AUAfP2apq3JEsYRR2RihFRqyhS", "fee": 1400000, "feeAssetId": null, "timestamp": 1647009889180, "version": 1, "sender": "3Ms7SA6E2ntk65GZD46LCZyGJjc4XNGuWpw", "senderPublicKey": "Xr66kzm4ArQMXWGfdhubHQuHx1uwhWdjthS9EP1ayUn", "proofs": [ "KbeAQKTGP5fSEi2Fuhib5zwdJbLu174hUuVEuL7n8Pqj6Hde1ZvwjuVi95DJs8XoHWSb8n6NzfgffR932eaCzV9" ], "script": "base64:AAIFAAAAAAAAABUIAhIDCgEIEgASAwoBCBIDCgEIEgAAAAAkAAAAAANTRVACAAAAAl9fAAAAAAZzY2FsZTgAAAAAAAX14QAAAAAAEXBvb2xTdGF0c1ByaWNlS2V5AAAAAAAAAAAEAAAAAA5pZHhQb29sQWRkcmVzcwAAAAAAAAAAAQAAAAANaWR4UG9vbFN0YXR1cwAAAAAAAAAAAgAAAAAQaWR4UG9vbExQQXNzZXRJZAAAAAAAAAAAAwAAAAANaWR4QW10QXNzZXRJZAAAAAAAAAAABAAAAAAPaWR4UHJpY2VBc3NldElkAAAAAAAAAAAFAAAAAA5pZHhBbXRBc3NldERjbQAAAAAAAAAABgAAAAAQaWR4UHJpY2VBc3NldERjbQAAAAAAAAAABwAAAAAOaWR4SUFtdEFzc2V0SWQAAAAAAAAAAAgAAAAAEGlkeElQcmljZUFzc2V0SWQAAAAAAAAAAAkAAAAADWlkeExQQXNzZXREY20AAAAAAAAAAAoAAAAAE2lkeE1hdGNoZXJQdWJsaWNLZXkAAAAAAAAAAAsBAAAADmtleVJlZ2lzdGVyUHV0AAAAAgAAAAtwb29sQWRkcmVzcwAAAAR0eElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAslcyVzJXNfX1BfXwUAAAALcG9vbEFkZHJlc3MCAAAAAl9fBQAAAAR0eElkAQAAABFrZXlSZWdpc3RlckludmVzdAAAAAIAAAALcG9vbEFkZHJlc3MAAAAEdHhJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAQJXMlcyVzX19pbnZlc3RfXwUAAAALcG9vbEFkZHJlc3MCAAAAAl9fBQAAAAR0eElkAQAAABZrZXlQb29sVG90YWxBbXRCeUFzc2V0AAAAAgAAAAtwb29sQWRkcmVzcwAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA8lcyVzJXNfX3RvdGFsX18FAAAAC3Bvb2xBZGRyZXNzAgAAAAJfXwUAAAAHYXNzZXRJZAEAAAASa2V5RmFjdG9yeUNvbnRyYWN0AAAAAAIAAAATJXNfX2ZhY3RvcnlDb250cmFjdAEAAAAga2V5U2xpcHBhZ2VBbXRQZXJBc3NldEN1bXVsYXRpdmUAAAACAAAAC3Bvb2xBZGRyZXNzAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAAC3Bvb2xBZGRyZXNzAgAAAAJfXwUAAAAHYXNzZXRJZAIAAAAUX19zbGlwcGFnZUN1bXVsYXRpdmUBAAAAEGtleUZhY3RvcnlDb25maWcAAAAAAgAAABElc19fZmFjdG9yeUNvbmZpZwEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAAAglcyVzJXNfXwUAAAATcG9vbENvbnRyYWN0QWRkcmVzcwIAAAAjX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MlBvb2xBc3NldHMBAAAAH2tleU1hcHBpbmdzSW50ZXJuYWwyYmFzZUFzc2V0SWQAAAABAAAAEWludGVybmFsQmFzZUFzc2V0CQABLAAAAAICAAAAKCVzJXMlZF9fbWFwcGluZ3NfX2ludGVybmFsMmJhc2VBc3NldElkX18JAAGkAAAAAQUAAAARaW50ZXJuYWxCYXNlQXNzZXQBAAAADWtleVBvb2xDb25maWcAAAACAAAACWlBbXRBc3NldAAAAAtpUHJpY2VBc3NldAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAglZCVkJXNfXwUAAAAJaUFtdEFzc2V0AgAAAAJfXwUAAAALaVByaWNlQXNzZXQCAAAACF9fY29uZmlnAQAAABNrZXlBbGxQb29sc1NodXRkb3duAAAAAAIAAAAMJXNfX3NodXRkb3duAQAAAA1rZXlQb29sV2VpZ2h0AAAAAQAAAA9jb250cmFjdEFkZHJlc3MJAAEsAAAAAgIAAAASJXMlc19fcG9vbFdlaWdodF9fBQAAAA9jb250cmFjdEFkZHJlc3MBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAD2ZhY3RvcnlDb250cmFj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AQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlGYWN0b3J5Q29udHJhY3QAAAAABQAAAA9mYWN0b3J5Q29udHJhY3QFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAADcHV0AAAAAAQAAAAEcG9vbAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAC3BtdEFtdEFzc2V0CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAApwbXRBc3NldElkAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAC3BtdEFtdEFzc2V0AAAAB2Fzc2V0SWQCAAAABVdBVkVTCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAtwbXRBbXRBc3NldAAAAAdhc3NldElkBAAAAAtwbXRBc3NldEFtdAgFAAAAC3BtdEFtdEFzc2V0AAAABmFtb3VudAQAAAAKcG9vbEFzc2V0cwkABLUAAAACCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAARwb29sAgAAAA5JbnZhbGlkIGNhbGxlcgUAAAADU0VQBAAAAA1hbW91bnRBc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAQQAAAAMcHJpY2VBc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAgQAAAALYW1vdW50QXNzZXQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAANYW1vdW50QXNzZXRJZAIAAAARQ2Fubm90IGZpbmQgYXNzZXQEAAAACnByaWNlQXNzZXQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAAMcHJpY2VBc3NldElkAgAAABFDYW5ub3QgZmluZCBhc3NldAQAAAAIdG90YWxBbXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFmtleVBvb2xUb3RhbEFtdEJ5QXNzZXQAAAACBQAAAARwb29sBQAAAApwbXRBc3NldElkAAAAAAAAAAAABAAAABVjdW11bGF0aXZlU2xpcHBhZ2VBbXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAIGtleVNsaXBwYWdlQW10UGVyQXNzZXRDdW11bGF0aXZlAAAAAgUAAAAEcG9vbAUAAAAKcG10QXNzZXRJZAAAAAAAAAAAAAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5UmVnaXN0ZXJQdXQAAAACBQAAAARwb29sCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAQAAABFkYXRhUHV0QWN0aW9uSW5mbwAAAAQFAAAACnBtdEFzc2V0SWQFAAAAC3BtdEFzc2V0QW10BQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5UG9vbFRvdGFsQW10QnlBc3NldAAAAAIFAAAABHBvb2wFAAAACnBtdEFzc2V0SWQJAABkAAAAAgUAAAAIdG90YWxBbXQFAAAAC3BtdEFzc2V0QW10CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAga2V5U2xpcHBhZ2VBbXRQZXJBc3NldEN1bXVsYXRpdmUAAAACBQAAAARwb29sBQAAAApwbXRBc3NldElkCQAAZAAAAAIFAAAAFWN1bXVsYXRpdmVTbGlwcGFnZUFtdAUAAAALcG10QXNzZXRBbXQFAAAAA25pbAAAAAFpAQAAAAZpbnZlc3QAAAABAAAADnBvb2xBZGRyZXNzU3RyBAAAAAtwb29sQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAADnBvb2xBZGRyZXNzU3RyAgAAABRpbnZhbGlkIHBvb2wgYWRkcmVzcwQAAAAKcG9vbEFzc2V0cwkABLUAAAACCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAA5wb29sQWRkcmVzc1N0cgIAAAAUSW52YWxpZCBwb29sIHBhc3NlZC4FAAAAA1NFUAQAAAAEYW1JZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAH2tleU1hcHBpbmdzSW50ZXJuYWwyYmFzZUFzc2V0SWQAAAABCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAQIAAAAWTm8gYXNzZXQgbWFwcGluZyBmb3VuZAQAAAAEcHJJZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAH2tleU1hcHBpbmdzSW50ZXJuYWwyYmFzZUFzc2V0SWQAAAABCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAgIAAAAWTm8gYXNzZXQgbWFwcGluZyBmb3VuZAQAAAAJYW1CYWxhbmNlCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABZrZXlQb29sVG90YWxBbXRCeUFzc2V0AAAAAgUAAAAOcG9vbEFkZHJlc3NTdHIFAAAABGFtSWQAAAAAAAAAAAAEAAAACXByQmFsYW5jZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWa2V5UG9vbFRvdGFsQW10QnlBc3NldAAAAAIFAAAADnBvb2xBZGRyZXNzU3RyBQAAAARwcklkAAAAAAAAAAAABAAAAA1lc3RCeVByUmVzdWx0CQAD/AAAAAQFAAAAC3Bvb2xBZGRyZXNzAgAAAB9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQAETAAAAAIFAAAACXByQmFsYW5jZQUAAAADbmlsBQAAAANuaWwEAAAADWVzdEJ5QW1SZXN1bHQJAAP8AAAABAUAAAALcG9vbEFkZHJlc3MCAAAAIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZCQAETAAAAAIFAAAACWFtQmFsYW5jZQUAAAADbmlsBQAAAANuaWwEAAAADklkeEVzdEFtQW1vdW50AAAAAAAAAAAHBAAAAA5JZHhFc3RQckFtb3VudAAAAAAAAAAACAQAAAAIZXN0QW1BbXQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIJAAS1AAAAAgkBAAAACGFzU3RyaW5nAAAAAQUAAAANZXN0QnlQclJlc3VsdAUAAAADU0VQBQAAAA5JZHhFc3RBbUFtb3VudAIAAAAmZmFpbCB0byBwYXJzZSBlc3RpbWF0ZWQgYW1Bc3NldCBhbW91bnQEAAAACGVzdFByQW10CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACCQAEtQAAAAIJAQAAAAhhc1N0cmluZwAAAAEFAAAADWVzdEJ5QW1SZXN1bHQFAAAAA1NFUAUAAAAOSWR4RXN0UHJBbW91bnQCAAAAJmZhaWwgdG8gcGFyc2UgZXN0aW1hdGVkIHByQXNzZXQgYW1vdW50BAAAAAskdDA2NjQzNjc0NAMJAABnAAAAAgUAAAAJYW1CYWxhbmNlBQAAAAhlc3RBbUFtdAkABRQAAAACBQAAAAhlc3RBbUFtdAUAAAAJcHJCYWxhbmNlCQAFFAAAAAIFAAAACWFtQmFsYW5jZQUAAAAIZXN0UHJBbXQEAAAABWFtQW10CAUAAAALJHQwNjY0MzY3NDQAAAACXzEEAAAABXByQW10CAUAAAALJHQwNjY0MzY3NDQAAAACXzIEAAAACWFtQXNzZXRJZAMJAAAAAAAAAgUAAAAEYW1JZAIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAAEYW1JZAQAAAAJcHJBc3NldElkAwkAAAAAAAACBQAAAARwcklkAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAARwcklkBAAAAAVscFB1dAkAA/wAAAAEBQAAAAtwb29sQWRkcmVzcwIAAAAKcHV0Rm9yRnJlZQkABEwAAAACAAAAAAAAAAPoBQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAACWFtQXNzZXRJZAUAAAAFYW1BbXQJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAACXByQXNzZXRJZAUAAAAFcHJBbXQFAAAAA25pbAMJAAAAAAAAAgUAAAAFbHBQdXQFAAAABWxwUHV0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlSZWdpc3RlckludmVzdAAAAAIFAAAADnBvb2xBZGRyZXNzU3RyCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAQAAABRkYXRhSW52ZXN0QWN0aW9uSW5mbwAAAAQFAAAABWFtQW10BQAAAAVwckFtdAUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleVBvb2xUb3RhbEFtdEJ5QXNzZXQAAAACBQAAAA5wb29sQWRkcmVzc1N0cgUAAAAEYW1JZAkAAGUAAAACBQAAAAlhbUJhbGFuY2UFAAAABWFtQW10CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5UG9vbFRvdGFsQW10QnlBc3NldAAAAAIFAAAADnBvb2xBZGRyZXNzU3RyBQAAAARwcklkCQAAZQAAAAIFAAAACXByQmFsYW5jZQUAAAAFcHJBbXQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXndp/uh", "chainId": 84, "height": 1959425, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5ppiNbZ2xyznhgkef5XLFAhkEMQ3eaaVYvyPLrWg5s4b Next: 7wMyUpr7Wb1fYFUCyBEr2Xw6sAZ8QTkyT2MjHnodhWVS Diff:
OldNewDifferences
6262 func keyPoolWeight (contractAddress) = ("%s%s__poolWeight__" + contractAddress)
6363
6464
65+func keyManagerPublicKey () = "%s__managerPublicKey"
66+
67+
68+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
69+
70+
6571 let factoryContract = addressFromStringValue(valueOrErrorMessage(getString(this, keyFactoryContract()), "No Factory Acc found."))
6672
6773 func convertAssetId (assetId) = if (!(isDefined(assetId)))
8692 func toScale (amt,resScale,curScale) = fraction(amt, resScale, curScale)
8793
8894
95+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
96+ case s: String =>
97+ fromBase58String(s)
98+ case _: Unit =>
99+ unit
100+ case _ =>
101+ throw("Match error")
102+}
103+
104+
105+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
106+ case s: String =>
107+ fromBase58String(s)
108+ case _: Unit =>
109+ unit
110+ case _ =>
111+ throw("Match error")
112+}
113+
114+
115+func mustManager (i) = {
116+ let pd = throw("Permission denied")
117+ match managerPublicKeyOrUnit() {
118+ case pk: ByteVector =>
119+ if ((i.callerPublicKey == pk))
120+ then true
121+ else pd
122+ case _: Unit =>
123+ if ((i.caller == this))
124+ then true
125+ else pd
126+ case _ =>
127+ throw("Match error")
128+ }
129+ }
130+
131+
89132 @Callable(i)
90-func constructor (factoryContract) = if ((i.caller != this))
91- then throw("permissions denied")
92- else [StringEntry(keyFactoryContract(), factoryContract)]
133+func constructor (factoryContract) = {
134+ let checkCaller = mustManager(i)
135+ if ((checkCaller == checkCaller))
136+ then [StringEntry(keyFactoryContract(), factoryContract)]
137+ else throw("Strict value is not equal to itself.")
138+ }
93139
94140
95141
127173 let IdxEstPrAmount = 8
128174 let estAmAmt = valueOrErrorMessage(parseIntValue(split(asString(estByPrResult), SEP)[IdxEstAmAmount]), "fail to parse estimated amAsset amount")
129175 let estPrAmt = valueOrErrorMessage(parseIntValue(split(asString(estByAmResult), SEP)[IdxEstPrAmount]), "fail to parse estimated prAsset amount")
130- let $t060346135 = if ((amBalance >= estAmAmt))
176+ let $t066436744 = if ((amBalance >= estAmAmt))
131177 then $Tuple2(estAmAmt, prBalance)
132178 else $Tuple2(amBalance, estPrAmt)
133- let amAmt = $t060346135._1
134- let prAmt = $t060346135._2
179+ let amAmt = $t066436744._1
180+ let prAmt = $t066436744._2
135181 let amAssetId = if ((amId == "WAVES"))
136182 then unit
137183 else fromBase58String(amId)
145191 }
146192
147193
194+
195+@Callable(i)
196+func setManager (pendingManagerPublicKey) = {
197+ let checkCaller = mustManager(i)
198+ if ((checkCaller == checkCaller))
199+ then {
200+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
201+ if ((checkManagerPublicKey == checkManagerPublicKey))
202+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
203+ else throw("Strict value is not equal to itself.")
204+ }
205+ else throw("Strict value is not equal to itself.")
206+ }
207+
208+
209+
210+@Callable(i)
211+func confirmManager () = {
212+ let pm = pendingManagerPublicKeyOrUnit()
213+ let hasPM = if (isDefined(pm))
214+ then true
215+ else throw("No pending manager")
216+ if ((hasPM == hasPM))
217+ then {
218+ let checkPM = if ((i.callerPublicKey == value(pm)))
219+ then true
220+ else throw("You are not pending manager")
221+ if ((checkPM == checkPM))
222+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
223+ else throw("Strict value is not equal to itself.")
224+ }
225+ else throw("Strict value is not equal to itself.")
226+ }
227+
228+
148229 @Verifier(tx)
149-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
230+func verify () = {
231+ let targetPublicKey = match managerPublicKeyOrUnit() {
232+ case pk: ByteVector =>
233+ pk
234+ case _: Unit =>
235+ tx.senderPublicKey
236+ case _ =>
237+ throw("Match error")
238+ }
239+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
240+ }
150241
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let scale8 = 100000000
77
88 let poolStatsPriceKey = 4
99
1010 let idxPoolAddress = 1
1111
1212 let idxPoolStatus = 2
1313
1414 let idxPoolLPAssetId = 3
1515
1616 let idxAmtAssetId = 4
1717
1818 let idxPriceAssetId = 5
1919
2020 let idxAmtAssetDcm = 6
2121
2222 let idxPriceAssetDcm = 7
2323
2424 let idxIAmtAssetId = 8
2525
2626 let idxIPriceAssetId = 9
2727
2828 let idxLPAssetDcm = 10
2929
3030 let idxMatcherPublicKey = 11
3131
3232 func keyRegisterPut (poolAddress,txId) = ((("%s%s%s__P__" + poolAddress) + "__") + txId)
3333
3434
3535 func keyRegisterInvest (poolAddress,txId) = ((("%s%s%s__invest__" + poolAddress) + "__") + txId)
3636
3737
3838 func keyPoolTotalAmtByAsset (poolAddress,assetId) = ((("%s%s%s__total__" + poolAddress) + "__") + assetId)
3939
4040
4141 func keyFactoryContract () = "%s__factoryContract"
4242
4343
4444 func keySlippageAmtPerAssetCumulative (poolAddress,assetId) = (((("%s%s%s__" + poolAddress) + "__") + assetId) + "__slippageCumulative")
4545
4646
4747 func keyFactoryConfig () = "%s__factoryConfig"
4848
4949
5050 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2PoolAssets")
5151
5252
5353 func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
5454
5555
5656 func keyPoolConfig (iAmtAsset,iPriceAsset) = (((("%d%d%s__" + iAmtAsset) + "__") + iPriceAsset) + "__config")
5757
5858
5959 func keyAllPoolsShutdown () = "%s__shutdown"
6060
6161
6262 func keyPoolWeight (contractAddress) = ("%s%s__poolWeight__" + contractAddress)
6363
6464
65+func keyManagerPublicKey () = "%s__managerPublicKey"
66+
67+
68+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
69+
70+
6571 let factoryContract = addressFromStringValue(valueOrErrorMessage(getString(this, keyFactoryContract()), "No Factory Acc found."))
6672
6773 func convertAssetId (assetId) = if (!(isDefined(assetId)))
6874 then "WAVES"
6975 else assetId
7076
7177
7278 func dataPutActionInfo (inAssetId,inAssetAmt,txHeight,txTimestamp) = makeString(["%s%d%d%d", inAssetId, toString(inAssetAmt), toString(txHeight), toString(txTimestamp)], SEP)
7379
7480
7581 func dataInvestActionInfo (outAmountAssetAmt,outPriceAssetAmt,txHeight,txTimestamp) = makeString(["%d%d%d%d", toString(outAmountAssetAmt), toString(outPriceAssetAmt), toString(txHeight), toString(txTimestamp)], SEP)
7682
7783
7884 func asString (val) = match val {
7985 case valStr: String =>
8086 valStr
8187 case _ =>
8288 throw("fail to cast into String")
8389 }
8490
8591
8692 func toScale (amt,resScale,curScale) = fraction(amt, resScale, curScale)
8793
8894
95+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
96+ case s: String =>
97+ fromBase58String(s)
98+ case _: Unit =>
99+ unit
100+ case _ =>
101+ throw("Match error")
102+}
103+
104+
105+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
106+ case s: String =>
107+ fromBase58String(s)
108+ case _: Unit =>
109+ unit
110+ case _ =>
111+ throw("Match error")
112+}
113+
114+
115+func mustManager (i) = {
116+ let pd = throw("Permission denied")
117+ match managerPublicKeyOrUnit() {
118+ case pk: ByteVector =>
119+ if ((i.callerPublicKey == pk))
120+ then true
121+ else pd
122+ case _: Unit =>
123+ if ((i.caller == this))
124+ then true
125+ else pd
126+ case _ =>
127+ throw("Match error")
128+ }
129+ }
130+
131+
89132 @Callable(i)
90-func constructor (factoryContract) = if ((i.caller != this))
91- then throw("permissions denied")
92- else [StringEntry(keyFactoryContract(), factoryContract)]
133+func constructor (factoryContract) = {
134+ let checkCaller = mustManager(i)
135+ if ((checkCaller == checkCaller))
136+ then [StringEntry(keyFactoryContract(), factoryContract)]
137+ else throw("Strict value is not equal to itself.")
138+ }
93139
94140
95141
96142 @Callable(i)
97143 func put () = {
98144 let pool = toString(i.caller)
99145 let pmtAmtAsset = value(i.payments[0])
100146 let pmtAssetId = if (!(isDefined(pmtAmtAsset.assetId)))
101147 then "WAVES"
102148 else toBase58String(value(pmtAmtAsset.assetId))
103149 let pmtAssetAmt = pmtAmtAsset.amount
104150 let poolAssets = split(valueOrErrorMessage(getString(factoryContract, keyMappingPoolContractAddressToPoolAssets(pool)), "Invalid caller"), SEP)
105151 let amountAssetId = parseIntValue(poolAssets[1])
106152 let priceAssetId = parseIntValue(poolAssets[2])
107153 let amountAsset = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(amountAssetId)), "Cannot find asset")
108154 let priceAsset = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(priceAssetId)), "Cannot find asset")
109155 let totalAmt = valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(pool, pmtAssetId)), 0)
110156 let cumulativeSlippageAmt = valueOrElse(getInteger(this, keySlippageAmtPerAssetCumulative(pool, pmtAssetId)), 0)
111157 [StringEntry(keyRegisterPut(pool, toBase58String(i.transactionId)), dataPutActionInfo(pmtAssetId, pmtAssetAmt, height, lastBlock.timestamp)), IntegerEntry(keyPoolTotalAmtByAsset(pool, pmtAssetId), (totalAmt + pmtAssetAmt)), IntegerEntry(keySlippageAmtPerAssetCumulative(pool, pmtAssetId), (cumulativeSlippageAmt + pmtAssetAmt))]
112158 }
113159
114160
115161
116162 @Callable(i)
117163 func invest (poolAddressStr) = {
118164 let poolAddress = valueOrErrorMessage(addressFromString(poolAddressStr), "invalid pool address")
119165 let poolAssets = split(valueOrErrorMessage(getString(factoryContract, keyMappingPoolContractAddressToPoolAssets(poolAddressStr)), "Invalid pool passed."), SEP)
120166 let amId = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(parseIntValue(poolAssets[1]))), "No asset mapping found")
121167 let prId = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(parseIntValue(poolAssets[2]))), "No asset mapping found")
122168 let amBalance = valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(poolAddressStr, amId)), 0)
123169 let prBalance = valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(poolAddressStr, prId)), 0)
124170 let estByPrResult = invoke(poolAddress, "evaluatePutByPriceAssetREADONLY", [prBalance], nil)
125171 let estByAmResult = invoke(poolAddress, "evaluatePutByAmountAssetREADONLY", [amBalance], nil)
126172 let IdxEstAmAmount = 7
127173 let IdxEstPrAmount = 8
128174 let estAmAmt = valueOrErrorMessage(parseIntValue(split(asString(estByPrResult), SEP)[IdxEstAmAmount]), "fail to parse estimated amAsset amount")
129175 let estPrAmt = valueOrErrorMessage(parseIntValue(split(asString(estByAmResult), SEP)[IdxEstPrAmount]), "fail to parse estimated prAsset amount")
130- let $t060346135 = if ((amBalance >= estAmAmt))
176+ let $t066436744 = if ((amBalance >= estAmAmt))
131177 then $Tuple2(estAmAmt, prBalance)
132178 else $Tuple2(amBalance, estPrAmt)
133- let amAmt = $t060346135._1
134- let prAmt = $t060346135._2
179+ let amAmt = $t066436744._1
180+ let prAmt = $t066436744._2
135181 let amAssetId = if ((amId == "WAVES"))
136182 then unit
137183 else fromBase58String(amId)
138184 let prAssetId = if ((prId == "WAVES"))
139185 then unit
140186 else fromBase58String(prId)
141187 let lpPut = invoke(poolAddress, "putForFree", [1000], [AttachedPayment(amAssetId, amAmt), AttachedPayment(prAssetId, prAmt)])
142188 if ((lpPut == lpPut))
143189 then [StringEntry(keyRegisterInvest(poolAddressStr, toBase58String(i.transactionId)), dataInvestActionInfo(amAmt, prAmt, height, lastBlock.timestamp)), IntegerEntry(keyPoolTotalAmtByAsset(poolAddressStr, amId), (amBalance - amAmt)), IntegerEntry(keyPoolTotalAmtByAsset(poolAddressStr, prId), (prBalance - prAmt))]
144190 else throw("Strict value is not equal to itself.")
145191 }
146192
147193
194+
195+@Callable(i)
196+func setManager (pendingManagerPublicKey) = {
197+ let checkCaller = mustManager(i)
198+ if ((checkCaller == checkCaller))
199+ then {
200+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
201+ if ((checkManagerPublicKey == checkManagerPublicKey))
202+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
203+ else throw("Strict value is not equal to itself.")
204+ }
205+ else throw("Strict value is not equal to itself.")
206+ }
207+
208+
209+
210+@Callable(i)
211+func confirmManager () = {
212+ let pm = pendingManagerPublicKeyOrUnit()
213+ let hasPM = if (isDefined(pm))
214+ then true
215+ else throw("No pending manager")
216+ if ((hasPM == hasPM))
217+ then {
218+ let checkPM = if ((i.callerPublicKey == value(pm)))
219+ then true
220+ else throw("You are not pending manager")
221+ if ((checkPM == checkPM))
222+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
223+ else throw("Strict value is not equal to itself.")
224+ }
225+ else throw("Strict value is not equal to itself.")
226+ }
227+
228+
148229 @Verifier(tx)
149-func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
230+func verify () = {
231+ let targetPublicKey = match managerPublicKeyOrUnit() {
232+ case pk: ByteVector =>
233+ pk
234+ case _: Unit =>
235+ tx.senderPublicKey
236+ case _ =>
237+ throw("Match error")
238+ }
239+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
240+ }
150241

github/deemru/w8io/3ef1775 
49.20 ms