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