tx · AQVsacWoCM5qvxdASZDzMqS4iGiYd62VxHfiHwcLCDLm

3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw:  -0.02000000 Waves

2022.12.01 10:21 [3406456] smart account 3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw > SELF 0.00000000 Waves

{ "type": 13, "id": "AQVsacWoCM5qvxdASZDzMqS4iGiYd62VxHfiHwcLCDLm", "fee": 2000000, "feeAssetId": null, "timestamp": 1669879268440, "version": 2, "chainId": 87, "sender": "3P5UKXpQbom7GB2WGdPG5yGQPeQQuM3hFmw", "senderPublicKey": "4MfTwwE7yP4BFGaifQrcc9Nwb5BA9t92WKhVb6Ton65k", "proofs": [ "22ySppRKrcUYcquKsw2pQPPB2TxbcASzidNbxfruiSiLdUVPye8oPopJbhJpYoDhBtjUbdFD8B2Yo1Zpsgiy4ZCx" ], "script": "base64:AAIFAAAAAAAAACoIAhIICgYYGBEBARgSCQoHGBgRERgBGBIFCgMIARgSAwoBGBIFCgMICAEAAAAcAQAAABBnZXRTdHJpbmdPclRocm93AAAAAgAAAAdhZGRyZXNzAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAAB2FkZHJlc3MFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMQ2FuJ3QgcmVhZCAnBQAAAANrZXkCAAAADScgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAHYWRkcmVzcwEAAAARZ2V0SW50ZWdlck9yVGhyb3cAAAACAAAAB2FkZHJlc3MAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYW4ndCByZWFkICcFAAAAA2tleQIAAAANJyBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAdhZGRyZXNzAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQAAAAxtYXliZUFkZHJlc3MJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABBQAAAAxtYXliZUFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAABpDYW4ndCBwYXJzZSBhZGRyZXNzIGZyb20gJwUAAAAMbWF5YmVBZGRyZXNzAgAAAAEnAQAAABFwYXJzZUludE9yRGVmYXVsdAAAAAIAAAAIbWF5YmVJbnQAAAAHZGVmYXVsdAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABLYAAAABBQAAAAhtYXliZUludAUAAAAHZGVmYXVsdAEAAAAPcGFyc2VJbnRPclRocm93AAAAAQAAAAhtYXliZUludAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEtgAAAAEFAAAACG1heWJlSW50CQABLAAAAAIJAAEsAAAAAgIAAAAaQ2FuJ3QgcGFyc2UgaW50ZWdlciBmcm9tICcFAAAACG1heWJlSW50AgAAAAEnAQAAAApnZXRBc3NldElkAAAAAQAAAAVhc3NldAMJAAAAAAAAAgUAAAAFYXNzZXQCAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAABWFzc2V0AAAAAAljb2xsZWN0b3IJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAAljb2xsZWN0b3IAAAAAB2ZlZVJhdGUJAQAAABFnZXRJbnRlZ2VyT3JUaHJvdwAAAAIFAAAABHRoaXMCAAAACGZlZS1yYXRlAAAAAAZvcmFjbGUJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAAZvcmFjbGUAAAAADXN3b3BmaVJvdXRpbmcJAQAAABNwYXJzZUFkZHJlc3NPclRocm93AAAAAQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAA5zd29wZmktcm91dGluZwAAAAANcHV6emxlUm91dGluZwkBAAAAE3BhcnNlQWRkcmVzc09yVGhyb3cAAAABCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABHRoaXMCAAAADnB1enpsZS1yb3V0aW5nAAAAAAVwb29scwkABLUAAAACCQEAAAAQZ2V0U3RyaW5nT3JUaHJvdwAAAAIFAAAABm9yYWNsZQIAAAAFcG9vbHMCAAAAASwAAAAAC3BlcmNlbnRSYXRlCQEAAAARZ2V0SW50ZWdlck9yVGhyb3cAAAACBQAAAAR0aGlzAgAAAAxwZXJjZW50LXJhdGUAAAAABnJlZktleQIAAAAGa2VlcGVyAAAAABRwdXp6bGVSZXdhcmRBc3NldFN0cgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAABNwdXp6bGUtcmV3YXJkLXRva2VuAAAAABNwdXp6bGVSZXdhcmRBc3NldElkCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAAFHB1enpsZVJld2FyZEFzc2V0U3RyAAAAAAZwUG9vbHMJAAS1AAAAAgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAR0aGlzAgAAAAdwLXBvb2xzAgAAAAEsAQAAAA9hc3NldElkVG9TdHJpbmcAAAABAAAAB2Fzc2V0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c2V0UmVjZWl2ZWQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEmVzdEFtb3VudFRvUmVjZWl2ZQkAAAIAAAABAgAAACNlc3RBbW91bnRUb1JlY2VpdmUgbXVzdCBiZSBwb3NpdGl2ZQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAAVwb29scwUAAAAEcG9vbAQAAAAKcG9vbEFzc2V0QQkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAKQV9hc3NldF9pZAQAAAAKcG9vbEFzc2V0QgkBAAAAEGdldFN0cmluZ09yVGhyb3cAAAACBQAAAAtwb29sQWRkcmVzcwIAAAAKQl9hc3NldF9pZAQAAAAMcG9vbEFzc2V0SWRBCQEAAAAKZ2V0QXNzZXRJZAAAAAEFAAAACnBvb2xBc3NldEEEAAAADHBvb2xBc3NldElkQgkBAAAACmdldEFzc2V0SWQAAAABBQAAAApwb29sQXNzZXRCBAAAAAskdDA0MDY4NDQxMgMDCQAAAAAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAADHBvb2xBc3NldElkQQkAAAAAAAACBQAAAA9hc3NldFJlY2VpdmVkSWQFAAAADHBvb2xBc3NldElkQgcJAAUUAAAAAgUAAAAMcG9vbEFzc2V0SWRBBQAAAAxwb29sQXNzZXRJZEIDAwkAAAAAAAACBQAAAA9hc3NldFJlY2VpdmVkSWQFAAAADHBvb2xBc3NldElkQQkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAxwb29sQXNzZXRJZEIHCQAFFAAAAAIFAAAADHBvb2xBc3NldElkQgUAAAAMcG9vbEFzc2V0SWRBCQAAAgAAAAECAAAAF1Vuc3VwcG9ydGVkIGFzc2V0cyBwYWlyBAAAAAdhc3NldEluCAUAAAALJHQwNDA2ODQ0MTIAAAACXzEEAAAACGFzc2V0T3V0CAUAAAALJHQwNDA2ODQ0MTIAAAACXzIEAAAABGFyZ3MDCQAAAAAAAAIFAAAADHZlcnNpb25NYWpvcgAAAAAAAAAAAQkABEwAAAACAAAAAAAAAAABBQAAAANuaWwDCQAAAAAAAAIFAAAADHZlcnNpb25NYWpvcgAAAAAAAAAAAgMJ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dCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAFAAAAA2ludgEAAAAEc3dhcAAAAAYAAAAJYWRkcmVzc2VzAAAAD2Fzc2V0c1RvUmVjZWl2ZQAAAAtlc3RSZWNlaXZlZAAAABFzbGlwcGFnZVRvbGVyYW5jZQAAAAttaW5SZWNlaXZlZAAAAAdvcHRpb25zBAAAAA0kdDAxMDAxNDEwMDY4CQEAAAAOZ2V0U3dhcE9wdGlvbnMAAAABBQAAAAdvcHRpb25zBAAAAAhkZWFkbGluZQgFAAAADSR0MDEwMDE0MTAwNjgAAAACXzEEAAAADHJlZmVycmVyTmFtZQgFAAAADSR0MDEwMDE0MTAwNjgAAAACXzIEAAAAEGlzVmFsaWRUaW1lc3RhbXAJAQAAABZ2YWxpZGF0ZUJsb2NrVGltZXN0YW1wAAAAAQUAAAAIZGVhZGxpbmUDCQAAAAAAAAIFAAAAEGlzVmFsaWRUaW1lc3RhbXAFAAAAEGlzVmFsaWRUaW1lc3RhbXAEAAAABnJlc3VsdAkBAAAACHdyYXBTd2FwAAAABgUAAAADaW52BQAAAAlhZGRyZXNzZXMFAAAAD2Fzc2V0c1RvUmVjZWl2ZQUAAAALZXN0UmVjZWl2ZWQFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAAAttaW5SZWNlaXZlZAMJAAAAAAAAAgUAAAAGcmVzdWx0BQAAAAZyZXN1bHQDCQAAZgAAAAIJAAExAAAAAQUAAAAMcmVmZXJyZXJOYW1lAAAAAAAAAAAABAAAAAphc3NldEZpbmFsCQABkQAAAAIFAAAAD2Fzc2V0c1RvUmVjZWl2ZQkAAGUAAAACCQABkAAAAAEFAAAAD2Fzc2V0c1RvUmVjZWl2ZQAAAAAAAAAAAQQAAAAHYXNzZXRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAAphc3NldEZpbmFsBAAAAA0kdDAxMDQwMDEwNDcwCQEAAAAPZ2V0UmVmZXJyZXJEYXRhAAAAAQUAAAAMcmVmZXJyZXJOYW1lBAAAAA9yZWZlcnJlckFkZHJlc3MIBQAAAA0kdDAxMDQwMDEwNDcwAAAAAl8xBAAAAA9yZWZlcnJlclBlcmNlbnQIBQAAAA0kdDAxMDQwMDEwNDcwAAAAAl8yBAAAAAxjb2xsZWN0b3JGZWUICQABkQAAAAIFAAAABnJlc3VsdAAAAAAAAAAAAQAAAAZhbW91bnQEAAAADnJlZmVycmVyUmV3YXJkCQAAawAAAAMFAAAADGNvbGxlY3RvckZlZQUAAAAPcmVmZXJyZXJQZXJjZW50AAAAAAAAAABkCQAETAAAAAIJAAGRAAAAAgUAAAAGcmVzdWx0AAAAAAAAAAAACQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACWNvbGxlY3RvcgkAAGUAAAACBQAAAAxjb2xsZWN0b3JGZWUFAAAADnJlZmVycmVyUmV3YXJkBQAAAAdhc3NldElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD3JlZmVycmVyQWRkcmVzcwUAAAAOcmVmZXJyZXJSZXdhcmQFAAAAB2Fzc2V0SWQFAAAAA25pbAUAAAAGcmVzdWx0CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAADaW52AQAAAApzd29wZmlTd2FwAAAABwAAAApleGNoYW5nZXJzAAAADmV4Y2hhbmdlcnNUeXBlAAAABWFyZ3MxAAAABWFyZ3MyAAAAEXJvdXRpbmdBc3NldHNLZXlzAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQAAAAdvcHRpb25zBAAAAA0kdDAxMTAyMzExMDc3CQEAAAAOZ2V0U3dhcE9wdGlvbnMAAAABBQAAAAdvcHRpb25zBAAAAAhkZWFkbGluZQgFAAAADSR0MDExMDIzMTEwNzcAAAACXzEEAAAADHJlZmVycmVyTmFtZQgFAAAADSR0MDExMDIzMTEwNzcAAAACXzIEAAAAEGlzVmFsaWRUaW1lc3RhbXAJAQAAABZ2YWxpZGF0ZUJsb2NrVGltZXN0YW1wAAAAAQUAAAAIZGVhZGxpbmUDCQAAAAAAAAIFAAAAEGlzVmFsaWRUaW1lc3RhbXAFAAAAEGlzVmFsaWRUaW1lc3RhbXAEAAAABnJlc3VsdAkBAAAADndyYXBTd29wZmlTd2FwAAAABwUAAAADaW52BQAAAApleGNoYW5nZXJzBQAAAA5leGNoYW5nZXJzVHlwZQUAAAAFYXJnczEFAAAABWFyZ3MyBQAAABFyb3V0aW5nQXNzZXRzS2V5cwUAAAASbWluQW1vdW50VG9SZWNlaXZlAwkAAAAAAAACBQAAAAZyZXN1bHQFAAAABnJlc3VsdAMJAABmAAAAAgkAATEAAAABBQAAAAxyZWZlcnJlck5hbWUAAAAAAAAAAAAEAAAADWxhc3RFeGNoYW5nZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQABkQAAAAIFAAAACmV4Y2hhbmdlcnMJAABlAAAAAgkAAZAAAAABBQAAAApleGNoYW5nZXJzAAAAAAAAAAABAgAAAClDYW4ndCBwYXJzZSBsYXN0IGV4Y2hhbmdlciBzd29wZmkgYWRkcmVzcwQAAAAObGFzdEFzc2V0SWRLZXkJAAEsAAAAAgkAAZEAAAACCQAEtQAAAAIJAAGRAAAAAgUAAAARcm91dGluZ0Fzc2V0c0tleXMJAABlAAAAAgkAAZAAAAABBQAAABFyb3V0aW5nQXNzZXRzS2V5cwAAAAAAAAAAAQIAAAABXwAAAAAAAAAAAAIAAAAJX2Fzc2V0X2lkBAAAAAphc3NldEZpbmFsCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANbGFzdEV4Y2hhbmdlcgUAAAAObGFzdEFzc2V0SWRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFkNhbid0IHJlYWQgcGFyYW1ldGVyICcFAAAADmxhc3RBc3NldElkS2V5AgAAABAnIGZvciBleGNoYW5nZXIgCQAEJQAAAAEFAAAADWxhc3RFeGNoYW5nZXIEAAAAB2Fzc2V0SWQJAQAAAApnZXRBc3NldElkAAAAAQUAAAAKYXNzZXRGaW5hbAQAAAANJHQwMTE3ODcxMTg1NwkBAAAAD2dldFJlZmVycmVyRGF0YQAAAAEFAAAADHJlZmVycmVyTmFtZQQAAAAPcmVmZXJyZXJBZGRyZXNzCAUAAAANJHQwMTE3ODcxMTg1NwAAAAJfMQQAAAAPcmVmZXJyZXJQZXJjZW50CAUAAAANJHQwMTE3ODcxMTg1NwAAAAJfMgQAAAAMY29sbGVjdG9yRmVlCAkAAZEAAAACBQAAAAZyZXN1bHQAAAAAAAAAAAEAAAAGYW1vdW50BAAAAA5yZWZlcnJlclJld2FyZAkAAGsAAAADBQAAAAxjb2xsZWN0b3JGZWUFAAAAD3JlZmVycmVyUGVyY2VudAAAAAAAAAAAZAkABEwAAAACCQABkQAAAAIFAAAABnJlc3VsdAAAAAAAAAAAAAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAljb2xsZWN0b3IJAABlAAAAAgUAAAAMY29sbGVjdG9yRmVlBQAAAA5yZWZlcnJlclJld2FyZAUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA9yZWZlcnJlckFkZHJlc3MFAAAADnJlZmVycmVyUmV3YXJkBQAAAAdhc3NldElkBQAAAANuaWwFAAAABnJlc3VsdAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAA2ludgEAAAAKcHV6emxlU3dhcAAAAAMAAAAJcm91dGVzU3RyAAAADG1pblRvUmVjZWl2ZQAAAAdvcHRpb25zBAAAAA0kdDAxMjI5MjEyMzQ2CQEAAAAOZ2V0U3dhcE9wdGlvbnMAAAABBQAAAAdvcHRpb25zBAAAAAhkZWFkbGluZQgFAAAADSR0MDEyMjkyMTIzNDYAAAACXzEEAAAADHJlZmVycmVyTmFtZQgFAAAADSR0MDEyMjkyMTIzNDYAAAACXzIEAAAAEGlzVmFsaWRUaW1lc3RhbXAJAQAAABZ2YWxpZGF0ZUJsb2NrVGltZXN0YW1wAAAAAQUAAAAIZGVhZGxpbmUDCQAAAAAAAAIFAAAAEGlzVmFsaWRUaW1lc3RhbXAFAAAAEGlzVmFsaWRUaW1lc3RhbXADCQAAAAAAAAIJAAExAAAAAQUAAAAJcm91dGVzU3RyAAAAAAAAAAAACQAAAgAAAAECAAAAD0ludmFsaWQgcm91dGluZwMJAABnAAAAAgAAAAAAAAAAAAUAAAAMbWluVG9SZWNlaXZlCQAAAgAAAAECAAAAGFN1bSB0byByZWNlaXZlIGlzIHRvIGxvdwQAAAANYmFsYW5jZUJlZm9yZQkBAAAAE2dldEJhbGFuY2VCeUFkZHJlc3MAAAACBQAAAAljb2xsZWN0b3IFAAAAE3B1enpsZVJld2FyZEFzc2V0SWQDCQAAAAAAAAIFAAAADWJhbGFuY2VCZWZvcmUFAAAADWJhbGFuY2VCZWZvcmUEAAAABnJlc3VsdAkBAAAADndyYXBQdXp6bGVTd2FwAAAAAwUAAAADaW52BQAAAAlyb3V0ZXNTdHIFAAAADG1pblRvUmVjZWl2ZQMJAAAAAAAAAgUAAAAGcmVzdWx0BQAAAAZyZXN1bHQDCQAAZgAAAAIJAAExAAAAAQUAAAAMcmVmZXJyZXJOYW1lAAAAAAAAAAAABAAAAAxhc3NldElkRmluYWwJAAGRAAAAAgkABLUAAAACBQAAAAlyb3V0ZXNTdHICAAAAASwJAABlAAAAAgkAAZAAAAABCQAEtQAAAAIFAAAACXJvdXRlc1N0cgIAAAABLAAAAAAAAAAAAQQAAAAHYXNzZXRJZAkBAAAACmdldEFzc2V0SWQAAAABBQAAAAxhc3NldElkRmluYWwEAAAADSR0MDEyOTA3MTI5NzcJAQAAAA9nZXRSZWZlcnJlckRhdGEAAAABBQAAAAxyZWZlcnJlck5hbWUEAAAAD3JlZmVycmVyQWRkcmVzcwgFAAAADSR0MDEyOTA3MTI5NzcAAAACXzEEAAAAD3JlZmVycmVyUGVyY2VudAgFAAAADSR0MDEyOTA3MTI5NzcAAAACXzIEAAAADGJhbGFuY2VBZnRlcgkBAAAAE2dldEJhbGFuY2VCeUFkZHJlc3MAAAACBQAAAAljb2xsZWN0b3IFAAAAE3B1enpsZVJld2FyZEFzc2V0SWQDCQAAAAAAAAIFAAAADGJhbGFuY2VBZnRlcgUAAAAMYmFsYW5jZUFmdGVyBAAAAAVkZWx0YQkAAGUAAAACBQAAAAxiYWxhbmNlQWZ0ZXIFAAAADWJhbGFuY2VCZWZvcmUDCQAAAAAAAAIFAAAABWRlbHRhBQAAAAVkZWx0YQQAAAAGcmV3YXJkCQAAawAAAAMFAAAABWRlbHRhBQAAAA9y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", "height": 3406456, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: JZnKukPtggPTJ7QKxNcGWpKzCN7Cd18XyU1EwXRgwAB Next: 2QD7zp7YZyvD9NAMpsdX4SjrzTRSBrBbXsq6Qs9aXZHg Diff:
OldNewDifferences
146146 else throw("Unsupported assets pair")
147147 let assetIn = $t040684412._1
148148 let assetOut = $t040684412._2
149- let $t044395273 = if ((versionMajor == 1))
150- then $Tuple2("callFunction", ["exchange", [1]])
149+ let args = if ((versionMajor == 1))
150+ then [1]
151151 else if ((versionMajor == 2))
152152 then if ((0 >= estAmountToReceive))
153153 then throw("estAmountToReceive must be positive")
157157 then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
158158 else {
159159 let minAmount = (estAmountToReceive - fraction(estAmountToReceive, slippageTolerance, 1000))
160- $Tuple2("exchange", [estAmountToReceive, if ((minAmount > 0))
160+[estAmountToReceive, if ((minAmount > 0))
161161 then minAmount
162- else 1])
162+ else 1]
163163 }
164164 else throw((("Unknown pool version '" + toString(versionMajor)) + "', but 1 or 2 expected"))
165- let method = $t044395273._1
166- let args = $t044395273._2
167165 let balanceBefore = getBalance(assetReceivedId)
168166 if ((balanceBefore == balanceBefore))
169167 then {
170- let result = invoke(poolAddress, method, args, [payment])
168+ let result = invoke(poolAddress, "exchange", args, [payment])
171169 if ((result == result))
172170 then {
173171 let received = (getBalance(assetReceivedId) - balanceBefore)
240238 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
241239 }
242240 else throw("Path cannot be empty")
243- let $t071677219 = deductFee(final.amount)
244- let resultAfterFee = $t071677219._1
245- let fee = $t071677219._2
241+ let $t070697121 = deductFee(final.amount)
242+ let resultAfterFee = $t070697121._1
243+ let fee = $t070697121._2
246244 if ((0 >= final.amount))
247245 then throw((("Swap result " + toString(final.amount)) + " must be positive"))
248246 else if ((minReceived > resultAfterFee))
269267 if ((balanceAfter == balanceAfter))
270268 then {
271269 let delta = (balanceAfter - balanceBefore)
272- let $t088618906 = deductFee(delta)
273- let resultAfterFee = $t088618906._1
274- let fee = $t088618906._2
270+ let $t087638808 = deductFee(delta)
271+ let resultAfterFee = $t087638808._1
272+ let fee = $t087638808._2
275273 if ((0 >= delta))
276274 then throw((("Swap result " + toString(delta)) + " must be positive"))
277275 else if ((minAmountToReceive > resultAfterFee))
316314
317315 @Callable(inv)
318316 func swap (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived,options) = {
319- let $t01011210166 = getSwapOptions(options)
320- let deadline = $t01011210166._1
321- let referrerName = $t01011210166._2
317+ let $t01001410068 = getSwapOptions(options)
318+ let deadline = $t01001410068._1
319+ let referrerName = $t01001410068._2
322320 let isValidTimestamp = validateBlockTimestamp(deadline)
323321 if ((isValidTimestamp == isValidTimestamp))
324322 then {
328326 then {
329327 let assetFinal = assetsToReceive[(size(assetsToReceive) - 1)]
330328 let assetId = getAssetId(assetFinal)
331- let $t01049810568 = getReferrerData(referrerName)
332- let referrerAddress = $t01049810568._1
333- let referrerPercent = $t01049810568._2
329+ let $t01040010470 = getReferrerData(referrerName)
330+ let referrerAddress = $t01040010470._1
331+ let referrerPercent = $t01040010470._2
334332 let collectorFee = result[1].amount
335333 let referrerReward = fraction(collectorFee, referrerPercent, 100)
336334 [result[0], ScriptTransfer(collector, (collectorFee - referrerReward), assetId), ScriptTransfer(referrerAddress, referrerReward, assetId)]
345343
346344 @Callable(inv)
347345 func swopfiSwap (exchangers,exchangersType,args1,args2,routingAssetsKeys,minAmountToReceive,options) = {
348- let $t01112111175 = getSwapOptions(options)
349- let deadline = $t01112111175._1
350- let referrerName = $t01112111175._2
346+ let $t01102311077 = getSwapOptions(options)
347+ let deadline = $t01102311077._1
348+ let referrerName = $t01102311077._2
351349 let isValidTimestamp = validateBlockTimestamp(deadline)
352350 if ((isValidTimestamp == isValidTimestamp))
353351 then {
359357 let lastAssetIdKey = (split(routingAssetsKeys[(size(routingAssetsKeys) - 1)], "_")[0] + "_asset_id")
360358 let assetFinal = valueOrErrorMessage(getString(lastExchanger, lastAssetIdKey), ((("Can't read parameter '" + lastAssetIdKey) + "' for exchanger ") + toString(lastExchanger)))
361359 let assetId = getAssetId(assetFinal)
362- let $t01188511955 = getReferrerData(referrerName)
363- let referrerAddress = $t01188511955._1
364- let referrerPercent = $t01188511955._2
360+ let $t01178711857 = getReferrerData(referrerName)
361+ let referrerAddress = $t01178711857._1
362+ let referrerPercent = $t01178711857._2
365363 let collectorFee = result[1].amount
366364 let referrerReward = fraction(collectorFee, referrerPercent, 100)
367365 [result[0], ScriptTransfer(collector, (collectorFee - referrerReward), assetId), ScriptTransfer(referrerAddress, referrerReward, assetId)]
376374
377375 @Callable(inv)
378376 func puzzleSwap (routesStr,minToReceive,options) = {
379- let $t01239012444 = getSwapOptions(options)
380- let deadline = $t01239012444._1
381- let referrerName = $t01239012444._2
377+ let $t01229212346 = getSwapOptions(options)
378+ let deadline = $t01229212346._1
379+ let referrerName = $t01229212346._2
382380 let isValidTimestamp = validateBlockTimestamp(deadline)
383381 if ((isValidTimestamp == isValidTimestamp))
384382 then if ((size(routesStr) == 0))
395393 then {
396394 let assetIdFinal = split(routesStr, ",")[(size(split(routesStr, ",")) - 1)]
397395 let assetId = getAssetId(assetIdFinal)
398- let $t01300513075 = getReferrerData(referrerName)
399- let referrerAddress = $t01300513075._1
400- let referrerPercent = $t01300513075._2
396+ let $t01290712977 = getReferrerData(referrerName)
397+ let referrerAddress = $t01290712977._1
398+ let referrerPercent = $t01290712977._2
401399 let balanceAfter = getBalanceByAddress(collector, puzzleRewardAssetId)
402400 if ((balanceAfter == balanceAfter))
403401 then {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringOrThrow (address,key) = valueOrErrorMessage(getString(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
55
66
77 func getIntegerOrThrow (address,key) = valueOrErrorMessage(getInteger(address, key), ((("Can't read '" + key) + "' at address ") + toString(address)))
88
99
1010 func parseAddressOrThrow (maybeAddress) = valueOrErrorMessage(addressFromString(maybeAddress), (("Can't parse address from '" + maybeAddress) + "'"))
1111
1212
1313 func parseIntOrDefault (maybeInt,default) = valueOrElse(parseInt(maybeInt), default)
1414
1515
1616 func parseIntOrThrow (maybeInt) = valueOrErrorMessage(parseInt(maybeInt), (("Can't parse integer from '" + maybeInt) + "'"))
1717
1818
1919 func getAssetId (asset) = if ((asset == "WAVES"))
2020 then unit
2121 else fromBase58String(asset)
2222
2323
2424 let collector = parseAddressOrThrow(getStringOrThrow(this, "collector"))
2525
2626 let feeRate = getIntegerOrThrow(this, "fee-rate")
2727
2828 let oracle = parseAddressOrThrow(getStringOrThrow(this, "oracle"))
2929
3030 let swopfiRouting = parseAddressOrThrow(getStringOrThrow(this, "swopfi-routing"))
3131
3232 let puzzleRouting = parseAddressOrThrow(getStringOrThrow(this, "puzzle-routing"))
3333
3434 let pools = split(getStringOrThrow(oracle, "pools"), ",")
3535
3636 let percentRate = getIntegerOrThrow(this, "percent-rate")
3737
3838 let refKey = "keeper"
3939
4040 let puzzleRewardAssetStr = getStringOrThrow(this, "puzzle-reward-token")
4141
4242 let puzzleRewardAssetId = getAssetId(puzzleRewardAssetStr)
4343
4444 let pPools = split(getStringOrThrow(this, "p-pools"), ",")
4545
4646 func assetIdToString (assetId) = match assetId {
4747 case asset: ByteVector =>
4848 toBase58String(asset)
4949 case waves: Unit =>
5050 "WAVES"
5151 case _ =>
5252 throw("Match error")
5353 }
5454
5555
5656 func getBalance (assetId) = match assetId {
5757 case asset: ByteVector =>
5858 assetBalance(this, asset)
5959 case waves: Unit =>
6060 wavesBalance(this).available
6161 case _ =>
6262 throw("Match error")
6363 }
6464
6565
6666 func getBalanceByAddress (address,assetId) = match assetId {
6767 case asset: ByteVector =>
6868 assetBalance(address, asset)
6969 case waves: Unit =>
7070 wavesBalance(address).available
7171 case _ =>
7272 throw("Match error")
7373 }
7474
7575
7676 func deductFee (amount) = {
7777 let fee = fraction(amount, 1, feeRate)
7878 $Tuple2((amount - fee), fee)
7979 }
8080
8181
8282 func getReferrerData (referrerName) = {
8383 let refAddress = parseAddressOrThrow(valueOrErrorMessage(getString(this, (("referrer-" + referrerName) + "-address")), (("referrer with name " + referrerName) + " not found")))
8484 let refPercent = valueOrElse(getInteger(this, (("referrer-" + referrerName) + "-percent")), percentRate)
8585 if (if ((0 > refPercent))
8686 then true
8787 else (refPercent > 100))
8888 then throw("Incorrect percent rate")
8989 else $Tuple2(refAddress, refPercent)
9090 }
9191
9292
9393 func getSwapOptions (options) = {
9494 func foldArguments (acc,index) = if ((index >= size(options)))
9595 then (acc :+ "")
9696 else (acc :+ options[index])
9797
9898 let indices = [0, 1]
9999 let arguments = {
100100 let $l = indices
101101 let $s = size($l)
102102 let $acc0 = nil
103103 func $f0_1 ($a,$i) = if (($i >= $s))
104104 then $a
105105 else foldArguments($a, $l[$i])
106106
107107 func $f0_2 ($a,$i) = if (($i >= $s))
108108 then $a
109109 else throw("List size exceeds 2")
110110
111111 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
112112 }
113113 let deadline = parseIntOrDefault(arguments[0], 0)
114114 let referrerName = arguments[1]
115115 $Tuple2(deadline, referrerName)
116116 }
117117
118118
119119 func validateBlockTimestamp (deadline) = if (if ((deadline > 0))
120120 then (lastBlock.timestamp > deadline)
121121 else false)
122122 then throw(((("This swap expired at timestamp " + toString(deadline)) + ". Current: ") + toString(lastBlock.timestamp)))
123123 else true
124124
125125
126126 func doSwap (pool,payment,assetReceived,estAmountToReceive,slippageTolerance) = {
127127 let poolAddress = parseAddressOrThrow(pool)
128128 let versionMajor = parseIntOrThrow(split(getStringOrThrow(poolAddress, "version"), ".")[0])
129129 let assetReceivedId = getAssetId(assetReceived)
130130 if ((0 > estAmountToReceive))
131131 then throw("estAmountToReceive must be positive")
132132 else if (containsElement(pools, pool))
133133 then {
134134 let poolAssetA = getStringOrThrow(poolAddress, "A_asset_id")
135135 let poolAssetB = getStringOrThrow(poolAddress, "B_asset_id")
136136 let poolAssetIdA = getAssetId(poolAssetA)
137137 let poolAssetIdB = getAssetId(poolAssetB)
138138 let $t040684412 = if (if ((payment.assetId == poolAssetIdA))
139139 then (assetReceivedId == poolAssetIdB)
140140 else false)
141141 then $Tuple2(poolAssetIdA, poolAssetIdB)
142142 else if (if ((assetReceivedId == poolAssetIdA))
143143 then (payment.assetId == poolAssetIdB)
144144 else false)
145145 then $Tuple2(poolAssetIdB, poolAssetIdA)
146146 else throw("Unsupported assets pair")
147147 let assetIn = $t040684412._1
148148 let assetOut = $t040684412._2
149- let $t044395273 = if ((versionMajor == 1))
150- then $Tuple2("callFunction", ["exchange", [1]])
149+ let args = if ((versionMajor == 1))
150+ then [1]
151151 else if ((versionMajor == 2))
152152 then if ((0 >= estAmountToReceive))
153153 then throw("estAmountToReceive must be positive")
154154 else if (if ((0 > slippageTolerance))
155155 then true
156156 else (slippageTolerance > 1000))
157157 then throw("Slippage tolerance must be non-negative and less than or equal to 1000")
158158 else {
159159 let minAmount = (estAmountToReceive - fraction(estAmountToReceive, slippageTolerance, 1000))
160- $Tuple2("exchange", [estAmountToReceive, if ((minAmount > 0))
160+[estAmountToReceive, if ((minAmount > 0))
161161 then minAmount
162- else 1])
162+ else 1]
163163 }
164164 else throw((("Unknown pool version '" + toString(versionMajor)) + "', but 1 or 2 expected"))
165- let method = $t044395273._1
166- let args = $t044395273._2
167165 let balanceBefore = getBalance(assetReceivedId)
168166 if ((balanceBefore == balanceBefore))
169167 then {
170- let result = invoke(poolAddress, method, args, [payment])
168+ let result = invoke(poolAddress, "exchange", args, [payment])
171169 if ((result == result))
172170 then {
173171 let received = (getBalance(assetReceivedId) - balanceBefore)
174172 if ((received == received))
175173 then if ((0 >= received))
176174 then throw("Received amount from pool must be positive")
177175 else received
178176 else throw("Strict value is not equal to itself.")
179177 }
180178 else throw("Strict value is not equal to itself.")
181179 }
182180 else throw("Strict value is not equal to itself.")
183181 }
184182 else if (containsElement(pPools, pool))
185183 then {
186184 let balanceBefore = getBalance(assetReceivedId)
187185 if ((balanceBefore == balanceBefore))
188186 then {
189187 let result = invoke(poolAddress, "swap", [assetReceived, 0], [payment])
190188 if ((result == result))
191189 then {
192190 let received = (getBalance(assetReceivedId) - balanceBefore)
193191 if ((received == received))
194192 then if ((0 >= received))
195193 then throw("Received amount from pool must be positive")
196194 else received
197195 else throw("Strict value is not equal to itself.")
198196 }
199197 else throw("Strict value is not equal to itself.")
200198 }
201199 else throw("Strict value is not equal to itself.")
202200 }
203201 else throw((("There is no pool at address '" + pool) + "'"))
204202 }
205203
206204
207205 func wrapSwap (inv,addresses,assetsToReceive,estReceived,slippageTolerance,minReceived) = {
208206 let pmt = if ((size(inv.payments) > 0))
209207 then inv.payments[0]
210208 else throw("Payment required")
211209 let assetFinal = assetsToReceive[(size(assetsToReceive) - 1)]
212210 let assetFinalId = getAssetId(assetFinal)
213211 let indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
214212 func foldSwap (previousReceived,index) = if ((index >= size(addresses)))
215213 then previousReceived
216214 else {
217215 let assetReceived = assetsToReceive[index]
218216 let assetReceivedId = getAssetId(assetReceived)
219217 match doSwap(addresses[index], previousReceived, assetReceived, estReceived[index], slippageTolerance) {
220218 case income: Int =>
221219 AttachedPayment(assetReceivedId, income)
222220 case _ =>
223221 throw("Can't handle swap result")
224222 }
225223 }
226224
227225 let final = if ((size(addresses) > 0))
228226 then {
229227 let $l = indices
230228 let $s = size($l)
231229 let $acc0 = pmt
232230 func $f0_1 ($a,$i) = if (($i >= $s))
233231 then $a
234232 else foldSwap($a, $l[$i])
235233
236234 func $f0_2 ($a,$i) = if (($i >= $s))
237235 then $a
238236 else throw("List size exceeds 10")
239237
240238 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
241239 }
242240 else throw("Path cannot be empty")
243- let $t071677219 = deductFee(final.amount)
244- let resultAfterFee = $t071677219._1
245- let fee = $t071677219._2
241+ let $t070697121 = deductFee(final.amount)
242+ let resultAfterFee = $t070697121._1
243+ let fee = $t070697121._2
246244 if ((0 >= final.amount))
247245 then throw((("Swap result " + toString(final.amount)) + " must be positive"))
248246 else if ((minReceived > resultAfterFee))
249247 then throw(((("Swap result " + toString(resultAfterFee)) + " is less then expected ") + toString(minReceived)))
250248 else [ScriptTransfer(inv.caller, resultAfterFee, assetFinalId), ScriptTransfer(collector, fee, assetFinalId)]
251249 }
252250
253251
254252 func wrapSwopfiSwap (inv,exchangers,exchangersType,args1,args2,routingAssetsKeys,minAmountToReceive) = {
255253 let pmt = if ((size(inv.payments) > 0))
256254 then inv.payments[0]
257255 else throw("Payment required")
258256 let lastExchanger = valueOrErrorMessage(addressFromString(exchangers[(size(exchangers) - 1)]), "Can't parse last exchanger swopfi address")
259257 let lastAssetIdKey = (split(routingAssetsKeys[(size(routingAssetsKeys) - 1)], "_")[0] + "_asset_id")
260258 let assetFinal = valueOrErrorMessage(getString(lastExchanger, lastAssetIdKey), ((("Can't read parameter '" + lastAssetIdKey) + "' for exchanger ") + toString(lastExchanger)))
261259 let assetFinalId = getAssetId(assetFinal)
262260 let balanceBefore = getBalance(assetFinalId)
263261 if ((balanceBefore == balanceBefore))
264262 then {
265263 let result = invoke(swopfiRouting, "routingTrade", [exchangers, exchangersType, args1, args2, routingAssetsKeys, minAmountToReceive], [pmt])
266264 if ((result == result))
267265 then {
268266 let balanceAfter = getBalance(assetFinalId)
269267 if ((balanceAfter == balanceAfter))
270268 then {
271269 let delta = (balanceAfter - balanceBefore)
272- let $t088618906 = deductFee(delta)
273- let resultAfterFee = $t088618906._1
274- let fee = $t088618906._2
270+ let $t087638808 = deductFee(delta)
271+ let resultAfterFee = $t087638808._1
272+ let fee = $t087638808._2
275273 if ((0 >= delta))
276274 then throw((("Swap result " + toString(delta)) + " must be positive"))
277275 else if ((minAmountToReceive > resultAfterFee))
278276 then throw(((("Swap result " + toString(resultAfterFee)) + " is less then expected ") + toString(minAmountToReceive)))
279277 else [ScriptTransfer(inv.caller, resultAfterFee, assetFinalId), ScriptTransfer(collector, fee, assetFinalId)]
280278 }
281279 else throw("Strict value is not equal to itself.")
282280 }
283281 else throw("Strict value is not equal to itself.")
284282 }
285283 else throw("Strict value is not equal to itself.")
286284 }
287285
288286
289287 func wrapPuzzleSwap (inv,routesStr,minToReceive) = {
290288 let pmt = if ((size(inv.payments) > 0))
291289 then inv.payments[0]
292290 else throw("Payment required")
293291 let assetIdFinal = split(routesStr, ",")[(size(split(routesStr, ",")) - 1)]
294292 let assetId = getAssetId(assetIdFinal)
295293 let balanceBefore = getBalance(assetId)
296294 if ((balanceBefore == balanceBefore))
297295 then {
298296 let result = invoke(puzzleRouting, "swapWithReferral", [routesStr, minToReceive, refKey], [pmt])
299297 if ((result == result))
300298 then {
301299 let balanceAfter = getBalance(assetId)
302300 if ((balanceAfter == balanceAfter))
303301 then {
304302 let deltaProxy = (balanceAfter - balanceBefore)
305303 if ((deltaProxy == deltaProxy))
306304 then [ScriptTransfer(inv.caller, deltaProxy, assetId)]
307305 else throw("Strict value is not equal to itself.")
308306 }
309307 else throw("Strict value is not equal to itself.")
310308 }
311309 else throw("Strict value is not equal to itself.")
312310 }
313311 else throw("Strict value is not equal to itself.")
314312 }
315313
316314
317315 @Callable(inv)
318316 func swap (addresses,assetsToReceive,estReceived,slippageTolerance,minReceived,options) = {
319- let $t01011210166 = getSwapOptions(options)
320- let deadline = $t01011210166._1
321- let referrerName = $t01011210166._2
317+ let $t01001410068 = getSwapOptions(options)
318+ let deadline = $t01001410068._1
319+ let referrerName = $t01001410068._2
322320 let isValidTimestamp = validateBlockTimestamp(deadline)
323321 if ((isValidTimestamp == isValidTimestamp))
324322 then {
325323 let result = wrapSwap(inv, addresses, assetsToReceive, estReceived, slippageTolerance, minReceived)
326324 if ((result == result))
327325 then if ((size(referrerName) > 0))
328326 then {
329327 let assetFinal = assetsToReceive[(size(assetsToReceive) - 1)]
330328 let assetId = getAssetId(assetFinal)
331- let $t01049810568 = getReferrerData(referrerName)
332- let referrerAddress = $t01049810568._1
333- let referrerPercent = $t01049810568._2
329+ let $t01040010470 = getReferrerData(referrerName)
330+ let referrerAddress = $t01040010470._1
331+ let referrerPercent = $t01040010470._2
334332 let collectorFee = result[1].amount
335333 let referrerReward = fraction(collectorFee, referrerPercent, 100)
336334 [result[0], ScriptTransfer(collector, (collectorFee - referrerReward), assetId), ScriptTransfer(referrerAddress, referrerReward, assetId)]
337335 }
338336 else result
339337 else throw("Strict value is not equal to itself.")
340338 }
341339 else throw("Strict value is not equal to itself.")
342340 }
343341
344342
345343
346344 @Callable(inv)
347345 func swopfiSwap (exchangers,exchangersType,args1,args2,routingAssetsKeys,minAmountToReceive,options) = {
348- let $t01112111175 = getSwapOptions(options)
349- let deadline = $t01112111175._1
350- let referrerName = $t01112111175._2
346+ let $t01102311077 = getSwapOptions(options)
347+ let deadline = $t01102311077._1
348+ let referrerName = $t01102311077._2
351349 let isValidTimestamp = validateBlockTimestamp(deadline)
352350 if ((isValidTimestamp == isValidTimestamp))
353351 then {
354352 let result = wrapSwopfiSwap(inv, exchangers, exchangersType, args1, args2, routingAssetsKeys, minAmountToReceive)
355353 if ((result == result))
356354 then if ((size(referrerName) > 0))
357355 then {
358356 let lastExchanger = valueOrErrorMessage(addressFromString(exchangers[(size(exchangers) - 1)]), "Can't parse last exchanger swopfi address")
359357 let lastAssetIdKey = (split(routingAssetsKeys[(size(routingAssetsKeys) - 1)], "_")[0] + "_asset_id")
360358 let assetFinal = valueOrErrorMessage(getString(lastExchanger, lastAssetIdKey), ((("Can't read parameter '" + lastAssetIdKey) + "' for exchanger ") + toString(lastExchanger)))
361359 let assetId = getAssetId(assetFinal)
362- let $t01188511955 = getReferrerData(referrerName)
363- let referrerAddress = $t01188511955._1
364- let referrerPercent = $t01188511955._2
360+ let $t01178711857 = getReferrerData(referrerName)
361+ let referrerAddress = $t01178711857._1
362+ let referrerPercent = $t01178711857._2
365363 let collectorFee = result[1].amount
366364 let referrerReward = fraction(collectorFee, referrerPercent, 100)
367365 [result[0], ScriptTransfer(collector, (collectorFee - referrerReward), assetId), ScriptTransfer(referrerAddress, referrerReward, assetId)]
368366 }
369367 else result
370368 else throw("Strict value is not equal to itself.")
371369 }
372370 else throw("Strict value is not equal to itself.")
373371 }
374372
375373
376374
377375 @Callable(inv)
378376 func puzzleSwap (routesStr,minToReceive,options) = {
379- let $t01239012444 = getSwapOptions(options)
380- let deadline = $t01239012444._1
381- let referrerName = $t01239012444._2
377+ let $t01229212346 = getSwapOptions(options)
378+ let deadline = $t01229212346._1
379+ let referrerName = $t01229212346._2
382380 let isValidTimestamp = validateBlockTimestamp(deadline)
383381 if ((isValidTimestamp == isValidTimestamp))
384382 then if ((size(routesStr) == 0))
385383 then throw("Invalid routing")
386384 else if ((0 >= minToReceive))
387385 then throw("Sum to receive is to low")
388386 else {
389387 let balanceBefore = getBalanceByAddress(collector, puzzleRewardAssetId)
390388 if ((balanceBefore == balanceBefore))
391389 then {
392390 let result = wrapPuzzleSwap(inv, routesStr, minToReceive)
393391 if ((result == result))
394392 then if ((size(referrerName) > 0))
395393 then {
396394 let assetIdFinal = split(routesStr, ",")[(size(split(routesStr, ",")) - 1)]
397395 let assetId = getAssetId(assetIdFinal)
398- let $t01300513075 = getReferrerData(referrerName)
399- let referrerAddress = $t01300513075._1
400- let referrerPercent = $t01300513075._2
396+ let $t01290712977 = getReferrerData(referrerName)
397+ let referrerAddress = $t01290712977._1
398+ let referrerPercent = $t01290712977._2
401399 let balanceAfter = getBalanceByAddress(collector, puzzleRewardAssetId)
402400 if ((balanceAfter == balanceAfter))
403401 then {
404402 let delta = (balanceAfter - balanceBefore)
405403 if ((delta == delta))
406404 then {
407405 let reward = fraction(delta, referrerPercent, 100)
408406 let res = invoke(collector, "claimReferrerReward", [reward, puzzleRewardAssetStr], nil)
409407 if ((res == res))
410408 then (result :+ ScriptTransfer(referrerAddress, reward, puzzleRewardAssetId))
411409 else throw("Strict value is not equal to itself.")
412410 }
413411 else throw("Strict value is not equal to itself.")
414412 }
415413 else throw("Strict value is not equal to itself.")
416414 }
417415 else result
418416 else throw("Strict value is not equal to itself.")
419417 }
420418 else throw("Strict value is not equal to itself.")
421419 }
422420 else throw("Strict value is not equal to itself.")
423421 }
424422
425423
426424
427425 @Callable(inv)
428426 func addPools (poolAddresses) = {
429427 func addIfDoesNotExist (pools,pool) = if (containsElement(pools, pool))
430428 then throw((("Pool '" + pool) + "' is already added"))
431429 else (pools :+ toString(parseAddressOrThrow(pool)))
432430
433431 if (!(containsElement([this, collector], inv.caller)))
434432 then throw("only self calls or by collector are allowed")
435433 else [StringEntry("p-pools", makeString({
436434 let $l = poolAddresses
437435 let $s = size($l)
438436 let $acc0 = pPools
439437 func $f0_1 ($a,$i) = if (($i >= $s))
440438 then $a
441439 else addIfDoesNotExist($a, $l[$i])
442440
443441 func $f0_2 ($a,$i) = if (($i >= $s))
444442 then $a
445443 else throw("List size exceeds 10")
446444
447445 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
448446 }, ","))]
449447 }
450448
451449
452450
453451 @Callable(inv)
454452 func addReferer (referrerName,refererAddress,percent) = {
455453 let address = parseAddressOrThrow(refererAddress)
456454 if (if ((0 > percent))
457455 then true
458456 else (percent > 100))
459457 then throw("Incorrect percent rate")
460458 else if ((size(referrerName) == 0))
461459 then throw("Referrer name invalid")
462460 else if (!(containsElement([this, collector], inv.caller)))
463461 then throw("only self calls or by collector are allowed")
464462 else [StringEntry((("referrer-" + referrerName) + "-address"), refererAddress), IntegerEntry((("referrer-" + referrerName) + "-percent"), percent)]
465463 }
466464
467465

github/deemru/w8io/3ef1775 
63.01 ms