@galacticcouncil/sdk 0.0.1-beta.10 → 0.0.1-beta.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +4 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/types/api/router.d.ts +17 -16
- package/dist/types/api/tradeRouter.d.ts +29 -13
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/polkadotApi.d.ts +17 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/pool/index.d.ts +1 -1
- package/dist/types/pool/lbp/lbpMath.d.ts +13 -0
- package/dist/types/pool/lbp/lbpPolkadotApiClient.d.ts +20 -0
- package/dist/types/pool/lbp/lbpPool.d.ts +40 -0
- package/dist/types/pool/polkadotApiPoolService.d.ts +10 -0
- package/dist/types/pool/xyk/xykMath.d.ts +2 -0
- package/dist/types/pool/xyk/xykPolkadotApiClient.d.ts +6 -0
- package/dist/types/pool/xyk/xykPool.d.ts +8 -5
- package/dist/types/types.d.ts +59 -28
- package/dist/types/utils/mapper.d.ts +4 -0
- package/dist/types/utils/math.d.ts +4 -7
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var je=Object.create;var Ie=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var nt=Object.getPrototypeOf,rt=Object.prototype.hasOwnProperty;var ot=(d,n)=>()=>(n||d((n={exports:{}}).exports,n),n.exports),it=(d,n)=>{for(var a in n)Ie(d,a,{get:n[a],enumerable:!0})},Ve=(d,n,a,m)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of tt(n))!rt.call(d,o)&&o!==a&&Ie(d,o,{get:()=>n[o],enumerable:!(m=et(n,o))||m.enumerable});return d};var st=(d,n,a)=>(a=d!=null?je(nt(d)):{},Ve(n||!d||!d.__esModule?Ie(a,"default",{value:d,enumerable:!0}):a,d)),at=d=>Ve(Ie({},"__esModule",{value:!0}),d);var Je=ot((sn,re)=>{var gt={},y,{TextEncoder:mt,TextDecoder:dt}=require("util"),M=0,ve=null;function Me(){return(ve===null||ve.buffer!==y.memory.buffer)&&(ve=new Uint8Array(y.memory.buffer)),ve}var Re=new mt("utf-8"),_t=typeof Re.encodeInto=="function"?function(d,n){return Re.encodeInto(d,n)}:function(d,n){let a=Re.encode(d);return n.set(a),{read:d.length,written:a.length}};function D(d,n,a){if(a===void 0){let P=Re.encode(d),O=n(P.length);return Me().subarray(O,O+P.length).set(P),M=P.length,O}let m=d.length,o=n(m),_=Me(),w=0;for(;w<m;w++){let P=d.charCodeAt(w);if(P>127)break;_[o+w]=P}if(w!==m){w!==0&&(d=d.slice(w)),o=a(o,m,m=w+d.length*3);let P=Me().subarray(o+w,o+m);w+=_t(d,P).written}return M=w,o}var Te=null;function K(){return(Te===null||Te.buffer!==y.memory.buffer)&&(Te=new Int32Array(y.memory.buffer)),Te}var Ze=new dt("utf-8",{ignoreBOM:!0,fatal:!0});Ze.decode();function ce(d,n){return Ze.decode(Me().subarray(d,d+n))}re.exports.calculate_pool_trade_fee=function(d,n,a){try{let _=y.__wbindgen_add_to_stack_pointer(-16),w=D(d,y.__wbindgen_malloc,y.__wbindgen_realloc),P=M;y.calculate_pool_trade_fee(_,w,P,n,a);var m=K()[_/4+0],o=K()[_/4+1];return ce(m,o)}finally{y.__wbindgen_add_to_stack_pointer(16),y.__wbindgen_free(m,o)}};re.exports.get_spot_price=function(d,n,a){try{let _=y.__wbindgen_add_to_stack_pointer(-16),w=D(d,y.__wbindgen_malloc,y.__wbindgen_realloc),P=M,O=D(n,y.__wbindgen_malloc,y.__wbindgen_realloc),N=M,I=D(a,y.__wbindgen_malloc,y.__wbindgen_realloc),x=M;y.get_spot_price(_,w,P,O,N,I,x);var m=K()[_/4+0],o=K()[_/4+1];return ce(m,o)}finally{y.__wbindgen_add_to_stack_pointer(16),y.__wbindgen_free(m,o)}};re.exports.calculate_out_given_in=function(d,n,a){try{let _=y.__wbindgen_add_to_stack_pointer(-16),w=D(d,y.__wbindgen_malloc,y.__wbindgen_realloc),P=M,O=D(n,y.__wbindgen_malloc,y.__wbindgen_realloc),N=M,I=D(a,y.__wbindgen_malloc,y.__wbindgen_realloc),x=M;y.calculate_out_given_in(_,w,P,O,N,I,x);var m=K()[_/4+0],o=K()[_/4+1];return ce(m,o)}finally{y.__wbindgen_add_to_stack_pointer(16),y.__wbindgen_free(m,o)}};re.exports.calculate_in_given_out=function(d,n,a){try{let _=y.__wbindgen_add_to_stack_pointer(-16),w=D(d,y.__wbindgen_malloc,y.__wbindgen_realloc),P=M,O=D(n,y.__wbindgen_malloc,y.__wbindgen_realloc),N=M,I=D(a,y.__wbindgen_malloc,y.__wbindgen_realloc),x=M;y.calculate_in_given_out(_,w,P,O,N,I,x);var m=K()[_/4+0],o=K()[_/4+1];return ce(m,o)}finally{y.__wbindgen_add_to_stack_pointer(16),y.__wbindgen_free(m,o)}};re.exports.calculate_liquidity_in=function(d,n,a){try{let _=y.__wbindgen_add_to_stack_pointer(-16),w=D(d,y.__wbindgen_malloc,y.__wbindgen_realloc),P=M,O=D(n,y.__wbindgen_malloc,y.__wbindgen_realloc),N=M,I=D(a,y.__wbindgen_malloc,y.__wbindgen_realloc),x=M;y.calculate_liquidity_in(_,w,P,O,N,I,x);var m=K()[_/4+0],o=K()[_/4+1];return ce(m,o)}finally{y.__wbindgen_add_to_stack_pointer(16),y.__wbindgen_free(m,o)}};re.exports.calculate_shares=function(d,n,a){try{let _=y.__wbindgen_add_to_stack_pointer(-16),w=D(d,y.__wbindgen_malloc,y.__wbindgen_realloc),P=M,O=D(n,y.__wbindgen_malloc,y.__wbindgen_realloc),N=M,I=D(a,y.__wbindgen_malloc,y.__wbindgen_realloc),x=M;y.calculate_shares(_,w,P,O,N,I,x);var m=K()[_/4+0],o=K()[_/4+1];return ce(m,o)}finally{y.__wbindgen_add_to_stack_pointer(16),y.__wbindgen_free(m,o)}};re.exports.calculate_liquidity_out_asset_a=function(d,n,a,m){try{let w=y.__wbindgen_add_to_stack_pointer(-16),P=D(d,y.__wbindgen_malloc,y.__wbindgen_realloc),O=M,N=D(n,y.__wbindgen_malloc,y.__wbindgen_realloc),I=M,x=D(a,y.__wbindgen_malloc,y.__wbindgen_realloc),R=M,F=D(m,y.__wbindgen_malloc,y.__wbindgen_realloc),A=M;y.calculate_liquidity_out_asset_a(w,P,O,N,I,x,R,F,A);var o=K()[w/4+0],_=K()[w/4+1];return ce(o,_)}finally{y.__wbindgen_add_to_stack_pointer(16),y.__wbindgen_free(o,_)}};re.exports.calculate_liquidity_out_asset_b=function(d,n,a,m){try{let w=y.__wbindgen_add_to_stack_pointer(-16),P=D(d,y.__wbindgen_malloc,y.__wbindgen_realloc),O=M,N=D(n,y.__wbindgen_malloc,y.__wbindgen_realloc),I=M,x=D(a,y.__wbindgen_malloc,y.__wbindgen_realloc),R=M,F=D(m,y.__wbindgen_malloc,y.__wbindgen_realloc),A=M;y.calculate_liquidity_out_asset_b(w,P,O,N,I,x,R,F,A);var o=K()[w/4+0],_=K()[w/4+1];return ce(o,_)}finally{y.__wbindgen_add_to_stack_pointer(16),y.__wbindgen_free(o,_)}};var ht=require("path").join(__dirname,"hydra_dx_wasm_bg.wasm"),wt=require("fs").readFileSync(ht),Pt=new WebAssembly.Module(wt),yt=new WebAssembly.Instance(Pt,gt);y=yt.exports;re.exports.__wasm=y});var Bt={};it(Bt,{BigNumber:()=>me,DECIMAL_PLACES:()=>Ye,INFINITY:()=>pt,ONE:()=>ft,PolkadotPoolService:()=>be,PoolFactory:()=>fe,PoolType:()=>ye,Router:()=>pe,TradeRouter:()=>Be,TradeType:()=>Ge,XykPool:()=>ae,ZERO:()=>ut,bnum:()=>U,scale:()=>se});module.exports=at(Bt);var Ee=class{constructor(n=1/0){this.capacity=n;this.storage=[]}enqueue(n){if(this.size()===this.capacity)throw Error("Queue has reached max capacity, you cannot add more items");this.storage.push(n)}dequeue(){return this.storage.shift()}size(){return this.storage.length}};var lt=4,he=class{isNotVisited(n,a){let m=!0;return a.forEach(o=>{o[0]===n&&(m=!1)}),m}findPaths(n,a,m){let o=[],_=new Ee,w=[];for(w.push([a,""]),_.enqueue(w);_.size()>0;){let P=_.dequeue();if(P==null||P.length>lt)return o;let O=P[P.length-1];(m===null||O[0]===m)&&o.push(P),n[O[0]].forEach(I=>{if(this.isNotVisited(I[0],P)){let x=[...P];x.push(I),_.enqueue(x)}})}return o}buildAndPopulateGraph(n,a){let m=[];for(let o=0;o<n.length;o++)m.push([]);for(let[o,_,w]of a){let P=parseInt(_),O=parseInt(w);m[P].push([O,o])}return m}};function Le(d){let n={};for(let a of d){let m=a.tokens.length;for(let o=0;o<m;o++){n[a.tokens[o].id]||(n[a.tokens[o].id]=[]);for(let _=0;_<m;_++){if(o==_)continue;let w=[a.address,a.tokens[o].id,a.tokens[_].id];n[a.tokens[o].id].push(w)}}}return n}var we=class{getProposals(n,a,m){let o=Le(m),_=Object.keys(o),w=_.map(I=>o[I]).flat(),P=new he,O=P.buildAndPopulateGraph(_,w),N=P.findPaths(O,parseInt(n),a?parseInt(a):null);return this.parsePaths(N)}parsePaths(n){let a=[];for(let m of n){let o=[];for(let _=0;_<m.length;_++){let w=m[_],P=m[_+1];if(P==null)break;o.push(this.toEdge(w,P))}a.push(o)}return a}toEdge(n,a){return[a[1],n[0].toString(),a[0].toString()]}};var Pe=class{constructor(n){this.api=n}getStorageKey(n,a){return n[0].toHuman()[a]}getStorageEntryArray(n){return n[1].toHuman()}async getAssetMetadata(n){return await this.api.query.assetRegistry.assetMetadataMap(n)}async getSystemAccountBalance(n){let{data:{free:a}}=await this.api.query.system.account(n);return a.toString()}async getTokenAccountBalance(n,a){let{free:m}=await this.api.query.tokens.accounts(n,a);return m.toString()}};var ye=(o=>(o.XYK="XYK",o.LBP="LBP",o.Stable="Stable",o.Omni="Omni",o))(ye||{}),Ge=(a=>(a.Buy="Buy",a.Sell="Sell",a))(Ge||{});var Ae=class extends Pe{async getPools(){let a=(await this.api.query.xyk.poolAssets.entries()).map(async m=>{let o=this.getStorageKey(m,0),_=this.getStorageEntryArray(m),w=await this.getPoolTokens(o,_);return{address:o,type:"XYK",tradeFee:this.getTradeFee(),tokens:w}});return Promise.all(a)}async getPoolTokens(n,a){let m=a.map(async o=>{let _=await this.getBalance(n,o),P=(await super.getAssetMetadata(o)).toHuman();return{id:o,balance:_,decimals:P.decimals,symbol:P.symbol}});return Promise.all(m)}getBalance(n,a){return a==="0"?this.getSystemAccountBalance(n):this.getTokenAccountBalance(n,a)}getTradeFee(){let n=this.api.consts.xyk.getExchangeFee;return(n[0].toNumber()/n[1].toNumber()*100).toString()}};var be=class{constructor(n){this.api=n}async getPools(){let n=[],a=await new Ae(this.api).getPools();return n.push(a),n.flat()}};var ct=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,He=Math.ceil,ne=Math.floor,W="[BigNumber Error] ",We=W+"Number primitive has more than 15 significant digits: ",ee=1e14,E=14,Ue=9007199254740991,Xe=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],le=1e7,H=1e9;function $e(d){var n,a,m,o=b.prototype={constructor:b,toString:null,valueOf:null},_=new b(1),w=20,P=4,O=-7,N=21,I=-1e7,x=1e7,R=!1,F=1,A=0,$={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},j="0123456789abcdefghijklmnopqrstuvwxyz",ue=!0;function b(e,t){var r,f,s,c,g,i,l,p,u=this;if(!(u instanceof b))return new b(e,t);if(t==null){if(e&&e._isBigNumber===!0){u.s=e.s,!e.c||e.e>x?u.c=u.e=null:e.e<I?u.c=[u.e=0]:(u.e=e.e,u.c=e.c.slice());return}if((i=typeof e=="number")&&e*0==0){if(u.s=1/e<0?(e=-e,-1):1,e===~~e){for(c=0,g=e;g>=10;g/=10,c++);c>x?u.c=u.e=null:(u.e=c,u.c=[e]);return}p=String(e)}else{if(!ct.test(p=String(e)))return m(u,p,i);u.s=p.charCodeAt(0)==45?(p=p.slice(1),-1):1}(c=p.indexOf("."))>-1&&(p=p.replace(".","")),(g=p.search(/e/i))>0?(c<0&&(c=g),c+=+p.slice(g+1),p=p.substring(0,g)):c<0&&(c=p.length)}else{if(C(t,2,j.length,"Base"),t==10&&ue)return u=new b(e),Y(u,w+u.e+1,P);if(p=String(e),i=typeof e=="number"){if(e*0!=0)return m(u,p,i,t);if(u.s=1/e<0?(p=p.slice(1),-1):1,b.DEBUG&&p.replace(/^0\.0*|\./,"").length>15)throw Error(We+e)}else u.s=p.charCodeAt(0)===45?(p=p.slice(1),-1):1;for(r=j.slice(0,t),c=g=0,l=p.length;g<l;g++)if(r.indexOf(f=p.charAt(g))<0){if(f=="."){if(g>c){c=l;continue}}else if(!s&&(p==p.toUpperCase()&&(p=p.toLowerCase())||p==p.toLowerCase()&&(p=p.toUpperCase()))){s=!0,g=-1,c=0;continue}return m(u,String(e),i,t)}i=!1,p=a(p,t,10,u.s),(c=p.indexOf("."))>-1?p=p.replace(".",""):c=p.length}for(g=0;p.charCodeAt(g)===48;g++);for(l=p.length;p.charCodeAt(--l)===48;);if(p=p.slice(g,++l)){if(l-=g,i&&b.DEBUG&&l>15&&(e>Ue||e!==ne(e)))throw Error(We+u.s*e);if((c=c-g-1)>x)u.c=u.e=null;else if(c<I)u.c=[u.e=0];else{if(u.e=c,u.c=[],g=(c+1)%E,c<0&&(g+=E),g<l){for(g&&u.c.push(+p.slice(0,g)),l-=E;g<l;)u.c.push(+p.slice(g,g+=E));g=E-(p=p.slice(g)).length}else g-=l;for(;g--;p+="0");u.c.push(+p)}}else u.c=[u.e=0]}b.clone=$e,b.ROUND_UP=0,b.ROUND_DOWN=1,b.ROUND_CEIL=2,b.ROUND_FLOOR=3,b.ROUND_HALF_UP=4,b.ROUND_HALF_DOWN=5,b.ROUND_HALF_EVEN=6,b.ROUND_HALF_CEIL=7,b.ROUND_HALF_FLOOR=8,b.EUCLID=9,b.config=b.set=function(e){var t,r;if(e!=null)if(typeof e=="object"){if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(r=e[t],C(r,0,H,t),w=r),e.hasOwnProperty(t="ROUNDING_MODE")&&(r=e[t],C(r,0,8,t),P=r),e.hasOwnProperty(t="EXPONENTIAL_AT")&&(r=e[t],r&&r.pop?(C(r[0],-H,0,t),C(r[1],0,H,t),O=r[0],N=r[1]):(C(r,-H,H,t),O=-(N=r<0?-r:r))),e.hasOwnProperty(t="RANGE"))if(r=e[t],r&&r.pop)C(r[0],-H,-1,t),C(r[1],1,H,t),I=r[0],x=r[1];else if(C(r,-H,H,t),r)I=-(x=r<0?-r:r);else throw Error(W+t+" cannot be zero: "+r);if(e.hasOwnProperty(t="CRYPTO"))if(r=e[t],r===!!r)if(r)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))R=r;else throw R=!r,Error(W+"crypto unavailable");else R=r;else throw Error(W+t+" not true or false: "+r);if(e.hasOwnProperty(t="MODULO_MODE")&&(r=e[t],C(r,0,9,t),F=r),e.hasOwnProperty(t="POW_PRECISION")&&(r=e[t],C(r,0,H,t),A=r),e.hasOwnProperty(t="FORMAT"))if(r=e[t],typeof r=="object")$=r;else throw Error(W+t+" not an object: "+r);if(e.hasOwnProperty(t="ALPHABET"))if(r=e[t],typeof r=="string"&&!/^.?$|[+\-.\s]|(.).*\1/.test(r))ue=r.slice(0,10)=="0123456789",j=r;else throw Error(W+t+" invalid: "+r)}else throw Error(W+"Object expected: "+e);return{DECIMAL_PLACES:w,ROUNDING_MODE:P,EXPONENTIAL_AT:[O,N],RANGE:[I,x],CRYPTO:R,MODULO_MODE:F,POW_PRECISION:A,FORMAT:$,ALPHABET:j}},b.isBigNumber=function(e){if(!e||e._isBigNumber!==!0)return!1;if(!b.DEBUG)return!0;var t,r,f=e.c,s=e.e,c=e.s;e:if({}.toString.call(f)=="[object Array]"){if((c===1||c===-1)&&s>=-H&&s<=H&&s===ne(s)){if(f[0]===0){if(s===0&&f.length===1)return!0;break e}if(t=(s+1)%E,t<1&&(t+=E),String(f[0]).length==t){for(t=0;t<f.length;t++)if(r=f[t],r<0||r>=ee||r!==ne(r))break e;if(r!==0)return!0}}}else if(f===null&&s===null&&(c===null||c===1||c===-1))return!0;throw Error(W+"Invalid BigNumber: "+e)},b.maximum=b.max=function(){return Ke(arguments,o.lt)},b.minimum=b.min=function(){return Ke(arguments,o.gt)},b.random=function(){var e=9007199254740992,t=Math.random()*e&2097151?function(){return ne(Math.random()*e)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(r){var f,s,c,g,i,l=0,p=[],u=new b(_);if(r==null?r=w:C(r,0,H),g=He(r/E),R)if(crypto.getRandomValues){for(f=crypto.getRandomValues(new Uint32Array(g*=2));l<g;)i=f[l]*131072+(f[l+1]>>>11),i>=9e15?(s=crypto.getRandomValues(new Uint32Array(2)),f[l]=s[0],f[l+1]=s[1]):(p.push(i%1e14),l+=2);l=g/2}else if(crypto.randomBytes){for(f=crypto.randomBytes(g*=7);l<g;)i=(f[l]&31)*281474976710656+f[l+1]*1099511627776+f[l+2]*4294967296+f[l+3]*16777216+(f[l+4]<<16)+(f[l+5]<<8)+f[l+6],i>=9e15?crypto.randomBytes(7).copy(f,l):(p.push(i%1e14),l+=7);l=g/7}else throw R=!1,Error(W+"crypto unavailable");if(!R)for(;l<g;)i=t(),i<9e15&&(p[l++]=i%1e14);for(g=p[--l],r%=E,g&&r&&(i=Xe[E-r],p[l]=ne(g/i)*i);p[l]===0;p.pop(),l--);if(l<0)p=[c=0];else{for(c=-1;p[0]===0;p.splice(0,1),c-=E);for(l=1,i=p[0];i>=10;i/=10,l++);l<E&&(c-=E-l)}return u.e=c,u.c=p,u}}(),b.sum=function(){for(var e=1,t=arguments,r=new b(t[0]);e<t.length;)r=r.plus(t[e++]);return r},a=function(){var e="0123456789";function t(r,f,s,c){for(var g,i=[0],l,p=0,u=r.length;p<u;){for(l=i.length;l--;i[l]*=f);for(i[0]+=c.indexOf(r.charAt(p++)),g=0;g<i.length;g++)i[g]>s-1&&(i[g+1]==null&&(i[g+1]=0),i[g+1]+=i[g]/s|0,i[g]%=s)}return i.reverse()}return function(r,f,s,c,g){var i,l,p,u,h,B,S,v,q=r.indexOf("."),G=w,k=P;for(q>=0&&(u=A,A=0,r=r.replace(".",""),v=new b(f),B=v.pow(r.length-q),A=u,v.c=t(ie(Z(B.c),B.e,"0"),10,s,e),v.e=v.c.length),S=t(r,f,s,g?(i=j,e):(i=e,j)),p=u=S.length;S[--u]==0;S.pop());if(!S[0])return i.charAt(0);if(q<0?--p:(B.c=S,B.e=p,B.s=c,B=n(B,v,G,k,s),S=B.c,h=B.r,p=B.e),l=p+G+1,q=S[l],u=s/2,h=h||l<0||S[l+1]!=null,h=k<4?(q!=null||h)&&(k==0||k==(B.s<0?3:2)):q>u||q==u&&(k==4||h||k==6&&S[l-1]&1||k==(B.s<0?8:7)),l<1||!S[0])r=h?ie(i.charAt(1),-G,i.charAt(0)):i.charAt(0);else{if(S.length=l,h)for(--s;++S[--l]>s;)S[l]=0,l||(++p,S=[1].concat(S));for(u=S.length;!S[--u];);for(q=0,r="";q<=u;r+=i.charAt(S[q++]));r=ie(r,p,i.charAt(0))}return r}}(),n=function(){function e(f,s,c){var g,i,l,p,u=0,h=f.length,B=s%le,S=s/le|0;for(f=f.slice();h--;)l=f[h]%le,p=f[h]/le|0,g=S*l+p*B,i=B*l+g%le*le+u,u=(i/c|0)+(g/le|0)+S*p,f[h]=i%c;return u&&(f=[u].concat(f)),f}function t(f,s,c,g){var i,l;if(c!=g)l=c>g?1:-1;else for(i=l=0;i<c;i++)if(f[i]!=s[i]){l=f[i]>s[i]?1:-1;break}return l}function r(f,s,c,g){for(var i=0;c--;)f[c]-=i,i=f[c]<s[c]?1:0,f[c]=i*g+f[c]-s[c];for(;!f[0]&&f.length>1;f.splice(0,1));}return function(f,s,c,g,i){var l,p,u,h,B,S,v,q,G,k,T,z,Se,Ce,qe,te,_e,Q=f.s==s.s?1:-1,V=f.c,L=s.c;if(!V||!V[0]||!L||!L[0])return new b(!f.s||!s.s||(V?L&&V[0]==L[0]:!L)?NaN:V&&V[0]==0||!L?Q*0:Q/0);for(q=new b(Q),G=q.c=[],p=f.e-s.e,Q=c+p+1,i||(i=ee,p=J(f.e/E)-J(s.e/E),Q=Q/E|0),u=0;L[u]==(V[u]||0);u++);if(L[u]>(V[u]||0)&&p--,Q<0)G.push(1),h=!0;else{for(Ce=V.length,te=L.length,u=0,Q+=2,B=ne(i/(L[0]+1)),B>1&&(L=e(L,B,i),V=e(V,B,i),te=L.length,Ce=V.length),Se=te,k=V.slice(0,te),T=k.length;T<te;k[T++]=0);_e=L.slice(),_e=[0].concat(_e),qe=L[0],L[1]>=i/2&&qe++;do{if(B=0,l=t(L,k,te,T),l<0){if(z=k[0],te!=T&&(z=z*i+(k[1]||0)),B=ne(z/qe),B>1)for(B>=i&&(B=i-1),S=e(L,B,i),v=S.length,T=k.length;t(S,k,v,T)==1;)B--,r(S,te<v?_e:L,v,i),v=S.length,l=1;else B==0&&(l=B=1),S=L.slice(),v=S.length;if(v<T&&(S=[0].concat(S)),r(k,S,T,i),T=k.length,l==-1)for(;t(L,k,te,T)<1;)B++,r(k,te<T?_e:L,T,i),T=k.length}else l===0&&(B++,k=[0]);G[u++]=B,k[0]?k[T++]=V[Se]||0:(k=[V[Se]],T=1)}while((Se++<Ce||k[0]!=null)&&Q--);h=k[0]!=null,G[0]||G.splice(0,1)}if(i==ee){for(u=1,Q=G[0];Q>=10;Q/=10,u++);Y(q,c+(q.e=u+p*E-1)+1,g,h)}else q.e=p,q.r=+h;return q}}();function De(e,t,r,f){var s,c,g,i,l;if(r==null?r=P:C(r,0,8),!e.c)return e.toString();if(s=e.c[0],g=e.e,t==null)l=Z(e.c),l=f==1||f==2&&(g<=O||g>=N)?ke(l,g):ie(l,g,"0");else if(e=Y(new b(e),t,r),c=e.e,l=Z(e.c),i=l.length,f==1||f==2&&(t<=c||c<=O)){for(;i<t;l+="0",i++);l=ke(l,c)}else if(t-=g,l=ie(l,c,"0"),c+1>i){if(--t>0)for(l+=".";t--;l+="0");}else if(t+=c-i,t>0)for(c+1==i&&(l+=".");t--;l+="0");return e.s<0&&s?"-"+l:l}function Ke(e,t){for(var r,f=1,s=new b(e[0]);f<e.length;f++)if(r=new b(e[f]),r.s)t.call(s,r)&&(s=r);else{s=r;break}return s}function Fe(e,t,r){for(var f=1,s=t.length;!t[--s];t.pop());for(s=t[0];s>=10;s/=10,f++);return(r=f+r*E-1)>x?e.c=e.e=null:r<I?e.c=[e.e=0]:(e.e=r,e.c=t),e}m=function(){var e=/^(-?)0([xbo])(?=\w[\w.]*$)/i,t=/^([^.]+)\.$/,r=/^\.([^.]+)$/,f=/^-?(Infinity|NaN)$/,s=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(c,g,i,l){var p,u=i?g:g.replace(s,"");if(f.test(u))c.s=isNaN(u)?null:u<0?-1:1;else{if(!i&&(u=u.replace(e,function(h,B,S){return p=(S=S.toLowerCase())=="x"?16:S=="b"?2:8,!l||l==p?B:h}),l&&(p=l,u=u.replace(t,"$1").replace(r,"0.$1")),g!=u))return new b(u,p);if(b.DEBUG)throw Error(W+"Not a"+(l?" base "+l:"")+" number: "+g);c.s=null}c.c=c.e=null}}();function Y(e,t,r,f){var s,c,g,i,l,p,u,h=e.c,B=Xe;if(h){e:{for(s=1,i=h[0];i>=10;i/=10,s++);if(c=t-s,c<0)c+=E,g=t,l=h[p=0],u=l/B[s-g-1]%10|0;else if(p=He((c+1)/E),p>=h.length)if(f){for(;h.length<=p;h.push(0));l=u=0,s=1,c%=E,g=c-E+1}else break e;else{for(l=i=h[p],s=1;i>=10;i/=10,s++);c%=E,g=c-E+s,u=g<0?0:l/B[s-g-1]%10|0}if(f=f||t<0||h[p+1]!=null||(g<0?l:l%B[s-g-1]),f=r<4?(u||f)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||f||r==6&&(c>0?g>0?l/B[s-g]:0:h[p-1])%10&1||r==(e.s<0?8:7)),t<1||!h[0])return h.length=0,f?(t-=e.e+1,h[0]=B[(E-t%E)%E],e.e=-t||0):h[0]=e.e=0,e;if(c==0?(h.length=p,i=1,p--):(h.length=p+1,i=B[E-c],h[p]=g>0?ne(l/B[s-g]%B[g])*i:0),f)for(;;)if(p==0){for(c=1,g=h[0];g>=10;g/=10,c++);for(g=h[0]+=i,i=1;g>=10;g/=10,i++);c!=i&&(e.e++,h[0]==ee&&(h[0]=1));break}else{if(h[p]+=i,h[p]!=ee)break;h[p--]=0,i=1}for(c=h.length;h[--c]===0;h.pop());}e.e>x?e.c=e.e=null:e.e<I&&(e.c=[e.e=0])}return e}function oe(e){var t,r=e.e;return r===null?e.toString():(t=Z(e.c),t=r<=O||r>=N?ke(t,r):ie(t,r,"0"),e.s<0?"-"+t:t)}return o.absoluteValue=o.abs=function(){var e=new b(this);return e.s<0&&(e.s=1),e},o.comparedTo=function(e,t){return ge(this,new b(e,t))},o.decimalPlaces=o.dp=function(e,t){var r,f,s,c=this;if(e!=null)return C(e,0,H),t==null?t=P:C(t,0,8),Y(new b(c),e+c.e+1,t);if(!(r=c.c))return null;if(f=((s=r.length-1)-J(this.e/E))*E,s=r[s])for(;s%10==0;s/=10,f--);return f<0&&(f=0),f},o.dividedBy=o.div=function(e,t){return n(this,new b(e,t),w,P)},o.dividedToIntegerBy=o.idiv=function(e,t){return n(this,new b(e,t),0,1)},o.exponentiatedBy=o.pow=function(e,t){var r,f,s,c,g,i,l,p,u,h=this;if(e=new b(e),e.c&&!e.isInteger())throw Error(W+"Exponent not an integer: "+oe(e));if(t!=null&&(t=new b(t)),i=e.e>14,!h.c||!h.c[0]||h.c[0]==1&&!h.e&&h.c.length==1||!e.c||!e.c[0])return u=new b(Math.pow(+oe(h),i?2-xe(e):+oe(e))),t?u.mod(t):u;if(l=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new b(NaN);f=!l&&h.isInteger()&&t.isInteger(),f&&(h=h.mod(t))}else{if(e.e>9&&(h.e>0||h.e<-1||(h.e==0?h.c[0]>1||i&&h.c[1]>=24e7:h.c[0]<8e13||i&&h.c[0]<=9999975e7)))return c=h.s<0&&xe(e)?-0:0,h.e>-1&&(c=1/c),new b(l?1/c:c);A&&(c=He(A/E+2))}for(i?(r=new b(.5),l&&(e.s=1),p=xe(e)):(s=Math.abs(+oe(e)),p=s%2),u=new b(_);;){if(p){if(u=u.times(h),!u.c)break;c?u.c.length>c&&(u.c.length=c):f&&(u=u.mod(t))}if(s){if(s=ne(s/2),s===0)break;p=s%2}else if(e=e.times(r),Y(e,e.e+1,1),e.e>14)p=xe(e);else{if(s=+oe(e),s===0)break;p=s%2}h=h.times(h),c?h.c&&h.c.length>c&&(h.c.length=c):f&&(h=h.mod(t))}return f?u:(l&&(u=_.div(u)),t?u.mod(t):c?Y(u,A,P,g):u)},o.integerValue=function(e){var t=new b(this);return e==null?e=P:C(e,0,8),Y(t,t.e+1,e)},o.isEqualTo=o.eq=function(e,t){return ge(this,new b(e,t))===0},o.isFinite=function(){return!!this.c},o.isGreaterThan=o.gt=function(e,t){return ge(this,new b(e,t))>0},o.isGreaterThanOrEqualTo=o.gte=function(e,t){return(t=ge(this,new b(e,t)))===1||t===0},o.isInteger=function(){return!!this.c&&J(this.e/E)>this.c.length-2},o.isLessThan=o.lt=function(e,t){return ge(this,new b(e,t))<0},o.isLessThanOrEqualTo=o.lte=function(e,t){return(t=ge(this,new b(e,t)))===-1||t===0},o.isNaN=function(){return!this.s},o.isNegative=function(){return this.s<0},o.isPositive=function(){return this.s>0},o.isZero=function(){return!!this.c&&this.c[0]==0},o.minus=function(e,t){var r,f,s,c,g=this,i=g.s;if(e=new b(e,t),t=e.s,!i||!t)return new b(NaN);if(i!=t)return e.s=-t,g.plus(e);var l=g.e/E,p=e.e/E,u=g.c,h=e.c;if(!l||!p){if(!u||!h)return u?(e.s=-t,e):new b(h?g:NaN);if(!u[0]||!h[0])return h[0]?(e.s=-t,e):new b(u[0]?g:P==3?-0:0)}if(l=J(l),p=J(p),u=u.slice(),i=l-p){for((c=i<0)?(i=-i,s=u):(p=l,s=h),s.reverse(),t=i;t--;s.push(0));s.reverse()}else for(f=(c=(i=u.length)<(t=h.length))?i:t,i=t=0;t<f;t++)if(u[t]!=h[t]){c=u[t]<h[t];break}if(c&&(s=u,u=h,h=s,e.s=-e.s),t=(f=h.length)-(r=u.length),t>0)for(;t--;u[r++]=0);for(t=ee-1;f>i;){if(u[--f]<h[f]){for(r=f;r&&!u[--r];u[r]=t);--u[r],u[f]+=ee}u[f]-=h[f]}for(;u[0]==0;u.splice(0,1),--p);return u[0]?Fe(e,u,p):(e.s=P==3?-1:1,e.c=[e.e=0],e)},o.modulo=o.mod=function(e,t){var r,f,s=this;return e=new b(e,t),!s.c||!e.s||e.c&&!e.c[0]?new b(NaN):!e.c||s.c&&!s.c[0]?new b(s):(F==9?(f=e.s,e.s=1,r=n(s,e,0,3),e.s=f,r.s*=f):r=n(s,e,0,F),e=s.minus(r.times(e)),!e.c[0]&&F==1&&(e.s=s.s),e)},o.multipliedBy=o.times=function(e,t){var r,f,s,c,g,i,l,p,u,h,B,S,v,q,G,k=this,T=k.c,z=(e=new b(e,t)).c;if(!T||!z||!T[0]||!z[0])return!k.s||!e.s||T&&!T[0]&&!z||z&&!z[0]&&!T?e.c=e.e=e.s=null:(e.s*=k.s,!T||!z?e.c=e.e=null:(e.c=[0],e.e=0)),e;for(f=J(k.e/E)+J(e.e/E),e.s*=k.s,l=T.length,h=z.length,l<h&&(v=T,T=z,z=v,s=l,l=h,h=s),s=l+h,v=[];s--;v.push(0));for(q=ee,G=le,s=h;--s>=0;){for(r=0,B=z[s]%G,S=z[s]/G|0,g=l,c=s+g;c>s;)p=T[--g]%G,u=T[g]/G|0,i=S*p+u*B,p=B*p+i%G*G+v[c]+r,r=(p/q|0)+(i/G|0)+S*u,v[c--]=p%q;v[c]=r}return r?++f:v.splice(0,1),Fe(e,v,f)},o.negated=function(){var e=new b(this);return e.s=-e.s||null,e},o.plus=function(e,t){var r,f=this,s=f.s;if(e=new b(e,t),t=e.s,!s||!t)return new b(NaN);if(s!=t)return e.s=-t,f.minus(e);var c=f.e/E,g=e.e/E,i=f.c,l=e.c;if(!c||!g){if(!i||!l)return new b(s/0);if(!i[0]||!l[0])return l[0]?e:new b(i[0]?f:s*0)}if(c=J(c),g=J(g),i=i.slice(),s=c-g){for(s>0?(g=c,r=l):(s=-s,r=i),r.reverse();s--;r.push(0));r.reverse()}for(s=i.length,t=l.length,s-t<0&&(r=l,l=i,i=r,t=s),s=0;t;)s=(i[--t]=i[t]+l[t]+s)/ee|0,i[t]=ee===i[t]?0:i[t]%ee;return s&&(i=[s].concat(i),++g),Fe(e,i,g)},o.precision=o.sd=function(e,t){var r,f,s,c=this;if(e!=null&&e!==!!e)return C(e,1,H),t==null?t=P:C(t,0,8),Y(new b(c),e,t);if(!(r=c.c))return null;if(s=r.length-1,f=s*E+1,s=r[s]){for(;s%10==0;s/=10,f--);for(s=r[0];s>=10;s/=10,f++);}return e&&c.e+1>f&&(f=c.e+1),f},o.shiftedBy=function(e){return C(e,-Ue,Ue),this.times("1e"+e)},o.squareRoot=o.sqrt=function(){var e,t,r,f,s,c=this,g=c.c,i=c.s,l=c.e,p=w+4,u=new b("0.5");if(i!==1||!g||!g[0])return new b(!i||i<0&&(!g||g[0])?NaN:g?c:1/0);if(i=Math.sqrt(+oe(c)),i==0||i==1/0?(t=Z(g),(t.length+l)%2==0&&(t+="0"),i=Math.sqrt(+t),l=J((l+1)/2)-(l<0||l%2),i==1/0?t="5e"+l:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+l),r=new b(t)):r=new b(i+""),r.c[0]){for(l=r.e,i=l+p,i<3&&(i=0);;)if(s=r,r=u.times(s.plus(n(c,s,p,1))),Z(s.c).slice(0,i)===(t=Z(r.c)).slice(0,i))if(r.e<l&&--i,t=t.slice(i-3,i+1),t=="9999"||!f&&t=="4999"){if(!f&&(Y(s,s.e+w+2,0),s.times(s).eq(c))){r=s;break}p+=4,i+=4,f=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(Y(r,r.e+w+2,1),e=!r.times(r).eq(c));break}}return Y(r,r.e+w+1,P,e)},o.toExponential=function(e,t){return e!=null&&(C(e,0,H),e++),De(this,e,t,1)},o.toFixed=function(e,t){return e!=null&&(C(e,0,H),e=e+this.e+1),De(this,e,t)},o.toFormat=function(e,t,r){var f,s=this;if(r==null)e!=null&&t&&typeof t=="object"?(r=t,t=null):e&&typeof e=="object"?(r=e,e=t=null):r=$;else if(typeof r!="object")throw Error(W+"Argument not an object: "+r);if(f=s.toFixed(e,t),s.c){var c,g=f.split("."),i=+r.groupSize,l=+r.secondaryGroupSize,p=r.groupSeparator||"",u=g[0],h=g[1],B=s.s<0,S=B?u.slice(1):u,v=S.length;if(l&&(c=i,i=l,l=c,v-=c),i>0&&v>0){for(c=v%i||i,u=S.substr(0,c);c<v;c+=i)u+=p+S.substr(c,i);l>0&&(u+=p+S.slice(c)),B&&(u="-"+u)}f=h?u+(r.decimalSeparator||"")+((l=+r.fractionGroupSize)?h.replace(new RegExp("\\d{"+l+"}\\B","g"),"$&"+(r.fractionGroupSeparator||"")):h):u}return(r.prefix||"")+f+(r.suffix||"")},o.toFraction=function(e){var t,r,f,s,c,g,i,l,p,u,h,B,S=this,v=S.c;if(e!=null&&(i=new b(e),!i.isInteger()&&(i.c||i.s!==1)||i.lt(_)))throw Error(W+"Argument "+(i.isInteger()?"out of range: ":"not an integer: ")+oe(i));if(!v)return new b(S);for(t=new b(_),p=r=new b(_),f=l=new b(_),B=Z(v),c=t.e=B.length-S.e-1,t.c[0]=Xe[(g=c%E)<0?E+g:g],e=!e||i.comparedTo(t)>0?c>0?t:p:i,g=x,x=1/0,i=new b(B),l.c[0]=0;u=n(i,t,0,1),s=r.plus(u.times(f)),s.comparedTo(e)!=1;)r=f,f=s,p=l.plus(u.times(s=p)),l=s,t=i.minus(u.times(s=t)),i=s;return s=n(e.minus(r),f,0,1),l=l.plus(s.times(p)),r=r.plus(s.times(f)),l.s=p.s=S.s,c=c*2,h=n(p,f,c,P).minus(S).abs().comparedTo(n(l,r,c,P).minus(S).abs())<1?[p,f]:[l,r],x=g,h},o.toNumber=function(){return+oe(this)},o.toPrecision=function(e,t){return e!=null&&C(e,1,H),De(this,e,t,2)},o.toString=function(e){var t,r=this,f=r.s,s=r.e;return s===null?f?(t="Infinity",f<0&&(t="-"+t)):t="NaN":(e==null?t=s<=O||s>=N?ke(Z(r.c),s):ie(Z(r.c),s,"0"):e===10&&ue?(r=Y(new b(r),w+s+1,P),t=ie(Z(r.c),r.e,"0")):(C(e,2,j.length,"Base"),t=a(ie(Z(r.c),s,"0"),10,e,f,!0)),f<0&&r.c[0]&&(t="-"+t)),t},o.valueOf=o.toJSON=function(){return oe(this)},o._isBigNumber=!0,o[Symbol.toStringTag]="BigNumber",o[Symbol.for("nodejs.util.inspect.custom")]=o.valueOf,d!=null&&b.set(d),b}function J(d){var n=d|0;return d>0||d===n?n:n-1}function Z(d){for(var n,a,m=1,o=d.length,_=d[0]+"";m<o;){for(n=d[m++]+"",a=E-n.length;a--;n="0"+n);_+=n}for(o=_.length;_.charCodeAt(--o)===48;);return _.slice(0,o+1||1)}function ge(d,n){var a,m,o=d.c,_=n.c,w=d.s,P=n.s,O=d.e,N=n.e;if(!w||!P)return null;if(a=o&&!o[0],m=_&&!_[0],a||m)return a?m?0:-P:w;if(w!=P)return w;if(a=w<0,m=O==N,!o||!_)return m?0:!o^a?1:-1;if(!m)return O>N^a?1:-1;for(P=(O=o.length)<(N=_.length)?O:N,w=0;w<P;w++)if(o[w]!=_[w])return o[w]>_[w]^a?1:-1;return O==N?0:O>N^a?1:-1}function C(d,n,a,m){if(d<n||d>a||d!==ne(d))throw Error(W+(m||"Argument")+(typeof d=="number"?d<n||d>a?" out of range: ":" not an integer: ":" not a primitive number: ")+String(d))}function xe(d){var n=d.c.length-1;return J(d.e/E)==n&&d.c[n]%2!=0}function ke(d,n){return(d.length>1?d.charAt(0)+"."+d.slice(1):d)+(n<0?"e":"e+")+n}function ie(d,n,a){var m,o;if(n<0){for(o=a+".";++n;o+=a);d=o+d}else if(m=d.length,++n>m){for(o=a,n-=m;--n;o+=a);d+=o}else n<m&&(d=d.slice(0,n)+"."+d.slice(n));return d}var me=$e();var Ye=12;me.config({EXPONENTIAL_AT:[-100,100],ROUNDING_MODE:1,DECIMAL_PLACES:Ye});var ut=U(0),ft=U(1),pt=U("Infinity");function se(d,n){let a=new me(n.toString()),m=new me(10).pow(a);return d.times(m)}function U(d){return new me(d.toString())}function Qe(d){return U(parseFloat(d)/100)}function ze(d,n){return d.multipliedBy(n).decimalPlaces(0,1)}function Oe(d,n,a,m){let o=d.shiftedBy(-1*n).multipliedBy(a),_=m;return o.minus(_).abs().div(o.plus(_).div(2)).multipliedBy(100).decimalPlaces(2)}function X(d,n){return d.shiftedBy(-1*n).toString()}var de=st(Je());function bt(d,n,a){return(0,de.get_spot_price)(d,n,a)}function Ot(d,n,a){return(0,de.calculate_in_given_out)(d,n,a)}function Nt(d,n,a){return(0,de.calculate_out_given_in)(d,n,a)}var Ne={getSpotPrice:bt,calculateInGivenOut:Ot,calculateOutGivenIn:Nt};var ae=class{static fromPool(n){return new ae(n.address,n.tradeFee,n.tokens)}constructor(n,a,m){this.type="XYK",this.address=n,this.tradeFee=a,this.tokens=m}validPair(n,a){return!0}parsePoolPair(n,a){let m=new Map(this.tokens.map(O=>[O.id,O])),o=m.get(n),_=m.get(a);if(o==null)throw new Error("Pool does not contain tokenIn");if(_==null)throw new Error("Pool does not contain tokenOut");let w=U(o.balance),P=U(_.balance);return{tradeFee:Qe(this.tradeFee),tokenIn:n,tokenOut:a,decimalsIn:o.decimals,decimalsOut:_.decimals,balanceIn:w,balanceOut:P}}calculateInGivenOut(n,a){let m=Ne.calculateInGivenOut(n.balanceIn.toString(),n.balanceOut.toString(),a.toString());return U(m)}getSpotPriceIn(n){let a=Ne.getSpotPrice(n.balanceOut.toString(),n.balanceIn.toString(),se(U(1),n.decimalsOut).toString());return U(a)}calculateOutGivenIn(n,a){let m=Ne.calculateOutGivenIn(n.balanceIn.toString(),n.balanceOut.toString(),a.toString());return U(m)}getSpotPriceOut(n){let a=Ne.getSpotPrice(n.balanceIn.toString(),n.balanceOut.toString(),se(U(1),n.decimalsIn).toString());return U(a)}};var fe=class{static get(n){switch(n.type){case"XYK":return ae.fromPool(n);default:throw new Error("Pool type "+n.type+" is not supported yet")}}};var pe=class{constructor(n,a){this.defaultRouterOptions={includeOnly:[]};this.poolService=n,this.routeSuggester=new we,this.routerOptions={...this.defaultRouterOptions,...a}}async getPools(){let n=await this.poolService.getPools(),a=new Set(this.routerOptions.includeOnly);return a.size===0?n:n.filter(m=>a.has(m.type))}async getAllAssets(){let n=await this.getAssets();return[...new Map(n).values()]}async getAssetPairs(n){let a=await this.getPools();if(a.length===0)throw new Error("No pools configured");let{assets:m,poolsMap:o}=await this.validateToken(n,a),w=this.getPaths(n,null,o,a).map(P=>P[P.length-1].tokenOut);return this.toPoolAssets([...new Set(w)],m)}async getAllPaths(n,a){let m=await this.getPools();if(m.length===0)throw new Error("No pools configured");let{poolsMap:o}=await this.validateTokenPair(n,a,m);return this.getPaths(n,a,o,m)}async getAssets(){let n=await this.getPools();if(n.length===0)throw new Error("No pools configured");let a=n.map(m=>m.tokens.map(({id:o,symbol:_})=>({token:o,symbol:_}))).flat();return new Map(a.map(m=>[m.token,m]))}getPaths(n,a,m,o){return this.routeSuggester.getProposals(n,a,o).filter(P=>this.validPath(P,m)).map(P=>this.toHops(P,m))}async validateTokenPair(n,a,m){let o=await this.getAssets();if(o.get(n)==null)throw new Error(n+" is not supported token");if(o.get(a)==null)throw new Error(a+" is not supported token");let _=this.getPoolMap(m);return{assets:o,poolsMap:_}}async validateToken(n,a){let m=await this.getAssets();if(m.get(n)==null)throw new Error(n+" is not supported token");let o=this.getPoolMap(a);return{assets:m,poolsMap:o}}getPoolMap(n){return new Map(n.map(a=>[a.address,fe.get(a)]))}validPath(n,a){return n.length>0&&n.map(m=>this.validEdge(m,a)).reduce((m,o)=>m&&o)}validEdge([n,a,m],o){return o.get(n)?.validPair(a,m)||!1}toHops(n,a){return n.map(([m,o,_])=>{let w=a.get(m);return{poolId:m,poolType:w?.type,tokenIn:o,tokenOut:_,tradeFeePct:w?.tradeFee}})}toPoolAssets(n,a){return n.map(m=>{let o=a.get(m);return{token:m,symbol:o?.symbol}})}};var Be=class extends pe{async getBestSell(n,a,m){let o=await super.getPools();if(o.length===0)throw new Error("No pools configured");let{poolsMap:_}=await super.validateTokenPair(n,a,o),O=super.getPaths(n,a,_,o).map(A=>this.toSellSwaps(m,A,_)).sort((A,$)=>{let j=A[A.length-1].amountOut,ue=$[$.length-1].amountOut;return j.isGreaterThan(ue)?-1:1})[0],N=O[0],I=O[O.length-1],x=O.map(A=>A.spotPrice.shiftedBy(-1*A.tokenOutDecimals)).reduce((A,$)=>A.multipliedBy($)),R=se(x,I.tokenOutDecimals).decimalPlaces(0,1),F=Oe(N.amountIn,N.tokenInDecimals,R,I.calculatedOut);return{type:"Sell",amountIn:N.amountIn,amountOut:I.amountOut,spotPrice:R,priceImpactPct:F,swaps:O,toHuman(){return{type:"Sell",amountIn:X(N.amountIn,N.tokenInDecimals),amountOut:X(I.amountOut,I.tokenOutDecimals),spotPrice:X(R,I.tokenOutDecimals),priceImpactPct:F.toString(),swaps:O.map(A=>A.toHuman())}}}}toSellSwaps(n,a,m){let o=[];for(let _=0;_<a.length;_++){let w=a[_],P=m.get(w.poolId);if(P==null)throw new Error("Pool does not exit");let O=P.parsePoolPair(w.tokenIn,w.tokenOut),N;_>0?N=o[_-1].amountOut:N=se(U(n),O.decimalsIn);let I=P.calculateOutGivenIn(O,N),x=ze(I,O.tradeFee),R=I.minus(x),F=P.getSpotPriceOut(O),A=Oe(N,O.decimalsIn,F,I);o.push({...w,tokenInDecimals:O.decimalsIn,tokenOutDecimals:O.decimalsOut,amountIn:N,calculatedOut:I,amountOut:R,tradeFee:x,spotPrice:F,priceImpactPct:A,toHuman(){return{...w,amountIn:X(N,O.decimalsIn),calculatedOut:X(I,O.decimalsOut),amountOut:X(R,O.decimalsOut),tradeFee:X(x,O.decimalsOut),spotPrice:X(F,O.decimalsOut),priceImpactPct:A.toString()}}})}return o}async getBestBuy(n,a,m){let o=await super.getPools();if(o.length===0)throw new Error("No pools configured");let{poolsMap:_}=await super.validateTokenPair(n,a,o),O=super.getPaths(n,a,_,o).map(A=>this.toBuySwaps(m,A,_)).sort((A,$)=>{let j=A[A.length-1].amountIn,ue=$[$.length-1].amountIn;return j.isGreaterThan(ue)?1:-1})[0],N=O[0],I=O[O.length-1],x=O.map(A=>A.spotPrice.shiftedBy(-1*A.tokenInDecimals)).reduce((A,$)=>A.multipliedBy($)),R=se(x,N.tokenInDecimals).decimalPlaces(0,1),F=Oe(N.amountOut,N.tokenOutDecimals,R,I.calculatedIn);return{type:"Buy",amountOut:N.amountOut,amountIn:I.amountIn,spotPrice:R,priceImpactPct:F,swaps:O,toHuman(){return{type:"Buy",amountOut:X(N.amountOut,I.tokenOutDecimals),amountIn:X(I.amountIn,N.tokenInDecimals),spotPrice:X(R,N.tokenInDecimals),priceImpactPct:F.toString(),swaps:O.map(A=>A.toHuman())}}}}toBuySwaps(n,a,m){let o=[];for(let _=a.length-1;_>=0;_--){let w=a[_],P=m.get(w.poolId);if(P==null)throw new Error("Pool does not exit");let O=P.parsePoolPair(w.tokenIn,w.tokenOut),N;_==a.length-1?N=se(U(n),O.decimalsOut):N=o[o.length-1].amountIn;let I=P.calculateInGivenOut(O,N),x=ze(I,O.tradeFee),R=I.plus(x),F=P.getSpotPriceIn(O),A=Oe(N,O.decimalsOut,F,I);o.push({...w,tokenInDecimals:O.decimalsIn,tokenOutDecimals:O.decimalsOut,amountOut:N,calculatedIn:I,amountIn:R,tradeFee:x,spotPrice:F,priceImpactPct:A,toHuman(){return{...w,amountOut:X(N,O.decimalsOut),calculatedIn:X(I,O.decimalsIn),amountIn:X(R,O.decimalsIn),tradeFee:X(x,O.decimalsIn),spotPrice:X(F,O.decimalsIn),priceImpactPct:A.toString()}}})}return o}};0&&(module.exports={BigNumber,DECIMAL_PLACES,INFINITY,ONE,PolkadotPoolService,PoolFactory,PoolType,Router,TradeRouter,TradeType,XykPool,ZERO,bnum,scale});
|
|
1
|
+
"use strict";var Pt=Object.create;var Le=Object.defineProperty;var wt=Object.getOwnPropertyDescriptor;var bt=Object.getOwnPropertyNames;var yt=Object.getPrototypeOf,Bt=Object.prototype.hasOwnProperty;var at=(p,e)=>()=>(e||p((e={exports:{}}).exports,e),e.exports),Ot=(p,e)=>{for(var o in e)Le(p,o,{get:e[o],enumerable:!0})},lt=(p,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of bt(e))!Bt.call(p,n)&&n!==o&&Le(p,n,{get:()=>e[n],enumerable:!(s=wt(e,n))||s.enumerable});return p};var ct=(p,e,o)=>(o=p!=null?Pt(yt(p)):{},lt(e||!p||!p.__esModule?Le(o,"default",{value:p,enumerable:!0}):o,p)),It=p=>lt(Le({},"__esModule",{value:!0}),p);var dt=at((En,ye)=>{var At={},I,{TextEncoder:vt,TextDecoder:Et}=require("util"),q=0,qe=null;function Xe(){return(qe===null||qe.buffer!==I.memory.buffer)&&(qe=new Uint8Array(I.memory.buffer)),qe}var ze=new vt("utf-8"),kt=typeof ze.encodeInto=="function"?function(p,e){return ze.encodeInto(p,e)}:function(p,e){let o=ze.encode(p);return e.set(o),{read:p.length,written:o.length}};function z(p,e,o){if(o===void 0){let h=ze.encode(p),w=e(h.length);return Xe().subarray(w,w+h.length).set(h),q=h.length,w}let s=p.length,n=e(s),f=Xe(),u=0;for(;u<s;u++){let h=p.charCodeAt(u);if(h>127)break;f[n+u]=h}if(u!==s){u!==0&&(p=p.slice(u)),n=o(n,s,s=u+p.length*3);let h=Xe().subarray(n+u,n+s);u+=kt(p,h).written}return q=u,n}var Ue=null;function le(){return(Ue===null||Ue.buffer!==I.memory.buffer)&&(Ue=new Int32Array(I.memory.buffer)),Ue}var mt=new Et("utf-8",{ignoreBOM:!0,fatal:!0});mt.decode();function ke(p,e){return mt.decode(Xe().subarray(p,p+e))}ye.exports.calculate_pool_trade_fee=function(p,e,o){try{let f=I.__wbindgen_add_to_stack_pointer(-16),u=z(p,I.__wbindgen_malloc,I.__wbindgen_realloc),h=q;I.calculate_pool_trade_fee(f,u,h,e,o);var s=le()[f/4+0],n=le()[f/4+1];return ke(s,n)}finally{I.__wbindgen_add_to_stack_pointer(16),I.__wbindgen_free(s,n)}};ye.exports.get_spot_price=function(p,e,o,s,n){try{let h=I.__wbindgen_add_to_stack_pointer(-16),w=z(p,I.__wbindgen_malloc,I.__wbindgen_realloc),O=q,N=z(e,I.__wbindgen_malloc,I.__wbindgen_realloc),T=q,E=z(o,I.__wbindgen_malloc,I.__wbindgen_realloc),M=q,R=z(s,I.__wbindgen_malloc,I.__wbindgen_realloc),v=q,L=z(n,I.__wbindgen_malloc,I.__wbindgen_realloc),J=q;I.get_spot_price(h,w,O,N,T,E,M,R,v,L,J);var f=le()[h/4+0],u=le()[h/4+1];return ke(f,u)}finally{I.__wbindgen_add_to_stack_pointer(16),I.__wbindgen_free(f,u)}};ye.exports.calculate_out_given_in=function(p,e,o,s,n){try{let h=I.__wbindgen_add_to_stack_pointer(-16),w=z(p,I.__wbindgen_malloc,I.__wbindgen_realloc),O=q,N=z(e,I.__wbindgen_malloc,I.__wbindgen_realloc),T=q,E=z(o,I.__wbindgen_malloc,I.__wbindgen_realloc),M=q,R=z(s,I.__wbindgen_malloc,I.__wbindgen_realloc),v=q,L=z(n,I.__wbindgen_malloc,I.__wbindgen_realloc),J=q;I.calculate_out_given_in(h,w,O,N,T,E,M,R,v,L,J);var f=le()[h/4+0],u=le()[h/4+1];return ke(f,u)}finally{I.__wbindgen_add_to_stack_pointer(16),I.__wbindgen_free(f,u)}};ye.exports.calculate_in_given_out=function(p,e,o,s,n){try{let h=I.__wbindgen_add_to_stack_pointer(-16),w=z(p,I.__wbindgen_malloc,I.__wbindgen_realloc),O=q,N=z(e,I.__wbindgen_malloc,I.__wbindgen_realloc),T=q,E=z(o,I.__wbindgen_malloc,I.__wbindgen_realloc),M=q,R=z(s,I.__wbindgen_malloc,I.__wbindgen_realloc),v=q,L=z(n,I.__wbindgen_malloc,I.__wbindgen_realloc),J=q;I.calculate_in_given_out(h,w,O,N,T,E,M,R,v,L,J);var f=le()[h/4+0],u=le()[h/4+1];return ke(f,u)}finally{I.__wbindgen_add_to_stack_pointer(16),I.__wbindgen_free(f,u)}};ye.exports.calculate_linear_weights=function(p,e,o,s,n){try{let h=I.__wbindgen_add_to_stack_pointer(-16),w=z(p,I.__wbindgen_malloc,I.__wbindgen_realloc),O=q,N=z(e,I.__wbindgen_malloc,I.__wbindgen_realloc),T=q,E=z(o,I.__wbindgen_malloc,I.__wbindgen_realloc),M=q,R=z(s,I.__wbindgen_malloc,I.__wbindgen_realloc),v=q,L=z(n,I.__wbindgen_malloc,I.__wbindgen_realloc),J=q;I.calculate_linear_weights(h,w,O,N,T,E,M,R,v,L,J);var f=le()[h/4+0],u=le()[h/4+1];return ke(f,u)}finally{I.__wbindgen_add_to_stack_pointer(16),I.__wbindgen_free(f,u)}};var Ft=require("path").join(__dirname,"hydra_dx_wasm_bg.wasm"),Mt=require("fs").readFileSync(Ft),Rt=new WebAssembly.Module(Mt),Dt=new WebAssembly.Instance(Rt,At);I=Dt.exports;ye.exports.__wasm=I});var ht=at((oo,ue)=>{var qt={},B,{TextEncoder:Ut,TextDecoder:Xt}=require("util"),H=0,Ve=null;function Ye(){return(Ve===null||Ve.buffer!==B.memory.buffer)&&(Ve=new Uint8Array(B.memory.buffer)),Ve}var Je=new Ut("utf-8"),zt=typeof Je.encodeInto=="function"?function(p,e){return Je.encodeInto(p,e)}:function(p,e){let o=Je.encode(p);return e.set(o),{read:p.length,written:o.length}};function C(p,e,o){if(o===void 0){let h=Je.encode(p),w=e(h.length);return Ye().subarray(w,w+h.length).set(h),H=h.length,w}let s=p.length,n=e(s),f=Ye(),u=0;for(;u<s;u++){let h=p.charCodeAt(u);if(h>127)break;f[n+u]=h}if(u!==s){u!==0&&(p=p.slice(u)),n=o(n,s,s=u+p.length*3);let h=Ye().subarray(n+u,n+s);u+=zt(p,h).written}return H=u,n}var $e=null;function Y(){return($e===null||$e.buffer!==B.memory.buffer)&&($e=new Int32Array(B.memory.buffer)),$e}var _t=new Xt("utf-8",{ignoreBOM:!0,fatal:!0});_t.decode();function _e(p,e){return _t.decode(Ye().subarray(p,p+e))}ue.exports.calculate_pool_trade_fee=function(p,e,o){try{let f=B.__wbindgen_add_to_stack_pointer(-16),u=C(p,B.__wbindgen_malloc,B.__wbindgen_realloc),h=H;B.calculate_pool_trade_fee(f,u,h,e,o);var s=Y()[f/4+0],n=Y()[f/4+1];return _e(s,n)}finally{B.__wbindgen_add_to_stack_pointer(16),B.__wbindgen_free(s,n)}};ue.exports.get_spot_price=function(p,e,o){try{let f=B.__wbindgen_add_to_stack_pointer(-16),u=C(p,B.__wbindgen_malloc,B.__wbindgen_realloc),h=H,w=C(e,B.__wbindgen_malloc,B.__wbindgen_realloc),O=H,N=C(o,B.__wbindgen_malloc,B.__wbindgen_realloc),T=H;B.get_spot_price(f,u,h,w,O,N,T);var s=Y()[f/4+0],n=Y()[f/4+1];return _e(s,n)}finally{B.__wbindgen_add_to_stack_pointer(16),B.__wbindgen_free(s,n)}};ue.exports.calculate_out_given_in=function(p,e,o){try{let f=B.__wbindgen_add_to_stack_pointer(-16),u=C(p,B.__wbindgen_malloc,B.__wbindgen_realloc),h=H,w=C(e,B.__wbindgen_malloc,B.__wbindgen_realloc),O=H,N=C(o,B.__wbindgen_malloc,B.__wbindgen_realloc),T=H;B.calculate_out_given_in(f,u,h,w,O,N,T);var s=Y()[f/4+0],n=Y()[f/4+1];return _e(s,n)}finally{B.__wbindgen_add_to_stack_pointer(16),B.__wbindgen_free(s,n)}};ue.exports.calculate_in_given_out=function(p,e,o){try{let f=B.__wbindgen_add_to_stack_pointer(-16),u=C(p,B.__wbindgen_malloc,B.__wbindgen_realloc),h=H,w=C(e,B.__wbindgen_malloc,B.__wbindgen_realloc),O=H,N=C(o,B.__wbindgen_malloc,B.__wbindgen_realloc),T=H;B.calculate_in_given_out(f,u,h,w,O,N,T);var s=Y()[f/4+0],n=Y()[f/4+1];return _e(s,n)}finally{B.__wbindgen_add_to_stack_pointer(16),B.__wbindgen_free(s,n)}};ue.exports.calculate_liquidity_in=function(p,e,o){try{let f=B.__wbindgen_add_to_stack_pointer(-16),u=C(p,B.__wbindgen_malloc,B.__wbindgen_realloc),h=H,w=C(e,B.__wbindgen_malloc,B.__wbindgen_realloc),O=H,N=C(o,B.__wbindgen_malloc,B.__wbindgen_realloc),T=H;B.calculate_liquidity_in(f,u,h,w,O,N,T);var s=Y()[f/4+0],n=Y()[f/4+1];return _e(s,n)}finally{B.__wbindgen_add_to_stack_pointer(16),B.__wbindgen_free(s,n)}};ue.exports.calculate_shares=function(p,e,o){try{let f=B.__wbindgen_add_to_stack_pointer(-16),u=C(p,B.__wbindgen_malloc,B.__wbindgen_realloc),h=H,w=C(e,B.__wbindgen_malloc,B.__wbindgen_realloc),O=H,N=C(o,B.__wbindgen_malloc,B.__wbindgen_realloc),T=H;B.calculate_shares(f,u,h,w,O,N,T);var s=Y()[f/4+0],n=Y()[f/4+1];return _e(s,n)}finally{B.__wbindgen_add_to_stack_pointer(16),B.__wbindgen_free(s,n)}};ue.exports.calculate_liquidity_out_asset_a=function(p,e,o,s){try{let u=B.__wbindgen_add_to_stack_pointer(-16),h=C(p,B.__wbindgen_malloc,B.__wbindgen_realloc),w=H,O=C(e,B.__wbindgen_malloc,B.__wbindgen_realloc),N=H,T=C(o,B.__wbindgen_malloc,B.__wbindgen_realloc),E=H,M=C(s,B.__wbindgen_malloc,B.__wbindgen_realloc),R=H;B.calculate_liquidity_out_asset_a(u,h,w,O,N,T,E,M,R);var n=Y()[u/4+0],f=Y()[u/4+1];return _e(n,f)}finally{B.__wbindgen_add_to_stack_pointer(16),B.__wbindgen_free(n,f)}};ue.exports.calculate_liquidity_out_asset_b=function(p,e,o,s){try{let u=B.__wbindgen_add_to_stack_pointer(-16),h=C(p,B.__wbindgen_malloc,B.__wbindgen_realloc),w=H,O=C(e,B.__wbindgen_malloc,B.__wbindgen_realloc),N=H,T=C(o,B.__wbindgen_malloc,B.__wbindgen_realloc),E=H,M=C(s,B.__wbindgen_malloc,B.__wbindgen_realloc),R=H;B.calculate_liquidity_out_asset_b(u,h,w,O,N,T,E,M,R);var n=Y()[u/4+0],f=Y()[u/4+1];return _e(n,f)}finally{B.__wbindgen_add_to_stack_pointer(16),B.__wbindgen_free(n,f)}};var Kt=require("path").join(__dirname,"hydra_dx_wasm_bg.wasm"),Vt=require("fs").readFileSync(Kt),$t=new WebAssembly.Module(Vt),Yt=new WebAssembly.Instance($t,qt);B=Yt.exports;ue.exports.__wasm=B});var en={};Ot(en,{BigNumber:()=>Ne,DECIMAL_PLACES:()=>gt,INFINITY:()=>Tt,ONE:()=>be,PolkadotApiPoolService:()=>Fe,PoolError:()=>ut,PoolFactory:()=>Be,PoolType:()=>we,Router:()=>Oe,TradeRouter:()=>Re,TradeType:()=>nt,XykPool:()=>ge,ZERO:()=>xt,bnum:()=>D,scale:()=>Z});module.exports=It(en);var Ge=class{constructor(e=1/0){this.capacity=e;this.storage=[]}enqueue(e){if(this.size()===this.capacity)throw Error("Queue has reached max capacity, you cannot add more items");this.storage.push(e)}dequeue(){return this.storage.shift()}size(){return this.storage.length}};var Nt=4,ve=class{isNotVisited(e,o){let s=!0;return o.forEach(n=>{n[0]===e&&(s=!1)}),s}findPaths(e,o,s){let n=[],f=new Ge,u=[];for(u.push([o,""]),f.enqueue(u);f.size()>0;){let h=f.dequeue();if(h==null||h.length>Nt)return n;let w=h[h.length-1];(s===null||w[0]===s)&&n.push(h),e[w[0]].forEach(N=>{if(this.isNotVisited(N[0],h)){let T=[...h];T.push(N),f.enqueue(T)}})}return n}buildAndPopulateGraph(e,o){let s=e[e.length-1],n=[];for(let f=0;f<=parseInt(s);f++)n.push([]);for(let[f,u,h]of o){let w=parseInt(u),O=parseInt(h);n[w].push([O,f])}return n}};function tt(p){let e={};for(let o of p){let s=o.tokens.length;for(let n=0;n<s;n++){e[o.tokens[n].id]||(e[o.tokens[n].id]=[]);for(let f=0;f<s;f++){if(n==f)continue;let u=[o.address,o.tokens[n].id,o.tokens[f].id];e[o.tokens[n].id].push(u)}}}return e}var Ee=class{getProposals(e,o,s){let n=tt(s),f=Object.keys(n),u=f.map(N=>n[N]).flat(),h=new ve,w=h.buildAndPopulateGraph(f,u),O=h.findPaths(w,parseInt(e),o?parseInt(o):null);return this.parsePaths(O)}parsePaths(e){let o=[];for(let s of e){let n=[];for(let f=0;f<s.length;f++){let u=s[f],h=s[f+1];if(h==null)break;n.push(this.toEdge(u,h))}o.push(n)}return o}toEdge(e,o){return[o[1],e[0].toString(),o[0].toString()]}};var Pe=class{constructor(e){this.api=e}getStorageKey(e,o){return e[0].toHuman()[o]}getStorageEntryArray(e){return e[1].toHuman()}async getPoolTokens(e,o){let s=o.map(async n=>{let f=await this.getAccountBalance(e,n),h=(await this.getAssetMetadata(n)).toHuman();return{id:n.toString(),balance:f,decimals:h.decimals,symbol:h.symbol}});return Promise.all(s)}async getAssetMetadata(e){return await this.api.query.assetRegistry.assetMetadataMap(e)}async getAccountBalance(e,o){return o==="0"?await this.getSystemAccountBalance(e):await this.getTokenAccountBalance(e,o)}async getSystemAccountBalance(e){let{data:{free:o}}=await this.api.query.system.account(e);return o.toString()}async getTokenAccountBalance(e,o){let{free:s}=await this.api.query.tokens.accounts(e,o);return s.toString()}};var we=(n=>(n.XYK="XYK",n.LBP="LBP",n.Stable="Stable",n.Omni="Omni",n))(we||{}),ut=(u=>(u.TradingLimitReached="TradingLimitReached",u.InsufficientTradingAmount="InsufficientTradingAmount",u.InsufficientBalance="InsufficientBalance",u.MaxInRatioExceeded="MaxInRatioExceeded",u.AssetAmountNotReachedLimit="AssetAmountNotReachedLimit",u.AssetAmountExceededLimit="AssetAmountExceededLimit",u))(ut||{}),nt=(o=>(o.Buy="Buy",o.Sell="Sell",o))(nt||{});var He=class extends Pe{async getPools(){let o=(await this.api.query.xyk.poolAssets.entries()).map(async s=>{let n=this.getStorageKey(s,0),f=this.getStorageEntryArray(s),u=await this.getPoolTokens(n,f);return{address:n,type:"XYK",tradeFee:this.getTradeFee(),tokens:u}});return Promise.all(o)}getTradeFee(){return this.api.consts.xyk.getExchangeFee.toJSON()}};var St=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,ot=Math.ceil,ae=Math.floor,ee="[BigNumber Error] ",pt=ee+"Number primitive has more than 15 significant digits: ",ie=1e14,A=14,rt=9007199254740991,it=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],me=1e7,V=1e9;function ft(p){var e,o,s,n=y.prototype={constructor:y,toString:null,valueOf:null},f=new y(1),u=20,h=4,w=-7,O=21,N=-1e7,T=1e7,E=!1,M=1,R=0,v={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:"\xA0",suffix:""},L="0123456789abcdefghijklmnopqrstuvwxyz",J=!0;function y(t,r){var i,d,l,g,P,a,c,_,m=this;if(!(m instanceof y))return new y(t,r);if(r==null){if(t&&t._isBigNumber===!0){m.s=t.s,!t.c||t.e>T?m.c=m.e=null:t.e<N?m.c=[m.e=0]:(m.e=t.e,m.c=t.c.slice());return}if((a=typeof t=="number")&&t*0==0){if(m.s=1/t<0?(t=-t,-1):1,t===~~t){for(g=0,P=t;P>=10;P/=10,g++);g>T?m.c=m.e=null:(m.e=g,m.c=[t]);return}_=String(t)}else{if(!St.test(_=String(t)))return s(m,_,a);m.s=_.charCodeAt(0)==45?(_=_.slice(1),-1):1}(g=_.indexOf("."))>-1&&(_=_.replace(".","")),(P=_.search(/e/i))>0?(g<0&&(g=P),g+=+_.slice(P+1),_=_.substring(0,P)):g<0&&(g=_.length)}else{if(W(r,2,L.length,"Base"),r==10&&J)return m=new y(t),te(m,u+m.e+1,h);if(_=String(t),a=typeof t=="number"){if(t*0!=0)return s(m,_,a,r);if(m.s=1/t<0?(_=_.slice(1),-1):1,y.DEBUG&&_.replace(/^0\.0*|\./,"").length>15)throw Error(pt+t)}else m.s=_.charCodeAt(0)===45?(_=_.slice(1),-1):1;for(i=L.slice(0,r),g=P=0,c=_.length;P<c;P++)if(i.indexOf(d=_.charAt(P))<0){if(d=="."){if(P>g){g=c;continue}}else if(!l&&(_==_.toUpperCase()&&(_=_.toLowerCase())||_==_.toLowerCase()&&(_=_.toUpperCase()))){l=!0,P=-1,g=0;continue}return s(m,String(t),a,r)}a=!1,_=o(_,r,10,m.s),(g=_.indexOf("."))>-1?_=_.replace(".",""):g=_.length}for(P=0;_.charCodeAt(P)===48;P++);for(c=_.length;_.charCodeAt(--c)===48;);if(_=_.slice(P,++c)){if(c-=P,a&&y.DEBUG&&c>15&&(t>rt||t!==ae(t)))throw Error(pt+m.s*t);if((g=g-P-1)>T)m.c=m.e=null;else if(g<N)m.c=[m.e=0];else{if(m.e=g,m.c=[],P=(g+1)%A,g<0&&(P+=A),P<c){for(P&&m.c.push(+_.slice(0,P)),c-=A;P<c;)m.c.push(+_.slice(P,P+=A));P=A-(_=_.slice(P)).length}else P-=c;for(;P--;_+="0");m.c.push(+_)}}else m.c=[m.e=0]}y.clone=ft,y.ROUND_UP=0,y.ROUND_DOWN=1,y.ROUND_CEIL=2,y.ROUND_FLOOR=3,y.ROUND_HALF_UP=4,y.ROUND_HALF_DOWN=5,y.ROUND_HALF_EVEN=6,y.ROUND_HALF_CEIL=7,y.ROUND_HALF_FLOOR=8,y.EUCLID=9,y.config=y.set=function(t){var r,i;if(t!=null)if(typeof t=="object"){if(t.hasOwnProperty(r="DECIMAL_PLACES")&&(i=t[r],W(i,0,V,r),u=i),t.hasOwnProperty(r="ROUNDING_MODE")&&(i=t[r],W(i,0,8,r),h=i),t.hasOwnProperty(r="EXPONENTIAL_AT")&&(i=t[r],i&&i.pop?(W(i[0],-V,0,r),W(i[1],0,V,r),w=i[0],O=i[1]):(W(i,-V,V,r),w=-(O=i<0?-i:i))),t.hasOwnProperty(r="RANGE"))if(i=t[r],i&&i.pop)W(i[0],-V,-1,r),W(i[1],1,V,r),N=i[0],T=i[1];else if(W(i,-V,V,r),i)N=-(T=i<0?-i:i);else throw Error(ee+r+" cannot be zero: "+i);if(t.hasOwnProperty(r="CRYPTO"))if(i=t[r],i===!!i)if(i)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))E=i;else throw E=!i,Error(ee+"crypto unavailable");else E=i;else throw Error(ee+r+" not true or false: "+i);if(t.hasOwnProperty(r="MODULO_MODE")&&(i=t[r],W(i,0,9,r),M=i),t.hasOwnProperty(r="POW_PRECISION")&&(i=t[r],W(i,0,V,r),R=i),t.hasOwnProperty(r="FORMAT"))if(i=t[r],typeof i=="object")v=i;else throw Error(ee+r+" not an object: "+i);if(t.hasOwnProperty(r="ALPHABET"))if(i=t[r],typeof i=="string"&&!/^.?$|[+\-.\s]|(.).*\1/.test(i))J=i.slice(0,10)=="0123456789",L=i;else throw Error(ee+r+" invalid: "+i)}else throw Error(ee+"Object expected: "+t);return{DECIMAL_PLACES:u,ROUNDING_MODE:h,EXPONENTIAL_AT:[w,O],RANGE:[N,T],CRYPTO:E,MODULO_MODE:M,POW_PRECISION:R,FORMAT:v,ALPHABET:L}},y.isBigNumber=function(t){if(!t||t._isBigNumber!==!0)return!1;if(!y.DEBUG)return!0;var r,i,d=t.c,l=t.e,g=t.s;e:if({}.toString.call(d)=="[object Array]"){if((g===1||g===-1)&&l>=-V&&l<=V&&l===ae(l)){if(d[0]===0){if(l===0&&d.length===1)return!0;break e}if(r=(l+1)%A,r<1&&(r+=A),String(d[0]).length==r){for(r=0;r<d.length;r++)if(i=d[r],i<0||i>=ie||i!==ae(i))break e;if(i!==0)return!0}}}else if(d===null&&l===null&&(g===null||g===1||g===-1))return!0;throw Error(ee+"Invalid BigNumber: "+t)},y.maximum=y.max=function(){return st(arguments,n.lt)},y.minimum=y.min=function(){return st(arguments,n.gt)},y.random=function(){var t=9007199254740992,r=Math.random()*t&2097151?function(){return ae(Math.random()*t)}:function(){return(Math.random()*1073741824|0)*8388608+(Math.random()*8388608|0)};return function(i){var d,l,g,P,a,c=0,_=[],m=new y(f);if(i==null?i=u:W(i,0,V),P=ot(i/A),E)if(crypto.getRandomValues){for(d=crypto.getRandomValues(new Uint32Array(P*=2));c<P;)a=d[c]*131072+(d[c+1]>>>11),a>=9e15?(l=crypto.getRandomValues(new Uint32Array(2)),d[c]=l[0],d[c+1]=l[1]):(_.push(a%1e14),c+=2);c=P/2}else if(crypto.randomBytes){for(d=crypto.randomBytes(P*=7);c<P;)a=(d[c]&31)*281474976710656+d[c+1]*1099511627776+d[c+2]*4294967296+d[c+3]*16777216+(d[c+4]<<16)+(d[c+5]<<8)+d[c+6],a>=9e15?crypto.randomBytes(7).copy(d,c):(_.push(a%1e14),c+=7);c=P/7}else throw E=!1,Error(ee+"crypto unavailable");if(!E)for(;c<P;)a=r(),a<9e15&&(_[c++]=a%1e14);for(P=_[--c],i%=A,P&&i&&(a=it[A-i],_[c]=ae(P/a)*a);_[c]===0;_.pop(),c--);if(c<0)_=[g=0];else{for(g=-1;_[0]===0;_.splice(0,1),g-=A);for(c=1,a=_[0];a>=10;a/=10,c++);c<A&&(g-=A-c)}return m.e=g,m.c=_,m}}(),y.sum=function(){for(var t=1,r=arguments,i=new y(r[0]);t<r.length;)i=i.plus(r[t++]);return i},o=function(){var t="0123456789";function r(i,d,l,g){for(var P,a=[0],c,_=0,m=i.length;_<m;){for(c=a.length;c--;a[c]*=d);for(a[0]+=g.indexOf(i.charAt(_++)),P=0;P<a.length;P++)a[P]>l-1&&(a[P+1]==null&&(a[P+1]=0),a[P+1]+=a[P]/l|0,a[P]%=l)}return a.reverse()}return function(i,d,l,g,P){var a,c,_,m,b,S,x,F,U=i.indexOf("."),K=u,k=h;for(U>=0&&(m=R,R=0,i=i.replace(".",""),F=new y(d),S=F.pow(i.length-U),R=m,F.c=r(fe(oe(S.c),S.e,"0"),10,l,t),F.e=F.c.length),x=r(i,d,l,P?(a=L,t):(a=t,L)),_=m=x.length;x[--m]==0;x.pop());if(!x[0])return a.charAt(0);if(U<0?--_:(S.c=x,S.e=_,S.s=g,S=e(S,F,K,k,l),x=S.c,b=S.r,_=S.e),c=_+K+1,U=x[c],m=l/2,b=b||c<0||x[c+1]!=null,b=k<4?(U!=null||b)&&(k==0||k==(S.s<0?3:2)):U>m||U==m&&(k==4||b||k==6&&x[c-1]&1||k==(S.s<0?8:7)),c<1||!x[0])i=b?fe(a.charAt(1),-K,a.charAt(0)):a.charAt(0);else{if(x.length=c,b)for(--l;++x[--c]>l;)x[c]=0,c||(++_,x=[1].concat(x));for(m=x.length;!x[--m];);for(U=0,i="";U<=m;i+=a.charAt(x[U++]));i=fe(i,_,a.charAt(0))}return i}}(),e=function(){function t(d,l,g){var P,a,c,_,m=0,b=d.length,S=l%me,x=l/me|0;for(d=d.slice();b--;)c=d[b]%me,_=d[b]/me|0,P=x*c+_*S,a=S*c+P%me*me+m,m=(a/g|0)+(P/me|0)+x*_,d[b]=a%g;return m&&(d=[m].concat(d)),d}function r(d,l,g,P){var a,c;if(g!=P)c=g>P?1:-1;else for(a=c=0;a<g;a++)if(d[a]!=l[a]){c=d[a]>l[a]?1:-1;break}return c}function i(d,l,g,P){for(var a=0;g--;)d[g]-=a,a=d[g]<l[g]?1:0,d[g]=a*P+d[g]-l[g];for(;!d[0]&&d.length>1;d.splice(0,1));}return function(d,l,g,P,a){var c,_,m,b,S,x,F,U,K,k,G,$,De,je,et,se,Ae,ne=d.s==l.s?1:-1,Q=d.c,X=l.c;if(!Q||!Q[0]||!X||!X[0])return new y(!d.s||!l.s||(Q?X&&Q[0]==X[0]:!X)?NaN:Q&&Q[0]==0||!X?ne*0:ne/0);for(U=new y(ne),K=U.c=[],_=d.e-l.e,ne=g+_+1,a||(a=ie,_=re(d.e/A)-re(l.e/A),ne=ne/A|0),m=0;X[m]==(Q[m]||0);m++);if(X[m]>(Q[m]||0)&&_--,ne<0)K.push(1),b=!0;else{for(je=Q.length,se=X.length,m=0,ne+=2,S=ae(a/(X[0]+1)),S>1&&(X=t(X,S,a),Q=t(Q,S,a),se=X.length,je=Q.length),De=se,k=Q.slice(0,se),G=k.length;G<se;k[G++]=0);Ae=X.slice(),Ae=[0].concat(Ae),et=X[0],X[1]>=a/2&&et++;do{if(S=0,c=r(X,k,se,G),c<0){if($=k[0],se!=G&&($=$*a+(k[1]||0)),S=ae($/et),S>1)for(S>=a&&(S=a-1),x=t(X,S,a),F=x.length,G=k.length;r(x,k,F,G)==1;)S--,i(x,se<F?Ae:X,F,a),F=x.length,c=1;else S==0&&(c=S=1),x=X.slice(),F=x.length;if(F<G&&(x=[0].concat(x)),i(k,x,G,a),G=k.length,c==-1)for(;r(X,k,se,G)<1;)S++,i(k,se<G?Ae:X,G,a),G=k.length}else c===0&&(S++,k=[0]);K[m++]=S,k[0]?k[G++]=Q[De]||0:(k=[Q[De]],G=1)}while((De++<je||k[0]!=null)&&ne--);b=k[0]!=null,K[0]||K.splice(0,1)}if(a==ie){for(m=1,ne=K[0];ne>=10;ne/=10,m++);te(U,g+(U.e=m+_*A-1)+1,P,b)}else U.e=_,U.r=+b;return U}}();function Qe(t,r,i,d){var l,g,P,a,c;if(i==null?i=h:W(i,0,8),!t.c)return t.toString();if(l=t.c[0],P=t.e,r==null)c=oe(t.c),c=d==1||d==2&&(P<=w||P>=O)?We(c,P):fe(c,P,"0");else if(t=te(new y(t),r,i),g=t.e,c=oe(t.c),a=c.length,d==1||d==2&&(r<=g||g<=w)){for(;a<r;c+="0",a++);c=We(c,g)}else if(r-=P,c=fe(c,g,"0"),g+1>a){if(--r>0)for(c+=".";r--;c+="0");}else if(r+=g-a,r>0)for(g+1==a&&(c+=".");r--;c+="0");return t.s<0&&l?"-"+c:c}function st(t,r){for(var i,d=1,l=new y(t[0]);d<t.length;d++)if(i=new y(t[d]),i.s)r.call(l,i)&&(l=i);else{l=i;break}return l}function Ze(t,r,i){for(var d=1,l=r.length;!r[--l];r.pop());for(l=r[0];l>=10;l/=10,d++);return(i=d+i*A-1)>T?t.c=t.e=null:i<N?t.c=[t.e=0]:(t.e=i,t.c=r),t}s=function(){var t=/^(-?)0([xbo])(?=\w[\w.]*$)/i,r=/^([^.]+)\.$/,i=/^\.([^.]+)$/,d=/^-?(Infinity|NaN)$/,l=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(g,P,a,c){var _,m=a?P:P.replace(l,"");if(d.test(m))g.s=isNaN(m)?null:m<0?-1:1;else{if(!a&&(m=m.replace(t,function(b,S,x){return _=(x=x.toLowerCase())=="x"?16:x=="b"?2:8,!c||c==_?S:b}),c&&(_=c,m=m.replace(r,"$1").replace(i,"0.$1")),P!=m))return new y(m,_);if(y.DEBUG)throw Error(ee+"Not a"+(c?" base "+c:"")+" number: "+P);g.s=null}g.c=g.e=null}}();function te(t,r,i,d){var l,g,P,a,c,_,m,b=t.c,S=it;if(b){e:{for(l=1,a=b[0];a>=10;a/=10,l++);if(g=r-l,g<0)g+=A,P=r,c=b[_=0],m=c/S[l-P-1]%10|0;else if(_=ot((g+1)/A),_>=b.length)if(d){for(;b.length<=_;b.push(0));c=m=0,l=1,g%=A,P=g-A+1}else break e;else{for(c=a=b[_],l=1;a>=10;a/=10,l++);g%=A,P=g-A+l,m=P<0?0:c/S[l-P-1]%10|0}if(d=d||r<0||b[_+1]!=null||(P<0?c:c%S[l-P-1]),d=i<4?(m||d)&&(i==0||i==(t.s<0?3:2)):m>5||m==5&&(i==4||d||i==6&&(g>0?P>0?c/S[l-P]:0:b[_-1])%10&1||i==(t.s<0?8:7)),r<1||!b[0])return b.length=0,d?(r-=t.e+1,b[0]=S[(A-r%A)%A],t.e=-r||0):b[0]=t.e=0,t;if(g==0?(b.length=_,a=1,_--):(b.length=_+1,a=S[A-g],b[_]=P>0?ae(c/S[l-P]%S[P])*a:0),d)for(;;)if(_==0){for(g=1,P=b[0];P>=10;P/=10,g++);for(P=b[0]+=a,a=1;P>=10;P/=10,a++);g!=a&&(t.e++,b[0]==ie&&(b[0]=1));break}else{if(b[_]+=a,b[_]!=ie)break;b[_--]=0,a=1}for(g=b.length;b[--g]===0;b.pop());}t.e>T?t.c=t.e=null:t.e<N&&(t.c=[t.e=0])}return t}function pe(t){var r,i=t.e;return i===null?t.toString():(r=oe(t.c),r=i<=w||i>=O?We(r,i):fe(r,i,"0"),t.s<0?"-"+r:r)}return n.absoluteValue=n.abs=function(){var t=new y(this);return t.s<0&&(t.s=1),t},n.comparedTo=function(t,r){return Ie(this,new y(t,r))},n.decimalPlaces=n.dp=function(t,r){var i,d,l,g=this;if(t!=null)return W(t,0,V),r==null?r=h:W(r,0,8),te(new y(g),t+g.e+1,r);if(!(i=g.c))return null;if(d=((l=i.length-1)-re(this.e/A))*A,l=i[l])for(;l%10==0;l/=10,d--);return d<0&&(d=0),d},n.dividedBy=n.div=function(t,r){return e(this,new y(t,r),u,h)},n.dividedToIntegerBy=n.idiv=function(t,r){return e(this,new y(t,r),0,1)},n.exponentiatedBy=n.pow=function(t,r){var i,d,l,g,P,a,c,_,m,b=this;if(t=new y(t),t.c&&!t.isInteger())throw Error(ee+"Exponent not an integer: "+pe(t));if(r!=null&&(r=new y(r)),a=t.e>14,!b.c||!b.c[0]||b.c[0]==1&&!b.e&&b.c.length==1||!t.c||!t.c[0])return m=new y(Math.pow(+pe(b),a?2-Ce(t):+pe(t))),r?m.mod(r):m;if(c=t.s<0,r){if(r.c?!r.c[0]:!r.s)return new y(NaN);d=!c&&b.isInteger()&&r.isInteger(),d&&(b=b.mod(r))}else{if(t.e>9&&(b.e>0||b.e<-1||(b.e==0?b.c[0]>1||a&&b.c[1]>=24e7:b.c[0]<8e13||a&&b.c[0]<=9999975e7)))return g=b.s<0&&Ce(t)?-0:0,b.e>-1&&(g=1/g),new y(c?1/g:g);R&&(g=ot(R/A+2))}for(a?(i=new y(.5),c&&(t.s=1),_=Ce(t)):(l=Math.abs(+pe(t)),_=l%2),m=new y(f);;){if(_){if(m=m.times(b),!m.c)break;g?m.c.length>g&&(m.c.length=g):d&&(m=m.mod(r))}if(l){if(l=ae(l/2),l===0)break;_=l%2}else if(t=t.times(i),te(t,t.e+1,1),t.e>14)_=Ce(t);else{if(l=+pe(t),l===0)break;_=l%2}b=b.times(b),g?b.c&&b.c.length>g&&(b.c.length=g):d&&(b=b.mod(r))}return d?m:(c&&(m=f.div(m)),r?m.mod(r):g?te(m,R,h,P):m)},n.integerValue=function(t){var r=new y(this);return t==null?t=h:W(t,0,8),te(r,r.e+1,t)},n.isEqualTo=n.eq=function(t,r){return Ie(this,new y(t,r))===0},n.isFinite=function(){return!!this.c},n.isGreaterThan=n.gt=function(t,r){return Ie(this,new y(t,r))>0},n.isGreaterThanOrEqualTo=n.gte=function(t,r){return(r=Ie(this,new y(t,r)))===1||r===0},n.isInteger=function(){return!!this.c&&re(this.e/A)>this.c.length-2},n.isLessThan=n.lt=function(t,r){return Ie(this,new y(t,r))<0},n.isLessThanOrEqualTo=n.lte=function(t,r){return(r=Ie(this,new y(t,r)))===-1||r===0},n.isNaN=function(){return!this.s},n.isNegative=function(){return this.s<0},n.isPositive=function(){return this.s>0},n.isZero=function(){return!!this.c&&this.c[0]==0},n.minus=function(t,r){var i,d,l,g,P=this,a=P.s;if(t=new y(t,r),r=t.s,!a||!r)return new y(NaN);if(a!=r)return t.s=-r,P.plus(t);var c=P.e/A,_=t.e/A,m=P.c,b=t.c;if(!c||!_){if(!m||!b)return m?(t.s=-r,t):new y(b?P:NaN);if(!m[0]||!b[0])return b[0]?(t.s=-r,t):new y(m[0]?P:h==3?-0:0)}if(c=re(c),_=re(_),m=m.slice(),a=c-_){for((g=a<0)?(a=-a,l=m):(_=c,l=b),l.reverse(),r=a;r--;l.push(0));l.reverse()}else for(d=(g=(a=m.length)<(r=b.length))?a:r,a=r=0;r<d;r++)if(m[r]!=b[r]){g=m[r]<b[r];break}if(g&&(l=m,m=b,b=l,t.s=-t.s),r=(d=b.length)-(i=m.length),r>0)for(;r--;m[i++]=0);for(r=ie-1;d>a;){if(m[--d]<b[d]){for(i=d;i&&!m[--i];m[i]=r);--m[i],m[d]+=ie}m[d]-=b[d]}for(;m[0]==0;m.splice(0,1),--_);return m[0]?Ze(t,m,_):(t.s=h==3?-1:1,t.c=[t.e=0],t)},n.modulo=n.mod=function(t,r){var i,d,l=this;return t=new y(t,r),!l.c||!t.s||t.c&&!t.c[0]?new y(NaN):!t.c||l.c&&!l.c[0]?new y(l):(M==9?(d=t.s,t.s=1,i=e(l,t,0,3),t.s=d,i.s*=d):i=e(l,t,0,M),t=l.minus(i.times(t)),!t.c[0]&&M==1&&(t.s=l.s),t)},n.multipliedBy=n.times=function(t,r){var i,d,l,g,P,a,c,_,m,b,S,x,F,U,K,k=this,G=k.c,$=(t=new y(t,r)).c;if(!G||!$||!G[0]||!$[0])return!k.s||!t.s||G&&!G[0]&&!$||$&&!$[0]&&!G?t.c=t.e=t.s=null:(t.s*=k.s,!G||!$?t.c=t.e=null:(t.c=[0],t.e=0)),t;for(d=re(k.e/A)+re(t.e/A),t.s*=k.s,c=G.length,b=$.length,c<b&&(F=G,G=$,$=F,l=c,c=b,b=l),l=c+b,F=[];l--;F.push(0));for(U=ie,K=me,l=b;--l>=0;){for(i=0,S=$[l]%K,x=$[l]/K|0,P=c,g=l+P;g>l;)_=G[--P]%K,m=G[P]/K|0,a=x*_+m*S,_=S*_+a%K*K+F[g]+i,i=(_/U|0)+(a/K|0)+x*m,F[g--]=_%U;F[g]=i}return i?++d:F.splice(0,1),Ze(t,F,d)},n.negated=function(){var t=new y(this);return t.s=-t.s||null,t},n.plus=function(t,r){var i,d=this,l=d.s;if(t=new y(t,r),r=t.s,!l||!r)return new y(NaN);if(l!=r)return t.s=-r,d.minus(t);var g=d.e/A,P=t.e/A,a=d.c,c=t.c;if(!g||!P){if(!a||!c)return new y(l/0);if(!a[0]||!c[0])return c[0]?t:new y(a[0]?d:l*0)}if(g=re(g),P=re(P),a=a.slice(),l=g-P){for(l>0?(P=g,i=c):(l=-l,i=a),i.reverse();l--;i.push(0));i.reverse()}for(l=a.length,r=c.length,l-r<0&&(i=c,c=a,a=i,r=l),l=0;r;)l=(a[--r]=a[r]+c[r]+l)/ie|0,a[r]=ie===a[r]?0:a[r]%ie;return l&&(a=[l].concat(a),++P),Ze(t,a,P)},n.precision=n.sd=function(t,r){var i,d,l,g=this;if(t!=null&&t!==!!t)return W(t,1,V),r==null?r=h:W(r,0,8),te(new y(g),t,r);if(!(i=g.c))return null;if(l=i.length-1,d=l*A+1,l=i[l]){for(;l%10==0;l/=10,d--);for(l=i[0];l>=10;l/=10,d++);}return t&&g.e+1>d&&(d=g.e+1),d},n.shiftedBy=function(t){return W(t,-rt,rt),this.times("1e"+t)},n.squareRoot=n.sqrt=function(){var t,r,i,d,l,g=this,P=g.c,a=g.s,c=g.e,_=u+4,m=new y("0.5");if(a!==1||!P||!P[0])return new y(!a||a<0&&(!P||P[0])?NaN:P?g:1/0);if(a=Math.sqrt(+pe(g)),a==0||a==1/0?(r=oe(P),(r.length+c)%2==0&&(r+="0"),a=Math.sqrt(+r),c=re((c+1)/2)-(c<0||c%2),a==1/0?r="5e"+c:(r=a.toExponential(),r=r.slice(0,r.indexOf("e")+1)+c),i=new y(r)):i=new y(a+""),i.c[0]){for(c=i.e,a=c+_,a<3&&(a=0);;)if(l=i,i=m.times(l.plus(e(g,l,_,1))),oe(l.c).slice(0,a)===(r=oe(i.c)).slice(0,a))if(i.e<c&&--a,r=r.slice(a-3,a+1),r=="9999"||!d&&r=="4999"){if(!d&&(te(l,l.e+u+2,0),l.times(l).eq(g))){i=l;break}_+=4,a+=4,d=1}else{(!+r||!+r.slice(1)&&r.charAt(0)=="5")&&(te(i,i.e+u+2,1),t=!i.times(i).eq(g));break}}return te(i,i.e+u+1,h,t)},n.toExponential=function(t,r){return t!=null&&(W(t,0,V),t++),Qe(this,t,r,1)},n.toFixed=function(t,r){return t!=null&&(W(t,0,V),t=t+this.e+1),Qe(this,t,r)},n.toFormat=function(t,r,i){var d,l=this;if(i==null)t!=null&&r&&typeof r=="object"?(i=r,r=null):t&&typeof t=="object"?(i=t,t=r=null):i=v;else if(typeof i!="object")throw Error(ee+"Argument not an object: "+i);if(d=l.toFixed(t,r),l.c){var g,P=d.split("."),a=+i.groupSize,c=+i.secondaryGroupSize,_=i.groupSeparator||"",m=P[0],b=P[1],S=l.s<0,x=S?m.slice(1):m,F=x.length;if(c&&(g=a,a=c,c=g,F-=g),a>0&&F>0){for(g=F%a||a,m=x.substr(0,g);g<F;g+=a)m+=_+x.substr(g,a);c>0&&(m+=_+x.slice(g)),S&&(m="-"+m)}d=b?m+(i.decimalSeparator||"")+((c=+i.fractionGroupSize)?b.replace(new RegExp("\\d{"+c+"}\\B","g"),"$&"+(i.fractionGroupSeparator||"")):b):m}return(i.prefix||"")+d+(i.suffix||"")},n.toFraction=function(t){var r,i,d,l,g,P,a,c,_,m,b,S,x=this,F=x.c;if(t!=null&&(a=new y(t),!a.isInteger()&&(a.c||a.s!==1)||a.lt(f)))throw Error(ee+"Argument "+(a.isInteger()?"out of range: ":"not an integer: ")+pe(a));if(!F)return new y(x);for(r=new y(f),_=i=new y(f),d=c=new y(f),S=oe(F),g=r.e=S.length-x.e-1,r.c[0]=it[(P=g%A)<0?A+P:P],t=!t||a.comparedTo(r)>0?g>0?r:_:a,P=T,T=1/0,a=new y(S),c.c[0]=0;m=e(a,r,0,1),l=i.plus(m.times(d)),l.comparedTo(t)!=1;)i=d,d=l,_=c.plus(m.times(l=_)),c=l,r=a.minus(m.times(l=r)),a=l;return l=e(t.minus(i),d,0,1),c=c.plus(l.times(_)),i=i.plus(l.times(d)),c.s=_.s=x.s,g=g*2,b=e(_,d,g,h).minus(x).abs().comparedTo(e(c,i,g,h).minus(x).abs())<1?[_,d]:[c,i],T=P,b},n.toNumber=function(){return+pe(this)},n.toPrecision=function(t,r){return t!=null&&W(t,1,V),Qe(this,t,r,2)},n.toString=function(t){var r,i=this,d=i.s,l=i.e;return l===null?d?(r="Infinity",d<0&&(r="-"+r)):r="NaN":(t==null?r=l<=w||l>=O?We(oe(i.c),l):fe(oe(i.c),l,"0"):t===10&&J?(i=te(new y(i),u+l+1,h),r=fe(oe(i.c),i.e,"0")):(W(t,2,L.length,"Base"),r=o(fe(oe(i.c),l,"0"),10,t,d,!0)),d<0&&i.c[0]&&(r="-"+r)),r},n.valueOf=n.toJSON=function(){return pe(this)},n._isBigNumber=!0,n[Symbol.toStringTag]="BigNumber",n[Symbol.for("nodejs.util.inspect.custom")]=n.valueOf,p!=null&&y.set(p),y}function re(p){var e=p|0;return p>0||p===e?e:e-1}function oe(p){for(var e,o,s=1,n=p.length,f=p[0]+"";s<n;){for(e=p[s++]+"",o=A-e.length;o--;e="0"+e);f+=e}for(n=f.length;f.charCodeAt(--n)===48;);return f.slice(0,n+1||1)}function Ie(p,e){var o,s,n=p.c,f=e.c,u=p.s,h=e.s,w=p.e,O=e.e;if(!u||!h)return null;if(o=n&&!n[0],s=f&&!f[0],o||s)return o?s?0:-h:u;if(u!=h)return u;if(o=u<0,s=w==O,!n||!f)return s?0:!n^o?1:-1;if(!s)return w>O^o?1:-1;for(h=(w=n.length)<(O=f.length)?w:O,u=0;u<h;u++)if(n[u]!=f[u])return n[u]>f[u]^o?1:-1;return w==O?0:w>O^o?1:-1}function W(p,e,o,s){if(p<e||p>o||p!==ae(p))throw Error(ee+(s||"Argument")+(typeof p=="number"?p<e||p>o?" out of range: ":" not an integer: ":" not a primitive number: ")+String(p))}function Ce(p){var e=p.c.length-1;return re(p.e/A)==e&&p.c[e]%2!=0}function We(p,e){return(p.length>1?p.charAt(0)+"."+p.slice(1):p)+(e<0?"e":"e+")+e}function fe(p,e,o){var s,n;if(e<0){for(n=o+".";++e;n+=o);p=n+p}else if(s=p.length,++e>s){for(n=o,e-=s;--e;n+=o);p+=n}else e<s&&(p=p.slice(0,e)+"."+p.slice(e));return p}var Ne=ft();var gt=12;Ne.config({EXPONENTIAL_AT:[-100,100],ROUNDING_MODE:1,DECIMAL_PLACES:gt});var xt=D(0),be=D(1),Tt=D("Infinity");function Z(p,e){let o=new Ne(e.toString()),s=new Ne(10).pow(o);return p.times(s)}function D(p){return new Ne(p.toString())}var ce=ct(dt());function Lt(p,e,o,s,n){return(0,ce.get_spot_price)(p,e,o,s,n)}function Gt(p,e,o,s,n){return(0,ce.calculate_in_given_out)(p,e,o,s,n)}function Ht(p,e,o,s,n){return(0,ce.calculate_out_given_in)(p,e,o,s,n)}function Ct(p,e,o,s,n){return(0,ce.calculate_linear_weights)(p,e,o,s,n)}function Wt(p,e,o){return(0,ce.calculate_pool_trade_fee)(p,e,o)}var de={getSpotPrice:Lt,calculateInGivenOut:Gt,calculateOutGivenIn:Ht,calculateLinearWeights:Ct,calculatePoolTradeFee:Wt};var Ke=class extends Pe{constructor(){super(...arguments);this.MAX_FINAL_WEIGHT=Z(D(100),6)}async getPools(){let s=(await this.api.query.lbp.poolData.entries()).map(async n=>{let f=this.getStorageKey(n,0),u=n[1].toJSON(),h=await this.getPoolTokens(f,u.assets),w=await this.getLinearWeight(u),O=D(w),N=this.MAX_FINAL_WEIGHT.minus(D(O)),T=h[0].id;return{address:f,type:"LBP",tradeFee:u.fee,repayFee:this.getRepayFee(),repayFeeApply:await this.isRepayFeeApplied(T,u),tokens:[{...h[0],weight:O},{...h[1],weight:N}]}});return Promise.all(s)}async getLinearWeight(o){let n=(await this.api.query.parachainSystem.validationData()).toJSON();return de.calculateLinearWeights(o.start.toString(),o.end.toString(),o.initialWeight.toString(),o.finalWeight.toString(),n.relayParentNumber.toString())}getRepayFee(){return this.api.consts.lbp.repayFee.toJSON()}async isRepayFeeApplied(o,s){let n=D(s.repayTarget);try{let f=await this.getAccountBalance(o,s.feeCollector);return D(f).isLessThan(n)}catch{return!0}}};var Fe=class{constructor(e){this.api=e}async getPools(){let e=[],o=await new He(this.api).getPools(),s=await new Ke(this.api).getPools();return e.push(o),e.push(s),e.flat()}buildBuyTx(e,o,s,n,f){let u=this.api.tx.router.buy(e,o,s.toFixed(),n.toFixed(),f),h=()=>u;return{hex:u.toHex(),name:"RouterBuy",get:h}}buildSellTx(e,o,s,n,f){let u=this.api.tx.router.sell(e,o,s.toFixed(),n.toFixed(),f),h=()=>u;return{hex:u.toHex(),name:"RouterSell",get:h}}};function j(p,e){return p.shiftedBy(-1*e).toString()}function Se(p){return p[0]/p[1]*100}var xe=class{static fromPool(e){if(!e.repayFee)throw new Error("LBP Pool missing repayFee");if(!e.repayFeeApply)throw new Error("LBP Pool missing repayFeeApply");return new xe(e.address,e.tradeFee,e.tokens,e.repayFee,e.repayFeeApply)}constructor(e,o,s,n,f){this.type="LBP",this.address=e,this.tradeFee=o,this.tokens=s,this.repayFee=n,this.repayFeeApply=f}validPair(e,o){return!0}parsePoolPair(e,o){let s=new Map(this.tokens.map(w=>[w.id,w])),n=s.get(e),f=s.get(o);if(n==null)throw new Error("Pool does not contain tokenIn");if(f==null)throw new Error("Pool does not contain tokenOut");let u=D(n.balance),h=D(f.balance);return{assetIn:e,assetOut:o,decimalsIn:n.decimals,decimalsOut:f.decimals,weightIn:n.weight,weightOut:f.weight,balanceIn:u,balanceOut:h}}validateBuy(e,o){if(this.tokens[0].id===e.assetOut){let n=this.calculateTradeFee(o),f=o.plus(n),u=this.calculateInGivenOut(e,f),h=Se(this.repayFeeApply?this.repayFee:this.tradeFee);return{amountIn:u,calculatedIn:u,amountOut:o,feePct:h}}else{let n=this.calculateInGivenOut(e,o);return{amountIn:n,calculatedIn:n,amountOut:o,feePct:0}}}validateSell(e,o){if(this.tokens[0].id===e.assetIn){let n=this.calculateOutGivenIn(e,o);return{amountIn:o,calculatedOut:n,amountOut:n,feePct:0}}else{let n=this.calculateOutGivenIn(e,o),f=this.calculateTradeFee(n),u=n.minus(f),h=Se(this.repayFeeApply?this.repayFee:this.tradeFee);return{amountIn:o,calculatedOut:n,amountOut:u,feePct:h}}}calculateInGivenOut(e,o){let s=de.calculateInGivenOut(e.balanceIn.toString(),e.balanceOut.toString(),e.weightIn.toString(),e.weightOut.toString(),o.toString());return D(s)}calculateOutGivenIn(e,o){let s=de.calculateOutGivenIn(e.balanceIn.toString(),e.balanceOut.toString(),e.weightIn.toString(),e.weightOut.toString(),o.toString());return D(s)}spotPriceInGivenOut(e){let o=de.getSpotPrice(e.balanceOut.toString(),e.balanceIn.toString(),e.weightOut.toString(),e.weightIn.toString(),Z(be,e.decimalsIn).toString());return D(o)}spotPriceOutGivenIn(e){let o=de.getSpotPrice(e.balanceIn.toString(),e.balanceOut.toString(),e.weightIn.toString(),e.weightOut.toString(),Z(be,e.decimalsIn).toString());return D(o)}calculateTradeFee(e){let o=de.calculatePoolTradeFee(e.toString(),this.repayFeeApply?this.repayFee[0]:this.tradeFee[0],this.repayFeeApply?this.repayFee[1]:this.tradeFee[1]);return D(o)}};var he=ct(ht());function Jt(p,e,o){return(0,he.get_spot_price)(p,e,o)}function Qt(p,e,o){return(0,he.calculate_in_given_out)(p,e,o)}function Zt(p,e,o){return(0,he.calculate_out_given_in)(p,e,o)}function jt(p,e,o){return(0,he.calculate_pool_trade_fee)(p,e,o)}var Te={getSpotPrice:Jt,calculateInGivenOut:Qt,calculateOutGivenIn:Zt,calculatePoolTradeFee:jt};var ge=class{static fromPool(e){return new ge(e.address,e.tradeFee,e.tokens)}constructor(e,o,s){this.type="XYK",this.address=e,this.tradeFee=o,this.tokens=s}validPair(e,o){return!0}parsePoolPair(e,o){let s=new Map(this.tokens.map(w=>[w.id,w])),n=s.get(e),f=s.get(o);if(n==null)throw new Error("Pool does not contain tokenIn");if(f==null)throw new Error("Pool does not contain tokenOut");let u=D(n.balance),h=D(f.balance);return{assetIn:e,assetOut:o,decimalsIn:n.decimals,decimalsOut:f.decimals,balanceIn:u,balanceOut:h}}validateBuy(e,o){let s=this.calculateInGivenOut(e,o),n=this.calculateTradeFee(s),f=s.plus(n),u=Se(this.tradeFee);return{amountIn:f,calculatedIn:s,amountOut:o,feePct:u}}validateSell(e,o){let s=this.calculateOutGivenIn(e,o),n=this.calculateTradeFee(s),f=s.minus(n),u=Se(this.tradeFee);return{amountIn:o,calculatedOut:s,amountOut:f,feePct:u}}calculateInGivenOut(e,o){let s=Te.calculateInGivenOut(e.balanceIn.toString(),e.balanceOut.toString(),o.toString());return D(s)}calculateOutGivenIn(e,o){let s=Te.calculateOutGivenIn(e.balanceIn.toString(),e.balanceOut.toString(),o.toString());return D(s)}spotPriceInGivenOut(e){let o=Te.getSpotPrice(e.balanceOut.toString(),e.balanceIn.toString(),Z(be,e.decimalsOut).toString());return D(o)}spotPriceOutGivenIn(e){let o=Te.getSpotPrice(e.balanceIn.toString(),e.balanceOut.toString(),Z(be,e.decimalsIn).toString());return D(o)}calculateTradeFee(e){let o=Te.calculatePoolTradeFee(e.toString(),this.tradeFee[0],this.tradeFee[1]);return D(o)}};var Be=class{static get(e){switch(e.type){case"XYK":return ge.fromPool(e);case"LBP":return xe.fromPool(e);default:throw new Error("Pool type "+e.type+" is not supported yet")}}};var Oe=class{constructor(e,o){this.defaultRouterOptions={includeOnly:[]};this.poolService=e,this.routeSuggester=new Ee,this.routerOptions={...this.defaultRouterOptions,...o}}async getPools(){let e=await this.poolService.getPools(),o=new Set(this.routerOptions.includeOnly);return o.size===0?e:e.filter(s=>o.has(s.type))}async getAllAssets(){let e=await this.getPools();if(e.length===0)throw new Error("No pools configured");let o=await this.getAssets(e);return[...new Map(o).values()]}async getAssetPairs(e){let o=await this.getPools();if(o.length===0)throw new Error("No pools configured");let{assets:s,poolsMap:n}=await this.validateToken(e,o),u=this.getPaths(e,null,n,o).map(h=>h[h.length-1].assetOut);return this.toPoolAssets([...new Set(u)],s)}async getAllPaths(e,o){let s=await this.getPools();if(s.length===0)throw new Error("No pools configured");let{poolsMap:n}=await this.validateTokenPair(e,o,s);return this.getPaths(e,o,n,s)}async getAssets(e){let o=e.map(s=>s.tokens.map(({id:n,symbol:f})=>({id:n,symbol:f}))).flat();return new Map(o.map(s=>[s.id,s]))}getPaths(e,o,s,n){return this.routeSuggester.getProposals(e,o,n).filter(h=>this.validPath(h,s)).map(h=>this.toHops(h,s))}async validateTokenPair(e,o,s){let n=await this.getAssets(s);if(n.get(e)==null)throw new Error(e+" is not supported token");if(n.get(o)==null)throw new Error(o+" is not supported token");let f=this.getPoolMap(s);return{assets:n,poolsMap:f}}async validateToken(e,o){let s=await this.getAssets(o);if(s.get(e)==null)throw new Error(e+" is not supported token");let n=this.getPoolMap(o);return{assets:s,poolsMap:n}}getPoolMap(e){return new Map(e.map(o=>[o.address,Be.get(o)]))}validPath(e,o){return e.length>0&&e.map(s=>this.validEdge(s,o)).reduce((s,n)=>s&&n)}validEdge([e,o,s],n){return n.get(e)?.validPair(o,s)||!1}toHops(e,o){return e.map(([s,n,f])=>{let u=o.get(s);return{poolId:s,poolType:u?.type,assetIn:n,assetOut:f}})}toPoolAssets(e,o){return e.map(s=>{let n=o.get(s);return{id:s,symbol:n?.symbol}})}};function Me(p,e,o,s){let n=p.shiftedBy(-1*e).multipliedBy(o),f=s;return n.minus(f).abs().div(n.plus(f).div(2)).multipliedBy(100).decimalPlaces(2)}var Re=class extends Oe{async getBestSpotPrice(e,o){let s=await super.getPools();if(s.length===0)throw new Error("No pools configured");let{poolsMap:n}=await super.validateTokenPair(e,o,s);return super.getPaths(e,o,n,s).map(h=>this.getSpotPrice(h,n)).sort((h,w)=>{let O=h.amount,N=w.amount;return O.isGreaterThan(N)?-1:1})[0]}getSpotPrice(e,o){let s=[];for(let u=0;u<e.length;u++){let h=e[u],w=o.get(h.poolId);if(w==null)throw new Error("Pool does not exit");let O=w.parsePoolPair(h.assetIn,h.assetOut),N=w.spotPriceOutGivenIn(O);s.push({amount:N,decimals:O.decimalsOut})}let n=s.map(u=>u.amount.shiftedBy(-1*u.decimals)).reduce((u,h)=>u.multipliedBy(h)),f=s[s.length-1].decimals;return{amount:Z(n,f).decimalPlaces(0,1),decimals:f}}async getBestSell(e,o,s){let n=await super.getPools();if(n.length===0)throw new Error("No pools configured");let{poolsMap:f}=await super.validateTokenPair(e,o,n),w=super.getPaths(e,o,f,n).map(v=>this.toSellSwaps(s,v,f)).sort((v,L)=>{let J=v[v.length-1].amountOut,y=L[L.length-1].amountOut;return J.isGreaterThan(y)?-1:1})[0],O=w[0],N=w[w.length-1],T=w.map(v=>v.spotPrice.shiftedBy(-1*v.assetOutDecimals)).reduce((v,L)=>v.multipliedBy(L)),E=Z(T,N.assetOutDecimals).decimalPlaces(0,1),M=Me(O.amountIn,O.assetInDecimals,E,N.calculatedOut),R=v=>this.poolService.buildSellTx(e,o,O.amountIn,v,w.map(L=>L));return{type:"Sell",amountIn:O.amountIn,amountOut:N.amountOut,spotPrice:E,priceImpactPct:M.toNumber(),swaps:w,toTx:R,toHuman(){return{type:"Sell",amountIn:j(O.amountIn,O.assetInDecimals),amountOut:j(N.amountOut,N.assetOutDecimals),spotPrice:j(E,N.assetOutDecimals),priceImpactPct:M.toNumber(),swaps:w.map(v=>v.toHuman())}}}}toSellSwaps(e,o,s){let n=[];for(let f=0;f<o.length;f++){let u=o[f],h=s.get(u.poolId);if(h==null)throw new Error("Pool does not exit");let w=h.parsePoolPair(u.assetIn,u.assetOut),O;f>0?O=n[f-1].amountOut:O=Z(D(e),w.decimalsIn);let{amountOut:N,calculatedOut:T,feePct:E}=h.validateSell(w,O),M=h.spotPriceOutGivenIn(w),R=Me(O,w.decimalsIn,M,T);n.push({...u,assetInDecimals:w.decimalsIn,assetOutDecimals:w.decimalsOut,amountIn:O,calculatedOut:T,amountOut:N,spotPrice:M,tradeFeePct:E,priceImpactPct:R.toNumber(),toHuman(){return{...u,amountIn:j(O,w.decimalsIn),calculatedOut:j(T,w.decimalsOut),amountOut:j(N,w.decimalsOut),spotPrice:j(M,w.decimalsOut),tradeFeePct:E,priceImpactPct:R.toNumber()}}})}return n}async getBestBuy(e,o,s){let n=await super.getPools();if(n.length===0)throw new Error("No pools configured");let{poolsMap:f}=await super.validateTokenPair(e,o,n),w=super.getPaths(e,o,f,n).map(v=>this.toBuySwaps(s,v,f)).sort((v,L)=>{let J=v[0].amountIn,y=L[0].amountIn;return J.isGreaterThan(y)?1:-1})[0],O=w[w.length-1],N=w[0],T=w.map(v=>v.spotPrice.shiftedBy(-1*v.assetInDecimals)).reduce((v,L)=>v.multipliedBy(L)),E=Z(T,N.assetInDecimals).decimalPlaces(0,1),M=Me(O.amountOut,O.assetOutDecimals,E,N.calculatedIn),R=v=>this.poolService.buildBuyTx(e,o,O.amountOut,v,w.map(L=>L));return{type:"Buy",amountOut:O.amountOut,amountIn:N.amountIn,spotPrice:E,priceImpactPct:M.toNumber(),swaps:w,toTx:R,toHuman(){return{type:"Buy",amountOut:j(O.amountOut,O.assetOutDecimals),amountIn:j(N.amountIn,N.assetInDecimals),spotPrice:j(E,N.assetInDecimals),priceImpactPct:M.toNumber(),swaps:w.map(v=>v.toHuman())}}}}toBuySwaps(e,o,s){let n=[];for(let f=o.length-1;f>=0;f--){let u=o[f],h=s.get(u.poolId);if(h==null)throw new Error("Pool does not exit");let w=h.parsePoolPair(u.assetIn,u.assetOut),O;f==o.length-1?O=Z(D(e),w.decimalsOut):O=n[0].amountIn;let{amountIn:N,calculatedIn:T,feePct:E}=h.validateBuy(w,O),M=h.spotPriceInGivenOut(w),R=Me(O,w.decimalsOut,M,T);n.unshift({...u,assetInDecimals:w.decimalsIn,assetOutDecimals:w.decimalsOut,amountOut:O,calculatedIn:T,amountIn:N,spotPrice:M,tradeFeePct:E,priceImpactPct:R.toNumber(),toHuman(){return{...u,amountOut:j(O,w.decimalsOut),calculatedIn:j(T,w.decimalsIn),amountIn:j(N,w.decimalsIn),spotPrice:j(M,w.decimalsIn),tradeFeePct:E,priceImpactPct:R.toNumber()}}})}return n}};0&&(module.exports={BigNumber,DECIMAL_PLACES,INFINITY,ONE,PolkadotApiPoolService,PoolError,PoolFactory,PoolType,Router,TradeRouter,TradeType,XykPool,ZERO,bnum,scale});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|