import BN from "bn.js"; /** * WAD Arithmetic Module * * Fixed-point arithmetic with 10^18 precision. * All functions operate on BN values to avoid JavaScript's 53-bit limitation. */ /** * Convert lamports (9 decimals) to WAD format (18 decimals) */ export function toWad(lamports: BN): BN { return lamports.mul(new BN(1_000_000_000)); } /** * Convert WAD to lamports (floor rounding) */ export function fromWadFloor(wad: BN): BN { return wad.div(new BN(1_000_000_000)); } /** * Convert WAD to lamports (ceiling rounding) */ export function fromWadCeil(wad: BN): BN { const divisor = new BN(1_000_000_000); return wad.add(divisor.sub(new BN(1))).div(divisor); } /** * Multiply two WAD values: (a * b) / WAD */ export function multiplyWad(a: BN, b: BN): BN { const WAD = new BN("1000000000000000000"); return a.mul(b).div(WAD); } /** * Divide two WAD values: (a * WAD) / b */ export function divideWad(a: BN, b: BN): BN { const WAD = new BN("1000000000000000000"); return a.mul(WAD).div(b); }