hermes-swap-router-sdk
Version:
An sdk for routing swaps using Uniswap v2, Uniswap v3 and Balancer Stable Pools.
3 lines (2 loc) • 41.4 kB
JavaScript
"use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(exports,"__esModule",{value:!0});var e,n=require("@ethersproject/abi"),r=t(require("@uniswap/swap-router-contracts/artifacts/contracts/interfaces/IApproveAndCall.sol/IApproveAndCall.json")),o=require("hermes-v2-sdk"),u=t(require("jsbi")),a=require("maia-core-sdk"),i=t(require("tiny-invariant")),c=t(require("@uniswap/swap-router-contracts/artifacts/contracts/interfaces/IMulticallExtended.sol/IMulticallExtended.json")),p=t(require("@uniswap/swap-router-contracts/artifacts/contracts/interfaces/IPeripheryPaymentsWithFeeExtended.sol/IPeripheryPaymentsWithFeeExtended.json")),s=t(require("@uniswap/swap-router-contracts/artifacts/contracts/interfaces/ISwapRouter02.sol/ISwapRouter02.json")),l=require("@ethersproject/solidity");function d(t){return Object.keys(t).some((function(t){return"recipient"===t}))}(e=exports.ApprovalTypes||(exports.ApprovalTypes={}))[e.NOT_REQUIRED=0]="NOT_REQUIRED",e[e.MAX=1]="MAX",e[e.MAX_MINUS_ONE=2]="MAX_MINUS_ONE",e[e.ZERO_THEN_MAX=3]="ZERO_THEN_MAX",e[e.ZERO_THEN_MAX_MINUS_ONE=4]="ZERO_THEN_MAX_MINUS_ONE";var m=function(){function t(){}return t.encodeApproveMax=function(e){return t.INTERFACE.encodeFunctionData("approveMax",[e.address])},t.encodeApproveMaxMinusOne=function(e){return t.INTERFACE.encodeFunctionData("approveMaxMinusOne",[e.address])},t.encodeApproveZeroThenMax=function(e){return t.INTERFACE.encodeFunctionData("approveZeroThenMax",[e.address])},t.encodeApproveZeroThenMaxMinusOne=function(e){return t.INTERFACE.encodeFunctionData("approveZeroThenMaxMinusOne",[e.address])},t.encodeCallPositionManager=function(e){if(e.length>0||i(!1),1==e.length)return t.INTERFACE.encodeFunctionData("callPositionManager",e);var n=o.NonfungiblePositionManager.INTERFACE.encodeFunctionData("multicall",[e]);return t.INTERFACE.encodeFunctionData("callPositionManager",[n])},t.encodeAddLiquidity=function(e,n,r,o){var i=e.mintAmountsWithSlippage(o),c=i.amount0,p=i.amount1;return u.lessThan(n.amount0.quotient,c)&&(c=n.amount0.quotient),u.lessThan(n.amount1.quotient,p)&&(p=n.amount1.quotient),d(r)?t.INTERFACE.encodeFunctionData("mint",[{token0:e.pool.token0.address,token1:e.pool.token1.address,fee:e.pool.fee,tickLower:e.tickLower,tickUpper:e.tickUpper,amount0Min:a.toHex(c),amount1Min:a.toHex(p),recipient:r.recipient}]):t.INTERFACE.encodeFunctionData("increaseLiquidity",[{token0:e.pool.token0.address,token1:e.pool.token1.address,amount0Min:a.toHex(c),amount1Min:a.toHex(p),tokenId:a.toHex(r.tokenId)}])},t.encodeApprove=function(e,n){switch(n){case exports.ApprovalTypes.MAX:return t.encodeApproveMax(e.wrapped);case exports.ApprovalTypes.MAX_MINUS_ONE:return t.encodeApproveMaxMinusOne(e.wrapped);case exports.ApprovalTypes.ZERO_THEN_MAX:return t.encodeApproveZeroThenMax(e.wrapped);case exports.ApprovalTypes.ZERO_THEN_MAX_MINUS_ONE:return t.encodeApproveZeroThenMaxMinusOne(e.wrapped);default:throw"Error: invalid ApprovalType"}},t}();m.INTERFACE=new n.Interface(r.abi);var f="0x0000000000000000000000000000000000000001",h="0x0000000000000000000000000000000000000002",A=new a.Percent(a.ZERO),v=new a.Percent(100,100);function y(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n<e;n++)r[n]=t[n];return r}function T(t,e,n,r,o,u,a){try{var i=t[u](a),c=i.value}catch(t){return void n(t)}i.done?e(c):Promise.resolve(c).then(r,o)}function w(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var u=t.apply(e,n);function a(t){T(u,r,o,a,i,"next",t)}function i(t){T(u,r,o,a,i,"throw",t)}a(void 0)}))}}function E(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,b(r.key),r)}}function x(t,e,n){return e&&E(t.prototype,e),n&&E(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function P(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return y(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function g(){return(g=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}).apply(null,arguments)}function k(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,function(t,e){(Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t})(t,e)}(t,e)}function R(){R=function(){return e};var t,e={},n=Object.prototype,r=n.hasOwnProperty,o=Object.defineProperty||function(t,e,n){t[e]=n.value},u="function"==typeof Symbol?Symbol:{},a=u.iterator||"@@iterator",i=u.asyncIterator||"@@asyncIterator",c=u.toStringTag||"@@toStringTag";function p(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{p({},"")}catch(t){p=function(t,e,n){return t[e]=n}}function s(t,e,n,r){var u=Object.create((e&&e.prototype instanceof A?e:A).prototype),a=new O(r||[]);return o(u,"_invoke",{value:k(t,n,a)}),u}function l(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}e.wrap=s;var d="suspendedStart",m="executing",f="completed",h={};function A(){}function v(){}function y(){}var T={};p(T,a,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(S([])));E&&E!==n&&r.call(E,a)&&(T=E);var x=y.prototype=A.prototype=Object.create(T);function P(t){["next","throw","return"].forEach((function(e){p(t,e,(function(t){return this._invoke(e,t)}))}))}function g(t,e){function n(o,u,a,i){var c=l(t[o],t,u);if("throw"!==c.type){var p=c.arg,s=p.value;return s&&"object"==typeof s&&r.call(s,"__await")?e.resolve(s.__await).then((function(t){n("next",t,a,i)}),(function(t){n("throw",t,a,i)})):e.resolve(s).then((function(t){p.value=t,a(p)}),(function(t){return n("throw",t,a,i)}))}i(c.arg)}var u;o(this,"_invoke",{value:function(t,r){function o(){return new e((function(e,o){n(t,r,e,o)}))}return u=u?u.then(o,o):o()}})}function k(e,n,r){var o=d;return function(u,a){if(o===m)throw Error("Generator is already running");if(o===f){if("throw"===u)throw a;return{value:t,done:!0}}for(r.method=u,r.arg=a;;){var i=r.delegate;if(i){var c=b(i,r);if(c){if(c===h)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===d)throw o=f,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var p=l(e,n,r);if("normal"===p.type){if(o=r.done?f:"suspendedYield",p.arg===h)continue;return{value:p.arg,done:r.done}}"throw"===p.type&&(o=f,r.method="throw",r.arg=p.arg)}}}function b(e,n){var r=n.method,o=e.iterator[r];if(o===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,b(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),h;var u=l(o,e.iterator,n.arg);if("throw"===u.type)return n.method="throw",n.arg=u.arg,n.delegate=null,h;var a=u.arg;return a?a.done?(n[e.resultName]=a.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,h):a:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function _(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function O(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(_,this),this.reset(!0)}function S(e){if(e||""===e){var n=e[a];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,u=function n(){for(;++o<e.length;)if(r.call(e,o))return n.value=e[o],n.done=!1,n;return n.value=t,n.done=!0,n};return u.next=u}}throw new TypeError(typeof e+" is not iterable")}return v.prototype=y,o(x,"constructor",{value:y,configurable:!0}),o(y,"constructor",{value:v,configurable:!0}),v.displayName=p(y,c,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===v||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,y):(t.__proto__=y,p(t,c,"GeneratorFunction")),t.prototype=Object.create(x),t},e.awrap=function(t){return{__await:t}},P(g.prototype),p(g.prototype,i,(function(){return this})),e.AsyncIterator=g,e.async=function(t,n,r,o,u){void 0===u&&(u=Promise);var a=new g(s(t,n,r,o),u);return e.isGeneratorFunction(n)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},P(x),p(x,c,"Generator"),p(x,a,(function(){return this})),p(x,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),n=[];for(var r in e)n.push(r);return n.reverse(),function t(){for(;n.length;){var r=n.pop();if(r in e)return t.value=r,t.done=!1,t}return t.done=!0,t}},e.values=S,O.prototype={constructor:O,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(I),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function o(r,o){return i.type="throw",i.arg=e,n.next=r,o&&(n.method="next",n.arg=t),!!o}for(var u=this.tryEntries.length-1;u>=0;--u){var a=this.tryEntries[u],i=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),p=r.call(a,"finallyLoc");if(c&&p){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!p)throw Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var u=o;break}}u&&("break"===t||"continue"===t)&&u.tryLoc<=e&&e<=u.finallyLoc&&(u=null);var a=u?u.completion:{};return a.type=t,a.arg=e,u?(this.method="next",this.next=u.finallyLoc,h):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),h},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),I(n),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;I(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:S(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),h}},e}function b(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}var _=function(){function t(t,e,n){this._midPrice=null,t.length>0||i(!1);var r=t[0].chainId;t.every((function(t){return t.chainId===r}))||i(!1);var o=e.wrapped;t[0].involvesToken(o)||i(!1),t[t.length-1].involvesToken(n.wrapped)||i(!1);for(var u,a=[o],c=P(t.entries());!(u=c()).done;){var p=u.value,s=p[1],l=a[p[0]];l.equals(s.token0)||l.equals(s.token1)||i(!1);var d=l.equals(s.token0)?s.token1:s.token0;a.push(d)}this.pools=t,this.path=a,this.input=e,this.output=null!=n?n:a[a.length-1]}return x(t,[{key:"chainId",get:function(){return this.pools[0].chainId}},{key:"midPrice",get:function(){if(null!==this._midPrice)return this._midPrice;var t=this.pools.slice(1).reduce((function(t,e){var n=t.price;return t.nextInput.equals(e.token0)?{nextInput:e.token1,price:n.multiply(e.token0Price)}:{nextInput:e.token0,price:n.multiply(e.token1Price)}}),this.pools[0].token0.equals(this.input.wrapped)?{nextInput:this.pools[0].token1,price:this.pools[0].token0Price}:{nextInput:this.pools[0].token0,price:this.pools[0].token1Price}).price;return this._midPrice=new a.Price(this.input,this.output,t.denominator,t.numerator)}}]),t}();function I(t,e){return t.inputAmount.currency.equals(e.inputAmount.currency)||i(!1),t.outputAmount.currency.equals(e.outputAmount.currency)||i(!1),t.outputAmount.equalTo(e.outputAmount)?t.inputAmount.equalTo(e.inputAmount)?t.swaps.reduce((function(t,e){return t+e.route.path.length}),0)-e.swaps.reduce((function(t,e){return t+e.route.path.length}),0):t.inputAmount.lessThan(e.inputAmount)?-1:1:t.outputAmount.lessThan(e.outputAmount)?1:-1}var O,S=function(){function t(t){var e=t.routes,n=t.tradeType,r=e[0].inputAmount.currency,u=e[0].outputAmount.currency;e.every((function(t){return r.wrapped.equals(t.route.input.wrapped)}))||i(!1),e.every((function(t){return u.wrapped.equals(t.route.output.wrapped)}))||i(!1);for(var a,c=e.map((function(t){return t.route.pools.length})).reduce((function(t,e){return t+e}),0),p=new Set,s=P(e);!(a=s()).done;)for(var l,d=P(a.value.route.pools);!(l=d()).done;){var m=l.value;p.add(m instanceof o.Pool?o.Pool.getAddress(m.token0,m.token1,m.fee):o.Pair.getAddress(m.token0,m.token1))}c!=p.size&&i(!1),n!==o.TradeType.EXACT_INPUT&&i(!1),this.swaps=e,this.tradeType=n}t.fromRoute=function(){var e=w(R().mark((function e(n,r,u){var c,p,s,l,d;return R().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:c=new Array(n.path.length),u!==o.TradeType.EXACT_INPUT&&i(!1),r.currency.equals(n.input)||i(!1),c[0]=r.wrapped,p=0;case 5:if(!(p<n.path.length-1)){e.next=15;break}return s=n.pools[p],e.next=9,s.getOutputAmount(c[p]);case 9:c[p+1]=e.sent[0];case 12:p++,e.next=5;break;case 15:return l=a.CurrencyAmount.fromFractionalAmount(n.input,r.numerator,r.denominator),d=a.CurrencyAmount.fromFractionalAmount(n.output,c[c.length-1].numerator,c[c.length-1].denominator),e.abrupt("return",new t({routes:[{inputAmount:l,outputAmount:d,route:n}],tradeType:u}));case 18:case"end":return e.stop()}}),e)})));return function(t,n,r){return e.apply(this,arguments)}}(),t.fromRoutes=function(){var e=w(R().mark((function e(n,r){var u,c,p,s,l,d,m,f,h,A,v;return R().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:u=[],r!==o.TradeType.EXACT_INPUT&&i(!1),c=P(n);case 3:if((p=c()).done){e.next=24;break}l=(s=p.value).route,d=s.amount,m=new Array(l.path.length),d.currency.equals(l.input)||i(!1),f=a.CurrencyAmount.fromFractionalAmount(l.input,d.numerator,d.denominator),m[0]=a.CurrencyAmount.fromFractionalAmount(l.input.wrapped,d.numerator,d.denominator),h=0;case 10:if(!(h<l.path.length-1)){e.next=20;break}return A=l.pools[h],e.next=14,A.getOutputAmount(m[h]);case 14:m[h+1]=e.sent[0];case 17:h++,e.next=10;break;case 20:v=a.CurrencyAmount.fromFractionalAmount(l.output,m[m.length-1].numerator,m[m.length-1].denominator),u.push({route:l,inputAmount:f,outputAmount:v});case 22:e.next=3;break;case 24:return e.abrupt("return",new t({routes:u,tradeType:r}));case 25:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),t.createUncheckedTrade=function(e){return new t(g({},e,{routes:[{inputAmount:e.inputAmount,outputAmount:e.outputAmount,route:e.route}]}))},t.createUncheckedTradeWithMultipleRoutes=function(e){return new t(e)};var e=t.prototype;return e.minimumAmountOut=function(t,e){void 0===e&&(e=this.outputAmount),t.lessThan(a.ZERO)&&i(!1);var n=new a.Fraction(a.ONE).add(t).invert().multiply(e.quotient).quotient;return a.CurrencyAmount.fromRawAmount(e.currency,n)},e.maximumAmountIn=function(t,e){return void 0===e&&(e=this.inputAmount),t.lessThan(a.ZERO)&&i(!1),e},e.worstExecutionPrice=function(t){return new a.Price(this.inputAmount.currency,this.outputAmount.currency,this.maximumAmountIn(t).quotient,this.minimumAmountOut(t).quotient)},t.bestTradeExactIn=function(){var e=w(R().mark((function e(n,r,u,c,p,s,l){var d,m,f,h,A,v,y,T,w,E,x;return R().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:f=void 0===(m=(d=void 0===c?{}:c).maxNumResults)?3:m,A=void 0===(h=d.maxHops)?3:h,void 0===p&&(p=[]),void 0===s&&(s=r),void 0===l&&(l=[]),n.length>0||i(!1),A>0||i(!1),r===s||p.length>0||i(!1),v=s.wrapped,y=u.wrapped,T=0;case 10:if(!(T<n.length)){e.next=49;break}if((w=n[T]).token0.equals(v.currency)||w.token1.equals(v.currency)){e.next=14;break}return e.abrupt("continue",46);case 14:if(!(w instanceof o.Pair)){e.next=17;break}if(!w.reserve0.equalTo(a.ZERO)&&!w.reserve1.equalTo(a.ZERO)){e.next=17;break}return e.abrupt("continue",46);case 17:return E=void 0,e.prev=18,e.next=22,w.getOutputAmount(v);case 22:E=e.sent[0],e.next=31;break;case 26:if(e.prev=26,e.t0=e.catch(18),!e.t0.isInsufficientInputAmountError){e.next=30;break}return e.abrupt("continue",46);case 30:throw e.t0;case 31:if(!E.currency.isToken||!E.currency.equals(y)){e.next=42;break}return e.t1=o.sortedInsert,e.t2=l,e.next=36,t.fromRoute(new _([].concat(p,[w]),r.currency,u),r,o.TradeType.EXACT_INPUT);case 36:e.t3=e.sent,e.t4=f,e.t5=I,(0,e.t1)(e.t2,e.t3,e.t4,e.t5),e.next=46;break;case 42:if(!(A>1&&n.length>1)){e.next=46;break}return x=n.slice(0,T).concat(n.slice(T+1,n.length)),e.next=46,t.bestTradeExactIn(x,r,u,{maxNumResults:f,maxHops:A-1},[].concat(p,[w]),E,l);case 46:T++,e.next=10;break;case 49:return e.abrupt("return",l);case 50:case"end":return e.stop()}}),e,null,[[18,26]])})));return function(t,n,r,o,u,a,i){return e.apply(this,arguments)}}(),x(t,[{key:"route",get:function(){return 1!=this.swaps.length&&i(!1),this.swaps[0].route}},{key:"inputAmount",get:function(){if(this._inputAmount)return this._inputAmount;var t=this.swaps[0].inputAmount.currency,e=this.swaps.map((function(t){return t.inputAmount})).reduce((function(t,e){return t.add(e)}),a.CurrencyAmount.fromRawAmount(t,0));return this._inputAmount=e,this._inputAmount}},{key:"outputAmount",get:function(){if(this._outputAmount)return this._outputAmount;var t=this.swaps[0].outputAmount.currency,e=this.swaps.map((function(t){return t.outputAmount})).reduce((function(t,e){return t.add(e)}),a.CurrencyAmount.fromRawAmount(t,0));return this._outputAmount=e,this._outputAmount}},{key:"executionPrice",get:function(){var t;return null!=(t=this._executionPrice)?t:this._executionPrice=new a.Price(this.inputAmount.currency,this.outputAmount.currency,this.inputAmount.quotient,this.outputAmount.quotient)}},{key:"priceImpact",get:function(){if(this._priceImpact)return this._priceImpact;for(var t,e=a.CurrencyAmount.fromRawAmount(this.outputAmount.currency,0),n=P(this.swaps);!(t=n()).done;){var r=t.value;e=e.add(r.route.midPrice.quote(r.inputAmount))}var o=e.subtract(this.outputAmount).divide(e);return this._priceImpact=new a.Percent(o.numerator,o.denominator),this._priceImpact}}]),t}();(O=exports.Protocol||(exports.Protocol={})).V2="V2",O.V3="V3",O.BAL_STABLE="BAL",O.BAL_STABLE_WRAPPER="ERC4626",O.MIXED="MIXED";var N=function(t){function e(e){var n;return(n=t.call(this,e.pairs,e.input,e.output)||this).protocol=exports.Protocol.V2,n.pools=n.pairs,n}return k(e,t),e}(o.V2RouteSDK),L=function(t){function e(e){var n;return(n=t.call(this,e.pools,e.input,e.output)||this).protocol=exports.Protocol.V3,n.path=e.tokenPath,n}return k(e,t),e}(o.Route),q=function(t){function e(e){var n;return(n=t.call(this,e.pools,e.input,e.output)||this).protocol=exports.Protocol.BAL_STABLE,n.path=e.tokenPath,n}return k(e,t),e}(o.Route),C=function(t){function e(e){var n;return(n=t.call(this,e.pools,e.input,e.output)||this).protocol=exports.Protocol.BAL_STABLE_WRAPPER,n.path=e.tokenPath,n}return k(e,t),e}(o.Route),M=function(t){function e(e){var n;return(n=t.call(this,e.pools,e.input,e.output)||this).protocol=exports.Protocol.MIXED,n}return k(e,t),e}(_),F=function(){function t(t){var e=t.v2Routes,n=t.v3Routes,r=t.stableRoutes,u=t.stableWrapperRoutes,a=t.tradeType,c=t.mixedRoutes,p=t.allowDifferentTokenRoutes;this.swaps=[],this.routes=[];for(var s,l=P(e);!(s=l()).done;){var d=s.value,m=d.inputAmount,f=d.outputAmount,h=new N(d.routev2);this.routes.push(h),this.swaps.push({route:h,inputAmount:m,outputAmount:f})}for(var A,v=P(n);!(A=v()).done;){var y=A.value,T=y.inputAmount,w=y.outputAmount,E=new L(y.routev3);this.routes.push(E),this.swaps.push({route:E,inputAmount:T,outputAmount:w})}for(var x,g=P(r);!(x=g()).done;){var k=x.value,R=k.inputAmount,b=k.outputAmount,_=new q(k.routeStable);this.routes.push(_),this.swaps.push({route:_,inputAmount:R,outputAmount:b})}for(var I,O=P(u);!(I=O()).done;){var S=I.value,F=S.inputAmount,U=S.outputAmount,D=new C(S.routeStableWrapper);this.routes.push(D),this.swaps.push({route:D,inputAmount:F,outputAmount:U})}if(c)for(var H,B=P(c);!(H=B()).done;){var W=H.value,V=W.inputAmount,j=W.outputAmount,X=new M(W.mixedRoute);this.routes.push(X),this.swaps.push({route:X,inputAmount:V,outputAmount:j})}if(0===this.swaps.length)throw new Error("No routes provided when calling Trade constructor");if(this.tradeType=a,!p){var Z=this.swaps[0].inputAmount.currency,G=this.swaps[0].outputAmount.currency;this.swaps.every((function(t){return Z.wrapped.equals(t.route.input.wrapped)}))||i(!1),this.swaps.every((function(t){return G.wrapped.equals(t.route.output.wrapped)}))||i(!1)}for(var Y,Q=this.swaps.map((function(t){return t.route.pools.length})).reduce((function(t,e){return t+e}),0),K=new Set,z=P(this.swaps);!(Y=z()).done;)for(var $,J=P(Y.value.route.pools);!($=J()).done;){var tt=$.value;if(tt instanceof o.Pool)K.add(o.Pool.getAddress(tt.token0,tt.token1,tt.fee));else if(tt instanceof o.Pair)K.add(o.Pair.getAddress(tt.token0,tt.token1));else if(tt instanceof o.ComposableStablePool)K.add(tt.pool.id);else{if(!(tt instanceof o.ComposableStablePoolWrapper))throw new Error("Unexpected pool type in route when constructing trade object");K.add(tt.vault().address)}}Q!=K.size&&i(!1)}var e=t.prototype;return e.minimumAmountOut=function(t,e){if(void 0===e&&(e=this.outputAmount),t.lessThan(a.ZERO)&&i(!1),this.tradeType===o.TradeType.EXACT_OUTPUT)return e;var n=new a.Fraction(a.ONE).add(t).invert().multiply(e.quotient).quotient;return a.CurrencyAmount.fromRawAmount(e.currency,n)},e.maximumAmountIn=function(t,e){if(void 0===e&&(e=this.inputAmount),t.lessThan(a.ZERO)&&i(!1),this.tradeType===o.TradeType.EXACT_INPUT)return e;var n=new a.Fraction(a.ONE).add(t).multiply(e.quotient).quotient;return a.CurrencyAmount.fromRawAmount(e.currency,n)},e.worstExecutionPrice=function(t){return new a.Price(this.inputAmount.currency,this.outputAmount.currency,this.maximumAmountIn(t).quotient,this.minimumAmountOut(t).quotient)},t.fromRoutes=function(){var e=w(R().mark((function e(n,r,u,a,i,c){var p,s,l,d,m,f,h,A,v,y,T,w,E,x,g,k,b,_,I,O,N,L,q,C,M,F,U,D,H,B,W,V,j,X;return R().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(p=[],s=[],l=[],d=[],m=[],f=P(n);!(h=f()).done;)y=new o.V2Trade(v=(A=h.value).routev2,A.amount,i),p.push({routev2:v,inputAmount:y.inputAmount,outputAmount:y.outputAmount});T=P(r);case 7:if((w=T()).done){e.next=16;break}return x=(E=w.value).routev3,g=E.amount,e.next=11,o.Trade.fromRoute(x,g,i);case 11:s.push({routev3:x,inputAmount:(k=e.sent).inputAmount,outputAmount:k.outputAmount});case 14:e.next=7;break;case 16:b=P(u);case 17:if((_=b()).done){e.next=26;break}return O=(I=_.value).routeStable,N=I.amount,e.next=21,o.Trade.fromRoute(O,N,i);case 21:l.push({routeStable:O,inputAmount:(L=e.sent).inputAmount,outputAmount:L.outputAmount});case 24:e.next=17;break;case 26:q=P(a);case 27:if((C=q()).done){e.next=36;break}return F=(M=C.value).routeStableWrapper,U=M.amount,e.next=31,o.Trade.fromRoute(F,U,i);case 31:d.push({routeStableWrapper:F,inputAmount:(D=e.sent).inputAmount,outputAmount:D.outputAmount});case 34:e.next=27;break;case 36:if(!c){e.next=47;break}H=P(c);case 38:if((B=H()).done){e.next=47;break}return V=(W=B.value).mixedRoute,j=W.amount,e.next=42,S.fromRoute(V,j,i);case 42:m.push({mixedRoute:V,inputAmount:(X=e.sent).inputAmount,outputAmount:X.outputAmount});case 45:e.next=38;break;case 47:return e.abrupt("return",new t({v2Routes:p,v3Routes:s,stableRoutes:l,stableWrapperRoutes:d,mixedRoutes:m,tradeType:i}));case 48:case"end":return e.stop()}}),e)})));return function(t,n,r,o,u,a){return e.apply(this,arguments)}}(),t.fromRoute=function(){var e=w(R().mark((function e(n,r,u){var a,i,c,p,s,l,d,m,f,h;return R().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=[],i=[],c=[],p=[],s=[],!(n instanceof o.V2RouteSDK)){e.next=11;break}l=new o.V2Trade(n,r,u),a=[{routev2:n,inputAmount:l.inputAmount,outputAmount:l.outputAmount}],e.next=48;break;case 11:if(!(n instanceof o.Route)){e.next=39;break}if(t.routeProtocol(n)!==exports.Protocol.V3){e.next=20;break}return e.next=15,o.Trade.fromRoute(n,r,u);case 15:i=[{routev3:n,inputAmount:(d=e.sent).inputAmount,outputAmount:d.outputAmount}],e.next=37;break;case 20:if(t.routeProtocol(n)!==exports.Protocol.BAL_STABLE){e.next=28;break}return e.next=23,o.Trade.fromRoute(n,r,u);case 23:c=[{routeStable:n,inputAmount:(m=e.sent).inputAmount,outputAmount:m.outputAmount}],e.next=37;break;case 28:if(t.routeProtocol(n)!==exports.Protocol.BAL_STABLE_WRAPPER){e.next=36;break}return e.next=31,o.Trade.fromRoute(n,r,u);case 31:p.push({routeStableWrapper:n,inputAmount:(f=e.sent).inputAmount,outputAmount:f.outputAmount}),e.next=37;break;case 36:throw new Error("Invalid route type");case 37:e.next=48;break;case 39:if(!(n instanceof _)){e.next=47;break}return e.next=42,S.fromRoute(n,r,u);case 42:s=[{mixedRoute:n,inputAmount:(h=e.sent).inputAmount,outputAmount:h.outputAmount}],e.next=48;break;case 47:throw new Error("Invalid route type");case 48:return e.abrupt("return",new t({v2Routes:a,v3Routes:i,stableRoutes:c,stableWrapperRoutes:p,mixedRoutes:s,tradeType:u}));case 49:case"end":return e.stop()}}),e)})));return function(t,n,r){return e.apply(this,arguments)}}(),t.tradeProtocol=function(e){return t.routeProtocol(e.swaps[0].route)},t.routeProtocol=function(t){if(0==t.pools.length)throw new Error("INVALID_ROUTE");if(t.pools[0]instanceof o.Pool)return exports.Protocol.V3;if(t.pools[0]instanceof o.ComposableStablePool)return exports.Protocol.BAL_STABLE;if(t.pools[0]instanceof o.ComposableStablePoolWrapper)return exports.Protocol.BAL_STABLE_WRAPPER;throw new Error("UNSUPPORTED_PROTOCOL")},x(t,[{key:"inputAmount",get:function(){if(this._inputAmount)return this._inputAmount;var t=this.swaps[0].inputAmount.currency,e=this.swaps.map((function(t){return t.inputAmount})).reduce((function(t,e){return t.add(e)}),a.CurrencyAmount.fromRawAmount(t,0));return this._inputAmount=e,this._inputAmount}},{key:"outputAmount",get:function(){if(this._outputAmount)return this._outputAmount;var t=this.swaps[0].outputAmount.currency,e=this.swaps.map((function(t){return t.outputAmount})).reduce((function(t,e){return t.add(e)}),a.CurrencyAmount.fromRawAmount(t,0));return this._outputAmount=e,this._outputAmount}},{key:"executionPrice",get:function(){var t;return null!=(t=this._executionPrice)?t:this._executionPrice=new a.Price(this.inputAmount.currency,this.outputAmount.currency,this.inputAmount.quotient,this.outputAmount.quotient)}},{key:"inputTax",get:function(){return A}},{key:"outputTax",get:function(){return A}},{key:"priceImpact",get:function(){if(this._priceImpact)return this._priceImpact;for(var t,e=a.CurrencyAmount.fromRawAmount(this.outputAmount.currency,0),n=P(this.swaps);!(t=n()).done;){var r=t.value;e=e.add(r.route.midPrice.quote(r.inputAmount))}if(e.equalTo(a.ZERO))return A;var o=e.subtract(this.outputAmount).divide(e);return this._priceImpact=new a.Percent(o.numerator,o.denominator),this._priceImpact}}]),t}(),U=function(){function t(){}return t.encodeMulticall=function(e,n){if(void 0===n)return o.Multicall.encodeMulticall(e);if(Array.isArray(e)||(e=[e]),"string"==typeof n&&n.startsWith("0x")){var r=function(t){if(!t.match(/^0x[0-9a-fA-F]{64}$/))throw new Error(t+" is not valid bytes32.");return t.toLowerCase()}(n);return t.INTERFACE.encodeFunctionData("multicall(bytes32,bytes[])",[r,e])}var u=a.toHex(n);return t.INTERFACE.encodeFunctionData("multicall(uint256,bytes[])",[u,e])},t}();function D(t){return a.toHex(t.multiply(1e4).quotient)}U.INTERFACE=new n.Interface(c.abi);var H,B=function(){function t(){}return t.encodeUnwrapWETH9=function(e,n,r){if("string"==typeof n)return o.Payments.encodeUnwrapWETH9(e,n,r);if(r){var u=D(r.fee),i=o.validateAndParseAddress(r.recipient);return t.INTERFACE.encodeFunctionData("unwrapWETH9WithFee(uint256,uint256,address)",[a.toHex(e),u,i])}return t.INTERFACE.encodeFunctionData("unwrapWETH9(uint256)",[a.toHex(e)])},t.encodeSweepToken=function(e,n,r,u){if("string"==typeof r)return o.Payments.encodeSweepToken(e,n,r,u);if(u){var i=D(u.fee),c=o.validateAndParseAddress(u.recipient);return t.INTERFACE.encodeFunctionData("sweepTokenWithFee(address,uint256,uint256,address)",[e.address,a.toHex(n),i,c])}return t.INTERFACE.encodeFunctionData("sweepToken(address,uint256)",[e.address,a.toHex(n)])},t.encodePull=function(e,n){return t.INTERFACE.encodeFunctionData("pull",[e.address,a.toHex(n)])},t.encodeWrapETH=function(e){return t.INTERFACE.encodeFunctionData("wrapETH",[a.toHex(e)])},t}();B.INTERFACE=new n.Interface(p.abi),(H=exports.EncodingType||(exports.EncodingType={})).V2="V2",H.V3="V3",H.BAL_STABLE="BAL",H.VAULT="ERC4626";var W=new Map([[o.Pool,exports.EncodingType.V3],[o.ComposableStablePool,exports.EncodingType.BAL_STABLE],[o.ComposableStablePoolWrapper,exports.EncodingType.VAULT],[o.Pair,exports.EncodingType.V2]]),V=function(t){for(var e,n=P(W);!(e=n()).done;){var r=e.value;if(t instanceof r[0])return r[1]}throw new Error("UNRECOGNIZED POOL TYPE")},j=function(t){return X(t.pools)};function X(t){for(var e=[],n=0,r=0;r<t.length;)V(t[n])!==V(t[r])&&(e.push(t.slice(n,r)),n=r),++r===t.length&&e.push(t.slice(n,r));return e}var Z,G,Y=function(t,e){return t.reduce((function(t,e){var n=t.inputToken;if(!e.involvesToken(n))throw new Error("PATH");return{inputToken:e.token0.equals(n)?e.token1:e.token0}}),{inputToken:e}).inputToken},Q=new n.Interface(s.abi);function K(t){var e=t.pools.reduce((function(t,e,n){var r=t.inputToken,u=t.path,a=t.types,i=e.token0.equals(r)?e.token1:e.token0;return 0===n?{inputToken:i,types:["address","uint24","address"],path:[r.address,e instanceof o.Pool?e.fee:8388608,i.address]}:{inputToken:i,types:[].concat(a,["uint24","address"]),path:[].concat(u,[e instanceof o.Pool?e.fee:8388608,i.address])}}),{inputToken:t.input.wrapped,path:[],types:[]});return l.pack(e.types,e.path)}function z(t){throw new Error("UNSUPPORTED_SWAP_ROUTER_POOL_TYPE")}var $=((Z={})[exports.EncodingType.V3]=function(t){return Q.encodeFunctionData("exactInputSingle",[{tokenIn:t.route.path[0].address,tokenOut:t.route.path[1].address,fee:t.route.pools[0].fee,recipient:t.recipient,amountIn:t.amountIn,amountOutMinimum:t.amountOutMinimum,sqrtPriceLimitX96:0}])},Z[exports.EncodingType.V2]=function(t){var e=t.route.path.map((function(t){return t.address}));return Q.encodeFunctionData("swapExactTokensForTokens",[t.amountIn,t.amountOutMinimum,e,t.recipient])},Z[exports.EncodingType.BAL_STABLE]=z,Z[exports.EncodingType.VAULT]=z,Z),J=((G={})[exports.EncodingType.V3]=function(t){var e=K(t.route);return Q.encodeFunctionData("exactInput",[{path:e,recipient:t.recipient,amountIn:t.amountIn,amountOutMinimum:t.amountOutMinimum}])},G[exports.EncodingType.V2]=function(t){var e=[t.amountIn,t.amountOutMinimum,t.route.path.map((function(t){return t.address})),t.recipient];return Q.encodeFunctionData("swapExactTokensForTokens",e)},G[exports.EncodingType.BAL_STABLE]=z,G[exports.EncodingType.VAULT]=z,G);function tt(t){var e=V(t.pools[0]),n=J[e];if(!n)throw new Error("No encoding strategy found for pool type: "+e);return n}function et(t,e,n,r){var u=[];t.tradeType!==o.TradeType.EXACT_INPUT&&i(!1);for(var c,p=function(){var i=c.value,p=i.route,s=i.outputAmount,l=a.toHex(t.maximumAmountIn(e.slippageTolerance,i.inputAmount).quotient),d=a.toHex(t.minimumAmountOut(e.slippageTolerance,s).quotient),m=1===p.pools.length,A=n?h:void 0===e.recipient?f:o.validateAndParseAddress(e.recipient);if(m){var v={route:p,amountIn:l,amountOutMinimum:r?"0":d,recipient:A},y=function(t){var e=V(t.pools[0]),n=$[e];if(!n)throw new Error("No encoding strategy found for pool type: "+e);return n}(p);u.push(y(v))}else for(var T,w=j(p),E=function(t){return t===w.length-1},x=p.input.wrapped,P=0;P<w.length;P++){var g=w[P];T=Y(g,x);var k=new _([].concat(g),g[0].token0.equals(x)?g[0].token0:g[0].token1,T),R=new M(k);x=T;var b={route:R,amountIn:0===P?l:"0",amountOutMinimum:E(P)?d:"0",recipient:E(P)?A:h},I=tt(R);u.push(I(b))}},s=P(t.swaps);!(c=s()).done;)p();return u}function nt(t,e,n,r){var u=a.toHex(t.maximumAmountIn(e.slippageTolerance).quotient),i=a.toHex(t.minimumAmountOut(e.slippageTolerance).quotient),c=t.route.path.map((function(t){return t.address})),p=n?h:void 0===e.recipient?f:o.validateAndParseAddress(e.recipient);return t.tradeType===o.TradeType.EXACT_INPUT?Q.encodeFunctionData("swapExactTokensForTokens",[u,r?0:i,c,p]):Q.encodeFunctionData("swapTokensForExactTokens",[i,u,c,p])}function rt(t,e,n,r){var u=[],i=F.tradeProtocol(t);if(i==exports.Protocol.V3)for(var c,p=P(function(t,e,n,r){for(var u,i=[],c=P(t.swaps);!(u=c()).done;){var p=u.value,s=p.route,l=p.outputAmount,d=a.toHex(t.maximumAmountIn(e.slippageTolerance,p.inputAmount).quotient),m=a.toHex(t.minimumAmountOut(e.slippageTolerance,l).quotient),A=1===s.pools.length,v=n?h:void 0===e.recipient?f:o.validateAndParseAddress(e.recipient);if(A)i.push(t.tradeType===o.TradeType.EXACT_INPUT?Q.encodeFunctionData("exactInputSingle",[{tokenIn:s.tokenPath[0].address,tokenOut:s.tokenPath[1].address,fee:s.pools[0].fee,recipient:v,amountIn:d,amountOutMinimum:r?0:m,sqrtPriceLimitX96:0}]):Q.encodeFunctionData("exactOutputSingle",[{tokenIn:s.tokenPath[0].address,tokenOut:s.tokenPath[1].address,fee:s.pools[0].fee,recipient:v,amountOut:m,amountInMaximum:d,sqrtPriceLimitX96:0}]));else{var y=o.encodeRouteToPath(s,t.tradeType===o.TradeType.EXACT_OUTPUT);i.push(t.tradeType===o.TradeType.EXACT_INPUT?Q.encodeFunctionData("exactInput",[{path:y,recipient:v,amountIn:d,amountOutMinimum:r?0:m}]):Q.encodeFunctionData("exactOutput",[{path:y,recipient:v,amountOut:m,amountInMaximum:d}]))}}return i}(t,e,n,r));!(c=p()).done;)u.push(c.value);else if(i==exports.Protocol.BAL_STABLE)for(var s,l=P(function(t,e,n,r){throw new Error("UNSUPPORTED_SWAP_ROUTER_POOL_TYPE")}());!(s=l()).done;)u.push(s.value);else{if(i!=exports.Protocol.BAL_STABLE_WRAPPER)throw new Error("UNSUPPORTED_TRADE_PROTOCOL");for(var d,m=P(function(t,e,n,r){throw new Error("UNSUPPORTED_SWAP_ROUTER_POOL_TYPE")}());!(d=m()).done;)u.push(d.value)}return u}function ot(t,e,n){if(t instanceof F){t.swaps.every((function(t){return t.route.protocol==exports.Protocol.V3||t.route.protocol==exports.Protocol.V2||t.route.protocol==exports.Protocol.BAL_STABLE||t.route.protocol==exports.Protocol.BAL_STABLE_WRAPPER||t.route.protocol==exports.Protocol.MIXED}))||i(!1);for(var r,u=[],c=P(t.swaps);!(r=c()).done;){var p=r.value,s=p.route,l=p.inputAmount,d=p.outputAmount;if(s.protocol==exports.Protocol.V2)u.push(new o.V2Trade(s,t.tradeType==o.TradeType.EXACT_INPUT?l:d,t.tradeType));else if(s.protocol==exports.Protocol.V3)u.push(o.Trade.createUncheckedTrade({route:s,inputAmount:l,outputAmount:d,tradeType:t.tradeType}));else if(s.protocol==exports.Protocol.MIXED)u.push(S.createUncheckedTrade({route:s,inputAmount:l,outputAmount:d,tradeType:t.tradeType}));else if(s.protocol==exports.Protocol.BAL_STABLE)u.push(o.Trade.createUncheckedTrade({route:s,inputAmount:l,outputAmount:d,tradeType:t.tradeType}));else{if(s.protocol!=exports.Protocol.BAL_STABLE_WRAPPER)throw new Error("UNSUPPORTED_TRADE_PROTOCOL");u.push(o.Trade.createUncheckedTrade({route:s,inputAmount:l,outputAmount:d,tradeType:t.tradeType}))}}t=u}Array.isArray(t)||(t=[t]);var m=t.reduce((function(t,e){return t+(e instanceof o.Trade||e instanceof S?e.swaps.length:1)}),0),f=t[0];t.every((function(t){return t.inputAmount.currency.equals(f.inputAmount.currency)}))||i(!1),t.every((function(t){return t.outputAmount.currency.equals(f.outputAmount.currency)}))||i(!1),t.every((function(t){return t.tradeType===f.tradeType}))||i(!1);var h=[],A=f.inputAmount.currency.isNative,v=f.outputAmount.currency.isNative,y=f.tradeType===o.TradeType.EXACT_INPUT&&m>2,T=v||!!e.fee||!!n||y;e.inputTokenPermit&&(f.inputAmount.currency.isToken||i(!1),h.push(o.SelfPermit.encodePermit(f.inputAmount.currency,e.inputTokenPermit)));for(var w,E=P(t);!(w=E()).done;){var x=w.value;if(x instanceof o.V2Trade)h.push(nt(x,e,T,y));else if(x instanceof o.Trade)for(var g,k=P(rt(x,e,T,y));!(g=k()).done;)h.push(g.value);else{if(!(x instanceof S))throw new Error("Unsupported trade object");for(var R,b=P(et(x,e,T,y));!(R=b()).done;)h.push(R.value)}}var _=a.CurrencyAmount.fromRawAmount(f.inputAmount.currency,0),I=a.CurrencyAmount.fromRawAmount(f.outputAmount.currency,0),O=t.reduce((function(t,n){return t.add(n.minimumAmountOut(e.slippageTolerance))}),I),N=t.reduce((function(t,e){return t.add(e.outputAmount)}),I),L=t.reduce((function(t,n){return t.add(n.maximumAmountIn(e.slippageTolerance))}),_);return{calldatas:h,sampleTrade:f,routerMustCustody:T,inputIsNative:A,outputIsNative:v,totalAmountIn:L,minimumAmountOut:O,quoteAmountOut:N}}var ut=new a.Percent(u.BigInt(50),u.BigInt(100)),at=function(){function t(){}return t.swapCallParameters=function(e,n){var r=ot(e,n),u=r.calldatas,i=r.sampleTrade,c=r.inputIsNative,p=r.totalAmountIn,s=r.minimumAmountOut;return r.routerMustCustody&&u.push(r.outputIsNative?B.encodeUnwrapWETH9(s.quotient,n.recipient,n.fee):B.encodeSweepToken(i.outputAmount.currency.wrapped,s.quotient,n.recipient,n.fee)),c&&(i.tradeType===o.TradeType.EXACT_OUTPUT||t.riskOfPartialFill(e))&&u.push(o.Payments.encodeRefundETH()),{calldata:U.encodeMulticall(u,n.deadlineOrPreviousBlockhash),value:a.toHex(c?p.quotient:a.ZERO)}},t.swapAndAddCallParameters=function(e,n,r,u,c,p){var s,l,d,f,h=ot(e,n,!0),A=h.calldatas,v=h.inputIsNative,y=h.outputIsNative,T=h.sampleTrade,w=h.totalAmountIn,E=h.quoteAmountOut,x=h.minimumAmountOut;n.outputTokenPermit&&(E.currency.isToken||i(!1),A.push(o.SelfPermit.encodePermit(E.currency,n.outputTokenPermit)));var P=T.route.chainId,g=r.pool.token0.wrapped.address===w.currency.wrapped.address,k=t.getPositionAmounts(r,g),R=k.positionAmountIn,b=k.positionAmountOut,_=v?o.WETH9[P]:R.currency.wrapped,I=y?o.WETH9[P]:b.currency.wrapped,O=b.subtract(E.wrapped);O.greaterThan(a.CurrencyAmount.fromRawAmount(b.currency,0))&&A.push(y?B.encodeWrapETH(O.quotient):B.encodePull(I,O.quotient)),A.push(v?B.encodeWrapETH(R.quotient):B.encodePull(_,R.quotient)),c!==exports.ApprovalTypes.NOT_REQUIRED&&A.push(m.encodeApprove(_,c)),p!==exports.ApprovalTypes.NOT_REQUIRED&&A.push(m.encodeApprove(I,p));var S,N=o.Position.fromAmounts({pool:r.pool,tickLower:r.tickLower,tickUpper:r.tickUpper,amount0:g?null!=(s=null==(l=r.amount0)?void 0:l.quotient.toString())?s:"0":x.quotient.toString(),amount1:g?x.quotient.toString():null!=(d=null==(f=r.amount1)?void 0:f.quotient.toString())?d:"0",useFullPrecision:!1});return A.push(m.encodeAddLiquidity(r,N,u,n.slippageTolerance)),A.push(v?B.encodeUnwrapWETH9(a.ZERO):B.encodeSweepToken(_,a.ZERO)),A.push(y?B.encodeUnwrapWETH9(a.ZERO):B.encodeSweepToken(I,a.ZERO)),S=v?w.wrapped.add(R.wrapped).quotient:y?O.quotient:a.ZERO,{calldata:U.encodeMulticall(A,n.deadlineOrPreviousBlockhash),value:S.toString()}},t.riskOfPartialFill=function(e){return Array.isArray(e)?e.some((function(e){return t.v3TradeWithHighPriceImpact(e)})):t.v3TradeWithHighPriceImpact(e)},t.v3TradeWithHighPriceImpact=function(t){return!(t instanceof o.V2Trade)&&t.priceImpact.greaterThan(ut)},t.getPositionAmounts=function(t,e){var n,r=null!=(n=t.mintAmounts)?n:{amount0:0,amount1:0},o=r.amount1,u=a.CurrencyAmount.fromRawAmount(t.pool.token0,r.amount0),i=a.CurrencyAmount.fromRawAmount(t.pool.token1,o),c=e?[u,i]:[i,u];return{positionAmountIn:c[0],positionAmountOut:c[1]}},t}();at.INTERFACE=Q,exports.ADDRESS_THIS=h,exports.ApproveAndCall=m,exports.MSG_SENDER=f,exports.MixedRoute=M,exports.MixedRouteSDK=_,exports.MixedRouteTrade=S,exports.MulticallExtended=U,exports.ONE_HUNDRED_PERCENT=v,exports.PaymentsExtended=B,exports.RouteStable=q,exports.RouteStableWrapper=C,exports.RouteV2=N,exports.RouteV3=L,exports.SwapRouter=at,exports.Trade=F,exports.UNIVERSAL_ROUTER_ADDRESS=function(t){switch(t){case 42161:return"0x00000006f4dd9687c729a608a0ddb70400001095";case 11155111:return"0x5181bd48C2070E1f850C4a1F59665f02E4617Cb0";case 1:case 10:return a.ZERO_ADDRESS;default:throw new Error("Universal Router not deployed on chain "+t)}},exports.V2_FEE_PATH_PLACEHOLDER=8388608,exports.ZERO_PERCENT=A,exports.encodeMixedRouteToPath=K,exports.getOutputOfPools=Y,exports.getTypeGroup=V,exports.isMint=d,exports.partitionMixedRouteByProtocol=j,exports.partitionPoolsByProtocol=X,exports.tradeComparator=I;
//# sourceMappingURL=hermes-swap-router-sdk.cjs.production.min.js.map