tx · 8EqLnEj1dskYeEXGgBcWjimhv6Vj9wmYv83pZxTxpxPW

3MsryPHGVR5NWpGqXNw1LbqEYUx3Vk88yxN:  -0.05000000 Waves

2021.08.10 20:41 [1652566] smart account 3MsryPHGVR5NWpGqXNw1LbqEYUx3Vk88yxN > SELF 0.00000000 Waves

{ "type": 13, "id": "8EqLnEj1dskYeEXGgBcWjimhv6Vj9wmYv83pZxTxpxPW", "fee": 5000000, "feeAssetId": null, "timestamp": 1628617288184, "version": 2, "chainId": 84, "sender": "3MsryPHGVR5NWpGqXNw1LbqEYUx3Vk88yxN", "senderPublicKey": "EkxY8bYYRAdDeo26yCeHLGSzDnPpuye9m2yxFRQGpXVy", "proofs": [ "Z4akPuFabeXKHuYvHDRTzoKq18W8BZESAxHwP1gWua1coVSN69eFDPvKzSbiZAvwB5JPcRZXBosoef8BiLUsU1c" ], "script": "base64:AAIFAAAAAAAAACMIAhIAEgMKAQESABIAEgcKBQgICAgBEgMKAQESABIAEgASAAAAACUAAAAACmxQZGVjaW1hbHMAAAAAAAAAAAgAAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAADU0VQAgAAAAJfXwAAAAAKUG9vbEFjdGl2ZQAAAAAAAAAAAQAAAAAPUG9vbFB1dERpc2FibGVkAAAAAAAAAAACAAAAABNQb29sTWF0Y2hlckRpc2FibGVkAAAAAAAAAAADAAAAAAxQb29sU2h1dGRvd24AAAAAAAAAAAQAAAAAEGZhY3RvcnlQdWJsaWNLZXkJAAJZAAAAAQIAAAArTWltUXRCeDdhemhTdEFIMlI1UVY3VWs4aFdFYm03cTg5NzkzZmsxajFtaAAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAIAAAAADWlkeFBvb2xTdGF0dXMAAAAAAAAAAAMAAAAAEGlkeFBvb2xMUEFzc2V0SWQAAAAAAAAAAAQAAAAAEGlkeEFtb3VudEFzc2V0SWQAAAAAAAAAAAUAAAAAD2lkeFByaWNlQXNzZXRJZAAAAAAAAAAABgAAAAAWaWR4QW1vdW50QXNzZXREZWNpbWFscwAAAAAAAAAABwAAAAAVaWR4UHJpY2VBc3NldERlY2ltYWxzAAAAAAAAAAAIAAAAABhpZHhBbW91bnRBc3NldEludGVybmFsSWQAAAAAAAAAAAkAAAAAF2lkeFByaWNlQXNzZXRJbnRlcm5hbElkAAAAAAAAAAAKAAAAAA1pZHhQb29sV2VpZ2h0AAAAAAAAAAALAAAAABVpZHhQb29sQW1vdW50QXNzZXRBbXQAAAAAAAAAAAIAAAAAFGlkeFBvb2xQcmljZUFzc2V0QW10AAAAAAAAAAADAAAAABFpZHhQb29sTFBBc3NldEFtdAAAAAAAAAAABAEAAAAMa2V5UHJpY2VMYXN0AAAAAAIAAAARJXMlc19fcHJpY2VfX2xhc3QBAAAAD2tleVByaWNlSGlzdG9yeQAAAAIAAAABaAAAAAl0aW1lc3RhbXAJAAS5AAAAAgkABEwAAAACAgAAABglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAARMAAAAAgkAAaQAAAABBQAAAAFoCQAETAAAAAIJAAGkAAAAAQUAAAAJdGltZXN0YW1wBQAAAANuaWwFAAAAA1NFUAEAAAAQa2V5UG9vbExpcXVpZGl0eQAAAAIAAAATaW50ZXJuYWxBbW91bnRBc3NldAAAABJpbnRlcm5hbFByaWNlQXNzZXQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAIJWQlZCVzX18FAAAAE2ludGVybmFsQW1vdW50QXNzZXQCAAAAAl9fBQAAABJpbnRlcm5hbFByaWNlQXNzZXQCAAAACF9fbG9ja2VkAQAAABZrZXlQb29sTGlxdWlkaXR5QnlVc2VyAAAAAwAAABNpbnRlcm5hbEFtb3VudEFzc2V0AAAAEmludGVybmFsUHJpY2VBc3NldAAAAAt1c2VyQWRkcmVzcwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAKJWQlZCVzJXNfXwUAAAATaW50ZXJuYWxBbW91bnRBc3NldAIAAAACX18FAAAAEmludGVybmFsUHJpY2VBc3NldAIAAAACX18FAAAAC3VzZXJBZGRyZXNzAgAAAAhfX2xvY2tlZAEAAAASa2V5UHV0QWN0aW9uQnlVc2VyAAAAAgAAAAt1c2VyQWRkcmVzcwAAAAR0eElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAslcyVzJXNfX1BfXwUAAAALdXNlckFkZHJlc3MCAAAAAl9fBQAAAAR0eElkAQAAABJrZXlHZXRBY3Rpb25CeVVzZXIAAAACAAAAC3VzZXJBZGRyZXNzAAAABHR4SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACyVzJXMlc19fR19fBQAAAAt1c2VyQWRkcmVzcwIAAAACX18FAAAABHR4SWQBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQAAABNwb29sQ29udHJhY3RBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MCAAAAIF9fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJMcEFzc2V0AQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAABNhbW91bnRBc3NldEludGVybmFsAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAolcyVkJWQlc19fBQAAABNhbW91bnRBc3NldEludGVybmFsAgAAAAJfXwUAAAAScHJpY2VBc3NldEludGVybmFsAgAAAAhfX2NvbmZpZwEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAADmZhY3RvcnlBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAABBmYWN0b3J5UHVibGljS2V5BAAAABFjdXJyZW50UG9vbEFzc2V0cwkABLUAAAACCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAOZmFjdG9yeUFkZHJlc3MJAQAAAClrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cwAAAAEJAAQlAAAAAQUAAAAEdGhpcwIAAAApTm8gZmFjdG9yeSBjb25maWcgZm91bmQgZm9yIHBvb2wgYWRkcmVzcy4FAAAAA1NFUAQAAAARY3VycmVudFBvb2xDb25maWcJAAS1AAAAAgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADmZhY3RvcnlBZGRyZXNzCQEAAAANa2V5UG9vbENvbmZpZwAAAAIJAAGRAAAAAgUAAAARY3VycmVudFBvb2xBc3NldHMAAAAAAAAAAAIJAAGRAAAAAgUAAAARY3VycmVudFBvb2xBc3NldHMAAAAAAAAAAAMCAAAAKE5vIGZhY3RvcnkgY29uZmlnIGZvdW5kIGZvciBwb29sIGFzc2V0cy4FAAAAA1NFUAUAAAARY3VycmVudFBvb2xDb25maWcBAAAAEGdldFBvb2xMaXF1aWRpdHkAAAACAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAQAAAAZY3VycmVudFBvb2xMaXF1aWRpdHlWYWx1ZQkABCIAAAABCQEAAAAQa2V5UG9vbExpcXVpZGl0eQAAAAIFAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAUAAAAUcHJpY2VBc3NldEludGVybmFsSWQDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAABljdXJyZW50UG9vbExpcXVpZGl0eVZhbHVlBQAAAANuaWwEAAAAFGN1cnJlbnRQb29sTGlxdWlkaXR5CQAEtQAAAAIJAQAAAAV2YWx1ZQAAAAEFAAAAGWN1cnJlbnRQb29sTGlxdWlkaXR5VmFsdWUFAAAAA1NFUAUAAAAUY3VycmVudFBvb2xMaXF1aWRpdHkBAAAAFmdldFBvb2xMaXF1aWRpdHlCeVVzZXIAAAADAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAAAAAt1c2VyQWRkcmVzcwQAAAAZY3VycmVudFBvb2xMaXF1aWRpdHlWYWx1ZQkABCIAAAABCQEAAAAWa2V5UG9vbExpcXVpZGl0eUJ5VXNlcgAAAAMFAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAUAAAAUcHJpY2VBc3NldEludGVybmFsSWQFAAAAC3VzZXJBZGRyZXNzAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAZY3VycmVudFBvb2xMaXF1aWRpdHlWYWx1ZQkABEwAAAACAgAAAAAJAARMAAAAAgIAAAABMAkABEwAAAACAgAAAAEwCQAETAAAAAICAAAAATAJAARMAAAAAgIAAAABMAUAAAADbmlsBAAAABRjdXJyZW50UG9vbExpcXVpZGl0eQkABLUAAAACCQEAAAAFdmFsdWUAAAABBQAAABljdXJyZW50UG9vbExpcXVpZGl0eVZhbHVlBQAAAANTRVAFAAAAFGN1cnJlbnRQb29sTGlxdWlkaXR5AQAAABFkYXRhUG9vbExpcXVpZGl0eQAAAAMAAAARYW1vdW50QXNzZXRMb2NrZWQAAAAQcHJpY2VBc3NldExvY2tlZAAAAA1scFRva2VuTG9ja2VkCQAEuQAAAAIJAARMAAAAAgIAAAAGJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAARYW1vdW50QXNzZXRMb2NrZWQJAARMAAAAAgkAAaQAAAABBQAAABBwcmljZUFzc2V0TG9ja2VkCQAETAAAAAIJAAGkAAAAAQUAAAANbHBUb2tlbkxvY2tlZAUAAAADbmlsBQAAAANTRVABAAAAEWRhdGFQdXRBY3Rpb25JbmZvAAAABwAAABBpbkFtb3VudEFzc2V0QW10AAAAD2luUHJpY2VBc3NldEFtdAAAAAhvdXRMcEFtdAAAAAVwcmljZQAAAB1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlcgAAAAh0eEhlaWdodAAAAAt0eFRpbWVzdGFtcAkABLkAAAACCQAETAAAAAICAAAADiVkJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAQaW5BbW91bnRBc3NldEFtdAkABEwAAAACCQABpAAAAAEFAAAAD2luUHJpY2VBc3NldEFtdAkABEwAAAACCQABpAAAAAEFAAAACG91dExwQW10CQAETAAAAAIJAAGkAAAAAQUAAAAFcHJpY2UJAARMAAAAAgkAAaQAAAABBQAAAB1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlcgkABEwAAAACCQABpAAAAAEFAAAACHR4SGVpZ2h0CQAETAAAAAIJAAGkAAAAAQUAAAALdHhUaW1lc3RhbXAFAAAAA25pbAUAAAADU0VQAQAAABFkYXRhR2V0QWN0aW9uSW5mbwAAAAYAAAARb3V0QW1vdW50QXNzZXRBbXQAAAAQb3V0UHJpY2VBc3NldEFtdAAAAAdpbkxwQW10AAAABXByaWNlAAAACHR4SGVpZ2h0AAAAC3R4VGltZXN0YW1wCQAEuQAAAAIJAARMAAAAAgIAAAAMJWQlZCVkJWQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAARb3V0QW1vdW50QXNzZXRBbXQJAARMAAAAAgkAAaQAAAABBQAAABBvdXRQcmljZUFzc2V0QW10CQAETAAAAAIJAAGkAAAAAQUAAAAHaW5McEFtdAkABEwAAAACCQABpAAAAAEFAAAABXByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAIdHhIZWlnaHQJAARMAAAAAgkAAaQAAAABBQAAAAt0eFRpbWVzdGFtcAUAAAADbmlsBQAAAANTRVABAAAAF2RhdGFQb29sTGlxdWlkaXR5QnlVc2VyAAAABAAAABFhbW91bnRBc3NldExvY2tlZAAAABBwcmljZUFzc2V0TG9ja2VkAAAADWxwVG9rZW5Mb2NrZWQAAAALdXNlckFkZHJlc3MJAAS5AAAAAgkABEwAAAACAgAAAAYlZCVkJWQJAARMAAAAAgkAAaQAAAABBQAAABFhbW91bnRBc3NldExvY2tlZAkABEwAAAACCQABpAAAAAEFAAAAEHByaWNlQXNzZXRMb2NrZWQJAARMAAAAAgkAAaQAAAABBQAAAA1scFRva2VuTG9ja2VkBQAAAANuaWwFAAAAA1NFUAEAAAAOY2FsY3VsYXRlUHJpY2UAAAAEAAAADmFtb3VudEFzc2V0QW10AAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMAAAANcHJpY2VBc3NldEFtdAAAABJwcmljZUFzc2V0RGVjaW1hbHMEAAAAGGRlY2ltYWxzTXVsdDRBbW91bnRBc3NldAkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAACQAAZQAAAAIFAAAACmxQZGVjaW1hbHMFAAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAAF2RlY2ltYWxzTXVsdDRQcmljZUFzc2V0CQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAJAABlAAAAAgUAAAAKbFBkZWNpbWFscwUAAAAScHJpY2VBc3NldERlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAABVpbkFtb3VudEFzc2V0QW10RmluYWwJAABoAAAAAgUAAAAOYW1vdW50QXNzZXRBbXQFAAAAGGRlY2ltYWxzTXVsdDRBbW91bnRBc3NldAQAAAAPaW5QcmljZUFtdEZpbmFsCQAAaAAAAAIFAAAADXByaWNlQXNzZXRBbXQFAAAAF2RlY2ltYWxzTXVsdDRQcmljZUFzc2V0BAAAAAVwcmljZQkAAGsAAAADBQAAAA9pblByaWNlQW10RmluYWwFAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAABVpbkFtb3VudEFzc2V0QW10RmluYWwFAAAABXByaWNlAAAACgAAAAFpAQAAAA1nZXRTY3JpcHRIYXNoAAAAAAQAAAAEaGFzaAkAAloAAAABCQEAAAAFdmFsdWUAAAABCQAD8QAAAAEFAAAABHRoaXMJAAACAAAAAQUAAAAEaGFzaAAAAAFpAQAAAANwdXQAAAABAAAAEXNsaXBwYWdlVG9sZXJhbmNlBAAAABJwb29sQ29uZmlnRGF0YUxpc3QJAQAAAA1nZXRQb29sQ29uZmlnAAAAAAQAAAAJbHBBc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAAScG9vbENvbmZpZ0RhdGFMaXN0BQAAABBpZHhQb29sTFBBc3NldElkBAAAAA1hbW91bnRBc3NldElkCQABkQAAAAIFAAAAEnBvb2xDb25maWdEYXRhTGlzdAUAAAAQaWR4QW1vdW50QXNzZXRJZAQAAAAMcHJpY2VBc3NldElkCQABkQAAAAIFAAAAEnBvb2xDb25maWdEYXRhTGlzdAUAAAAPaWR4UHJpY2VBc3NldElkBAAAABVhbW91bnRBc3NldEludGVybmFsSWQJAAGRAAAAAgUAAAAScG9vbENvbmZpZ0RhdGFMaXN0BQAAABhpZHhBbW91bnRBc3NldEludGVybmFsSWQEAAAAFHByaWNlQXNzZXRJbnRlcm5hbElkCQABkQAAAAIFAAAAEnBvb2xDb25maWdEYXRhTGlzdAUAAAAXaWR4UHJpY2VBc3NldEludGVybmFsSWQEAAAAEmFtb3V0QXNzZXREZWNpbWFscwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEnBvb2xDb25maWdEYXRhTGlzdAUAAAAWaWR4QW1vdW50QXNzZXREZWNpbWFscwQAAAAScHJpY2VBc3NldERlY2ltYWxzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAScG9vbENvbmZpZ0RhdGFMaXN0BQAAABVpZHhQcmljZUFzc2V0RGVjaW1hbHMEAAAADnBtdEFtb3VudEFzc2V0CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAABBpbkFtb3VudEFzc2V0QW10CAUAAAAOcG10QW1vdW50QXNzZXQAAAAGYW1vdW50BAAAAA9pbkFtb3VudEFzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAA5wbXRBbW91bnRBc3NldAAAAAdhc3NldElkBAAAAA1wbXRQcmljZUFzc2V0CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABBAAAAA9pblByaWNlQXNzZXRBbXQIBQAAAA1wbXRQcmljZUFzc2V0AAAABmFtb3VudAQAAAAOaW5QcmljZUFzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAA1wbXRQcmljZUFzc2V0AAAAB2Fzc2V0SWQEAAAAFXBvb2xMaXF1aWRpdHlEYXRhTGlzdAkBAAAAEGdldFBvb2xMaXF1aWRpdHkAAAACBQAAABVhbW91bnRBc3NldEludGVybmFsSWQFAAAAFHByaWNlQXNzZXRJbnRlcm5hbElkBAAAABZwb29sQW1vdW50QXNzZXRCYWxhbmNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAVcG9vbExpcXVpZGl0eURhdGFMaXN0BQAAABVpZHhQb29sQW1vdW50QXNzZXRBbXQEAAAAFXBvb2xQcmljZUFzc2V0QmFsYW5jZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAFXBvb2xMaXF1aWRpdHlEYXRhTGlzdAUAAAAUaWR4UG9vbFByaWNlQXNzZXRBbXQEAAAADXBvb2xMUEJhbGFuY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABVwb29sTGlxdWlkaXR5RGF0YUxpc3QFAAAAEWlkeFBvb2xMUEFzc2V0QW10AwYJAAACAAAAAQIAAAAFR1NERlMEAAAAFXVzZXJMaXF1aWRpdHlEYXRhTGlzdAkBAAAAFmdldFBvb2xMaXF1aWRpdHlCeVVzZXIAAAADBQAAABVhbW91bnRBc3NldEludGVybmFsSWQFAAAAFHByaWNlQXNzZXRJbnRlcm5hbElkCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAWdXNlckFtb3VudEFzc2V0QmFsYW5jZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAFXVzZXJMaXF1aWRpdHlEYXRhTGlzdAUAAAAVaWR4UG9vbEFtb3VudEFzc2V0QW10BAAAABV1c2VyUHJpY2VBc3NldEJhbGFuY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABV1c2VyTGlxdWlkaXR5RGF0YUxpc3QFAAAAFGlkeFBvb2xQcmljZUFzc2V0QW10BAAAAA11c2VyTFBCYWxhbmNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAVdXNlckxpcXVpZGl0eURhdGFMaXN0BQAAABFpZHhQb29sTFBBc3NldEFtdAMDCQEAAAACIT0AAAACBQAAAA1hbW91bnRBc3NldElkCQACWAAAAAEFAAAAD2luQW1vdW50QXNzZXRJZAYJAQAAAAIhPQAAAAIFAAAADHByaWNlQXNzZXRJZAkAAlgAAAABBQAAAA5pblByaWNlQXNzZXRJZAkAAAIAAAABAgAAACVJbnZhbGlkIGFtb3VudCBvciBwcmljZSBhc3NldCBwYXNzZWQuBAAAABhkZWNpbWFsc011bHQ0QW1vdW50QXNzZXQJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAkAAGUAAAACBQAAAApsUGRlY2ltYWxzBQAAABJhbW91dEFzc2V0RGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAAF2RlY2ltYWxzTXVsdDRQcmljZUFzc2V0CQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAJAABlAAAAAgUAAAAKbFBkZWNpbWFscwUAAAAScHJpY2VBc3NldERlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAABppbkFtb3VudEFzc2V0QW10Q2FsY3VsYXRlZAkAAGgAAAACBQAAABBpbkFtb3VudEFzc2V0QW10BQAAABhkZWNpbWFsc011bHQ0QW1vdW50QXNzZXQEAAAAGWluUHJpY2VBc3NldEFtdENhbGN1bGF0ZWQJAABoAAAAAgUAAAAPaW5QcmljZUFzc2V0QW10BQAAABdkZWNpbWFsc011bHQ0UHJpY2VBc3NldAQAAAARZXhwZWN0ZWRVc2VyUHJpY2UJAABrAAAAAwUAAAAZaW5QcmljZUFzc2V0QW10Q2FsY3VsYXRlZAUAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAAGmluQW1vdW50QXNzZXRBbXRDYWxjdWxhdGVkBAAAABhhbW91bnRBc3NldFBvb2xMb2NrZWRBbXQJAABoAAAAAgUAAAAWcG9vbEFtb3VudEFzc2V0QmFsYW5jZQUAAAAYZGVjaW1hbHNNdWx0NEFtb3VudEFzc2V0BAAAABdwcmljZUFzc2V0UG9vbExvY2tlZEFtdAkAAGgAAAACBQAAABVwb29sUHJpY2VBc3NldEJhbGFuY2UFAAAAF2RlY2ltYWxzTXVsdDRQcmljZUFzc2V0BAAAABBjdXJyZW50UG9vbFByaWNlCQAAawAAAAMFAAAAF3ByaWNlQXNzZXRQb29sTG9ja2VkQW10BQAAABFkZWNpbWFsc011bHRQcmljZQUAAAAYYW1vdW50QXNzZXRQb29sTG9ja2VkQW10AwkAAAAAAAACCQABkAAAAAEFAAAAFXBvb2xMaXF1aWRpdHlEYXRhTGlzdAAAAAAAAAAAAAQAAAAFcGFydEEJAABsAAAABgUAAAAaaW5BbW91bnRBc3NldEFtdENhbGN1bGF0ZWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAEFAAAABERPV04EAAAABXBhcnRCCQAAbAAAAAYFAAAAGWluUHJpY2VBc3NldEFtdENhbGN1bGF0ZWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAEFAAAABERPV04EAAAAEGxwQXNzZXRzVG9SZXR1cm4JAABoAAAAAgUAAAAFcGFydEEFAAAABXBhcnRCCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlQcmljZUxhc3QAAAAACQABLAAAAAICAAAABCVzX18JAAGkAAAAAQUAAAAQY3VycmVudFBvb2xQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5UHJpY2VIaXN0b3J5AAAAAgUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAASwAAAACAgAAAAQlc19fCQABpAAAAAEFAAAAEGN1cnJlbnRQb29sUHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleVB1dEFjdGlvbkJ5VXNlcgAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQJAQAAABFkYXRhUHV0QWN0aW9uSW5mbwAAAAcFAAAAEGluQW1vdW50QXNzZXRBbXQFAAAAD2luUHJpY2VBc3NldEFtdAUAAAAQbHBBc3NldHNUb1JldHVybgUAAAAQY3VycmVudFBvb2xQcmljZQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFmtleVBvb2xMaXF1aWRpdHlCeVVzZXIAAAADBQAAABVhbW91bnRBc3NldEludGVybmFsSWQFAAAAFHByaWNlQXNzZXRJbnRlcm5hbElkCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkBAAAAEWRhdGFQb29sTGlxdWlkaXR5AAAAAwUAAAAQaW5BbW91bnRBc3NldEFtdAUAAAAPaW5QcmljZUFzc2V0QW10BQAAABBscEFzc2V0c1RvUmV0dXJuCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlQb29sTGlxdWlkaXR5AAAAAgUAAAAVYW1vdW50QXNzZXRJbnRlcm5hbElkBQAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAkBAAAAEWRhdGFQb29sTGlxdWlkaXR5AAAAAwUAAAAQaW5BbW91bnRBc3NldEFtdAUAAAAPaW5QcmljZUFzc2V0QW10BQAAABBscEFzc2V0c1RvUmV0dXJuCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAJbHBBc3NldElkBQAAABBscEFzc2V0c1RvUmV0dXJuBgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEGxwQXNzZXRzVG9SZXR1cm4FAAAACWxwQXNzZXRJZAUAAAADbmlsBAAAAAhzbGlwcGFnZQkAAGsAAAADBQAAABBjdXJyZW50UG9vbFByaWNlAAAAAAAAAABkBQAAABFleHBlY3RlZFVzZXJQcmljZQMJAABmAAAAAgUAAAAIc2xpcHBhZ2UFAAAAEXNsaXBwYWdlVG9sZXJhbmNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAD1ByaWNlIHNsaXBwYWdlIAkAAaQAAAABBQAAAAhzbGlwcGFnZQIAAAAeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQABpAAAAAEFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBAAAABJscEFtdEJ5QW1vdW50QXNzZXQJAABrAAAAAwUAAAANcG9vbExQQmFsYW5jZQUAAAAaaW5BbW91bnRBc3NldEFtdENhbGN1bGF0ZWQFAAAAGGFtb3VudEFzc2V0UG9vbExvY2tlZEFtdAQAAAARbHBBbXRCeVByaWNlQXNzZXQJAABrAAAAAwUAAAANcG9vbExQQmFsYW5jZQUAAAAZaW5QcmljZUFzc2V0QW10Q2FsY3VsYXRlZAUAAAAXcHJpY2VBc3NldFBvb2xMb2NrZWRBbXQEAAAADHRvdGFsTHA0VXNlcgMJAABmAAAAAgUAAAARbHBBbXRCeVByaWNlQXNzZXQFAAAAEmxwQW10QnlBbW91bnRBc3NldAUAAAASbHBBbXRCeUFtb3VudEFzc2V0BQAAABFscEFtdEJ5UHJpY2VBc3NldAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMa2V5UHJpY2VMYXN0AAAAAAkAASwAAAACAgAAAAQlc19fCQABpAAAAAEFAAAAEGN1cnJlbnRQb29sUHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAIFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAAEsAAAAAgIAAAAEJXNfXwkAAaQAAAABBQAAABBjdXJyZW50UG9vbFByaWNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlQdXRBY3Rpb25CeVVzZXIAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQEAAAARZGF0YVB1dEFjdGlvbkluZm8AAAAHBQAAABBpbkFtb3VudEFzc2V0QW10BQAAAA9pblByaWNlQXNzZXRBbXQFAAAADHRvdGFsTHA0VXNlcgUAAAAQY3VycmVudFBvb2xQcmljZQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFmtleVBvb2xMaXF1aWRpdHlCeVVzZXIAAAADBQAAABVhbW91bnRBc3NldEludGVybmFsSWQFAAAAFHByaWNlQXNzZXRJbnRlcm5hbElkCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkBAAAAEWRhdGFQb29sTGlxdWlkaXR5AAAAAwkAAGQAAAACBQAAABZ1c2VyQW1vdW50QXNzZXRCYWxhbmNlBQAAABBpbkFtb3VudEFzc2V0QW10CQAAZAAAAAIFAAAAFXVzZXJQcmljZUFzc2V0QmFsYW5jZQUAAAAPaW5QcmljZUFzc2V0QW10CQAAZAAAAAIFAAAADXVzZXJMUEJhbGFuY2UFAAAADHRvdGFsTHA0VXNlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5UG9vbExpcXVpZGl0eQAAAAIFAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAUAAAAUcHJpY2VBc3NldEludGVybmFsSWQJAQAAABFkYXRhUG9vbExpcXVpZGl0eQAAAAMJAABkAAAAAgUAAAAWcG9vbEFtb3VudEFzc2V0QmFsYW5jZQUAAAAQaW5BbW91bnRBc3NldEFtdAkAAGQAAAACBQAAABVwb29sUHJpY2VBc3NldEJhbGFuY2UFAAAAD2luUHJpY2VBc3NldEFtdAkAAGQAAAACBQAAAA1wb29sTFBCYWxhbmNlBQAAAAx0b3RhbExwNFVzZXIJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAlscEFzc2V0SWQFAAAADHRvdGFsTHA0VXNlcgYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAx0b3RhbExwNFVzZXIFAAAACWxwQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAAA2dldAAAAAAEAAAADnBvb2xDb25maWdMaXN0CQEAAAANZ2V0UG9vbENvbmZpZwAAAAAEAAAACWxwQXNzZXRJZAkAAZEAAAACBQAAAA5wb29sQ29uZmlnTGlzdAUAAAAQaWR4UG9vbExQQXNzZXRJZAQAAAANYW1vdW50QXNzZXRJZAkAAZEAAAACBQAAAA5wb29sQ29uZmlnTGlzdAUAAAAQaWR4QW1vdW50QXNzZXRJZAQAAAAMcHJpY2VBc3NldElkCQABkQAAAAIFAAAADnBvb2xDb25maWdMaXN0BQAAAA9pZHhQcmljZUFzc2V0SWQEAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAkAAZEAAAACBQAAAA5wb29sQ29uZmlnTGlzdAUAAAAYaWR4QW1vdW50QXNzZXRJbnRlcm5hbElkBAAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAkAAZEAAAACBQAAAA5wb29sQ29uZmlnTGlzdAUAAAAXaWR4UHJpY2VBc3NldEludGVybmFsSWQEAAAAEXVzZXJMaXF1aWRpdHlMaXN0CQEAAAAWZ2V0UG9vbExpcXVpZGl0eUJ5VXNlcgAAAAMFAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAUAAAAUcHJpY2VBc3NldEludGVybmFsSWQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAA11c2VyTFBCYWxhbmNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARdXNlckxpcXVpZGl0eUxpc3QFAAAAEWlkeFBvb2xMUEFzc2V0QW10BAAAABZ1c2VyQW1vdW50QXNzZXRCYWxhbmNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARdXNlckxpcXVpZGl0eUxpc3QFAAAAFWlkeFBvb2xBbW91bnRBc3NldEFtdAQAAAAVdXNlclByaWNlQXNzZXRCYWxhbmNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARdXNlckxpcXVpZGl0eUxpc3QFAAAAFGlkeFBvb2xQcmljZUFzc2V0QW10BAAAABFwb29sTGlxdWlkaXR5TGlzdAkBAAAAEGdldFBvb2xMaXF1aWRpdHkAAAACBQAAABVhbW91bnRBc3NldEludGVybmFsSWQFAAAAFHByaWNlQXNzZXRJbnRlcm5hbElkBAAAAA1wb29sTFBCYWxhbmNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARcG9vbExpcXVpZGl0eUxpc3QFAAAAEWlkeFBvb2xMUEFzc2V0QW10BAAAABZwb29sQW1vdW50QXNzZXRCYWxhbmNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARcG9vbExpcXVpZGl0eUxpc3QFAAAAFWlkeFBvb2xBbW91bnRBc3NldEFtdAQAAAAVcG9vbFByaWNlQXNzZXRCYWxhbmNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARcG9vbExpcXVpZGl0eUxpc3QFAAAAFGlkeFBvb2xQcmljZUFzc2V0QW10BAAAAA5wbXRBbW91bnRBc3NldAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAKcG10QXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAADnBtdEFtb3VudEFzc2V0AAAAB2Fzc2V0SWQEAAAADnBtdEFzc2V0QW1vdW50CAUAAAAOcG10QW1vdW50QXNzZXQAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgUAAAAJbHBBc3NldElkCQACWAAAAAEFAAAACnBtdEFzc2V0SWQJAAACAAAAAQIAAAAVSW52YWxpZCBhc3NldCBwYXNzZWQuAwkAAGYAAAACBQAAAA5wbXRBc3NldEFtb3VudAUAAAANdXNlckxQQmFsYW5jZQkAAAIAAAABAgAAADJJbnZhbGlkIGFtb3VudCBwYXNzZWQuIEFtb3VudCBsZXNzIHRoYW4gYXZhaWxhYmxlLgQAAAARb3V0QW1vdW50QXNzZXRBbXQJAABrAAAAAwUAAAAWcG9vbEFtb3VudEFzc2V0QmFsYW5jZQUAAAAOcG10QXNzZXRBbW91bnQFAAAADXBvb2xMUEJhbGFuY2UEAAAAEG91dFByaWNlQXNzZXRBbXQJAABrAAAAAwUAAAAVcG9vbFByaWNlQXNzZXRCYWxhbmNlBQAAAA5wbXRBc3NldEFtb3VudAUAAAANcG9vbExQQmFsYW5jZQQAAAAMY3VycmVudFByaWNlCQAAawAAAAMFAAAAFXBvb2xQcmljZUFzc2V0QmFsYW5jZQUAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAAFnBvb2xBbW91bnRBc3NldEJhbGFuY2UJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAApwbXRBc3NldElkBQAAAA5wbXRBc3NldEFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEW91dEFtb3VudEFzc2V0QW10CQACWQAAAAEFAAAADWFtb3VudEFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABBvdXRQcmljZUFzc2V0QW10CQACWQAAAAEFAAAADHByaWNlQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAWa2V5UG9vbExpcXVpZGl0eUJ5VXNlcgAAAAMFAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAUAAAAUcHJpY2VBc3NldEludGVybmFsSWQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQEAAAARZGF0YVBvb2xMaXF1aWRpdHkAAAADCQAAZQAAAAIFAAAAFnVzZXJBbW91bnRBc3NldEJhbGFuY2UFAAAAEW91dEFtb3VudEFzc2V0QW10CQAAZQAAAAIFAAAAFXVzZXJQcmljZUFzc2V0QmFsYW5jZQUAAAAQb3V0UHJpY2VBc3NldEFtdAkAAGUAAAACBQAAAA11c2VyTFBCYWxhbmNlBQAAAA5wbXRBc3NldEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5UG9vbExpcXVpZGl0eQAAAAIFAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAUAAAAUcHJpY2VBc3NldEludGVybmFsSWQJAQAAABFkYXRhUG9vbExpcXVpZGl0eQAAAAMJAABlAAAAAgUAAAAWcG9vbEFtb3VudEFzc2V0QmFsYW5jZQUAAAARb3V0QW1vdW50QXNzZXRBbXQJAABlAAAAAgUAAAAVcG9vbFByaWNlQXNzZXRCYWxhbmNlBQAAABBvdXRQcmljZUFzc2V0QW10CQAAZQAAAAIFAAAADXBvb2xMUEJhbGFuY2UFAAAADnBtdEFzc2V0QW1vdW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABJrZXlHZXRBY3Rpb25CeVVzZXIAAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQEAAAARZGF0YUdldEFjdGlvbkluZm8AAAAGBQAAABFvdXRBbW91bnRBc3NldEFtdAUAAAAQb3V0UHJpY2VBc3NldEFtdAUAAAAOcG10QXNzZXRBbW91bnQFAAAADGN1cnJlbnRQcmljZQUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMa2V5UHJpY2VMYXN0AAAAAAkAASwAAAACAgAAAAQlc19fCQABpAAAAAEFAAAADGN1cnJlbnRQcmljZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5UHJpY2VIaXN0b3J5AAAAAgUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAASwAAAACAgAAAAQlc19fCQABpAAAAAEFAAAADGN1cnJlbnRQcmljZQUAAAADbmlsAAAAAWkBAAAABXRvcHVwAAAAAAUAAAADbmlsAAAAAWkBAAAACGFjdGl2YXRlAAAABQAAAA5hbW91bnRBc3NldFN0cgAAAA1wcmljZUFzc2V0U3RyAAAAC2xwQXNzZXROYW1lAAAADGxwQXNzZXREZXNjcgAAAApwb29sV2VpZ2h0AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAABBmYWN0b3J5UHVibGljS2V5CQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAANYW1vdW50QXNzZXRJZAkAAlkAAAABBQAAAA5hbW91bnRBc3NldFN0cgQAAAATYW1vdW50QXNzZXREZWNpbWFscwgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAANYW1vdW50QXNzZXRJZAAAAAhkZWNpbWFscwQAAAAMcHJpY2VBc3NldElkCQACWQAAAAEFAAAADXByaWNlQXNzZXRTdHIEAAAAEnByaWNlQXNzZXREZWNpbWFscwgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAMcHJpY2VBc3NldElkAAAACGRlY2ltYWxzBAAAABJscEFzc2V0SXNzdWVBY3Rpb24JAARCAAAABQUAAAALbHBBc3NldE5hbWUFAAAADGxwQXNzZXREZXNjcgAAAAAAAAAAAQAAAAAAAAAACAYEAAAACWxwQXNzZXRJZAkABDgAAAABBQAAABJscEFzc2V0SXNzdWVBY3Rpb24EAAAAEWxwQXNzZXRJZEFzU3RyaW5nCQACWAAAAAEFAAAACWxwQXNzZXRJZAkABRQAAAACCQAETAAAAAIFAAAAEmxwQXNzZXRJc3N1ZUFjdGlvbgkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAACWxwQXNzZXRJZAAAAAAAAAAAAQUAAAADbmlsBQAAABFscEFzc2V0SWRBc1N0cmluZwAAAAFpAQAAAAZtYW5hZ2UAAAABAAAABnN0YXR1cwUAAAADbmlsAAAAAWkBAAAADGVzdGltYXRlZFB1dAAAAAAFAAAAA25pbAAAAAFpAQAAAAVzdGF0cwAAAAAFAAAAA25pbAAAAAFpAQAAAAxlc3RpbWF0ZWRHZXQAAAAABQAAAANuaWwAAAABaQEAAAAFcHJpY2UAAAAABQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleaLEilg=", "height": 1652566, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GbDPHMsv6HadmAS8qkoof7kRLhyaerUch39J9ABeYMkK Next: DZdWa7V3QSgnWP5QG8KJ4PMNTEuUYpCPQ8DddKbadhDH Diff:
OldNewDifferences
8686 }
8787
8888
89-func getPoolLiquidityByUser (amountAssetInternalId,priceAssetInternalId,userAddress) = if (true)
90- then throw("GSDFS")
91- else {
92- let currentPoolLiquidityValue = getString(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, userAddress))
93- if (!(isDefined(currentPoolLiquidityValue)))
94- then ["", "0", "0", "0", "0"]
95- else {
96- let currentPoolLiquidity = split(value(currentPoolLiquidityValue), SEP)
97- currentPoolLiquidity
98- }
99- }
89+func getPoolLiquidityByUser (amountAssetInternalId,priceAssetInternalId,userAddress) = {
90+ let currentPoolLiquidityValue = getString(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, userAddress))
91+ if (!(isDefined(currentPoolLiquidityValue)))
92+ then ["", "0", "0", "0", "0"]
93+ else {
94+ let currentPoolLiquidity = split(value(currentPoolLiquidityValue), SEP)
95+ currentPoolLiquidity
96+ }
97+ }
10098
10199
102100 func dataPoolLiquidity (amountAssetLocked,priceAssetLocked,lpTokenLocked) = makeString(["%d%d%d", toString(amountAssetLocked), toString(priceAssetLocked), toString(lpTokenLocked)], SEP)
149147 let poolAmountAssetBalance = parseIntValue(poolLiquidityDataList[idxPoolAmountAssetAmt])
150148 let poolPriceAssetBalance = parseIntValue(poolLiquidityDataList[idxPoolPriceAssetAmt])
151149 let poolLPBalance = parseIntValue(poolLiquidityDataList[idxPoolLPAssetAmt])
152- let userLiquidityDataList = getPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller))
153- let userAmountAssetBalance = parseIntValue(userLiquidityDataList[idxPoolAmountAssetAmt])
154- let userPriceAssetBalance = parseIntValue(userLiquidityDataList[idxPoolPriceAssetAmt])
155- let userLPBalance = parseIntValue(userLiquidityDataList[idxPoolLPAssetAmt])
156- if (if ((amountAssetId != toBase58String(inAmountAssetId)))
157- then true
158- else (priceAssetId != toBase58String(inPriceAssetId)))
159- then throw("Invalid amount or price asset passed.")
150+ if (true)
151+ then throw("GSDFS")
160152 else {
161- let decimalsMult4AmountAsset = pow(10, 0, (lPdecimals - amoutAssetDecimals), 0, 0, DOWN)
162- let decimalsMult4PriceAsset = pow(10, 0, (lPdecimals - priceAssetDecimals), 0, 0, DOWN)
163- let inAmountAssetAmtCalculated = (inAmountAssetAmt * decimalsMult4AmountAsset)
164- let inPriceAssetAmtCalculated = (inPriceAssetAmt * decimalsMult4PriceAsset)
165- let expectedUserPrice = fraction(inPriceAssetAmtCalculated, decimalsMultPrice, inAmountAssetAmtCalculated)
166- let amountAssetPoolLockedAmt = (poolAmountAssetBalance * decimalsMult4AmountAsset)
167- let priceAssetPoolLockedAmt = (poolPriceAssetBalance * decimalsMult4PriceAsset)
168- let currentPoolPrice = fraction(priceAssetPoolLockedAmt, decimalsMultPrice, amountAssetPoolLockedAmt)
169- if ((size(poolLiquidityDataList) == 0))
170- then {
171- let partA = pow(inAmountAssetAmtCalculated, 0, 0, 50, 1, DOWN)
172- let partB = pow(inPriceAssetAmtCalculated, 0, 0, 50, 1, DOWN)
173- let lpAssetsToReturn = (partA * partB)
153+ let userLiquidityDataList = getPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller))
154+ let userAmountAssetBalance = parseIntValue(userLiquidityDataList[idxPoolAmountAssetAmt])
155+ let userPriceAssetBalance = parseIntValue(userLiquidityDataList[idxPoolPriceAssetAmt])
156+ let userLPBalance = parseIntValue(userLiquidityDataList[idxPoolLPAssetAmt])
157+ if (if ((amountAssetId != toBase58String(inAmountAssetId)))
158+ then true
159+ else (priceAssetId != toBase58String(inPriceAssetId)))
160+ then throw("Invalid amount or price asset passed.")
161+ else {
162+ let decimalsMult4AmountAsset = pow(10, 0, (lPdecimals - amoutAssetDecimals), 0, 0, DOWN)
163+ let decimalsMult4PriceAsset = pow(10, 0, (lPdecimals - priceAssetDecimals), 0, 0, DOWN)
164+ let inAmountAssetAmtCalculated = (inAmountAssetAmt * decimalsMult4AmountAsset)
165+ let inPriceAssetAmtCalculated = (inPriceAssetAmt * decimalsMult4PriceAsset)
166+ let expectedUserPrice = fraction(inPriceAssetAmtCalculated, decimalsMultPrice, inAmountAssetAmtCalculated)
167+ let amountAssetPoolLockedAmt = (poolAmountAssetBalance * decimalsMult4AmountAsset)
168+ let priceAssetPoolLockedAmt = (poolPriceAssetBalance * decimalsMult4PriceAsset)
169+ let currentPoolPrice = fraction(priceAssetPoolLockedAmt, decimalsMultPrice, amountAssetPoolLockedAmt)
170+ if ((size(poolLiquidityDataList) == 0))
171+ then {
172+ let partA = pow(inAmountAssetAmtCalculated, 0, 0, 50, 1, DOWN)
173+ let partB = pow(inPriceAssetAmtCalculated, 0, 0, 50, 1, DOWN)
174+ let lpAssetsToReturn = (partA * partB)
174175 [StringEntry(keyPriceLast(), ("%s__" + toString(currentPoolPrice))), StringEntry(keyPriceHistory(height, lastBlock.timestamp), ("%s__" + toString(currentPoolPrice))), StringEntry(keyPutActionByUser(toString(i.caller), toBase58String(i.transactionId)), dataPutActionInfo(inAmountAssetAmt, inPriceAssetAmt, lpAssetsToReturn, currentPoolPrice, slippageTolerance, height, lastBlock.timestamp)), StringEntry(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller)), dataPoolLiquidity(inAmountAssetAmt, inPriceAssetAmt, lpAssetsToReturn)), StringEntry(keyPoolLiquidity(amountAssetInternalId, priceAssetInternalId), dataPoolLiquidity(inAmountAssetAmt, inPriceAssetAmt, lpAssetsToReturn)), Reissue(lpAssetId, lpAssetsToReturn, true), ScriptTransfer(i.caller, lpAssetsToReturn, lpAssetId)]
175- }
176- else {
177- let slippage = fraction(currentPoolPrice, 100, expectedUserPrice)
178- if ((slippage > slippageTolerance))
179- then throw(((("Price slippage " + toString(slippage)) + " exceeded the passed limit of ") + toString(slippageTolerance)))
176+ }
180177 else {
181- let lpAmtByAmountAsset = fraction(poolLPBalance, inAmountAssetAmtCalculated, amountAssetPoolLockedAmt)
182- let lpAmtByPriceAsset = fraction(poolLPBalance, inPriceAssetAmtCalculated, priceAssetPoolLockedAmt)
183- let totalLp4User = if ((lpAmtByPriceAsset > lpAmtByAmountAsset))
184- then lpAmtByAmountAsset
185- else lpAmtByPriceAsset
178+ let slippage = fraction(currentPoolPrice, 100, expectedUserPrice)
179+ if ((slippage > slippageTolerance))
180+ then throw(((("Price slippage " + toString(slippage)) + " exceeded the passed limit of ") + toString(slippageTolerance)))
181+ else {
182+ let lpAmtByAmountAsset = fraction(poolLPBalance, inAmountAssetAmtCalculated, amountAssetPoolLockedAmt)
183+ let lpAmtByPriceAsset = fraction(poolLPBalance, inPriceAssetAmtCalculated, priceAssetPoolLockedAmt)
184+ let totalLp4User = if ((lpAmtByPriceAsset > lpAmtByAmountAsset))
185+ then lpAmtByAmountAsset
186+ else lpAmtByPriceAsset
186187 [StringEntry(keyPriceLast(), ("%s__" + toString(currentPoolPrice))), StringEntry(keyPriceHistory(height, lastBlock.timestamp), ("%s__" + toString(currentPoolPrice))), StringEntry(keyPutActionByUser(toString(i.caller), toBase58String(i.transactionId)), dataPutActionInfo(inAmountAssetAmt, inPriceAssetAmt, totalLp4User, currentPoolPrice, slippageTolerance, height, lastBlock.timestamp)), StringEntry(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller)), dataPoolLiquidity((userAmountAssetBalance + inAmountAssetAmt), (userPriceAssetBalance + inPriceAssetAmt), (userLPBalance + totalLp4User))), StringEntry(keyPoolLiquidity(amountAssetInternalId, priceAssetInternalId), dataPoolLiquidity((poolAmountAssetBalance + inAmountAssetAmt), (poolPriceAssetBalance + inPriceAssetAmt), (poolLPBalance + totalLp4User))), Reissue(lpAssetId, totalLp4User, true), ScriptTransfer(i.caller, totalLp4User, lpAssetId)]
188+ }
187189 }
188190 }
189191 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let lPdecimals = 8
55
66 let decimalsMultPrice = ((100 * 1000) * 1000)
77
88 let SEP = "__"
99
1010 let PoolActive = 1
1111
1212 let PoolPutDisabled = 2
1313
1414 let PoolMatcherDisabled = 3
1515
1616 let PoolShutdown = 4
1717
1818 let factoryPublicKey = fromBase58String("MimQtBx7azhStAH2R5QV7Uk8hWEbm7q89793fk1j1mh")
1919
2020 let idxPoolAddress = 2
2121
2222 let idxPoolStatus = 3
2323
2424 let idxPoolLPAssetId = 4
2525
2626 let idxAmountAssetId = 5
2727
2828 let idxPriceAssetId = 6
2929
3030 let idxAmountAssetDecimals = 7
3131
3232 let idxPriceAssetDecimals = 8
3333
3434 let idxAmountAssetInternalId = 9
3535
3636 let idxPriceAssetInternalId = 10
3737
3838 let idxPoolWeight = 11
3939
4040 let idxPoolAmountAssetAmt = 2
4141
4242 let idxPoolPriceAssetAmt = 3
4343
4444 let idxPoolLPAssetAmt = 4
4545
4646 func keyPriceLast () = "%s%s__price__last"
4747
4848
4949 func keyPriceHistory (h,timestamp) = makeString(["%s%s%d%d__price__history", toString(h), toString(timestamp)], SEP)
5050
5151
5252 func keyPoolLiquidity (internalAmountAsset,internalPriceAsset) = (((("%d%d%s__" + internalAmountAsset) + "__") + internalPriceAsset) + "__locked")
5353
5454
5555 func keyPoolLiquidityByUser (internalAmountAsset,internalPriceAsset,userAddress) = (((((("%d%d%s%s__" + internalAmountAsset) + "__") + internalPriceAsset) + "__") + userAddress) + "__locked")
5656
5757
5858 func keyPutActionByUser (userAddress,txId) = ((("%s%s%s__P__" + userAddress) + "__") + txId)
5959
6060
6161 func keyGetActionByUser (userAddress,txId) = ((("%s%s%s__G__" + userAddress) + "__") + txId)
6262
6363
6464 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2LpAsset")
6565
6666
6767 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = (((("%s%d%d%s__" + amountAssetInternal) + "__") + priceAssetInternal) + "__config")
6868
6969
7070 func getPoolConfig () = {
7171 let factoryAddress = addressFromPublicKey(factoryPublicKey)
7272 let currentPoolAssets = split(valueOrErrorMessage(getString(factoryAddress, keyMappingPoolContractAddressToPoolAssets(toString(this))), "No factory config found for pool address."), SEP)
7373 let currentPoolConfig = split(valueOrErrorMessage(getString(factoryAddress, keyPoolConfig(currentPoolAssets[2], currentPoolAssets[3])), "No factory config found for pool assets."), SEP)
7474 currentPoolConfig
7575 }
7676
7777
7878 func getPoolLiquidity (amountAssetInternalId,priceAssetInternalId) = {
7979 let currentPoolLiquidityValue = getString(keyPoolLiquidity(amountAssetInternalId, priceAssetInternalId))
8080 if (!(isDefined(currentPoolLiquidityValue)))
8181 then nil
8282 else {
8383 let currentPoolLiquidity = split(value(currentPoolLiquidityValue), SEP)
8484 currentPoolLiquidity
8585 }
8686 }
8787
8888
89-func getPoolLiquidityByUser (amountAssetInternalId,priceAssetInternalId,userAddress) = if (true)
90- then throw("GSDFS")
91- else {
92- let currentPoolLiquidityValue = getString(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, userAddress))
93- if (!(isDefined(currentPoolLiquidityValue)))
94- then ["", "0", "0", "0", "0"]
95- else {
96- let currentPoolLiquidity = split(value(currentPoolLiquidityValue), SEP)
97- currentPoolLiquidity
98- }
99- }
89+func getPoolLiquidityByUser (amountAssetInternalId,priceAssetInternalId,userAddress) = {
90+ let currentPoolLiquidityValue = getString(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, userAddress))
91+ if (!(isDefined(currentPoolLiquidityValue)))
92+ then ["", "0", "0", "0", "0"]
93+ else {
94+ let currentPoolLiquidity = split(value(currentPoolLiquidityValue), SEP)
95+ currentPoolLiquidity
96+ }
97+ }
10098
10199
102100 func dataPoolLiquidity (amountAssetLocked,priceAssetLocked,lpTokenLocked) = makeString(["%d%d%d", toString(amountAssetLocked), toString(priceAssetLocked), toString(lpTokenLocked)], SEP)
103101
104102
105103 func dataPutActionInfo (inAmountAssetAmt,inPriceAssetAmt,outLpAmt,price,slippageTolerancePassedByUser,txHeight,txTimestamp) = makeString(["%d%d%d%d%d%d%d", toString(inAmountAssetAmt), toString(inPriceAssetAmt), toString(outLpAmt), toString(price), toString(slippageTolerancePassedByUser), toString(txHeight), toString(txTimestamp)], SEP)
106104
107105
108106 func dataGetActionInfo (outAmountAssetAmt,outPriceAssetAmt,inLpAmt,price,txHeight,txTimestamp) = makeString(["%d%d%d%d%d%d", toString(outAmountAssetAmt), toString(outPriceAssetAmt), toString(inLpAmt), toString(price), toString(txHeight), toString(txTimestamp)], SEP)
109107
110108
111109 func dataPoolLiquidityByUser (amountAssetLocked,priceAssetLocked,lpTokenLocked,userAddress) = makeString(["%d%d%d", toString(amountAssetLocked), toString(priceAssetLocked), toString(lpTokenLocked)], SEP)
112110
113111
114112 func calculatePrice (amountAssetAmt,amountAssetDecimals,priceAssetAmt,priceAssetDecimals) = {
115113 let decimalsMult4AmountAsset = pow(10, 0, (lPdecimals - amountAssetDecimals), 0, 0, DOWN)
116114 let decimalsMult4PriceAsset = pow(10, 0, (lPdecimals - priceAssetDecimals), 0, 0, DOWN)
117115 let inAmountAssetAmtFinal = (amountAssetAmt * decimalsMult4AmountAsset)
118116 let inPriceAmtFinal = (priceAssetAmt * decimalsMult4PriceAsset)
119117 let price = fraction(inPriceAmtFinal, decimalsMultPrice, inAmountAssetAmtFinal)
120118 price
121119 }
122120
123121
124122 @Callable(i)
125123 func getScriptHash () = {
126124 let hash = toBase64String(value(scriptHash(this)))
127125 throw(hash)
128126 }
129127
130128
131129
132130 @Callable(i)
133131 func put (slippageTolerance) = {
134132 let poolConfigDataList = getPoolConfig()
135133 let lpAssetId = fromBase58String(poolConfigDataList[idxPoolLPAssetId])
136134 let amountAssetId = poolConfigDataList[idxAmountAssetId]
137135 let priceAssetId = poolConfigDataList[idxPriceAssetId]
138136 let amountAssetInternalId = poolConfigDataList[idxAmountAssetInternalId]
139137 let priceAssetInternalId = poolConfigDataList[idxPriceAssetInternalId]
140138 let amoutAssetDecimals = parseIntValue(poolConfigDataList[idxAmountAssetDecimals])
141139 let priceAssetDecimals = parseIntValue(poolConfigDataList[idxPriceAssetDecimals])
142140 let pmtAmountAsset = value(i.payments[0])
143141 let inAmountAssetAmt = pmtAmountAsset.amount
144142 let inAmountAssetId = value(pmtAmountAsset.assetId)
145143 let pmtPriceAsset = value(i.payments[1])
146144 let inPriceAssetAmt = pmtPriceAsset.amount
147145 let inPriceAssetId = value(pmtPriceAsset.assetId)
148146 let poolLiquidityDataList = getPoolLiquidity(amountAssetInternalId, priceAssetInternalId)
149147 let poolAmountAssetBalance = parseIntValue(poolLiquidityDataList[idxPoolAmountAssetAmt])
150148 let poolPriceAssetBalance = parseIntValue(poolLiquidityDataList[idxPoolPriceAssetAmt])
151149 let poolLPBalance = parseIntValue(poolLiquidityDataList[idxPoolLPAssetAmt])
152- let userLiquidityDataList = getPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller))
153- let userAmountAssetBalance = parseIntValue(userLiquidityDataList[idxPoolAmountAssetAmt])
154- let userPriceAssetBalance = parseIntValue(userLiquidityDataList[idxPoolPriceAssetAmt])
155- let userLPBalance = parseIntValue(userLiquidityDataList[idxPoolLPAssetAmt])
156- if (if ((amountAssetId != toBase58String(inAmountAssetId)))
157- then true
158- else (priceAssetId != toBase58String(inPriceAssetId)))
159- then throw("Invalid amount or price asset passed.")
150+ if (true)
151+ then throw("GSDFS")
160152 else {
161- let decimalsMult4AmountAsset = pow(10, 0, (lPdecimals - amoutAssetDecimals), 0, 0, DOWN)
162- let decimalsMult4PriceAsset = pow(10, 0, (lPdecimals - priceAssetDecimals), 0, 0, DOWN)
163- let inAmountAssetAmtCalculated = (inAmountAssetAmt * decimalsMult4AmountAsset)
164- let inPriceAssetAmtCalculated = (inPriceAssetAmt * decimalsMult4PriceAsset)
165- let expectedUserPrice = fraction(inPriceAssetAmtCalculated, decimalsMultPrice, inAmountAssetAmtCalculated)
166- let amountAssetPoolLockedAmt = (poolAmountAssetBalance * decimalsMult4AmountAsset)
167- let priceAssetPoolLockedAmt = (poolPriceAssetBalance * decimalsMult4PriceAsset)
168- let currentPoolPrice = fraction(priceAssetPoolLockedAmt, decimalsMultPrice, amountAssetPoolLockedAmt)
169- if ((size(poolLiquidityDataList) == 0))
170- then {
171- let partA = pow(inAmountAssetAmtCalculated, 0, 0, 50, 1, DOWN)
172- let partB = pow(inPriceAssetAmtCalculated, 0, 0, 50, 1, DOWN)
173- let lpAssetsToReturn = (partA * partB)
153+ let userLiquidityDataList = getPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller))
154+ let userAmountAssetBalance = parseIntValue(userLiquidityDataList[idxPoolAmountAssetAmt])
155+ let userPriceAssetBalance = parseIntValue(userLiquidityDataList[idxPoolPriceAssetAmt])
156+ let userLPBalance = parseIntValue(userLiquidityDataList[idxPoolLPAssetAmt])
157+ if (if ((amountAssetId != toBase58String(inAmountAssetId)))
158+ then true
159+ else (priceAssetId != toBase58String(inPriceAssetId)))
160+ then throw("Invalid amount or price asset passed.")
161+ else {
162+ let decimalsMult4AmountAsset = pow(10, 0, (lPdecimals - amoutAssetDecimals), 0, 0, DOWN)
163+ let decimalsMult4PriceAsset = pow(10, 0, (lPdecimals - priceAssetDecimals), 0, 0, DOWN)
164+ let inAmountAssetAmtCalculated = (inAmountAssetAmt * decimalsMult4AmountAsset)
165+ let inPriceAssetAmtCalculated = (inPriceAssetAmt * decimalsMult4PriceAsset)
166+ let expectedUserPrice = fraction(inPriceAssetAmtCalculated, decimalsMultPrice, inAmountAssetAmtCalculated)
167+ let amountAssetPoolLockedAmt = (poolAmountAssetBalance * decimalsMult4AmountAsset)
168+ let priceAssetPoolLockedAmt = (poolPriceAssetBalance * decimalsMult4PriceAsset)
169+ let currentPoolPrice = fraction(priceAssetPoolLockedAmt, decimalsMultPrice, amountAssetPoolLockedAmt)
170+ if ((size(poolLiquidityDataList) == 0))
171+ then {
172+ let partA = pow(inAmountAssetAmtCalculated, 0, 0, 50, 1, DOWN)
173+ let partB = pow(inPriceAssetAmtCalculated, 0, 0, 50, 1, DOWN)
174+ let lpAssetsToReturn = (partA * partB)
174175 [StringEntry(keyPriceLast(), ("%s__" + toString(currentPoolPrice))), StringEntry(keyPriceHistory(height, lastBlock.timestamp), ("%s__" + toString(currentPoolPrice))), StringEntry(keyPutActionByUser(toString(i.caller), toBase58String(i.transactionId)), dataPutActionInfo(inAmountAssetAmt, inPriceAssetAmt, lpAssetsToReturn, currentPoolPrice, slippageTolerance, height, lastBlock.timestamp)), StringEntry(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller)), dataPoolLiquidity(inAmountAssetAmt, inPriceAssetAmt, lpAssetsToReturn)), StringEntry(keyPoolLiquidity(amountAssetInternalId, priceAssetInternalId), dataPoolLiquidity(inAmountAssetAmt, inPriceAssetAmt, lpAssetsToReturn)), Reissue(lpAssetId, lpAssetsToReturn, true), ScriptTransfer(i.caller, lpAssetsToReturn, lpAssetId)]
175- }
176- else {
177- let slippage = fraction(currentPoolPrice, 100, expectedUserPrice)
178- if ((slippage > slippageTolerance))
179- then throw(((("Price slippage " + toString(slippage)) + " exceeded the passed limit of ") + toString(slippageTolerance)))
176+ }
180177 else {
181- let lpAmtByAmountAsset = fraction(poolLPBalance, inAmountAssetAmtCalculated, amountAssetPoolLockedAmt)
182- let lpAmtByPriceAsset = fraction(poolLPBalance, inPriceAssetAmtCalculated, priceAssetPoolLockedAmt)
183- let totalLp4User = if ((lpAmtByPriceAsset > lpAmtByAmountAsset))
184- then lpAmtByAmountAsset
185- else lpAmtByPriceAsset
178+ let slippage = fraction(currentPoolPrice, 100, expectedUserPrice)
179+ if ((slippage > slippageTolerance))
180+ then throw(((("Price slippage " + toString(slippage)) + " exceeded the passed limit of ") + toString(slippageTolerance)))
181+ else {
182+ let lpAmtByAmountAsset = fraction(poolLPBalance, inAmountAssetAmtCalculated, amountAssetPoolLockedAmt)
183+ let lpAmtByPriceAsset = fraction(poolLPBalance, inPriceAssetAmtCalculated, priceAssetPoolLockedAmt)
184+ let totalLp4User = if ((lpAmtByPriceAsset > lpAmtByAmountAsset))
185+ then lpAmtByAmountAsset
186+ else lpAmtByPriceAsset
186187 [StringEntry(keyPriceLast(), ("%s__" + toString(currentPoolPrice))), StringEntry(keyPriceHistory(height, lastBlock.timestamp), ("%s__" + toString(currentPoolPrice))), StringEntry(keyPutActionByUser(toString(i.caller), toBase58String(i.transactionId)), dataPutActionInfo(inAmountAssetAmt, inPriceAssetAmt, totalLp4User, currentPoolPrice, slippageTolerance, height, lastBlock.timestamp)), StringEntry(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller)), dataPoolLiquidity((userAmountAssetBalance + inAmountAssetAmt), (userPriceAssetBalance + inPriceAssetAmt), (userLPBalance + totalLp4User))), StringEntry(keyPoolLiquidity(amountAssetInternalId, priceAssetInternalId), dataPoolLiquidity((poolAmountAssetBalance + inAmountAssetAmt), (poolPriceAssetBalance + inPriceAssetAmt), (poolLPBalance + totalLp4User))), Reissue(lpAssetId, totalLp4User, true), ScriptTransfer(i.caller, totalLp4User, lpAssetId)]
188+ }
187189 }
188190 }
189191 }
190192 }
191193
192194
193195
194196 @Callable(i)
195197 func get () = {
196198 let poolConfigList = getPoolConfig()
197199 let lpAssetId = poolConfigList[idxPoolLPAssetId]
198200 let amountAssetId = poolConfigList[idxAmountAssetId]
199201 let priceAssetId = poolConfigList[idxPriceAssetId]
200202 let amountAssetInternalId = poolConfigList[idxAmountAssetInternalId]
201203 let priceAssetInternalId = poolConfigList[idxPriceAssetInternalId]
202204 let userLiquidityList = getPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller))
203205 let userLPBalance = parseIntValue(userLiquidityList[idxPoolLPAssetAmt])
204206 let userAmountAssetBalance = parseIntValue(userLiquidityList[idxPoolAmountAssetAmt])
205207 let userPriceAssetBalance = parseIntValue(userLiquidityList[idxPoolPriceAssetAmt])
206208 let poolLiquidityList = getPoolLiquidity(amountAssetInternalId, priceAssetInternalId)
207209 let poolLPBalance = parseIntValue(poolLiquidityList[idxPoolLPAssetAmt])
208210 let poolAmountAssetBalance = parseIntValue(poolLiquidityList[idxPoolAmountAssetAmt])
209211 let poolPriceAssetBalance = parseIntValue(poolLiquidityList[idxPoolPriceAssetAmt])
210212 let pmtAmountAsset = value(i.payments[0])
211213 let pmtAssetId = value(pmtAmountAsset.assetId)
212214 let pmtAssetAmount = pmtAmountAsset.amount
213215 if ((lpAssetId != toBase58String(pmtAssetId)))
214216 then throw("Invalid asset passed.")
215217 else if ((pmtAssetAmount > userLPBalance))
216218 then throw("Invalid amount passed. Amount less than available.")
217219 else {
218220 let outAmountAssetAmt = fraction(poolAmountAssetBalance, pmtAssetAmount, poolLPBalance)
219221 let outPriceAssetAmt = fraction(poolPriceAssetBalance, pmtAssetAmount, poolLPBalance)
220222 let currentPrice = fraction(poolPriceAssetBalance, decimalsMultPrice, poolAmountAssetBalance)
221223 [Burn(pmtAssetId, pmtAssetAmount), ScriptTransfer(i.caller, outAmountAssetAmt, fromBase58String(amountAssetId)), ScriptTransfer(i.caller, outPriceAssetAmt, fromBase58String(priceAssetId)), StringEntry(keyPoolLiquidityByUser(amountAssetInternalId, priceAssetInternalId, toString(i.caller)), dataPoolLiquidity((userAmountAssetBalance - outAmountAssetAmt), (userPriceAssetBalance - outPriceAssetAmt), (userLPBalance - pmtAssetAmount))), StringEntry(keyPoolLiquidity(amountAssetInternalId, priceAssetInternalId), dataPoolLiquidity((poolAmountAssetBalance - outAmountAssetAmt), (poolPriceAssetBalance - outPriceAssetAmt), (poolLPBalance - pmtAssetAmount))), StringEntry(keyGetActionByUser(toString(i.caller), toBase58String(i.transactionId)), dataGetActionInfo(outAmountAssetAmt, outPriceAssetAmt, pmtAssetAmount, currentPrice, height, lastBlock.timestamp)), StringEntry(keyPriceLast(), ("%s__" + toString(currentPrice))), StringEntry(keyPriceHistory(height, lastBlock.timestamp), ("%s__" + toString(currentPrice)))]
222224 }
223225 }
224226
225227
226228
227229 @Callable(i)
228230 func topup () = nil
229231
230232
231233
232234 @Callable(i)
233235 func activate (amountAssetStr,priceAssetStr,lpAssetName,lpAssetDescr,poolWeight) = if ((i.callerPublicKey != factoryPublicKey))
234236 then throw("permissions denied")
235237 else {
236238 let amountAssetId = fromBase58String(amountAssetStr)
237239 let amountAssetDecimals = value(assetInfo(amountAssetId)).decimals
238240 let priceAssetId = fromBase58String(priceAssetStr)
239241 let priceAssetDecimals = value(assetInfo(priceAssetId)).decimals
240242 let lpAssetIssueAction = Issue(lpAssetName, lpAssetDescr, 1, 8, true)
241243 let lpAssetId = calculateAssetId(lpAssetIssueAction)
242244 let lpAssetIdAsString = toBase58String(lpAssetId)
243245 $Tuple2([lpAssetIssueAction, Burn(lpAssetId, 1)], lpAssetIdAsString)
244246 }
245247
246248
247249
248250 @Callable(i)
249251 func manage (status) = nil
250252
251253
252254
253255 @Callable(i)
254256 func estimatedPut () = nil
255257
256258
257259
258260 @Callable(i)
259261 func stats () = nil
260262
261263
262264
263265 @Callable(i)
264266 func estimatedGet () = nil
265267
266268
267269
268270 @Callable(i)
269271 func price () = nil
270272
271273
272274 @Verifier(tx)
273275 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
274276

github/deemru/w8io/026f985 
42.17 ms