tx · 7MCeyDtGLzXadSpGvAqG3WvPoSA9eYay4FHGQt5pPvhJ

3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh:  -0.01800000 Waves

2022.08.16 16:53 [2187114] smart account 3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh > SELF 0.00000000 Waves

{ "type": 13, "id": "7MCeyDtGLzXadSpGvAqG3WvPoSA9eYay4FHGQt5pPvhJ", "fee": 1800000, "feeAssetId": null, "timestamp": 1660657993269, "version": 1, "sender": "3N3g7W8FPoQ7g5EadbAD2GVjrZT5RWpHZZh", "senderPublicKey": "Ap7CkWd6fzBU34kGo4GJJzC5q4qWXuLVunzE25PchdGS", "proofs": [ "25EnKjCQCfkYcdBKfwyStzbQ1TeFokeiGpBfRmrp9F79djo927dHFCaAiC1SEDPkNm3tXCKQoDeooqga3PYmpiUm" ], "script": "base64:AAIFAAAAAAAAAC0IAhIJCgcICBgYAQgBEgASCAoGCAgICAgIEgMKARgSAwoBCBIAEgASBAoCCAgAAAA0AAAAAANTRVACAAAAAl9fAAAAAAVFTVBUWQIAAAAAAAAAAAx3YXZlc0Fzc2V0SWQCAAAABVdBVkVTAAAAABFpbnZhbGlkUHJpY2VBc3NldAIAAAATSW52YWxpZCBwcmljZSBhc3NldAEAAAAIdGhyb3dFcnIAAAABAAAAA21zZwkAAAIAAAABCQAEuQAAAAIJAARMAAAAAgIAAAAQdXNlcl9wb29scy5yaWRlOgkABEwAAAACBQAAAANtc2cFAAAAA25pbAIAAAABIAEAAAAHdGhyb3dQRAAAAAAJAQAAAAh0aHJvd0VycgAAAAECAAAAEVBlcm1pc3Npb24gZGVuaWVkAQAAABR0aHJvd0NyZWF0ZU5vdENhbGxlZAAAAAAJAQAAAAh0aHJvd0VycgAAAAECAAAAJENyZWF0ZSBpcyBub3QgY2FsbGVkIGZvciBhc3NldHMgcGFpcgEAAAARdGhyb3dZb3VOb3RJc3N1ZXIAAAAACQEAAAAIdGhyb3dFcnIAAAABAgAAAB5Zb3UgYXJlIG5vdCBhbW91bnRBc3NldCBpc3N1ZXIBAAAAD3Rocm93UG9vbEV4aXN0cwAAAAAJAQAAAAh0aHJvd0VycgAAAAECAAAAJFBvb2wgd2l0aCBzdWNoIGFzc2V0cyBhbHJlYWR5IGV4aXN0cwEAAAAVdGhyb3dBc3NldE5vdFZlcmlmaWVkAAAAAAkBAAAACHRocm93RXJyAAAAAQIAAAAVQXNzZXQgaXMgbm90IHZlcmlmaWVkAQAAABZ0aHJvd0ludmFsaWRQcmljZUFzc2V0AAAAAAkBAAAACHRocm93RXJyAAAAAQUAAAARaW52YWxpZFByaWNlQXNzZXQBAAAAFHRocm93SW52YWxpZEZlZUFzc2V0AAAAAAkBAAAACHRocm93RXJyAAAAAQIAAAARSW52YWxpZCBmZWUgYXNzZXQBAAAAF3Rocm93SW52YWxpZEFtb3VudEFzc2V0AAAAAAkBAAAACHRocm93RXJyAAAAAQIAAAAdSW52YWxpZCBhbW91bnQgYXNzZXQgYXR0YWNoZWQBAAAAEnRocm93SW52YWxpZFN0YXR1cwAAAAAJAQAAAAh0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cm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQABLAAAAAIFAAAAA2tleQIAAAAPIGlzIG5vdCBkZWZpbmVkAAAAAA9mYWN0b3J5Q29udHJhY3QJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAASa2V5RmFjdG9yeUNvbnRyYWN0AAAAAAEAAAAOaXNDcmVhdGVDYWxsZWQAAAACAAAADWFtb3VudEFzc2V0SWQAAAAMcHJpY2VBc3NldElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIAAAAAEJAQAAAA9rZXlDcmVhdGVDYWxsZWQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQHAQAAABBtdXN0Q3JlYXRlQ2FsbGVkAAAAAgAAAA1hbW91bnRBc3NldElkAAAADHByaWNlQXNzZXRJZAMJAQAAAA5pc0NyZWF0ZUNhbGxlZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAYJAQAAABR0aHJvd0NyZWF0ZU5vdENhbGxlZAAAAAABAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAJaXNNYW5hZ2VyAAAAAQAAAAFpBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQJAAAAAAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAAttdXN0TWFuYWdlcgAAAAEAAAABaQMJAQAAAAlpc01hbmFnZXIAAAABBQAAAAFpBgkBAAAAB3Rocm93UEQAAAAAAQAAAAltdXN0QWRtaW4AAAABAAAAAWkEAAAACGFkbWluUEtzCQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAAD2tleUFkbWluUHViS2V5cwAAAAAFAAAABUVNUFRZBQAAAANTRVADCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAAIYWRtaW5QS3MJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQEAAAAKaXNWZXJpZmllZAAAAAEAAAAHYXNzZXRJZAkAAAAAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAAAAAAJAAEsAAAAAgkAASwAAAACAgAAAAhzdGF0dXNfPAUAAAAHYXNzZXRJZAIAAAABPgAAAAAAAAAAAAAAAAAAAAAAAgEAAAAMZ2V0SWRBbmRJbmZvAAAAAQAAAAdwYXltZW50BAAAAAckbWF0Y2gwCAUAAAAHcGF5bWVudAAAAAdhc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJpZAUAAAAHJG1hdGNoMAQAAAAEaW5mbwkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAJpZAkABRQAAAACCQACWAAAAAEFAAAAAmlkBQAAAARpbmZvAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CQAFFAAAAAIFAAAADHdhdmVzQXNzZXRJZAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAALdmFsaWRTdGF0dXMAAAABAAAABnN0YXR1cwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACHN0YXR1c2VzBQAAAAZzdGF0dXMAAAAIAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAABwAAABBmYWN0b3J5VjJBZGRyZXNzAAAAEmFzc2V0c1N0b3JlQWRkcmVzcwAAAA1wcmljZUFzc2V0SWRzAAAAFHByaWNlQXNzZXRzTWluQW1vdW50AAAAFGFtb3VudEFzc2V0TWluQW1vdW50AAAACmZlZUFzc2V0SWQAAAAJZmVlQW1vdW50BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlGYWN0b3J5Q29udHJhY3QAAAAABQAAABBmYWN0b3J5VjJBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0AAAAAAUAAAASYXNzZXRzU3RvcmVBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlQcmljZUFzc2V0SWRzAAAAAAkABLkAAAACBQAAAA1wcmljZUFzc2V0SWRzBQAAAANTRVAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAF2tleVByaWNlQXNzZXRzTWluQW1vdW50AAAAAAkABLkAAAACBQAAABRwcmljZUFzc2V0c01pbkFtb3VudAUAAAADU0VQCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAXa2V5QW1vdW50QXNzZXRNaW5BbW91bnQAAAAABQAAABRhbW91bnRBc3NldE1pbkFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5RmVlQXNzZXRJZAAAAAAFAAAACmZlZUFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlGZWVBbW91bnQAAAAABQAAAAlmZWVBbW91bnQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAGY3JlYXRlAAAAAAQAAAASYW1vdW50QXNzZXRQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAABFwcmljZUFzc2V0UGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQQAAAAPZmVlQXNzZXRQYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACBAAAAAskdDA2MzM3NjQwOQkBAAAADGdldElkQW5kSW5mbwAAAAEFAAAAEmFtb3VudEFzc2V0UGF5bWVudAQAAAANYW1vdW50QXNzZXRJZAgFAAAACyR0MDYzMzc2NDA5AAAAAl8xBAAAAA9hbW91bnRBc3NldEluZm8IBQAAAAskdDA2MzM3NjQwOQAAAAJfMgQAAAALJHQwNjQxMjY0ODEJAQAAAAxnZXRJZEFuZEluZm8AAAABBQAAABFwcmljZUFzc2V0UGF5bWVudAQAAAAMcHJpY2VBc3NldElkCAUAAAALJHQwNjQxMjY0ODEAAAACXzEEAAAADnByaWNlQXNzZXRJbmZvCAUAAAALJHQwNjQxMjY0ODEAAAACXzIEAAAACyR0MDY0ODQ2NTQ3CQEAAAAMZ2V0SWRBbmRJbmZvAAAAAQUAAAAPZmVlQXNzZXRQYXltZW50BAAAAApmZWVBc3NldElkCAUAAAALJHQwNjQ4NDY1NDcAAAACXzEEAAAADGZlZUFzc2V0SW5mbwgFAAAACyR0MDY0ODQ2NTQ3AAAAAl8yBAAAAA9wcmljZUFzc2V0c0xpc3QJAAS1AAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABCIAAAABCQEAAAAQa2V5UHJpY2VBc3NldElkcwAAAAAFAAAABUVNUFRZBQAAAANTRVAEAAAAGm1hbmFnZXJQcmljZUFzc2V0TWluQW1vdW50AAAAAAAAAAABBAAAABNwcmljZUFzc2V0TWluQW1vdW50AwkBAAAACWlzTWFuYWdlcgAAAAEFAAAAAWkFAAAAGm1hbmFnZXJQcmljZUFzc2V0TWluQW1vdW50BAAAABBwcmljZUFzc2V0c0luZGV4CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAARPAAAAAgUAAAAPcHJpY2VBc3NldHNMaXN0BQAAAAxwcmljZUFzc2V0SWQFAAAAEWludmFsaWRQcmljZUFzc2V0CQEAAAAFdmFsdWUAAAABCQAEtgAAAAEJAAGRAAAAAgkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIgAAAAEJAQAAABdrZXlQcmljZUFzc2V0c01pbkFtb3VudAAAAAAFAAAABUVNUFRZBQAAAANTRVAFAAAAEHByaWNlQXNzZXRzSW5kZXgEAAAACWxhc3RJbmRleAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAAMa2V5TGFzdEluZGV4AAAAAAAAAAAAAAAAAAQAAAAIY3VySW5kZXgJAABkAAAAAgUAAAAJbGFzdEluZGV4AAAAAAAAAAABBAAAAAZjaGVja3MJAARMAAAAAgMJAQAAAAEhAAAAAQkBAAAADmlzQ3JlYXRlQ2FsbGVkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBgkBAAAAD3Rocm93UG9vbEV4aXN0cwAAAAAJAARMAAAAAgMDCQEAAAAJaXNNYW5hZ2VyAAAAAQUAAAABaQYJAAAAAAAAAggJAQAAAAV2YWx1ZQAAAAEFAAAAD2Ftb3VudEFzc2V0SW5mbwAAAAZpc3N1ZXIIBQAAAAFpAAAABmNhbGxlcgYJAQAAABF0aHJvd1lvdU5vdElzc3VlcgAAAAAJAARMAAAAAgMJAQAAAAppc1ZlcmlmaWVkAAAAAQUAAAANYW1vdW50QXNzZXRJZAYJAQAAABV0aHJvd0Fzc2V0Tm90VmVyaWZpZWQAAAAACQAETAAAAAIDCQAAAAAAAAIJAAQiAAAAAQkBAAAADWtleUZlZUFzc2V0SWQAAAAABQAAAApmZWVBc3NldElkBgkBAAAAFHRocm93SW52YWxpZEZlZUFzc2V0AAAAAAkABEwAAAACAwkAAGcAAAACCAUAAAASYW1vdW50QXNzZXRQYXltZW50AAAABmFtb3VudAkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQkBAAAAF2tleUFtb3VudEFzc2V0TWluQW1vdW50AAAAAAYJAQAAABd0aHJvd0ludmFsaWRBbW91bnRBc3NldAAAAAAJAARMAAAAAgMJAABnAAAAAggFAAAAEXByaWNlQXNzZXRQYXltZW50AAAABmFtb3VudAUAAAATcHJpY2VBc3NldE1pbkFtb3VudAYJAQAAABx0aHJvd0ludmFsaWRQcmljZUFzc2V0QW1vdW50AAAAAAkABEwAAAACAwkAAAAAAAACCAUAAAAPZmVlQXNzZXRQYXltZW50AAAABmFtb3VudAkABB8AAAABCQEAAAAMa2V5RmVlQW1vdW50AAAAAAYJAQAAAA90aHJvd0ludmFsaWRGZWUAAAAABQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAPa2V5Q3JlYXRlQ2FsbGVkAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGtleUxhc3RJbmRleAAAAAAFAAAACGN1ckluZGV4CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAlrZXlTdWZmaXgAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQJAAEsAAAAAgkAAaQAAAABBQAAAAhjdXJJbmRleAUAAAALaW5kZXhTdWZmaXgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAlrZXlIZWlnaHQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQFAAAABmhlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAJa2V5U3RhdHVzAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA1zdGF0dXNQZW5kaW5nCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAUa2V5QW1vdW50QXNzZXRBbW91bnQAAAACBQAAAA1hbW91bnRBc3NldElkBQAAAAxwcmljZUFzc2V0SWQIBQAAABJhbW91bnRBc3NldFBheW1lbnQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAATa2V5UHJpY2VBc3NldEFtb3VudAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAgFAAAAEXByaWNlQXNzZXRQYXltZW50AAAABmFtb3VudAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAhhY3RpdmF0ZQAAAAYAAAALcG9vbEFkZHJlc3MAAAANYW1vdW50QXNzZXRJZAAAABFhbW91bnRBc3NldFRpY2tlcgAAAAxwcmljZUFzc2V0SWQAAAAQcHJpY2VBc3NldFRpY2tlcgAAAARsb2dvBAAAAAZjaGVja3MJAARMAAAAAgkBAAAACW11c3RBZG1pbgAAAAEFAAAAAWkJAARMAAAAAgMJAQAAAA5pc0NyZWF0ZUNhbGxlZAAAAAIFAAAADWFtb3VudEFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAYJAQAAABR0aHJvd0NyZWF0ZU5vdENhbGxlZAAAAAAJAARMAAAAAgMJAAAAAAAAAgkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAAJa2V5U3RhdHVzAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkBQAAAA1zdGF0dXNQZW5kaW5nBgkBAAAAH3Rocm93Q2FuQWN0aXZhdGVPbmx5UGVuZGluZ1Bvb2wAAAAABQAAAANuaWwDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAABJhY3RpdmF0ZU5ld1Bvb2xJbnYJAAP8AAAABAUAAAAPZmFjdG9yeUNvbnRyYWN0AgAAAA9hY3RpdmF0ZU5ld1Bvb2wJAARMAAAA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bnMAAAABAAAADGFkbWluUHViS2V5cwQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5QWRtaW5QdWJLZXlzAAAAAAkABLkAAAACBQAAAAxhZG1pblB1YktleXMFAAAAA1NFUAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAAB2NoZWNrUE0FAAAAB2NoZWNrUE0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAACQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAE3ByaWNlQXNzZXRzUkVBRE9OTFkAAAAABAAAAAtwcmljZUFzc2V0cwQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAQa2V5UHJpY2VBc3NldElkcwAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAMJAAAAAAAAAgkAATEAAAABBQAAAAFzAAAAAAAAAAAABQAAAANuaWwJAAS1AAAAAgUAAAABcwUAAAADU0VQBQAAAANuaWwJAAUUAAAAAgUAAAADbmlsBQAAAAtwcmljZUFzc2V0cwAAAAFpAQAAAA5zdGF0dXNSRUFET05MWQAAAAIAAAANYW1vdW50QXNzZXRJZAAAAAxwcmljZUFzc2V0SWQEAAAABnN0YXR1cwQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAJa2V5U3RhdHVzAAAAAgUAAAANYW1vdW50QXNzZXRJZAUAAAAMcHJpY2VBc3NldElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAFAAAAAXMFAAAABHVuaXQJAAUUAAAAAgUAAAADbmlsBQAAAAZzdGF0dXMAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5Bxcetw==", "chainId": 84, "height": 2187114, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AhJ6m9whffe9z9uf4dMo8b6VLrSsWMRYPFCKMW2CyHVQ Next: 84ZFyw2jT3i9gTzEeZ6HLepr8seyWj4B5MdmXepsZ9ii Diff:
OldNewDifferences
99
1010 let invalidPriceAsset = "Invalid price asset"
1111
12-func throwPD () = throw("Permission denied")
12+func throwErr (msg) = throw(makeString(["user_pools.ride:", msg], " "))
1313
1414
15-func throwCreateNotCalled () = throw("Create is not called for assets pair")
15+func throwPD () = throwErr("Permission denied")
1616
1717
18-func throwYouNotIssuer () = throw("You are not amountAsset issuer")
18+func throwCreateNotCalled () = throwErr("Create is not called for assets pair")
1919
2020
21-func throwPoolExists () = throw("Pool with such assets already exists")
21+func throwYouNotIssuer () = throwErr("You are not amountAsset issuer")
2222
2323
24-func throwAssetNotVerified () = throw("Asset is not verified")
24+func throwPoolExists () = throwErr("Pool with such assets already exists")
2525
2626
27-func throwInvalidPriceAsset () = throw(invalidPriceAsset)
27+func throwAssetNotVerified () = throwErr("Asset is not verified")
2828
2929
30-func throwInvalidFeeAsset () = throw("Invalid fee asset")
30+func throwInvalidPriceAsset () = throwErr(invalidPriceAsset)
3131
3232
33-func throwInvalidAmountAsset () = throw("Invalid amount asset attached")
33+func throwInvalidFeeAsset () = throwErr("Invalid fee asset")
3434
3535
36-func throwInvalidStatus () = throw("Invalid status")
36+func throwInvalidAmountAsset () = throwErr("Invalid amount asset attached")
3737
3838
39-func throwCanActivateOnlyPendingPool () = throw("Can activate pool only in 'pending' status")
39+func throwInvalidStatus () = throwErr("Invalid status")
4040
4141
42-func throwFactoryReturnedNotString () = throw("FactoryV2 returned not string")
42+func throwCanActivateOnlyPendingPool () = throwErr("Can activate pool only in 'pending' status")
43+
44+
45+func throwFactoryReturnedNotString () = throwErr("FactoryV2 returned not string")
46+
47+
48+func throwInvalidPriceAssetAmount () = throwErr("invalid price asset amount")
49+
50+
51+func throwInvalidFee () = throwErr("invalid fee")
4352
4453
4554 func keyManagerPublicKey () = makeString(["%s", "managerPublicKey"], SEP)
191200 let amountAssetPayment = value(i.payments[0])
192201 let priceAssetPayment = value(i.payments[1])
193202 let feeAssetPayment = value(i.payments[2])
194- let $t060966167 = getIdAndInfo(amountAssetPayment)
195- let amountAssetId = $t060966167._1
196- let amountAssetInfo = $t060966167._2
197- let $t061706238 = getIdAndInfo(priceAssetPayment)
198- let priceAssetId = $t061706238._1
199- let priceAssetInfo = $t061706238._2
200- let $t062416303 = getIdAndInfo(feeAssetPayment)
201- let feeAssetId = $t062416303._1
202- let feeAssetInfo = $t062416303._2
203+ let $t063376409 = getIdAndInfo(amountAssetPayment)
204+ let amountAssetId = $t063376409._1
205+ let amountAssetInfo = $t063376409._2
206+ let $t064126481 = getIdAndInfo(priceAssetPayment)
207+ let priceAssetId = $t064126481._1
208+ let priceAssetInfo = $t064126481._2
209+ let $t064846547 = getIdAndInfo(feeAssetPayment)
210+ let feeAssetId = $t064846547._1
211+ let feeAssetInfo = $t064846547._2
203212 let priceAssetsList = split(valueOrElse(getString(keyPriceAssetIds()), EMPTY), SEP)
204213 let managerPriceAssetMinAmount = 1
205214 let priceAssetMinAmount = if (isManager(i))
224233 then true
225234 else throwInvalidAmountAsset(), if ((priceAssetPayment.amount >= priceAssetMinAmount))
226235 then true
227- else throw("invalid price asset amount"), if ((feeAssetPayment.amount == getInteger(keyFeeAmount())))
236+ else throwInvalidPriceAssetAmount(), if ((feeAssetPayment.amount == getInteger(keyFeeAmount())))
228237 then true
229- else throw()]
238+ else throwInvalidFee()]
230239 if ((checks == checks))
231240 then [BooleanEntry(keyCreateCalled(amountAssetId, priceAssetId), true), IntegerEntry(keyLastIndex(), curIndex), StringEntry(keySuffix(amountAssetId, priceAssetId), (toString(curIndex) + indexSuffix)), IntegerEntry(keyHeight(amountAssetId, priceAssetId), height), StringEntry(keyStatus(amountAssetId, priceAssetId), statusPending), IntegerEntry(keyAmountAssetAmount(amountAssetId, priceAssetId), amountAssetPayment.amount), IntegerEntry(keyPriceAssetAmount(amountAssetId, priceAssetId), priceAssetPayment.amount)]
232241 else throw("Strict value is not equal to itself.")
257266 let beforePut = assetBalance(this, fromBase58String(lpAssetId))
258267 if ((beforePut == beforePut))
259268 then {
260- let put = invoke(addressFromStringValue(poolAddress), "put", [0, false], [AttachedPayment(fromBase58String(amountAssetId), value(getInteger(keyAmountAssetAmount(amountAssetId, priceAssetId)))), AttachedPayment(fromBase58String(priceAssetId), value(getInteger(keyPriceAssetAmount(amountAssetId, priceAssetId))))])
269+ let put = invoke(addressFromStringValue(poolAddress), "put", [0, false], [AttachedPayment(fromBase58String(amountAssetId), value(getInteger(keyAmountAssetAmount(amountAssetId, priceAssetId)))), AttachedPayment(if ((priceAssetId == "WAVES"))
270+ then unit
271+ else fromBase58String(priceAssetId), value(getInteger(keyPriceAssetAmount(amountAssetId, priceAssetId))))])
261272 if ((put == put))
262273 then {
263274 let afterPut = assetBalance(this, fromBase58String(lpAssetId))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let EMPTY = ""
77
88 let wavesAssetId = "WAVES"
99
1010 let invalidPriceAsset = "Invalid price asset"
1111
12-func throwPD () = throw("Permission denied")
12+func throwErr (msg) = throw(makeString(["user_pools.ride:", msg], " "))
1313
1414
15-func throwCreateNotCalled () = throw("Create is not called for assets pair")
15+func throwPD () = throwErr("Permission denied")
1616
1717
18-func throwYouNotIssuer () = throw("You are not amountAsset issuer")
18+func throwCreateNotCalled () = throwErr("Create is not called for assets pair")
1919
2020
21-func throwPoolExists () = throw("Pool with such assets already exists")
21+func throwYouNotIssuer () = throwErr("You are not amountAsset issuer")
2222
2323
24-func throwAssetNotVerified () = throw("Asset is not verified")
24+func throwPoolExists () = throwErr("Pool with such assets already exists")
2525
2626
27-func throwInvalidPriceAsset () = throw(invalidPriceAsset)
27+func throwAssetNotVerified () = throwErr("Asset is not verified")
2828
2929
30-func throwInvalidFeeAsset () = throw("Invalid fee asset")
30+func throwInvalidPriceAsset () = throwErr(invalidPriceAsset)
3131
3232
33-func throwInvalidAmountAsset () = throw("Invalid amount asset attached")
33+func throwInvalidFeeAsset () = throwErr("Invalid fee asset")
3434
3535
36-func throwInvalidStatus () = throw("Invalid status")
36+func throwInvalidAmountAsset () = throwErr("Invalid amount asset attached")
3737
3838
39-func throwCanActivateOnlyPendingPool () = throw("Can activate pool only in 'pending' status")
39+func throwInvalidStatus () = throwErr("Invalid status")
4040
4141
42-func throwFactoryReturnedNotString () = throw("FactoryV2 returned not string")
42+func throwCanActivateOnlyPendingPool () = throwErr("Can activate pool only in 'pending' status")
43+
44+
45+func throwFactoryReturnedNotString () = throwErr("FactoryV2 returned not string")
46+
47+
48+func throwInvalidPriceAssetAmount () = throwErr("invalid price asset amount")
49+
50+
51+func throwInvalidFee () = throwErr("invalid fee")
4352
4453
4554 func keyManagerPublicKey () = makeString(["%s", "managerPublicKey"], SEP)
4655
4756
4857 func keyPendingManagerPublicKey () = makeString(["%s", "pendingManagerPublicKey"], SEP)
4958
5059
5160 func keyAdminPubKeys () = makeString(["%s", "adminPubKeys"], SEP)
5261
5362
5463 func keyStatus (amountAssetId,priceAssetId) = makeString(["%s%s%s", "status", amountAssetId, priceAssetId], SEP)
5564
5665
5766 func keyFactoryContract () = makeString(["%s", "factoryContract"], SEP)
5867
5968
6069 func keyAssetsStoreContract () = makeString(["%s", "assetsStoreContract"], SEP)
6170
6271
6372 func keySuffix (amountAssetId,priceAssetId) = makeString(["%s%s%s", "suffix", amountAssetId, priceAssetId], SEP)
6473
6574
6675 func keyLastIndex () = makeString(["%s", "lastIndex"], SEP)
6776
6877
6978 let indexSuffix = "u"
7079
7180 let statusPending = "pending"
7281
7382 let statusDeclined = "declined"
7483
7584 let statusActive = "active"
7685
7786 let statuses = [statusPending, statusDeclined, statusActive]
7887
7988 func keyCreateCalled (amountAssetId,priceAssetId) = makeString(["%s%s%s", "createCalled", amountAssetId, priceAssetId], SEP)
8089
8190
8291 func keyAmountAssetAmount (amountAssetId,priceAssetId) = makeString(["%s%s%s", "amountAssetAmount", amountAssetId, priceAssetId], SEP)
8392
8493
8594 func keyPriceAssetAmount (amountAssetId,priceAssetId) = makeString(["%s%s%s", "priceAssetAmount", amountAssetId, priceAssetId], SEP)
8695
8796
8897 func keyHeight (amountAssetId,priceAssetId) = makeString(["%s%s%s", "height", amountAssetId, priceAssetId], SEP)
8998
9099
91100 func keyFeeAssetId () = makeString(["%s", "feeAssetId"], SEP)
92101
93102
94103 func keyFeeAmount () = makeString(["%s", "feeAmount"], SEP)
95104
96105
97106 func keyAmountAssetMinAmount () = makeString(["%s", "amountAssetMinAmount"], SEP)
98107
99108
100109 func keyPriceAssetsMinAmount () = makeString(["%s", "priceAssetsMinAmount"], SEP)
101110
102111
103112 func keyPriceAssetIds () = makeString(["%s", "priceAssetIds"], SEP)
104113
105114
106115 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " is not defined"))
107116
108117
109118 let factoryContract = addressFromStringValue(getStringOrFail(keyFactoryContract()))
110119
111120 func isCreateCalled (amountAssetId,priceAssetId) = valueOrElse(getBoolean(keyCreateCalled(amountAssetId, priceAssetId)), false)
112121
113122
114123 func mustCreateCalled (amountAssetId,priceAssetId) = if (isCreateCalled(amountAssetId, priceAssetId))
115124 then true
116125 else throwCreateNotCalled()
117126
118127
119128 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
120129 case s: String =>
121130 fromBase58String(s)
122131 case _: Unit =>
123132 unit
124133 case _ =>
125134 throw("Match error")
126135 }
127136
128137
129138 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
130139 case s: String =>
131140 fromBase58String(s)
132141 case _: Unit =>
133142 unit
134143 case _ =>
135144 throw("Match error")
136145 }
137146
138147
139148 func isManager (i) = match managerPublicKeyOrUnit() {
140149 case pk: ByteVector =>
141150 (i.callerPublicKey == pk)
142151 case _: Unit =>
143152 (i.caller == this)
144153 case _ =>
145154 throw("Match error")
146155 }
147156
148157
149158 func mustManager (i) = if (isManager(i))
150159 then true
151160 else throwPD()
152161
153162
154163 func mustAdmin (i) = {
155164 let adminPKs = split(valueOrElse(getString(keyAdminPubKeys()), EMPTY), SEP)
156165 if (containsElement(adminPKs, toBase58String(i.callerPublicKey)))
157166 then true
158167 else mustManager(i)
159168 }
160169
161170
162171 func isVerified (assetId) = (valueOrElse(getInteger(addressFromStringValue(getStringOrFail(keyAssetsStoreContract())), (("status_<" + assetId) + ">")), 0) == 2)
163172
164173
165174 func getIdAndInfo (payment) = match payment.assetId {
166175 case id: ByteVector =>
167176 let info = value(assetInfo(id))
168177 $Tuple2(toBase58String(id), info)
169178 case _: Unit =>
170179 $Tuple2(wavesAssetId, unit)
171180 case _ =>
172181 throw("Match error")
173182 }
174183
175184
176185 func validStatus (status) = containsElement(statuses, status)
177186
178187
179188 @Callable(i)
180189 func constructor (factoryV2Address,assetsStoreAddress,priceAssetIds,priceAssetsMinAmount,amountAssetMinAmount,feeAssetId,feeAmount) = {
181190 let checkCaller = mustManager(i)
182191 if ((checkCaller == checkCaller))
183192 then [StringEntry(keyFactoryContract(), factoryV2Address), StringEntry(keyAssetsStoreContract(), assetsStoreAddress), StringEntry(keyPriceAssetIds(), makeString(priceAssetIds, SEP)), StringEntry(keyPriceAssetsMinAmount(), makeString(priceAssetsMinAmount, SEP)), IntegerEntry(keyAmountAssetMinAmount(), amountAssetMinAmount), StringEntry(keyFeeAssetId(), feeAssetId), IntegerEntry(keyFeeAmount(), feeAmount)]
184193 else throw("Strict value is not equal to itself.")
185194 }
186195
187196
188197
189198 @Callable(i)
190199 func create () = {
191200 let amountAssetPayment = value(i.payments[0])
192201 let priceAssetPayment = value(i.payments[1])
193202 let feeAssetPayment = value(i.payments[2])
194- let $t060966167 = getIdAndInfo(amountAssetPayment)
195- let amountAssetId = $t060966167._1
196- let amountAssetInfo = $t060966167._2
197- let $t061706238 = getIdAndInfo(priceAssetPayment)
198- let priceAssetId = $t061706238._1
199- let priceAssetInfo = $t061706238._2
200- let $t062416303 = getIdAndInfo(feeAssetPayment)
201- let feeAssetId = $t062416303._1
202- let feeAssetInfo = $t062416303._2
203+ let $t063376409 = getIdAndInfo(amountAssetPayment)
204+ let amountAssetId = $t063376409._1
205+ let amountAssetInfo = $t063376409._2
206+ let $t064126481 = getIdAndInfo(priceAssetPayment)
207+ let priceAssetId = $t064126481._1
208+ let priceAssetInfo = $t064126481._2
209+ let $t064846547 = getIdAndInfo(feeAssetPayment)
210+ let feeAssetId = $t064846547._1
211+ let feeAssetInfo = $t064846547._2
203212 let priceAssetsList = split(valueOrElse(getString(keyPriceAssetIds()), EMPTY), SEP)
204213 let managerPriceAssetMinAmount = 1
205214 let priceAssetMinAmount = if (isManager(i))
206215 then managerPriceAssetMinAmount
207216 else {
208217 let priceAssetsIndex = valueOrErrorMessage(indexOf(priceAssetsList, priceAssetId), invalidPriceAsset)
209218 value(parseInt(split(valueOrElse(getString(keyPriceAssetsMinAmount()), EMPTY), SEP)[priceAssetsIndex]))
210219 }
211220 let lastIndex = valueOrElse(getInteger(keyLastIndex()), 0)
212221 let curIndex = (lastIndex + 1)
213222 let checks = [if (!(isCreateCalled(amountAssetId, priceAssetId)))
214223 then true
215224 else throwPoolExists(), if (if (isManager(i))
216225 then true
217226 else (value(amountAssetInfo).issuer == i.caller))
218227 then true
219228 else throwYouNotIssuer(), if (isVerified(amountAssetId))
220229 then true
221230 else throwAssetNotVerified(), if ((getString(keyFeeAssetId()) == feeAssetId))
222231 then true
223232 else throwInvalidFeeAsset(), if ((amountAssetPayment.amount >= getIntegerValue(keyAmountAssetMinAmount())))
224233 then true
225234 else throwInvalidAmountAsset(), if ((priceAssetPayment.amount >= priceAssetMinAmount))
226235 then true
227- else throw("invalid price asset amount"), if ((feeAssetPayment.amount == getInteger(keyFeeAmount())))
236+ else throwInvalidPriceAssetAmount(), if ((feeAssetPayment.amount == getInteger(keyFeeAmount())))
228237 then true
229- else throw()]
238+ else throwInvalidFee()]
230239 if ((checks == checks))
231240 then [BooleanEntry(keyCreateCalled(amountAssetId, priceAssetId), true), IntegerEntry(keyLastIndex(), curIndex), StringEntry(keySuffix(amountAssetId, priceAssetId), (toString(curIndex) + indexSuffix)), IntegerEntry(keyHeight(amountAssetId, priceAssetId), height), StringEntry(keyStatus(amountAssetId, priceAssetId), statusPending), IntegerEntry(keyAmountAssetAmount(amountAssetId, priceAssetId), amountAssetPayment.amount), IntegerEntry(keyPriceAssetAmount(amountAssetId, priceAssetId), priceAssetPayment.amount)]
232241 else throw("Strict value is not equal to itself.")
233242 }
234243
235244
236245
237246 @Callable(i)
238247 func activate (poolAddress,amountAssetId,amountAssetTicker,priceAssetId,priceAssetTicker,logo) = {
239248 let checks = [mustAdmin(i), if (isCreateCalled(amountAssetId, priceAssetId))
240249 then true
241250 else throwCreateNotCalled(), if ((value(getString(keyStatus(amountAssetId, priceAssetId))) == statusPending))
242251 then true
243252 else throwCanActivateOnlyPendingPool()]
244253 if ((checks == checks))
245254 then {
246255 let activateNewPoolInv = invoke(factoryContract, "activateNewPool", [poolAddress, amountAssetId, priceAssetId, ((amountAssetTicker + priceAssetTicker) + "LP"), (((amountAssetTicker + "/") + priceAssetTicker) + " pool liquidity provider token"), 0, "VLTPOOL", logo], nil)
247256 if ((activateNewPoolInv == activateNewPoolInv))
248257 then {
249258 let lpAssetId = match activateNewPoolInv {
250259 case id: String =>
251260 id
252261 case _ =>
253262 throwFactoryReturnedNotString()
254263 }
255264 if ((lpAssetId == lpAssetId))
256265 then {
257266 let beforePut = assetBalance(this, fromBase58String(lpAssetId))
258267 if ((beforePut == beforePut))
259268 then {
260- let put = invoke(addressFromStringValue(poolAddress), "put", [0, false], [AttachedPayment(fromBase58String(amountAssetId), value(getInteger(keyAmountAssetAmount(amountAssetId, priceAssetId)))), AttachedPayment(fromBase58String(priceAssetId), value(getInteger(keyPriceAssetAmount(amountAssetId, priceAssetId))))])
269+ let put = invoke(addressFromStringValue(poolAddress), "put", [0, false], [AttachedPayment(fromBase58String(amountAssetId), value(getInteger(keyAmountAssetAmount(amountAssetId, priceAssetId)))), AttachedPayment(if ((priceAssetId == "WAVES"))
270+ then unit
271+ else fromBase58String(priceAssetId), value(getInteger(keyPriceAssetAmount(amountAssetId, priceAssetId))))])
261272 if ((put == put))
262273 then {
263274 let afterPut = assetBalance(this, fromBase58String(lpAssetId))
264275 if ((afterPut == afterPut))
265276 then {
266277 let user = value(assetInfo(fromBase58String(amountAssetId))).issuer
267278 [StringEntry(keyStatus(amountAssetId, priceAssetId), statusActive), ScriptTransfer(user, (afterPut - beforePut), fromBase58String(lpAssetId))]
268279 }
269280 else throw("Strict value is not equal to itself.")
270281 }
271282 else throw("Strict value is not equal to itself.")
272283 }
273284 else throw("Strict value is not equal to itself.")
274285 }
275286 else throw("Strict value is not equal to itself.")
276287 }
277288 else throw("Strict value is not equal to itself.")
278289 }
279290 else throw("Strict value is not equal to itself.")
280291 }
281292
282293
283294
284295 @Callable(i)
285296 func setAdmins (adminPubKeys) = {
286297 let checkCaller = mustManager(i)
287298 if ((checkCaller == checkCaller))
288299 then [StringEntry(keyAdminPubKeys(), makeString(adminPubKeys, SEP))]
289300 else throw("Strict value is not equal to itself.")
290301 }
291302
292303
293304
294305 @Callable(i)
295306 func setManager (pendingManagerPublicKey) = {
296307 let checkCaller = mustManager(i)
297308 if ((checkCaller == checkCaller))
298309 then {
299310 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
300311 if ((checkManagerPublicKey == checkManagerPublicKey))
301312 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
302313 else throw("Strict value is not equal to itself.")
303314 }
304315 else throw("Strict value is not equal to itself.")
305316 }
306317
307318
308319
309320 @Callable(i)
310321 func confirmManager () = {
311322 let pm = pendingManagerPublicKeyOrUnit()
312323 let hasPM = if (isDefined(pm))
313324 then true
314325 else throw("No pending manager")
315326 if ((hasPM == hasPM))
316327 then {
317328 let checkPM = if ((i.callerPublicKey == value(pm)))
318329 then true
319330 else throw("You are not pending manager")
320331 if ((checkPM == checkPM))
321332 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
322333 else throw("Strict value is not equal to itself.")
323334 }
324335 else throw("Strict value is not equal to itself.")
325336 }
326337
327338
328339
329340 @Callable(i)
330341 func priceAssetsREADONLY () = {
331342 let priceAssets = match getString(keyPriceAssetIds()) {
332343 case s: String =>
333344 if ((size(s) == 0))
334345 then nil
335346 else split(s, SEP)
336347 case _ =>
337348 nil
338349 }
339350 $Tuple2(nil, priceAssets)
340351 }
341352
342353
343354
344355 @Callable(i)
345356 func statusREADONLY (amountAssetId,priceAssetId) = {
346357 let status = match getString(keyStatus(amountAssetId, priceAssetId)) {
347358 case s: String =>
348359 s
349360 case _ =>
350361 unit
351362 }
352363 $Tuple2(nil, status)
353364 }
354365
355366
356367 @Verifier(tx)
357368 func verify () = {
358369 let targetPublicKey = match managerPublicKeyOrUnit() {
359370 case pk: ByteVector =>
360371 pk
361372 case _: Unit =>
362373 tx.senderPublicKey
363374 case _ =>
364375 throw("Match error")
365376 }
366377 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
367378 }
368379

github/deemru/w8io/169f3d6 
81.52 ms