UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

2 lines 4.14 kB
var D=Object.defineProperty;var d=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,F=Object.prototype.propertyIsEnumerable;var E=(r,t,n)=>t in r?D(r,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[t]=n,p=(r,t)=>{for(var n in t||(t={}))v.call(t,n)&&E(r,n,t[n]);if(d)for(var n of d(t))F.call(t,n)&&E(r,n,t[n]);return r};import m from"bn.js";import h from"decimal.js";import S from"bn.js";import U from"decimal.js";import e from"bn.js";var s=new e(1).shln(64),A=64,y=new e(1).shln(128),c=new e(1).shln(64).subn(1),Z=new e(1).shln(128).subn(1);var G=new e("4295048016"),C=new e("79226673521066979257578248091"),L=new e("59543866431248"),K=new e("184467440737095516"),Y=new e("15793534762490258745");var V=new e("18446743708227953217"),z=[{bit:0,factor:new e("fffcb933bd6fb800",16)},{bit:1,factor:new e("fff97272373d4000",16)},{bit:2,factor:new e("fff2e50f5f657000",16)},{bit:3,factor:new e("ffe5caca7e10f000",16)},{bit:4,factor:new e("ffcb9843d60f7000",16)},{bit:5,factor:new e("ff973b41fa98e800",16)},{bit:6,factor:new e("ff2ea16466c9b000",16)},{bit:7,factor:new e("fe5dee046a9a3800",16)},{bit:8,factor:new e("fcbe86c7900bb000",16)},{bit:9,factor:new e("f987a7253ac65800",16)},{bit:10,factor:new e("f3392b0822bb6000",16)},{bit:11,factor:new e("e7159475a2caf000",16)},{bit:12,factor:new e("d097f3bdfd2f2000",16)},{bit:13,factor:new e("a9f746462d9f8000",16)},{bit:14,factor:new e("70d869a156f31c00",16)},{bit:15,factor:new e("31be135f97ed3200",16)},{bit:16,factor:new e("9aa508b5b85a500",16)},{bit:17,factor:new e("5d6af8dedc582c",16)},{bit:18,factor:new e("2216e584f5fa",16)}];var l=new e(0),g=new e(1),W=new e(-1);var $=new e("18446744073700000000");function B(r,t,n){if(n.isZero())throw new Error("Division by zero");return r.mul(t).div(n)}function _(r,t,n){if(n.isZero())throw new Error("Division by zero");let o=r.mul(t),i=o.div(n);return o.mod(n).isZero()?i:i.addn(1)}function a(r,t){return r.div(t).add(r.mod(t).isZero()?l:g)}var X=new S(1).shln(256).subn(1);var R=class{static getDeltaAmountAUnsigned(t,n,o,i){t.gt(n)&&([t,n]=[n,t]);let u=o.shln(A),f=n.sub(t);if(!t.gt(l))throw Error("!sqrtPriceX64A.gt(BN_ZERO)");let N=i?a(_(u,f,n),t):B(u,f,n).div(t);if(N.gt(c))throw Error("MaxTokenOverflow");return N}static getDeltaAmountBUnsigned(t,n,o,i){t.gt(n)&&([t,n]=[n,t]);let u=i?_(o,n.sub(t),s):B(o,n.sub(t),s);if(u.gt(c))throw Error("MaxTokenOverflow");return u}static addDelta(t,n){if(n.isNeg()){let o=n.neg();if(t.lt(o))throw new Error("Liquidity underflow");return t.sub(o)}else return t.add(n)}static getLiquidityFromAmountA(t,n,o){if(o.isZero())return l;t.gt(n)&&([t,n]=[n,t]);let i=B(t,n,s),u=n.sub(t);return B(o,i,u)}static getLiquidityFromAmountB(t,n,o){if(o.isZero())return l;t.gt(n)&&([t,n]=[n,t]);let i=n.sub(t);return B(o,s,i)}static getLiquidityFromAmounts(t,n,o,i,u){if(n.gt(o)&&([n,o]=[o,n]),t.lte(n))return this.getLiquidityFromAmountA(n,o,i);if(t.lt(o)){let f=this.getLiquidityFromAmountA(t,o,i),N=this.getLiquidityFromAmountB(n,t,u);return f.lt(N)?f:N}else return this.getLiquidityFromAmountB(n,o,u)}static getAmountsForLiquidity(t,n,o,i,u){n.gt(o)&&([n,o]=[o,n]);let f=l,N=l;return t.lte(n)?f=this.getDeltaAmountAUnsigned(n,o,i,u):t.lt(o)?(f=this.getDeltaAmountAUnsigned(t,o,i,u),N=this.getDeltaAmountBUnsigned(n,t,i,u)):N=this.getDeltaAmountBUnsigned(n,o,i,u),{amountA:f,amountB:N}}static getAmountsFromLiquidityWithSlippage(t,n,o,i,u,f,N){let{amountA:T,amountB:O}=this.getAmountsForLiquidity(t,n,o,i,f),b=u?1+N:1-N,I=new m(new h(T.toString()).mul(b).toFixed(0)),M=new m(new h(O.toString()).mul(b).toFixed(0));return{amountSlippageA:I,amountSlippageB:M}}static getLiquidityAndAmountsFromAmount({sqrtPriceCurrentX64:t,sqrtPriceLowerX64:n,sqrtPriceUpperX64:o,amountInfo:i}){let u;if(i.type==="liquidity")u=i.amount;else if(i.type==="amountA")u=t.gte(o)?l:this.getLiquidityFromAmountA(m.max(t,n),o,i.amount);else if(i.type==="amountB")u=t.lte(n)?l:this.getLiquidityFromAmountB(n,m.min(t,o),i.amount);else throw Error("amount info type check error");return p({liquidity:u},this.getAmountsForLiquidity(t,n,o,i.amount,!0))}};export{R as LiquidityMathUtil}; //# sourceMappingURL=liquidityMath.mjs.map