tx · Ao68qQEJnJKqpXiTmXnrNkxdBLLT5tJgeSoaVQwpx4j4 3N6gW9pPZr3SAo2nBKpANYM19CZRva5Ygh8: -0.01400000 Waves 2021.10.12 17:24 [1743190] smart account 3N6gW9pPZr3SAo2nBKpANYM19CZRva5Ygh8 > SELF 0.00000000 Waves
{ "type": 13, "id": "Ao68qQEJnJKqpXiTmXnrNkxdBLLT5tJgeSoaVQwpx4j4", "fee": 1400000, "feeAssetId": null, "timestamp": 1634048712698, "version": 1, "sender": "3N6gW9pPZr3SAo2nBKpANYM19CZRva5Ygh8", "senderPublicKey": "HLqVgP5nfMJq44e9bWX6pKhhzghEdUHUExBcseZb28jy", "proofs": [ "65TQJPtXreW7abqxyNdpJBQA62sEeg2ctXkxpQB6tMLeQt6wFNxukKdLeJMJ4KmUSfDFs9cYGPntrHhbWTjJzPD2" ], "script": "base64:AAIFAAAAAAAAAA4IAhIDCgEIEgASAwoBCAAAAB8AAAAAA1NFUAIAAAACX18AAAAABnNjYWxlOAAAAAAABfXhAAAAAAARcG9vbFN0YXRzUHJpY2VLZXkAAAAAAAAAAAQAAAAADmlkeFBvb2xBZGRyZXNzAAAAAAAAAAABAAAAAA1pZHhQb29sU3RhdHVzAAAAAAAAAAACAAAAABBpZHhQb29sTFBBc3NldElkAAAAAAAAAAADAAAAAA1pZHhBbXRBc3NldElkAAAAAAAAAAAEAAAAAA9pZHhQcmljZUFzc2V0SWQAAAAAAAAAAAUAAAAADmlkeEFtdEFzc2V0RGNtAAAAAAAAAAAGAAAAABBpZHhQcmljZUFzc2V0RGNtAAAAAAAAAAAHAAAAAA5pZHhJQW10QXNzZXRJZAAAAAAAAAAACAAAAAAQaWR4SVByaWNlQXNzZXRJZAAAAAAAAAAACQAAAAANaWR4TFBBc3NldERjbQAAAAAAAAAACgAAAAATaWR4TWF0Y2hlclB1YmxpY0tleQAAAAAAAAAACwEAAAAOa2V5UmVnaXN0ZXJQdXQAAAACAAAAC3Bvb2xBZGRyZXNzAAAABHR4SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACyVzJXMlc19fUF9fBQAAAAtwb29sQWRkcmVzcwIAAAACX18FAAAABHR4SWQBAAAAEWtleVJlZ2lzdGVySW52ZXN0AAAAAgAAAAtwb29sQWRkcmVzcwAAAAR0eElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABAlcyVzJXNfX2ludmVzdF9fBQAAAAtwb29sQWRkcmVzcwIAAAACX18FAAAABHR4SWQBAAAAFmtleVBvb2xUb3RhbEFtdEJ5QXNzZXQAAAACAAAAC3Bvb2xBZGRyZXNzAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADyVzJXMlc19fdG90YWxfXwUAAAALcG9vbEFkZHJlc3MCAAAAAl9fBQAAAAdhc3NldElkAQAAABJrZXlGYWN0b3J5Q29udHJhY3QAAAAAAgAAABMlc19fZmFjdG9yeUNvbnRyYWN0AQAAACBrZXlTbGlwcGFnZUFtdFBlckFzc2V0Q3VtdWxhdGl2ZQAAAAIAAAALcG9vbEFkZHJlc3MAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAglcyVzJXNfXwUAAAALcG9vbEFkZHJlc3MCAAAAAl9fBQAAAAdhc3NldElkAgAAABRfX3NsaXBwYWdlQ3VtdWxhdGl2ZQEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAAClrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cwAAAAEAAAATcG9vbENvbnRyYWN0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAABNwb29sQ29udHJhY3RBZGRyZXNzAgAAACNfX21hcHBpbmdzX19wb29sQ29udHJhY3QyUG9vbEFzc2V0cwEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEAAAARaW50ZXJuYWxCYXNlQXNzZXQJAAEsAAAAAgIAAAAoJXMlcyVkX19tYXBwaW5nc19faW50ZXJuYWwyYmFzZUFzc2V0SWRfXwkAAaQAAAABBQAAABFpbnRlcm5hbEJhc2VBc3NldAEAAAANa2V5UG9vbENvbmZpZwAAAAIAAAAJaUFtdEFzc2V0AAAAC2lQcmljZUFzc2V0CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACCVkJWQlc19fBQAAAAlpQW10QXNzZXQCAAAAAl9fBQAAAAtpUHJpY2VBc3NldAIAAAAIX19jb25maWcBAAAAE2tleUFsbFBvb2xzU2h1dGRvd24AAAAAAgAAAAwlc19fc2h1dGRvd24BAAAADWtleVBvb2xXZWlnaHQAAAABAAAAD2NvbnRyYWN0QWRkcmVzcwkAASwAAAACAgAAABIlcyVzX19wb29sV2VpZ2h0X18FAAAAD2NvbnRyYWN0QWRkcmVzcwAAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAEmtleUZhY3RvcnlDb250cmFjdAAAAAACAAAAFU5vIEZhY3RvcnkgQWNjIGZvdW5kLgEAAAAOY29udmVydEFzc2V0SWQAAAABAAAAB2Fzc2V0SWQDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAAdhc3NldElkAgAAAAVXQVZFUwUAAAAHYXNzZXRJZAEAAAARZGF0YVB1dEFjdGlvbkluZm8AAAAEAAAACWluQXNzZXRJZAAAAAppbkFzc2V0QW10AAAACHR4SGVpZ2h0AAAAC3R4VGltZXN0YW1wCQAEuQAAAAIJAARMAAAAAgIAAAAIJXMlZCVkJWQJAARMAAAAAgUAAAAJaW5Bc3NldElkCQAETAAAAAIJAAGkAAAAAQUAAAAKaW5Bc3NldEFtdAkABEwAAAACCQABpAAAAAEFAAAACHR4SGVpZ2h0CQAETAAAAAIJAAGkAAAAAQUAAAALdHhUaW1lc3RhbXAFAAAAA25pbAUAAAADU0VQAQAAABRkYXRhSW52ZXN0QWN0aW9uSW5mbwAAAAQAAAARb3V0QW1vdW50QXNzZXRBbXQAAAAQb3V0UHJpY2VBc3NldEFtdAAAAAh0eEhlaWdodAAAAAt0eFRpbWVzdGFtcAkABLkAAAACCQAETAAAAAICAAAACCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAARb3V0QW1vdW50QXNzZXRBbXQJAARMAAAAAgkAAaQAAAABBQAAABBvdXRQcmljZUFzc2V0QW10CQAETAAAAAIJAAGkAAAAAQUAAAAIdHhIZWlnaHQJAARMAAAAAgkAAaQAAAABBQAAAAt0eFRpbWVzdGFtcAUAAAADbmlsBQAAAANTRVABAAAACGFzU3RyaW5nAAAAAQAAAAN2YWwEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAZ2YWxTdHIFAAAAByRtYXRjaDAFAAAABnZhbFN0cgkAAAIAAAABAgAAABhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBAAAAB3RvU2NhbGUAAAADAAAAA2FtdAAAAAhyZXNTY2FsZQAAAAhjdXJTY2FsZQkAAGsAAAADBQAAAANhbXQFAAAACHJlc1NjYWxlBQAAAAhjdXJTY2FsZQAAAAMAAAABaQEAAAALY29uc3RydWN0b3IAAAABAAAAD2ZhY3RvcnlDb250cmFjdAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleUZhY3RvcnlDb250cmFjdAAAAAAFAAAAD2ZhY3RvcnlDb250cmFjdAUAAAADbmlsAAAAAWkBAAAAA3B1dAAAAAAEAAAABHBvb2wJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAtwbXRBbXRBc3NldAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAKcG10QXNzZXRJZAMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAtwbXRBbXRBc3NldAAAAAdhc3NldElkAgAAAAVXQVZFUwkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAALcG10QW10QXNzZXQAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRBbXQIBQAAAAtwbXRBbXRBc3NldAAAAAZhbW91bnQEAAAACnBvb2xBc3NldHMJAAS1AAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAAEcG9vbAIAAAAOSW52YWxpZCBjYWxsZXIFAAAAA1NFUAQAAAANYW1vdW50QXNzZXRJZAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAEEAAAADHByaWNlQXNzZXRJZAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAIEAAAAC2Ftb3VudEFzc2V0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEFAAAADWFtb3VudEFzc2V0SWQCAAAAEUNhbm5vdCBmaW5kIGFzc2V0BAAAAApwcmljZUFzc2V0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEFAAAADHByaWNlQXNzZXRJZAIAAAARQ2Fubm90IGZpbmQgYXNzZXQEAAAACHRvdGFsQW10CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABZrZXlQb29sVG90YWxBbXRCeUFzc2V0AAAAAgUAAAAEcG9vbAUAAAAKcG10QXNzZXRJZAAAAAAAAAAAAAQAAAAVY3VtdWxhdGl2ZVNsaXBwYWdlQW10CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAACBrZXlTbGlwcGFnZUFtdFBlckFzc2V0Q3VtdWxhdGl2ZQAAAAIFAAAABHBvb2wFAAAACnBtdEFzc2V0SWQAAAAAAAAAAAAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmtleVJlZ2lzdGVyUHV0AAAAAgUAAAAEcG9vbAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQEAAAARZGF0YVB1dEFjdGlvbkluZm8AAAAEBQAAAApwbXRBc3NldElkBQAAAAtwbXRBc3NldEFtdAUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleVBvb2xUb3RhbEFtdEJ5QXNzZXQAAAACBQAAAARwb29sBQAAAApwbXRBc3NldElkCQAAZAAAAAIFAAAACHRvdGFsQW10BQAAAAtwbXRBc3NldEFtdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAIGtleVNsaXBwYWdlQW10UGVyQXNzZXRDdW11bGF0aXZlAAAAAgUAAAAEcG9vbAUAAAAKcG10QXNzZXRJZAkAAGQAAAACBQAAABVjdW11bGF0aXZlU2xpcHBhZ2VBbXQFAAAAC3BtdEFzc2V0QW10BQAAAANuaWwAAAABaQEAAAAGaW52ZXN0AAAAAQAAAAtwb29sQWRkcmVzcwQAAAAKcG9vbEFzc2V0cwkABLUAAAACCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAPZmFjdG9yeUNvbnRyYWN0CQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAAtwb29sQWRkcmVzcwIAAAAUSW52YWxpZCBwb29sIHBhc3NlZC4FAAAAA1NFUAQAAAARcG9vbEFtb3VudEFzc2V0SWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAECAAAAFk5vIGFzc2V0IG1hcHBpbmcgZm91bmQEAAAAEHBvb2xQcmljZUFzc2V0SWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAA9mYWN0b3J5Q29udHJhY3QJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAICAAAAFk5vIGFzc2V0IG1hcHBpbmcgZm91bmQEAAAACnBvb2xDb25maWcJAAS1AAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAD2ZhY3RvcnlDb250cmFjdAkBAAAADWtleVBvb2xDb25maWcAAAACCQABkQAAAAIFAAAACnBvb2xBc3NldHMAAAAAAAAAAAEJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAgIAAAAoTm8gZmFjdG9yeSBjb25maWcgZm91bmQgZm9yIHBvb2wgYXNzZXRzLgUAAAADU0VQBAAAABNhbW91bnRBc3NldERlY2ltYWxzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAOaWR4QW10QXNzZXREY20EAAAAEnByaWNlQXNzZXREZWNpbWFscwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAEGlkeFByaWNlQXNzZXREY20EAAAAEmFtb3VudEFzc2V0QmFsYW5jZQkBAAAAB3RvU2NhbGUAAAADCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABZrZXlQb29sVG90YWxBbXRCeUFzc2V0AAAAAgUAAAALcG9vbEFkZHJlc3MFAAAAEXBvb2xBbW91bnRBc3NldElkAAAAAAAAAAAABQAAAAZzY2FsZTgFAAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMEAAAAEXByaWNlQXNzZXRCYWxhbmNlCQEAAAAHdG9TY2FsZQAAAAMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFmtleVBvb2xUb3RhbEFtdEJ5QXNzZXQAAAACBQAAAAtwb29sQWRkcmVzcwUAAAAQcG9vbFByaWNlQXNzZXRJZAAAAAAAAAAAAAUAAAAGc2NhbGU4BQAAABJwcmljZUFzc2V0RGVjaW1hbHMEAAAACXBvb2xTdGF0cwkBAAAACGFzU3RyaW5nAAAAAQkAA/wAAAAECQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAtwb29sQWRkcmVzcwIAAAANc3RhdHNSRUFET05MWQUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAACXBvb2xTdGF0cwUAAAAJcG9vbFN0YXRzBAAAAAxjdXJyZW50UHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACCQAEtQAAAAIFAAAACXBvb2xTdGF0cwUAAAADU0VQBQAAABFwb29sU3RhdHNQcmljZUtleQQAAAAGcEVxQnlBCQAAawAAAAMFAAAADGN1cnJlbnRQcmljZQUAAAASYW1vdW50QXNzZXRCYWxhbmNlBQAAAAZzY2FsZTgEAAAADnJlc0Fzc2V0c1RvUHV0AwkAAGYAAAACBQAAAAZwRXFCeUEFAAAAEXByaWNlQXNzZXRCYWxhbmNlCQAFFAAAAAIJAABrAAAAAwUAAAARcHJpY2VBc3NldEJhbGFuY2UFAAAABnNjYWxlOAUAAAAMY3VycmVudFByaWNlBQAAABFwcmljZUFzc2V0QmFsYW5jZQkABRQAAAACBQAAABJhbW91bnRBc3NldEJhbGFuY2UFAAAABnBFcUJ5QQQAAAAUcmVzdWx0QW1vdW50QXNzZXRBbXQJAQAAAAd0b1NjYWxlAAAAAwgFAAAADnJlc0Fzc2V0c1RvUHV0AAAAAl8xBQAAABNhbW91bnRBc3NldERlY2ltYWxzBQAAAAZzY2FsZTgEAAAAE3Jlc3VsdFByaWNlQXNzZXRBbXQJAQAAAAd0b1NjYWxlAAAAAwgFAAAADnJlc0Fzc2V0c1RvUHV0AAAAAl8yBQAAABJwcmljZUFzc2V0RGVjaW1hbHMFAAAABnNjYWxlOAQAAAAKYW10QXNzZXRJZAMJAAAAAAAAAgUAAAARcG9vbEFtb3VudEFzc2V0SWQCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAAEXBvb2xBbW91bnRBc3NldElkBAAAAAxwcmljZUFzc2V0SWQDCQAAAAAAAAIFAAAAEHBvb2xQcmljZUFzc2V0SWQCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAAEHBvb2xQcmljZUFzc2V0SWQDBgkAAAIAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADmlkeEFtdEFzc2V0RGNtBAAAAAVscFB1dAkAA/wAAAAECQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAtwb29sQWRkcmVzcwIAAAAKcHV0Rm9yRnJlZQUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAphbXRBc3NldElkBQAAABRyZXN1bHRBbW91bnRBc3NldEFtdAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAMcHJpY2VBc3NldElkBQAAABNyZXN1bHRQcmljZUFzc2V0QW10BQAAAANuaWwDCQAAAAAAAAIFAAAABWxwUHV0BQAAAAVscFB1dAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5UmVnaXN0ZXJJbnZlc3QAAAACBQAAAAtwb29sQWRkcmVzcwkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQEAAAAUZGF0YUludmVzdEFjdGlvbkluZm8AAAAEBQAAABRyZXN1bHRBbW91bnRBc3NldEFtdAUAAAATcmVzdWx0UHJpY2VBc3NldEFtdAUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleVQCxUg=", "chainId": 84, "height": 1743190, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AZF4nPULhxqDQP1q6DSuU1ah6j2Yc4h2iPCAhXuUdjLM Next: Gqqgq7WKUCVWhiLmHob7NEckiWhrHyf9bumSRNeotkcq Diff:
Old | New | Differences | |
---|---|---|---|
140 | 140 | then unit | |
141 | 141 | else fromBase58String(poolPriceAssetId) | |
142 | 142 | if (true) | |
143 | - | then throw( | |
143 | + | then throw(poolConfig[idxAmtAssetDcm]) | |
144 | 144 | else { | |
145 | 145 | let lpPut = invoke(addressFromStringValue(poolAddress), "putForFree", nil, [AttachedPayment(amtAssetId, resultAmountAssetAmt), AttachedPayment(priceAssetId, resultPriceAssetAmt)]) | |
146 | 146 | if ((lpPut == lpPut)) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let SEP = "__" | |
5 | 5 | ||
6 | 6 | let scale8 = 100000000 | |
7 | 7 | ||
8 | 8 | let poolStatsPriceKey = 4 | |
9 | 9 | ||
10 | 10 | let idxPoolAddress = 1 | |
11 | 11 | ||
12 | 12 | let idxPoolStatus = 2 | |
13 | 13 | ||
14 | 14 | let idxPoolLPAssetId = 3 | |
15 | 15 | ||
16 | 16 | let idxAmtAssetId = 4 | |
17 | 17 | ||
18 | 18 | let idxPriceAssetId = 5 | |
19 | 19 | ||
20 | 20 | let idxAmtAssetDcm = 6 | |
21 | 21 | ||
22 | 22 | let idxPriceAssetDcm = 7 | |
23 | 23 | ||
24 | 24 | let idxIAmtAssetId = 8 | |
25 | 25 | ||
26 | 26 | let idxIPriceAssetId = 9 | |
27 | 27 | ||
28 | 28 | let idxLPAssetDcm = 10 | |
29 | 29 | ||
30 | 30 | let idxMatcherPublicKey = 11 | |
31 | 31 | ||
32 | 32 | func keyRegisterPut (poolAddress,txId) = ((("%s%s%s__P__" + poolAddress) + "__") + txId) | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | func keyRegisterInvest (poolAddress,txId) = ((("%s%s%s__invest__" + poolAddress) + "__") + txId) | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | func keyPoolTotalAmtByAsset (poolAddress,assetId) = ((("%s%s%s__total__" + poolAddress) + "__") + assetId) | |
39 | 39 | ||
40 | 40 | ||
41 | 41 | func keyFactoryContract () = "%s__factoryContract" | |
42 | 42 | ||
43 | 43 | ||
44 | 44 | func keySlippageAmtPerAssetCumulative (poolAddress,assetId) = (((("%s%s%s__" + poolAddress) + "__") + assetId) + "__slippageCumulative") | |
45 | 45 | ||
46 | 46 | ||
47 | 47 | func keyFactoryConfig () = "%s__factoryConfig" | |
48 | 48 | ||
49 | 49 | ||
50 | 50 | func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2PoolAssets") | |
51 | 51 | ||
52 | 52 | ||
53 | 53 | func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset)) | |
54 | 54 | ||
55 | 55 | ||
56 | 56 | func keyPoolConfig (iAmtAsset,iPriceAsset) = (((("%d%d%s__" + iAmtAsset) + "__") + iPriceAsset) + "__config") | |
57 | 57 | ||
58 | 58 | ||
59 | 59 | func keyAllPoolsShutdown () = "%s__shutdown" | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | func keyPoolWeight (contractAddress) = ("%s%s__poolWeight__" + contractAddress) | |
63 | 63 | ||
64 | 64 | ||
65 | 65 | let factoryContract = addressFromStringValue(valueOrErrorMessage(getString(this, keyFactoryContract()), "No Factory Acc found.")) | |
66 | 66 | ||
67 | 67 | func convertAssetId (assetId) = if (!(isDefined(assetId))) | |
68 | 68 | then "WAVES" | |
69 | 69 | else assetId | |
70 | 70 | ||
71 | 71 | ||
72 | 72 | func dataPutActionInfo (inAssetId,inAssetAmt,txHeight,txTimestamp) = makeString(["%s%d%d%d", inAssetId, toString(inAssetAmt), toString(txHeight), toString(txTimestamp)], SEP) | |
73 | 73 | ||
74 | 74 | ||
75 | 75 | func dataInvestActionInfo (outAmountAssetAmt,outPriceAssetAmt,txHeight,txTimestamp) = makeString(["%d%d%d%d", toString(outAmountAssetAmt), toString(outPriceAssetAmt), toString(txHeight), toString(txTimestamp)], SEP) | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func asString (val) = match val { | |
79 | 79 | case valStr: String => | |
80 | 80 | valStr | |
81 | 81 | case _ => | |
82 | 82 | throw("fail to cast into String") | |
83 | 83 | } | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func toScale (amt,resScale,curScale) = fraction(amt, resScale, curScale) | |
87 | 87 | ||
88 | 88 | ||
89 | 89 | @Callable(i) | |
90 | 90 | func constructor (factoryContract) = if ((i.caller != this)) | |
91 | 91 | then throw("permissions denied") | |
92 | 92 | else [StringEntry(keyFactoryContract(), factoryContract)] | |
93 | 93 | ||
94 | 94 | ||
95 | 95 | ||
96 | 96 | @Callable(i) | |
97 | 97 | func put () = { | |
98 | 98 | let pool = toString(i.caller) | |
99 | 99 | let pmtAmtAsset = value(i.payments[0]) | |
100 | 100 | let pmtAssetId = if (!(isDefined(pmtAmtAsset.assetId))) | |
101 | 101 | then "WAVES" | |
102 | 102 | else toBase58String(value(pmtAmtAsset.assetId)) | |
103 | 103 | let pmtAssetAmt = pmtAmtAsset.amount | |
104 | 104 | let poolAssets = split(valueOrErrorMessage(getString(factoryContract, keyMappingPoolContractAddressToPoolAssets(pool)), "Invalid caller"), SEP) | |
105 | 105 | let amountAssetId = parseIntValue(poolAssets[1]) | |
106 | 106 | let priceAssetId = parseIntValue(poolAssets[2]) | |
107 | 107 | let amountAsset = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(amountAssetId)), "Cannot find asset") | |
108 | 108 | let priceAsset = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(priceAssetId)), "Cannot find asset") | |
109 | 109 | let totalAmt = valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(pool, pmtAssetId)), 0) | |
110 | 110 | let cumulativeSlippageAmt = valueOrElse(getInteger(this, keySlippageAmtPerAssetCumulative(pool, pmtAssetId)), 0) | |
111 | 111 | [StringEntry(keyRegisterPut(pool, toBase58String(i.transactionId)), dataPutActionInfo(pmtAssetId, pmtAssetAmt, height, lastBlock.timestamp)), IntegerEntry(keyPoolTotalAmtByAsset(pool, pmtAssetId), (totalAmt + pmtAssetAmt)), IntegerEntry(keySlippageAmtPerAssetCumulative(pool, pmtAssetId), (cumulativeSlippageAmt + pmtAssetAmt))] | |
112 | 112 | } | |
113 | 113 | ||
114 | 114 | ||
115 | 115 | ||
116 | 116 | @Callable(i) | |
117 | 117 | func invest (poolAddress) = { | |
118 | 118 | let poolAssets = split(valueOrErrorMessage(getString(factoryContract, keyMappingPoolContractAddressToPoolAssets(poolAddress)), "Invalid pool passed."), SEP) | |
119 | 119 | let poolAmountAssetId = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(parseIntValue(poolAssets[1]))), "No asset mapping found") | |
120 | 120 | let poolPriceAssetId = valueOrErrorMessage(getString(factoryContract, keyMappingsInternal2baseAssetId(parseIntValue(poolAssets[2]))), "No asset mapping found") | |
121 | 121 | let poolConfig = split(valueOrErrorMessage(getString(factoryContract, keyPoolConfig(poolAssets[1], poolAssets[2])), "No factory config found for pool assets."), SEP) | |
122 | 122 | let amountAssetDecimals = parseIntValue(poolConfig[idxAmtAssetDcm]) | |
123 | 123 | let priceAssetDecimals = parseIntValue(poolConfig[idxPriceAssetDcm]) | |
124 | 124 | let amountAssetBalance = toScale(valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(poolAddress, poolAmountAssetId)), 0), scale8, amountAssetDecimals) | |
125 | 125 | let priceAssetBalance = toScale(valueOrElse(getInteger(this, keyPoolTotalAmtByAsset(poolAddress, poolPriceAssetId)), 0), scale8, priceAssetDecimals) | |
126 | 126 | let poolStats = asString(invoke(addressFromStringValue(poolAddress), "statsREADONLY", nil, nil)) | |
127 | 127 | if ((poolStats == poolStats)) | |
128 | 128 | then { | |
129 | 129 | let currentPrice = parseIntValue(split(poolStats, SEP)[poolStatsPriceKey]) | |
130 | 130 | let pEqByA = fraction(currentPrice, amountAssetBalance, scale8) | |
131 | 131 | let resAssetsToPut = if ((pEqByA > priceAssetBalance)) | |
132 | 132 | then $Tuple2(fraction(priceAssetBalance, scale8, currentPrice), priceAssetBalance) | |
133 | 133 | else $Tuple2(amountAssetBalance, pEqByA) | |
134 | 134 | let resultAmountAssetAmt = toScale(resAssetsToPut._1, amountAssetDecimals, scale8) | |
135 | 135 | let resultPriceAssetAmt = toScale(resAssetsToPut._2, priceAssetDecimals, scale8) | |
136 | 136 | let amtAssetId = if ((poolAmountAssetId == "WAVES")) | |
137 | 137 | then unit | |
138 | 138 | else fromBase58String(poolAmountAssetId) | |
139 | 139 | let priceAssetId = if ((poolPriceAssetId == "WAVES")) | |
140 | 140 | then unit | |
141 | 141 | else fromBase58String(poolPriceAssetId) | |
142 | 142 | if (true) | |
143 | - | then throw( | |
143 | + | then throw(poolConfig[idxAmtAssetDcm]) | |
144 | 144 | else { | |
145 | 145 | let lpPut = invoke(addressFromStringValue(poolAddress), "putForFree", nil, [AttachedPayment(amtAssetId, resultAmountAssetAmt), AttachedPayment(priceAssetId, resultPriceAssetAmt)]) | |
146 | 146 | if ((lpPut == lpPut)) | |
147 | 147 | then [StringEntry(keyRegisterInvest(poolAddress, toBase58String(i.transactionId)), dataInvestActionInfo(resultAmountAssetAmt, resultPriceAssetAmt, height, lastBlock.timestamp))] | |
148 | 148 | else throw("Strict value is not equal to itself.") | |
149 | 149 | } | |
150 | 150 | } | |
151 | 151 | else throw("Strict value is not equal to itself.") | |
152 | 152 | } | |
153 | 153 | ||
154 | 154 | ||
155 | 155 | @Verifier(tx) | |
156 | 156 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
157 | 157 |
github/deemru/w8io/026f985 41.62 ms ◑