@deepliquidity/curve-math
Integer (BigInt) maths for the DEEP bonding curve (the deep-curve Solana program) and
constant-product quotes. It mirrors the program's Rust math.rs bit for bit: both test suites run
the same committed vectors. No floating point, no dependencies.
The DEEP programs run on mainnet and devnet.
Install
npm install @deepliquidity/curve-math
ESM only, with TypeScript declarations. Node ≥ 22 or any modern browser bundle.
Rounding
- amounts paid out to the trader round down;
- fees and amounts the trader must pay in round up;
- so the curve invariant
k = virtualSol × virtualTokennever decreases.
Quick start
import { quoteBuyV1, quoteSellV1, depthBps, marketCapLamports } from "@deepliquidity/curve-math";
// `state` and `fees` come from the token's BondingCurve account: decode it with the SDK
// (`decodeBondingCurve`, `curveFees`). Every token keeps the rates it was launched with.
const buy = quoteBuyV1(state, 1_000_000_000n, fees); // 1 SOL budget
buy.solIn; // lamports actually charged (less than the budget when the buy completes the curve)
buy.fees; // { total, protocol, creator }: rounded up, on top of what reaches the curve
buy.routing; // who receives the reward part: the creator or the token's holders
buy.tokensOut; // floor(vToken × net / (vSol + net)), capped at the tokens left
buy.next; // the curve state after the trade
const sell = quoteSellV1(state, 1_000_000n, fees);
sell.solOut; // floor(vSol × tokens / (vToken + tokens)) minus fees rounded up
depthBps(state); // curve progress in basis points of the curve supply (rounded down)
marketCapLamports(state); // fully diluted value at the spot price: not liquidity
quoteBuyV1/quoteSellV1 throw CurveMathError with the program's error names (ZeroAmount,
CurveComplete, InsufficientReserves, SlippageExceeded, InvalidFee, InvalidParams,
Overflow) where the program would reject.
Licence
MIT
Links
Website and app · Docs · Integration guide · GitHub · Blog · Status · X · Telegram
