import BN from "bn.js"; /** * WAD precision (10^18) */ export const WAD = BigInt("1000000000000000000"); /** * Trading fee percentage (3% in WAD format) */ export const TRADE_FEE_PERCENTAGE = BigInt("30000000000000000"); /** * ln(2) in WAD format - used in lnWad calculation for range reduction */ export const LN_2_WAD = BigInt("693147180559945309"); /** * ln(4) in WAD format - used for liquidity parameter calculation */ export const LN_4_WAD = BigInt("1386294361119890612"); /** * Maximum q_vector difference multiplier (matches on-chain constant) * From programs/pit/src/constants.rs::MAX_Q_VECTOR_DIFF_MULTIPLIER * * Used to calculate dynamic trade limits: max_allowed_diff = 40 × b */ export const MAX_Q_VECTOR_DIFF_MULTIPLIER = 40; /** * Conservative simulation limit (40 SOL) used for frontend trade previews. * * The actual on-chain limit is market-specific: `MAX_Q_VECTOR_DIFF_MULTIPLIER × b`. * Use {@link getMaxTradeAmountForMarket} for accurate per-market limits. * * @deprecated Use getMaxTradeAmountForMarket(bLamports) instead */ export const MAX_SIMULATION_SOL_AMOUNT = new BN(40).mul(new BN(1_000_000_000)); /** * Calculate maximum trade amount for a given market * Based on on-chain constraint: max(q_i) - min(q_i) < 40 × b * * @param bLamports - Market's liquidity parameter b (in lamports) * @returns Maximum trade amount in lamports */ export function getMaxTradeAmountForMarket(bLamports: BN): BN { return bLamports.muln(MAX_Q_VECTOR_DIFF_MULTIPLIER); }