UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

1 lines 14.3 kB
{"version":3,"sources":["../../../../src/raydium/clmm/libraries/bigNum.ts","../../../../src/raydium/clmm/libraries/constants.ts"],"sourcesContent":["import BN from \"bn.js\"\nimport Decimal from \"decimal.js\"\nimport { BN_ONE, BN_ZERO, Q128, U128_MAX } from \"./constants\"\n\nexport function mask(bits: number): BN {\n return new BN(1).shln(bits).subn(1)\n}\n\nexport function checkedAdd(a: BN, b: BN, maxBits: number): BN {\n const result = a.add(b)\n const maxValue = mask(maxBits)\n if (result.gt(maxValue)) {\n throw new Error(`Addition overflow: result exceeds ${maxBits} bits`)\n }\n return result\n}\n\nexport function checkedSub(a: BN, b: BN): BN {\n if (a.lt(b)) {\n throw new Error(\"Subtraction underflow\")\n }\n return a.sub(b)\n}\n\nexport function checkedMul(a: BN, b: BN, maxBits: number): BN {\n const result = a.mul(b)\n const maxValue = mask(maxBits)\n if (result.gt(maxValue)) {\n throw new Error(`Multiplication overflow: result exceeds ${maxBits} bits`)\n }\n return result\n}\n\nexport function mulFull(a: BN, b: BN): [BN, BN] {\n const result = a.mul(b)\n const low = result.and(mask(128))\n const high = result.shrn(128)\n return [low, high]\n}\n\nexport function mulDivFloor(a: BN, b: BN, denominator: BN): BN {\n if (denominator.isZero()) {\n throw new Error(\"Division by zero\")\n }\n return a.mul(b).div(denominator)\n}\n\nexport function mulDivCeil(a: BN, b: BN, denominator: BN): BN {\n if (denominator.isZero()) {\n throw new Error(\"Division by zero\")\n }\n const product = a.mul(b)\n const quotient = product.div(denominator)\n const remainder = product.mod(denominator)\n\n if (remainder.isZero()) {\n return quotient\n }\n return quotient.addn(1)\n}\n\nexport function mulDivRound(a: BN, b: BN, denominator: BN, roundUp: boolean): BN {\n return roundUp ? mulDivCeil(a, b, denominator) : mulDivFloor(a, b, denominator)\n}\n\nexport function divRoundingUp(x: BN, y: BN) {\n return x.div(y).add(x.mod(y).isZero() ? BN_ZERO : BN_ONE)\n}\n\nexport function u128SaturatingAdd(a: BN, b: BN): BN {\n const result = a.add(b)\n return result.gt(U128_MAX) ? U128_MAX : result\n}\n\nexport function u128SaturatingSub(a: BN, b: BN): BN {\n return a.gt(b) ? a.sub(b) : new BN(0)\n}\n\nexport function u128CheckedMul(a: BN, b: BN): BN {\n const result = a.mul(b)\n if (result.gt(U128_MAX)) {\n throw new Error(\"U128 multiplication overflow\")\n }\n return result\n}\n\nexport const U256_MAX = new BN(1).shln(256).subn(1)\n\nexport function u256MulDivFloor(a: BN, b: BN, denominator: BN): BN {\n if (denominator.isZero()) {\n throw new Error(\"Division by zero\")\n }\n return a.mul(b).div(denominator)\n}\n\nexport function u256MulDivCeil(a: BN, b: BN, denominator: BN): BN {\n if (denominator.isZero()) {\n throw new Error(\"Division by zero\")\n }\n const product = a.mul(b)\n const quotient = product.div(denominator)\n const remainder = product.mod(denominator)\n\n if (remainder.isZero()) {\n return quotient\n }\n return quotient.addn(1)\n}\n\nexport function mostSignificantBit(n: BN): number {\n if (n.isZero()) {\n return -1\n }\n return n.bitLength() - 1\n}\n\nexport function leastSignificantBit(n: BN): number {\n if (n.isZero()) {\n return -1\n }\n\n let pos = 0\n let temp = n.clone()\n\n while (temp.and(new BN(1)).isZero()) {\n temp = temp.shrn(1)\n pos++\n }\n\n return pos\n}\n\nexport function isBitSet(n: BN, bit: number): boolean {\n return n.testn(bit)\n}\n\nexport function setBit(n: BN, bit: number): BN {\n return n.or(new BN(1).shln(bit))\n}\n\nexport function clearBit(n: BN, bit: number): BN {\n return n.and(new BN(1).shln(bit).notn(256))\n}\n\nexport function toggleBit(n: BN, bit: number): BN {\n return n.xor(new BN(1).shln(bit))\n}\n\nexport function toSignedI128(n: BN): BN {\n const signBit = new BN(1).shln(127)\n if (n.and(signBit).isZero()) {\n return n\n }\n return n.sub(new BN(1).shln(128))\n}\n\nexport function fromSignedI128(n: BN): BN {\n if (n.isNeg()) {\n return n.add(new BN(1).shln(128))\n }\n return n\n}\n\nexport function abs(n: BN): BN {\n return n.isNeg() ? n.neg() : n\n}\n\nexport function x64ToDecimal(num: BN, decimalPlaces?: number): Decimal {\n return new Decimal(num.toString()).div(Decimal.pow(2, 64)).toDecimalPlaces(decimalPlaces)\n}\n\nexport function decimalToX64(num: Decimal): BN {\n return new BN(num.mul(Decimal.pow(2, 64)).floor().toFixed())\n}\n\nexport function wrappingSubU128(n0: BN, n1: BN): BN {\n return n0.add(Q128).sub(n1).mod(Q128)\n}\n","import BN from \"bn.js\";\n\nexport const Q64 = new BN(1).shln(64);\n\nexport const RESOLUTION = 64;\n\nexport const Q128 = new BN(1).shln(128);\n\nexport const U64_MAX = new BN(1).shln(64).subn(1);\n\nexport const U128_MAX = new BN(1).shln(128).subn(1);\n\nexport const MIN_TICK = -443636;\n\nexport const MAX_TICK = 443636;\n\nexport const MIN_SQRT_PRICE_X64 = new BN(\"4295048016\");\n\nexport const MAX_SQRT_PRICE_X64 = new BN(\"79226673521066979257578248091\");\n\nexport const LOG_B_2_X32 = new BN(\"59543866431248\");\n\nexport const LOG_B_P_ERR_MARGIN_LOWER_X64 = new BN(\"184467440737095516\");\n\nexport const LOG_B_P_ERR_MARGIN_UPPER_X64 = new BN(\"15793534762490258745\");\n\nexport const BIT_PRECISION = 16;\n\nexport const TICK_ARRAY_BITMAP_SIZE = 512;\n\nexport const TICK_ARRAY_SIZE = 60;\n\nexport const MAGIC_SQRT_10001 = new BN(\"18446743708227953217\");\n\nexport const TICK_TO_SQRT_PRICE_FACTORS: { bit: number; factor: BN }[] = [\n { bit: 0, factor: new BN(\"fffcb933bd6fb800\", 16) }, // i=0\n { bit: 1, factor: new BN(\"fff97272373d4000\", 16) }, // i=1\n { bit: 2, factor: new BN(\"fff2e50f5f657000\", 16) }, // i=2\n { bit: 3, factor: new BN(\"ffe5caca7e10f000\", 16) }, // i=3\n { bit: 4, factor: new BN(\"ffcb9843d60f7000\", 16) }, // i=4\n { bit: 5, factor: new BN(\"ff973b41fa98e800\", 16) }, // i=5\n { bit: 6, factor: new BN(\"ff2ea16466c9b000\", 16) }, // i=6\n { bit: 7, factor: new BN(\"fe5dee046a9a3800\", 16) }, // i=7\n { bit: 8, factor: new BN(\"fcbe86c7900bb000\", 16) }, // i=8\n { bit: 9, factor: new BN(\"f987a7253ac65800\", 16) }, // i=9\n { bit: 10, factor: new BN(\"f3392b0822bb6000\", 16) }, // i=10\n { bit: 11, factor: new BN(\"e7159475a2caf000\", 16) }, // i=11\n { bit: 12, factor: new BN(\"d097f3bdfd2f2000\", 16) }, // i=12\n { bit: 13, factor: new BN(\"a9f746462d9f8000\", 16) }, // i=13\n { bit: 14, factor: new BN(\"70d869a156f31c00\", 16) }, // i=14\n { bit: 15, factor: new BN(\"31be135f97ed3200\", 16) }, // i=15\n { bit: 16, factor: new BN(\"9aa508b5b85a500\", 16) }, // i=16\n { bit: 17, factor: new BN(\"5d6af8dedc582c\", 16) }, // i=17\n { bit: 18, factor: new BN(\"2216e584f5fa\", 16) }, // i=18\n];\n\nexport const FEE_RATE_DENOMINATOR = 1_000_000;\n\nexport const MAX_FEE_RATE = 100_000;\n\nexport enum CollectFeeOn {\n FromInput = 0,\n TokenOnlyA = 1,\n TokenOnlyB = 2,\n}\n\n// export const FEE_RATE_DENOMINATOR_VALUE = 1_000_000;\n\nexport const MAX_FEE_RATE_NUMERATOR = 100_000;\nexport const VOLATILITY_ACCUMULATOR_SCALE = 10_000;\nexport const REDUCTION_FACTOR_DENOMINATOR = 10_000;\nexport const DYNAMIC_FEE_CONTROL_DENOMINATOR = 100_000;\n\nexport const TICK_ARRAY_SIZE_USIZE = 60;\n\nexport const REWARD_NUM = 3;\n\nexport const OBSERVATION_NUM = 100;\nexport const OBSERVATION_UPDATE_DURATION_DEFAULT = 15;\n\nexport const OPERATION_SIZE_USIZE = 10;\nexport const WHITE_MINT_SIZE_USIZE = 100;\n\nexport const EXTENSION_TICKARRAY_BITMAP_SIZE = 14;\n\nexport enum PoolStatusBitIndex {\n OpenPositionOrIncreaseLiquidity = 0,\n DecreaseLiquidity = 1,\n CollectFee = 2,\n CollectReward = 3,\n Swap = 4,\n LimitOrder = 5,\n}\n\nexport enum PoolStatusBitFlag {\n Enable = 0,\n Disable = 1,\n}\n\nexport enum RewardState {\n Uninitialized = 0,\n Initialized = 1,\n Opening = 2,\n Ended = 3,\n}\n\nexport enum UpdateAmmConfigParam {\n TradeFeeRate = 0,\n ProtocolFeeRate = 1,\n FundFeeRate = 2,\n NewOwner = 3,\n NewFundOwner = 4,\n}\n\nexport enum UpdateOperationAccountParam {\n UpdateOperationOwner = 0,\n RemoveOperationOwner = 1,\n UpdateWhitelistMint = 2,\n RemoveWhitelistMint = 3,\n}\n\nexport const BN_ZERO = new BN(0);\nexport const BN_ONE = new BN(1);\nexport const BN_NEGATIVE_ONE = new BN(-1);\n\nexport const mockV3CreatePoolInfo = {\n tvl: 0,\n volumeQuote: 0,\n mintAmountA: 0,\n mintAmountB: 0,\n rewardDefaultInfos: [],\n farmUpcomingCount: 0,\n farmOngoingCount: 0,\n farmFinishedCount: 0,\n\n day: {\n volume: 0,\n volumeQuote: 0,\n volumeFee: 0,\n apr: 0,\n feeApr: 0,\n priceMin: 0,\n priceMax: 0,\n rewardApr: [0],\n },\n week: {\n volume: 0,\n volumeQuote: 0,\n volumeFee: 0,\n apr: 0,\n feeApr: 0,\n priceMin: 0,\n priceMax: 0,\n rewardApr: [0],\n },\n month: {\n volume: 0,\n volumeQuote: 0,\n volumeFee: 0,\n apr: 0,\n feeApr: 0,\n priceMin: 0,\n priceMax: 0,\n rewardApr: [0],\n },\n pooltype: [],\n};\n\n/**\n * Get human-readable description for collectFeeOn value\n * CollectFeeOn enum values:\n * 0 = FromInput - fee collected from input token during swap\n * 1 = Token0Only - fee collected from token0\n * 2 = Token1Only - fee collected from token1\n */\nexport function getCollectFeeOnDescription(value: number): string {\n switch (value) {\n case 0:\n return \"0 (FromInput - fee from input token)\";\n case 1:\n return \"1 (Token0Only - fee from token0)\";\n case 2:\n return \"2 (Token1Only - fee from token1)\";\n default:\n return `${value} (unknown)`;\n }\n}\n\nexport const DYNAMIC_CONFIG_INDEX = 2;\nexport const U64_IGNORE_RANGE = new BN(\"18446744073700000000\");\n"],"mappings":"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","names":[]}