@hadron-fi/sdk 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +15 -6
- package/dist/index.d.ts +15 -6
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +19 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/adampeters/Documents/sol/hadron-sdk/dist/index.js","../src/constants/index.ts","../src/helpers/derive.ts","../src/helpers/math.ts","../src/accounts/index.ts","../src/types/index.ts","../src/instructions/initialize.ts","../src/instructions/deposit.ts","../src/instructions/withdraw.ts","../src/instructions/swap.ts","../src/instructions/setCurve.ts","../src/instructions/oracle.ts","../src/instructions/switchCurve.ts","../src/instructions/curveUpdates.ts","../src/instructions/authority.ts","../src/instructions/feeConfig.ts","../src/instructions/spreadConfig.ts","../src/instructions/poolState.ts","../src/hadron.ts","../src/orderbook.ts","../src/helpers/token.ts"],"names":["PublicKey","PoolState","OracleMode","Interpolation","CurveType","CurveXMode","RiskMode","CurveUpdateOpKind","Side","getAssociatedTokenAddressSync","TransactionInstruction","SYSVAR_CLOCK_PUBKEY","SystemProgram","TOKEN_PROGRAM_ID"],"mappings":"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IAAA;AAAA,IACA,KAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,EACF,CAAA;AACA,EAAA,MAAM,QAAA,EAAU,MAAM,UAAA,CAAW,cAAA,CAAe,OAAO,CAAA;AACvD,EAAA,GAAA,CAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,OAAA,EAAS,WAAA,EAAa,KAAK,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,YAAA,EAAc,+DAAA;AAAA,IAClB,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,EACF,CAAA;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,YAAY,CAAA;AAChC;ApB8nEA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,ugIAAC","file":"/Users/adampeters/Documents/sol/hadron-sdk/dist/index.js","sourcesContent":[null,"import { PublicKey } from \"@solana/web3.js\";\n\n// ============================================================================\n// Program\n// ============================================================================\n\nexport const HADRON_PROGRAM_ID = new PublicKey(\n \"Q72w4coozA552keKDdeeh2EyQw32qfMFsHPu6cbatom\"\n);\n\n// ============================================================================\n// PDA Seeds\n// ============================================================================\n\nexport const CONFIG_SEED = Buffer.from(\"hadron-config\");\nexport const MIDPRICE_ORACLE_SEED = Buffer.from(\"hadron-midprice\");\nexport const CURVE_META_SEED = Buffer.from(\"hadron-curve-meta\");\nexport const CURVE_PREFABS_SEED = Buffer.from(\"hadron-curve-prefabs\");\nexport const CURVE_UPDATES_SEED = Buffer.from(\"hadron-curve-updates\");\nexport const FEE_CONFIG_SEED = Buffer.from(\"fee_config\");\nexport const SPREAD_CONFIG_SEED = Buffer.from(\"spread_config\");\n\n// ============================================================================\n// Account Sizes\n// ============================================================================\n\nexport const CONFIG_SIZE = 248;\nexport const MIDPRICE_ORACLE_SIZE = 64;\nexport const CURVE_META_SIZE = 48;\nexport const FEE_CONFIG_SIZE = 72;\nexport const CURVE_UPDATES_SIZE = 258;\nexport const CURVE_SIDE_HEADER = 8;\nexport const CURVE_POINT_LEN = 24;\n\n// ============================================================================\n// Pool Parameter Defaults & Limits\n// ============================================================================\n\nexport const DEFAULT_MAX_PREFAB_SLOTS = 10;\nexport const DEFAULT_MAX_CURVE_POINTS = 16;\nexport const ABSOLUTE_MAX_PREFAB_SLOTS = 16;\nexport const ABSOLUTE_MAX_CURVE_POINTS = 128;\nexport const MAX_SETCURVE_POINTS = 32;\nexport const MAX_CURVE_UPDATE_OPS = 8;\n\n// ============================================================================\n// Fixed-Point Math\n// ============================================================================\n\n/** Q32.32 representation of 1.0 */\nexport const Q32_ONE = BigInt(1) << BigInt(32); // 4294967296n\n\n// ============================================================================\n// Instruction Discriminators\n// ============================================================================\n\nexport const Discriminator = {\n Initialize: 0,\n Deposit: 1,\n Withdraw: 2,\n SwapExactIn: 3,\n SetCurve: 4,\n UpdateMidprice: 5,\n InitializeFeeConfig: 6,\n UpdateFeeConfig: 7,\n SetRiskCurve: 8,\n UpdateBaseSpread: 9,\n UpdateMidpriceAndBaseSpread: 10,\n SwitchPriceCurve: 11,\n SwitchRiskCurve: 12,\n InitializeSpreadConfig: 13,\n UpdateSpreadConfig: 14,\n UpdateDeltaStaleness: 15,\n NominateAuthority: 16,\n AcceptAuthority: 17,\n SubmitCurveUpdates: 18,\n ApplyCurveUpdates: 19,\n ClosePool: 20,\n SetPoolState: 21,\n AllocateCurvePrefabs: 22,\n SetQuotingAuthority: 23,\n RotateFeeAdmin: 24,\n} as const;\n\n// ============================================================================\n// Instruction Data Sizes\n// ============================================================================\n\n/** Per-point data in SetCurve/SetRiskCurve: u64 + u64 + u8 + 4 params = 21 bytes */\nexport const POINT_DATA_SIZE = 21;\n\n/** Per-op data in SubmitCurveUpdates: curve_type(1)+op_kind(1)+point_index(1)+interp(1)+amount_in(8)+price(8)+params(4) = 24 bytes */\nexport const CURVE_UPDATE_OP_SIZE = 24;\n\n// ============================================================================\n// Size Helpers\n// ============================================================================\n\n/** Compute CurvePrefabs account size for given pool parameters. */\nexport function curvePrefabsSize(\n maxSlots: number,\n maxPoints: number\n): number {\n return 32 + 4 * maxSlots * (CURVE_SIDE_HEADER + maxPoints * CURVE_POINT_LEN);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport {\n CONFIG_SEED,\n MIDPRICE_ORACLE_SEED,\n CURVE_META_SEED,\n CURVE_PREFABS_SEED,\n CURVE_UPDATES_SEED,\n FEE_CONFIG_SEED,\n SPREAD_CONFIG_SEED,\n HADRON_PROGRAM_ID,\n} from \"../constants\";\nimport type { PoolAddresses } from \"../types\";\n\nfunction seedToBuffer(seed: bigint): Buffer {\n const buf = Buffer.alloc(8);\n buf.writeBigUInt64LE(seed);\n return buf;\n}\n\nexport function getConfigAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [CONFIG_SEED, seedToBuffer(seed), mintX.toBuffer(), mintY.toBuffer()],\n programId\n );\n}\n\nexport function getMidpriceOracleAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n MIDPRICE_ORACLE_SEED,\n seedToBuffer(seed),\n mintX.toBuffer(),\n mintY.toBuffer(),\n ],\n programId\n );\n}\n\nexport function getCurveMetaAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [CURVE_META_SEED, seedToBuffer(seed), mintX.toBuffer(), mintY.toBuffer()],\n programId\n );\n}\n\nexport function getCurvePrefabsAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n CURVE_PREFABS_SEED,\n seedToBuffer(seed),\n mintX.toBuffer(),\n mintY.toBuffer(),\n ],\n programId\n );\n}\n\nexport function getCurveUpdatesAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n CURVE_UPDATES_SEED,\n seedToBuffer(seed),\n mintX.toBuffer(),\n mintY.toBuffer(),\n ],\n programId\n );\n}\n\nexport function getFeeConfigAddress(\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([FEE_CONFIG_SEED], programId);\n}\n\nexport function getSpreadConfigAddress(\n configPda: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SPREAD_CONFIG_SEED, configPda.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive all PDA addresses for a pool.\n */\nexport function derivePoolAddresses(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): PoolAddresses {\n const [config, configBump] = getConfigAddress(seed, mintX, mintY, programId);\n const [midpriceOracle] = getMidpriceOracleAddress(\n seed,\n mintX,\n mintY,\n programId\n );\n const [curveMeta] = getCurveMetaAddress(seed, mintX, mintY, programId);\n const [curvePrefabs] = getCurvePrefabsAddress(seed, mintX, mintY, programId);\n const [curveUpdates] = getCurveUpdatesAddress(seed, mintX, mintY, programId);\n\n const vaultX = getAssociatedTokenAddressSync(\n mintX,\n config,\n true,\n tokenProgramX\n );\n const vaultY = getAssociatedTokenAddressSync(\n mintY,\n config,\n true,\n tokenProgramY\n );\n\n return {\n config,\n configBump,\n midpriceOracle,\n curveMeta,\n curvePrefabs,\n curveUpdates,\n vaultX,\n vaultY,\n };\n}\n","import { Q32_ONE } from \"../constants\";\n\n/** Convert a floating-point number to Q32.32 fixed point (bigint). */\nexport function toQ32(value: number): bigint {\n return BigInt(Math.floor(value * Number(Q32_ONE)));\n}\n\n/** Convert a Q32.32 fixed-point bigint to a floating-point number.\n * Splits into integer + fractional parts to avoid precision loss\n * when the integer part exceeds 2^21 (~2 million). */\nexport function fromQ32(q32: bigint): number {\n const intPart = q32 >> 32n;\n const fracPart = q32 & 0xFFFF_FFFFn;\n return Number(intPart) + Number(fracPart) / Number(Q32_ONE);\n}\n\n/** Convert a percentage (0.0 to 1.0) to Q32.32. */\nexport function pctToQ32(pct: number): bigint {\n return toQ32(pct);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport {\n CURVE_SIDE_HEADER,\n CURVE_POINT_LEN,\n MIDPRICE_ORACLE_SIZE,\n CURVE_UPDATE_OP_SIZE,\n MAX_CURVE_UPDATE_OPS,\n} from \"../constants\";\nimport {\n PoolState,\n OracleMode,\n Interpolation,\n CurveXMode,\n RiskMode,\n CurveType,\n CurveUpdateOpKind,\n} from \"../types\";\nimport type {\n DecodedConfig,\n DecodedMidpriceOracle,\n DecodedCurveMeta,\n DecodedFeeConfig,\n DecodedSpreadConfig,\n DecodedCurveUpdates,\n CurvePoint,\n CurveSide,\n CurveUpdateOp,\n SpreadTriggerInput,\n} from \"../types\";\n\n// ============================================================================\n// Config (248 bytes)\n// ============================================================================\n\nexport function decodeConfig(data: Uint8Array): DecodedConfig {\n const buf = Buffer.from(data);\n let offset = 0;\n\n const state: PoolState = buf.readUInt8(offset);\n offset += 1;\n\n const seed = buf.readBigUInt64LE(offset);\n offset += 8;\n\n const authority = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const mintX = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const mintY = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const configBump = buf.readUInt8(offset);\n offset += 1;\n\n const curveMeta = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const spreadConfigInitialized = buf.readUInt8(offset) !== 0;\n offset += 1;\n\n const deltaStaleness = buf.readUInt8(offset);\n offset += 1;\n\n const oracleMode: OracleMode = buf.readUInt8(offset);\n offset += 1;\n\n // _padding [u8; 3]\n offset += 3;\n\n const pendingAuthority = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const nominationExpiry = buf.readBigUInt64LE(offset);\n offset += 8;\n\n const tokenProgramX = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const tokenProgramY = new PublicKey(buf.subarray(offset, offset + 32));\n\n return {\n state,\n seed,\n authority,\n mintX,\n mintY,\n configBump,\n curveMeta,\n spreadConfigInitialized,\n deltaStaleness,\n oracleMode,\n pendingAuthority,\n nominationExpiry,\n tokenProgramX,\n tokenProgramY,\n };\n}\n\n// ============================================================================\n// MidpriceOracle (64 bytes)\n// ============================================================================\n\nexport function decodeMidpriceOracle(data: Uint8Array): DecodedMidpriceOracle {\n const buf = Buffer.from(data);\n\n const authority = new PublicKey(buf.subarray(0, 32));\n const sequence = buf.readBigUInt64LE(32);\n const midpriceQ32 = buf.readBigUInt64LE(40);\n const baseSpreadQ32 = buf.readBigUInt64LE(48);\n const lastUpdateSlot =\n buf.length >= MIDPRICE_ORACLE_SIZE ? buf.readBigUInt64LE(56) : 0n;\n\n return { authority, sequence, midpriceQ32, baseSpreadQ32, lastUpdateSlot };\n}\n\n// ============================================================================\n// CurveMeta (48 bytes)\n// ============================================================================\n\nexport function decodeCurveMeta(data: Uint8Array): DecodedCurveMeta {\n const buf = Buffer.from(data);\n\n return {\n authority: new PublicKey(buf.subarray(0, 32)),\n activePriceBidSlot: buf.readUInt8(32),\n activePriceAskSlot: buf.readUInt8(33),\n activeRiskBidSlot: buf.readUInt8(34),\n activeRiskAskSlot: buf.readUInt8(35),\n initializedSlots: new Uint8Array(buf.subarray(36, 44)),\n maxPrefabSlots: buf.readUInt8(44),\n maxCurvePoints: buf.readUInt8(45),\n };\n}\n\n/**\n * Check if a specific slot is initialized in the CurveMeta bitmap.\n */\nexport function isSlotInitialized(\n initializedSlots: Uint8Array,\n curveType: CurveType,\n slot: number,\n maxSlots: number\n): boolean {\n const bitIndex = curveType * maxSlots + slot;\n const byteIndex = Math.floor(bitIndex / 8);\n const bitOffset = bitIndex % 8;\n return (initializedSlots[byteIndex] & (1 << bitOffset)) !== 0;\n}\n\n// ============================================================================\n// FeeConfig (72 bytes)\n// ============================================================================\n\nexport function decodeFeeConfig(data: Uint8Array): DecodedFeeConfig {\n const buf = Buffer.from(data);\n\n return {\n initialized: buf.readUInt8(0) !== 0,\n feePpm: buf.readUInt32LE(1),\n bump: buf.readUInt8(5),\n // skip 2 bytes padding\n feeAdmin: new PublicKey(buf.subarray(8, 40)),\n feeRecipient: new PublicKey(buf.subarray(40, 72)),\n };\n}\n\n// ============================================================================\n// SpreadConfig (4072 bytes)\n// ============================================================================\n\nconst SPREAD_TRIGGER_LEN = 40; // 32 (account) + 2 (spread_bps) + 6 (padding)\n\nexport function decodeSpreadConfig(data: Uint8Array): DecodedSpreadConfig {\n const buf = Buffer.from(data);\n const initialized = buf.readUInt8(0) !== 0;\n const bump = buf.readUInt8(1);\n const numTriggers = buf.readUInt8(2);\n // skip 5 bytes padding\n const admin = new PublicKey(buf.subarray(8, 40));\n const config = new PublicKey(buf.subarray(40, 72));\n\n const triggers: SpreadTriggerInput[] = [];\n const triggersStart = 72;\n for (let i = 0; i < numTriggers; i++) {\n const off = triggersStart + i * SPREAD_TRIGGER_LEN;\n const account = new PublicKey(buf.subarray(off, off + 32));\n const spreadBps = buf.readUInt16LE(off + 32);\n triggers.push({ account, spreadBps });\n }\n\n return { initialized, bump, numTriggers, admin, config, triggers };\n}\n\n// ============================================================================\n// CurveUpdates (258 bytes)\n// ============================================================================\n\nexport function decodeCurveUpdates(data: Uint8Array): DecodedCurveUpdates {\n const buf = Buffer.from(data);\n let offset = 0;\n\n const authority = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const curveMeta = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const numOps = buf.readUInt8(offset);\n offset += 1;\n\n // skip padding\n offset += 1;\n\n const ops: CurveUpdateOp[] = [];\n for (let i = 0; i < numOps && i < MAX_CURVE_UPDATE_OPS; i++) {\n const opOffset = offset + i * CURVE_UPDATE_OP_SIZE;\n ops.push({\n curveType: buf.readUInt8(opOffset) as CurveType,\n opKind: buf.readUInt8(opOffset + 1) as CurveUpdateOpKind,\n pointIndex: buf.readUInt8(opOffset + 2),\n interpolation: buf.readUInt8(opOffset + 3) as Interpolation,\n amountIn: buf.readBigUInt64LE(opOffset + 4),\n priceFactorQ32: buf.readBigUInt64LE(opOffset + 12),\n params: new Uint8Array(buf.subarray(opOffset + 20, opOffset + 24)),\n });\n }\n\n return { authority, curveMeta, numOps, ops };\n}\n\n// ============================================================================\n// CurvePrefabs (variable size) — decode individual curve sides\n// ============================================================================\n\n/**\n * Decode a single curve side from a CurvePrefabs account.\n */\nexport function decodeCurveSide(\n data: Uint8Array,\n curveType: CurveType,\n slot: number,\n maxSlots: number,\n maxPoints: number\n): CurveSide {\n const sideSize = CURVE_SIDE_HEADER + maxPoints * CURVE_POINT_LEN;\n const offset = 32 + (curveType * maxSlots + slot) * sideSize;\n const buf = Buffer.from(data);\n\n const numPoints = buf.readUInt8(offset);\n const defaultInterpolation = buf.readUInt8(offset + 1) as Interpolation;\n const xMode = buf.readUInt8(offset + 2) as CurveXMode;\n const riskMode = buf.readUInt8(offset + 3) as RiskMode;\n\n const points: CurvePoint[] = [];\n const pointsStart = offset + CURVE_SIDE_HEADER;\n const n = Math.min(numPoints, maxPoints);\n for (let i = 0; i < n; i++) {\n const pOff = pointsStart + i * CURVE_POINT_LEN;\n points.push({\n amountIn: buf.readBigUInt64LE(pOff),\n priceFactorQ32: buf.readBigUInt64LE(pOff + 8),\n interpolation: buf.readUInt8(pOff + 16) as Interpolation,\n params: new Uint8Array(buf.subarray(pOff + 17, pOff + 21)),\n });\n }\n\n return { numPoints, defaultInterpolation, xMode, riskMode, points };\n}\n\n/**\n * Decode all active curve slots from a CurvePrefabs account using CurveMeta info.\n */\nexport function decodeActiveCurves(\n prefabsData: Uint8Array,\n meta: DecodedCurveMeta\n): {\n priceBid: CurveSide;\n priceAsk: CurveSide;\n riskBid: CurveSide;\n riskAsk: CurveSide;\n} {\n const { maxPrefabSlots, maxCurvePoints } = meta;\n return {\n priceBid: decodeCurveSide(\n prefabsData,\n CurveType.PriceBid,\n meta.activePriceBidSlot,\n maxPrefabSlots,\n maxCurvePoints\n ),\n priceAsk: decodeCurveSide(\n prefabsData,\n CurveType.PriceAsk,\n meta.activePriceAskSlot,\n maxPrefabSlots,\n maxCurvePoints\n ),\n riskBid: decodeCurveSide(\n prefabsData,\n CurveType.RiskBid,\n meta.activeRiskBidSlot,\n maxPrefabSlots,\n maxCurvePoints\n ),\n riskAsk: decodeCurveSide(\n prefabsData,\n CurveType.RiskAsk,\n meta.activeRiskAskSlot,\n maxPrefabSlots,\n maxCurvePoints\n ),\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\n// ============================================================================\n// Enums\n// ============================================================================\n\nexport enum PoolState {\n Uninitialized = 0,\n Initialized = 1,\n Paused = 2,\n WithdrawOnly = 3,\n}\n//\nexport enum OracleMode {\n /** Off-chain authority updates the oracle */\n Authority = 0,\n /** Midprice computed from vault ratio (vault_y / vault_x) */\n Relative = 1,\n}\n\nexport enum Interpolation {\n Step = 0,\n Linear = 1,\n MarginalStep = 2,\n Hyperbolic = 3,\n Quadratic = 4,\n Cubic = 5,\n}\n\nexport enum CurveType {\n PriceBid = 0,\n PriceAsk = 1,\n RiskBid = 2,\n RiskAsk = 3,\n}\n\nexport enum CurveXMode {\n /** Price: absolute tokens. Risk: percent Q32. */\n Native = 0,\n /** Price: percent of vault Q32. Risk: absolute tokens. */\n Alternate = 1,\n}\n\nexport enum RiskMode {\n Virtual = 0,\n Integrated = 1,\n}\n\nexport enum CurveUpdateOpKind {\n Edit = 0,\n Add = 1,\n Remove = 2,\n}\n\nexport enum Side {\n Bid = 0,\n Ask = 1,\n}\n\n// ============================================================================\n// Decoded Account Types\n// ============================================================================\n\nexport interface DecodedConfig {\n state: PoolState;\n seed: bigint;\n authority: PublicKey;\n mintX: PublicKey;\n mintY: PublicKey;\n configBump: number;\n curveMeta: PublicKey;\n spreadConfigInitialized: boolean;\n deltaStaleness: number;\n oracleMode: OracleMode;\n pendingAuthority: PublicKey;\n nominationExpiry: bigint;\n tokenProgramX: PublicKey;\n tokenProgramY: PublicKey;\n}\n\nexport interface DecodedMidpriceOracle {\n authority: PublicKey;\n sequence: bigint;\n midpriceQ32: bigint;\n baseSpreadQ32: bigint;\n lastUpdateSlot: bigint;\n}\n\nexport interface DecodedCurveMeta {\n authority: PublicKey;\n activePriceBidSlot: number;\n activePriceAskSlot: number;\n activeRiskBidSlot: number;\n activeRiskAskSlot: number;\n initializedSlots: Uint8Array;\n maxPrefabSlots: number;\n maxCurvePoints: number;\n}\n\nexport interface DecodedFeeConfig {\n initialized: boolean;\n feePpm: number;\n bump: number;\n feeAdmin: PublicKey;\n feeRecipient: PublicKey;\n}\n\nexport interface DecodedSpreadConfig {\n initialized: boolean;\n bump: number;\n numTriggers: number;\n admin: PublicKey;\n config: PublicKey;\n triggers: SpreadTriggerInput[];\n}\n\nexport interface DecodedCurveUpdates {\n authority: PublicKey;\n curveMeta: PublicKey;\n numOps: number;\n ops: CurveUpdateOp[];\n}\n\n// ============================================================================\n// Curve Data Types\n// ============================================================================\n\nexport interface CurvePoint {\n amountIn: bigint;\n priceFactorQ32: bigint;\n interpolation: Interpolation;\n params: Uint8Array;\n}\n\nexport interface CurveSide {\n numPoints: number;\n defaultInterpolation: Interpolation;\n xMode: CurveXMode;\n riskMode: RiskMode;\n points: CurvePoint[];\n}\n\nexport interface CurveUpdateOp {\n curveType: CurveType;\n opKind: CurveUpdateOpKind;\n pointIndex: number;\n interpolation: Interpolation;\n amountIn: bigint;\n priceFactorQ32: bigint;\n params: Uint8Array;\n}\n\n// ============================================================================\n// Instruction Parameter Types\n// ============================================================================\n\nexport interface InitializeParams {\n /** Pool seed. If omitted, a random seed is generated automatically. */\n seed?: bigint;\n mintX: PublicKey;\n mintY: PublicKey;\n authority: PublicKey;\n initialMidpriceQ32: bigint;\n oracleMode?: OracleMode;\n maxPrefabSlots?: number;\n maxCurvePoints?: number;\n /** Token program for mint X (defaults to TOKEN_PROGRAM_ID) */\n tokenProgramX?: PublicKey;\n /** Token program for mint Y (defaults to TOKEN_PROGRAM_ID) */\n tokenProgramY?: PublicKey;\n}\n\nexport interface DepositParams {\n amountX: bigint;\n amountY: bigint;\n expiration?: number;\n}\n\nexport interface WithdrawParams {\n amountX: bigint;\n amountY: bigint;\n expiration?: number;\n}\n\nexport interface SwapParams {\n isX: boolean;\n amountIn: bigint;\n minOut: bigint;\n feeRecipient: PublicKey;\n expiration?: number;\n}\n\nexport interface SetCurvePointInput {\n amountIn: bigint;\n /** Price factor as floating point (e.g. 0.99). Converted to Q32 internally. */\n priceFactor: number;\n interpolation?: Interpolation;\n params?: Uint8Array;\n}\n\nexport interface SetCurveParams {\n side: Side;\n defaultInterpolation: Interpolation;\n points: SetCurvePointInput[];\n slot?: number;\n xMode?: CurveXMode;\n}\n\n/** Params for setting price curve on both bid and ask in one call (returns two instructions). */\nexport interface SetCurveBothParams {\n bid: Omit<SetCurveParams, \"side\">;\n ask: Omit<SetCurveParams, \"side\">;\n}\n\nexport interface SetRiskCurvePointInput {\n /** Percent of base vault (0.0 to 1.0) — converted to Q32 internally */\n pctBase: number;\n /** Price factor as floating point */\n priceFactor: number;\n interpolation?: Interpolation;\n params?: Uint8Array;\n}\n\nexport interface SetRiskCurveAbsolutePointInput {\n /** Absolute vault balance in token atoms */\n vaultBalance: bigint;\n priceFactor: number;\n interpolation?: Interpolation;\n params?: Uint8Array;\n}\n\nexport interface SetRiskCurveParams {\n side: Side;\n defaultInterpolation: Interpolation;\n points: SetRiskCurvePointInput[];\n slot?: number;\n xMode?: CurveXMode;\n riskMode?: RiskMode;\n}\n\n/** Params for setting risk curve (percent x-axis) on both bid and ask in one call. */\nexport interface SetRiskCurveBothParams {\n bid: Omit<SetRiskCurveParams, \"side\">;\n ask: Omit<SetRiskCurveParams, \"side\">;\n}\n\nexport interface SetRiskCurveAbsoluteParams {\n side: Side;\n defaultInterpolation: Interpolation;\n points: SetRiskCurveAbsolutePointInput[];\n slot?: number;\n riskMode?: RiskMode;\n}\n\n/** Params for setting risk curve (absolute x-axis) on both bid and ask in one call. */\nexport interface SetRiskCurveAbsoluteBothParams {\n bid: Omit<SetRiskCurveAbsoluteParams, \"side\">;\n ask: Omit<SetRiskCurveAbsoluteParams, \"side\">;\n}\n\nexport interface UpdateMidpriceParams {\n midpriceQ32: bigint;\n sequence?: bigint;\n}\n\nexport interface UpdateBaseSpreadParams {\n baseSpreadQ32: bigint;\n sequence?: bigint;\n}\n\nexport interface UpdateMidpriceAndBaseSpreadParams {\n midpriceQ32: bigint;\n baseSpreadQ32: bigint;\n sequence?: bigint;\n}\n\nexport interface SwitchCurveParams {\n side: Side;\n slot: number;\n}\n\nexport interface NominateAuthorityParams {\n newAuthority: PublicKey;\n expirySlot: bigint;\n}\n\nexport interface SetQuotingAuthorityParams {\n newQuotingAuthority: PublicKey;\n /** If provided, also updates SpreadConfig.admin */\n spreadConfigPda?: PublicKey;\n}\n\nexport interface InitializeFeeConfigParams {\n feePpm: number;\n feeAdmin: PublicKey;\n feeRecipient: PublicKey;\n}\n\nexport interface UpdateFeeConfigParams {\n /** Pass null for no change (sends u32::MAX) */\n feePpm: number | null;\n /** Pass null for no change (sends zeros) */\n feeRecipient: PublicKey | null;\n}\n\nexport interface RotateFeeAdminParams {\n newFeeAdmin: PublicKey;\n}\n\nexport interface SetPoolStateParams {\n newState: PoolState;\n}\n\nexport interface UpdateDeltaStalenessParams {\n deltaStaleness: number;\n}\n\nexport interface InitializeSpreadConfigParams {\n admin: PublicKey;\n}\n\nexport interface SpreadTriggerInput {\n account: PublicKey;\n spreadBps: number;\n}\n\nexport interface UpdateSpreadConfigParams {\n triggers: SpreadTriggerInput[];\n}\n\nexport interface AllocateCurvePrefabsParams {\n seed: bigint;\n mintX: PublicKey;\n mintY: PublicKey;\n maxPrefabSlots?: number;\n maxCurvePoints?: number;\n}\n\n// ============================================================================\n// Orderbook Types\n// ============================================================================\n\nexport type OrderSide = \"bid\" | \"ask\";\n\nexport interface PlaceOrderParams {\n side: OrderSide;\n /** Size in base tokens (human-readable, not atoms) */\n size: number;\n /** Spread from midprice in basis points */\n spreadBps: number;\n}\n\nexport interface AmendOrderParams {\n side: OrderSide;\n /** 0-based index into the staged orders for that side */\n level: number;\n spreadBps?: number;\n size?: number;\n}\n\nexport interface CancelOrderParams {\n side: OrderSide;\n level: number;\n}\n\nexport interface OrderbookLevel {\n /** Absolute price (midprice * priceFactor) */\n price: number;\n /** Size at this level in base tokens */\n size: number;\n /** Cumulative size up to and including this level */\n cumulative: number;\n}\n\nexport interface OrderbookState {\n midprice: number;\n bids: OrderbookLevel[];\n asks: OrderbookLevel[];\n inventory: { base: number; quote: number };\n}\n\nexport interface StagedOrder {\n /** Size in base tokens (human-readable) */\n size: number;\n /** Spread from midprice in basis points */\n spreadBps: number;\n}\n\n// ============================================================================\n// Pool Addresses (derived PDAs)\n// ============================================================================\n\nexport interface PoolAddresses {\n config: PublicKey;\n configBump: number;\n midpriceOracle: PublicKey;\n curveMeta: PublicKey;\n curvePrefabs: PublicKey;\n curveUpdates: PublicKey;\n vaultX: PublicKey;\n vaultY: PublicKey;\n}\n","import {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport {\n Discriminator,\n DEFAULT_MAX_PREFAB_SLOTS,\n DEFAULT_MAX_CURVE_POINTS,\n HADRON_PROGRAM_ID,\n curvePrefabsSize,\n} from \"../constants\";\nimport { derivePoolAddresses } from \"../helpers/derive\";\nimport type { InitializeParams, AllocateCurvePrefabsParams } from \"../types\";\n\n/**\n * Build an Initialize instruction.\n * Creates the pool: Config, MidpriceOracle, CurveMeta, CurveUpdates.\n * CurvePrefabs must be pre-allocated (use buildAllocateCurvePrefabs).\n */\nexport function buildInitialize(\n payer: PublicKey,\n params: InitializeParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const seed = params.seed;\n if (seed === undefined) throw new Error(\"seed is required — use Hadron.initialize() to auto-generate one\");\n const tokenProgramX = params.tokenProgramX ?? TOKEN_PROGRAM_ID;\n const tokenProgramY = params.tokenProgramY ?? TOKEN_PROGRAM_ID;\n const maxPrefabSlots = params.maxPrefabSlots ?? DEFAULT_MAX_PREFAB_SLOTS;\n const maxCurvePoints = params.maxCurvePoints ?? DEFAULT_MAX_CURVE_POINTS;\n const oracleMode = params.oracleMode ?? 0;\n\n const addrs = derivePoolAddresses(\n seed,\n params.mintX,\n params.mintY,\n tokenProgramX,\n tokenProgramY,\n programId\n );\n\n // Build data: disc(1) + seed(8) + mintX(32) + mintY(32) + authority(32) + midprice(8) + trailing(0|1|3)\n const hasCustomSlots =\n params.maxPrefabSlots !== undefined || params.maxCurvePoints !== undefined;\n const hasOracleMode = oracleMode !== 0 || hasCustomSlots;\n const trailingLen = hasCustomSlots ? 3 : hasOracleMode ? 1 : 0;\n const data = Buffer.alloc(1 + 8 + 32 + 32 + 32 + 8 + trailingLen);\n let offset = 0;\n\n data.writeUInt8(Discriminator.Initialize, offset);\n offset += 1;\n data.writeBigUInt64LE(seed, offset);\n offset += 8;\n params.mintX.toBuffer().copy(data, offset);\n offset += 32;\n params.mintY.toBuffer().copy(data, offset);\n offset += 32;\n params.authority.toBuffer().copy(data, offset);\n offset += 32;\n data.writeBigUInt64LE(params.initialMidpriceQ32, offset);\n offset += 8;\n\n if (hasOracleMode) {\n data.writeUInt8(oracleMode, offset);\n offset += 1;\n }\n if (hasCustomSlots) {\n data.writeUInt8(maxPrefabSlots, offset);\n offset += 1;\n data.writeUInt8(maxCurvePoints, offset);\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: addrs.config, isSigner: false, isWritable: true },\n { pubkey: params.mintX, isSigner: false, isWritable: false },\n { pubkey: params.mintY, isSigner: false, isWritable: false },\n { pubkey: addrs.vaultX, isSigner: false, isWritable: true },\n { pubkey: addrs.vaultY, isSigner: false, isWritable: true },\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n {\n pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: addrs.midpriceOracle, isSigner: false, isWritable: true },\n { pubkey: addrs.curveMeta, isSigner: false, isWritable: true },\n { pubkey: addrs.curvePrefabs, isSigner: false, isWritable: true },\n { pubkey: addrs.curveUpdates, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build an AllocateCurvePrefabs instruction.\n * Must be called before Initialize (possibly twice if size > 10240).\n */\nexport function buildAllocateCurvePrefabs(\n payer: PublicKey,\n params: AllocateCurvePrefabsParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const maxPrefabSlots = params.maxPrefabSlots ?? DEFAULT_MAX_PREFAB_SLOTS;\n const maxCurvePoints = params.maxCurvePoints ?? DEFAULT_MAX_CURVE_POINTS;\n\n const data = Buffer.alloc(1 + 8 + 32 + 32 + 1 + 1);\n let offset = 0;\n\n data.writeUInt8(Discriminator.AllocateCurvePrefabs, offset);\n offset += 1;\n data.writeBigUInt64LE(params.seed, offset);\n offset += 8;\n params.mintX.toBuffer().copy(data, offset);\n offset += 32;\n params.mintY.toBuffer().copy(data, offset);\n offset += 32;\n data.writeUInt8(maxPrefabSlots, offset);\n offset += 1;\n data.writeUInt8(maxCurvePoints, offset);\n\n const [curvePrefabsPda] = PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"hadron-curve-prefabs\"),\n (() => {\n const b = Buffer.alloc(8);\n b.writeBigUInt64LE(params.seed);\n return b;\n })(),\n params.mintX.toBuffer(),\n params.mintY.toBuffer(),\n ],\n programId\n );\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type { DepositParams } from \"../types\";\n\n/**\n * Build a Deposit instruction.\n */\nexport function buildDeposit(\n user: PublicKey,\n configPda: PublicKey,\n mintX: PublicKey,\n mintY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n params: DepositParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8 + 8);\n let offset = 0;\n\n data.writeUInt8(Discriminator.Deposit, offset);\n offset += 1;\n data.writeBigUInt64LE(params.amountX, offset);\n offset += 8;\n data.writeBigUInt64LE(params.amountY, offset);\n offset += 8;\n const exp = params.expiration ?? Math.floor(Date.now() / 1000) + 3600;\n data.writeBigInt64LE(BigInt(exp), offset);\n\n const userX = getAssociatedTokenAddressSync(mintX, user, false, tokenProgramX);\n const userY = getAssociatedTokenAddressSync(mintY, user, false, tokenProgramY);\n const vaultX = getAssociatedTokenAddressSync(mintX, configPda, true, tokenProgramX);\n const vaultY = getAssociatedTokenAddressSync(mintY, configPda, true, tokenProgramY);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: user, isSigner: true, isWritable: false },\n { pubkey: vaultX, isSigner: false, isWritable: true },\n { pubkey: vaultY, isSigner: false, isWritable: true },\n { pubkey: userX, isSigner: false, isWritable: true },\n { pubkey: userY, isSigner: false, isWritable: true },\n { pubkey: configPda, isSigner: false, isWritable: false },\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type { WithdrawParams } from \"../types\";\n\n/**\n * Build a Withdraw instruction.\n */\nexport function buildWithdraw(\n user: PublicKey,\n configPda: PublicKey,\n mintX: PublicKey,\n mintY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n params: WithdrawParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8 + 8);\n let offset = 0;\n\n data.writeUInt8(Discriminator.Withdraw, offset);\n offset += 1;\n data.writeBigUInt64LE(params.amountX, offset);\n offset += 8;\n data.writeBigUInt64LE(params.amountY, offset);\n offset += 8;\n const exp = params.expiration ?? Math.floor(Date.now() / 1000) + 3600;\n data.writeBigInt64LE(BigInt(exp), offset);\n\n const userX = getAssociatedTokenAddressSync(mintX, user, false, tokenProgramX);\n const userY = getAssociatedTokenAddressSync(mintY, user, false, tokenProgramY);\n const vaultX = getAssociatedTokenAddressSync(mintX, configPda, true, tokenProgramX);\n const vaultY = getAssociatedTokenAddressSync(mintY, configPda, true, tokenProgramY);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: user, isSigner: true, isWritable: false },\n { pubkey: vaultX, isSigner: false, isWritable: true },\n { pubkey: vaultY, isSigner: false, isWritable: true },\n { pubkey: userX, isSigner: false, isWritable: true },\n { pubkey: userY, isSigner: false, isWritable: true },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n","import {\n PublicKey,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport { getFeeConfigAddress, getSpreadConfigAddress } from \"../helpers/derive\";\nimport type { SwapParams } from \"../types\";\nimport type { PoolAddresses } from \"../types\";\n\n/**\n * Build a SwapExactIn instruction.\n *\n * Account order (16 base): token_program_x, token_program_y, config,\n * midprice_oracle, curve_meta, curve_prefabs, authority(=pool address PDA), user,\n * user_source, vault_source, vault_dest, user_dest, fee_config,\n * fee_recipient_ata, clock, curve_updates.\n *\n * When spread config is initialized: spread_config (#16) + instructions_sysvar (#17).\n */\nexport function buildSwapExactIn(\n user: PublicKey,\n poolAddresses: PoolAddresses,\n mintX: PublicKey,\n mintY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n params: SwapParams,\n programId: PublicKey = HADRON_PROGRAM_ID,\n spreadConfigInitialized: boolean = false\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1 + 8 + 8 + 8);\n let offset = 0;\n\n data.writeUInt8(Discriminator.SwapExactIn, offset);\n offset += 1;\n data.writeUInt8(params.isX ? 1 : 0, offset);\n offset += 1;\n data.writeBigUInt64LE(params.amountIn, offset);\n offset += 8;\n data.writeBigUInt64LE(params.minOut, offset);\n offset += 8;\n const exp = params.expiration ?? Math.floor(Date.now() / 1000) + 3600;\n data.writeBigInt64LE(BigInt(exp), offset);\n\n const userX = getAssociatedTokenAddressSync(mintX, user, false, tokenProgramX);\n const userY = getAssociatedTokenAddressSync(mintY, user, false, tokenProgramY);\n\n const [userSource, vaultSource, vaultDest, userDest] = params.isX\n ? [userX, poolAddresses.vaultX, poolAddresses.vaultY, userY]\n : [userY, poolAddresses.vaultY, poolAddresses.vaultX, userX];\n\n const [feeConfigPda] = getFeeConfigAddress(programId);\n const inputMint = params.isX ? mintX : mintY;\n const inputMintProgram = params.isX ? tokenProgramX : tokenProgramY;\n const feeRecipientAta = getAssociatedTokenAddressSync(\n inputMint,\n params.feeRecipient,\n false,\n inputMintProgram\n );\n\n const keys = [\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n { pubkey: poolAddresses.config, isSigner: false, isWritable: false },\n {\n pubkey: poolAddresses.midpriceOracle,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: poolAddresses.curveMeta, isSigner: false, isWritable: false },\n {\n pubkey: poolAddresses.curvePrefabs,\n isSigner: false,\n isWritable: true,\n },\n { pubkey: poolAddresses.config, isSigner: false, isWritable: false }, // authority = pool address PDA\n { pubkey: user, isSigner: true, isWritable: false },\n { pubkey: userSource, isSigner: false, isWritable: true },\n { pubkey: vaultSource, isSigner: false, isWritable: true },\n { pubkey: vaultDest, isSigner: false, isWritable: true },\n { pubkey: userDest, isSigner: false, isWritable: true },\n { pubkey: feeConfigPda, isSigner: false, isWritable: false },\n { pubkey: feeRecipientAta, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n {\n pubkey: poolAddresses.curveUpdates,\n isSigner: false,\n isWritable: true,\n },\n ];\n\n if (spreadConfigInitialized) {\n const [spreadConfigPda] = getSpreadConfigAddress(\n poolAddresses.config,\n programId\n );\n keys.push(\n { pubkey: spreadConfigPda, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false }\n );\n }\n\n return new TransactionInstruction({\n programId,\n keys,\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { Discriminator, POINT_DATA_SIZE, HADRON_PROGRAM_ID } from \"../constants\";\nimport { Interpolation, Side, CurveXMode, RiskMode } from \"../types\";\nimport { toQ32 } from \"../helpers/math\";\nimport type {\n SetCurveParams,\n SetCurveBothParams,\n SetRiskCurveParams,\n SetRiskCurveBothParams,\n SetRiskCurveAbsoluteParams,\n SetRiskCurveAbsoluteBothParams,\n} from \"../types\";\n\nfunction interpolationToByte(interp: Interpolation): number {\n return interp as number;\n}\n\n/**\n * Build a SetCurve instruction (price curve).\n * Accounts: authority, curve_meta, curve_prefabs.\n */\nexport function buildSetCurve(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetCurveParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const slot = params.slot ?? 0;\n const xMode = params.xMode ?? CurveXMode.Native;\n const numPoints = params.points.length;\n const data = Buffer.alloc(1 + 1 + 1 + 1 + 1 + 1 + numPoints * POINT_DATA_SIZE);\n let offset = 0;\n\n data.writeUInt8(Discriminator.SetCurve, offset);\n offset += 1;\n data.writeUInt8(slot, offset);\n offset += 1;\n data.writeUInt8(params.side, offset);\n offset += 1;\n data.writeUInt8(interpolationToByte(params.defaultInterpolation), offset);\n offset += 1;\n data.writeUInt8(numPoints, offset);\n offset += 1;\n data.writeUInt8(xMode, offset);\n offset += 1;\n\n for (const p of params.points) {\n data.writeBigUInt64LE(p.amountIn, offset);\n offset += 8;\n data.writeBigUInt64LE(toQ32(p.priceFactor), offset);\n offset += 8;\n data.writeUInt8(\n interpolationToByte(p.interpolation ?? params.defaultInterpolation),\n offset\n );\n offset += 1;\n const params_ = p.params ?? new Uint8Array(4);\n Buffer.from(params_).copy(data, offset, 0, 4);\n offset += 4;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a SetRiskCurve instruction (risk curve, percent-based x-axis by default).\n * Accounts: authority, curve_meta, curve_prefabs.\n */\nexport function buildSetRiskCurve(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetRiskCurveParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const slot = params.slot ?? 0;\n const xMode = params.xMode ?? CurveXMode.Native;\n const riskMode = params.riskMode ?? RiskMode.Virtual;\n const numPoints = params.points.length;\n const data = Buffer.alloc(\n 1 + 1 + 1 + 1 + 1 + 1 + 1 + numPoints * POINT_DATA_SIZE\n );\n let offset = 0;\n\n data.writeUInt8(Discriminator.SetRiskCurve, offset);\n offset += 1;\n data.writeUInt8(slot, offset);\n offset += 1;\n data.writeUInt8(params.side, offset);\n offset += 1;\n data.writeUInt8(interpolationToByte(params.defaultInterpolation), offset);\n offset += 1;\n data.writeUInt8(numPoints, offset);\n offset += 1;\n data.writeUInt8(xMode, offset);\n offset += 1;\n data.writeUInt8(riskMode, offset);\n offset += 1;\n\n for (const p of params.points) {\n data.writeBigUInt64LE(toQ32(p.pctBase), offset);\n offset += 8;\n data.writeBigUInt64LE(toQ32(p.priceFactor), offset);\n offset += 8;\n data.writeUInt8(\n interpolationToByte(p.interpolation ?? params.defaultInterpolation),\n offset\n );\n offset += 1;\n const params_ = p.params ?? new Uint8Array(4);\n Buffer.from(params_).copy(data, offset, 0, 4);\n offset += 4;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a SetRiskCurve instruction with absolute x-axis (CurveXMode::Alternate).\n */\nexport function buildSetRiskCurveAbsolute(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetRiskCurveAbsoluteParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const slot = params.slot ?? 0;\n const riskMode = params.riskMode ?? RiskMode.Virtual;\n const numPoints = params.points.length;\n const data = Buffer.alloc(\n 1 + 1 + 1 + 1 + 1 + 1 + 1 + numPoints * POINT_DATA_SIZE\n );\n let offset = 0;\n\n data.writeUInt8(Discriminator.SetRiskCurve, offset);\n offset += 1;\n data.writeUInt8(slot, offset);\n offset += 1;\n data.writeUInt8(params.side, offset);\n offset += 1;\n data.writeUInt8(interpolationToByte(params.defaultInterpolation), offset);\n offset += 1;\n data.writeUInt8(numPoints, offset);\n offset += 1;\n data.writeUInt8(CurveXMode.Alternate, offset); // absolute tokens\n offset += 1;\n data.writeUInt8(riskMode, offset);\n offset += 1;\n\n for (const p of params.points) {\n data.writeBigUInt64LE(p.vaultBalance, offset);\n offset += 8;\n data.writeBigUInt64LE(toQ32(p.priceFactor), offset);\n offset += 8;\n data.writeUInt8(\n interpolationToByte(p.interpolation ?? params.defaultInterpolation),\n offset\n );\n offset += 1;\n const params_ = p.params ?? new Uint8Array(4);\n Buffer.from(params_).copy(data, offset, 0, 4);\n offset += 4;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build SetCurve instructions for both bid and ask in one call.\n * Returns [bidIx, askIx] — add both to the same transaction.\n */\nexport function buildSetCurveBoth(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetCurveBothParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [TransactionInstruction, TransactionInstruction] {\n const bidIx = buildSetCurve(authority, curveMetaPda, curvePrefabsPda, { ...params.bid, side: Side.Bid }, programId);\n const askIx = buildSetCurve(authority, curveMetaPda, curvePrefabsPda, { ...params.ask, side: Side.Ask }, programId);\n return [bidIx, askIx];\n}\n\n/**\n * Build SetRiskCurve instructions for both bid and ask in one call.\n * Returns [bidIx, askIx].\n */\nexport function buildSetRiskCurveBoth(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetRiskCurveBothParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [TransactionInstruction, TransactionInstruction] {\n const bidIx = buildSetRiskCurve(authority, curveMetaPda, curvePrefabsPda, { ...params.bid, side: Side.Bid }, programId);\n const askIx = buildSetRiskCurve(authority, curveMetaPda, curvePrefabsPda, { ...params.ask, side: Side.Ask }, programId);\n return [bidIx, askIx];\n}\n\n/**\n * Build SetRiskCurve (absolute x-axis) instructions for both bid and ask in one call.\n * Returns [bidIx, askIx].\n */\nexport function buildSetRiskCurveAbsoluteBoth(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetRiskCurveAbsoluteBothParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [TransactionInstruction, TransactionInstruction] {\n const bidIx = buildSetRiskCurveAbsolute(authority, curveMetaPda, curvePrefabsPda, { ...params.bid, side: Side.Bid }, programId);\n const askIx = buildSetRiskCurveAbsolute(authority, curveMetaPda, curvePrefabsPda, { ...params.ask, side: Side.Ask }, programId);\n return [bidIx, askIx];\n}\n","import {\n PublicKey,\n SYSVAR_CLOCK_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type {\n UpdateMidpriceParams,\n UpdateBaseSpreadParams,\n UpdateMidpriceAndBaseSpreadParams,\n} from \"../types\";\n\n/**\n * Build an UpdateMidprice instruction.\n * Accounts: authority, midprice_oracle, clock.\n */\nexport function buildUpdateMidprice(\n authority: PublicKey,\n midpriceOraclePda: PublicKey,\n params: UpdateMidpriceParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8);\n data.writeUInt8(Discriminator.UpdateMidprice, 0);\n data.writeBigUInt64LE(params.sequence ?? 0n, 1);\n data.writeBigUInt64LE(params.midpriceQ32, 9);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: midpriceOraclePda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateBaseSpread instruction.\n * Accounts: authority, midprice_oracle, clock.\n */\nexport function buildUpdateBaseSpread(\n authority: PublicKey,\n midpriceOraclePda: PublicKey,\n params: UpdateBaseSpreadParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8);\n data.writeUInt8(Discriminator.UpdateBaseSpread, 0);\n data.writeBigUInt64LE(params.sequence ?? 0n, 1);\n data.writeBigUInt64LE(params.baseSpreadQ32, 9);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: midpriceOraclePda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateMidpriceAndBaseSpread instruction (atomic update of both).\n * Accounts: authority, midprice_oracle, clock.\n */\nexport function buildUpdateMidpriceAndBaseSpread(\n authority: PublicKey,\n midpriceOraclePda: PublicKey,\n params: UpdateMidpriceAndBaseSpreadParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8 + 8);\n data.writeUInt8(Discriminator.UpdateMidpriceAndBaseSpread, 0);\n data.writeBigUInt64LE(params.sequence ?? 0n, 1);\n data.writeBigUInt64LE(params.midpriceQ32, 9);\n data.writeBigUInt64LE(params.baseSpreadQ32, 17);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: midpriceOraclePda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type { SwitchCurveParams } from \"../types\";\n\n/**\n * Build a SwitchPriceCurve instruction (hot path).\n * Accounts: authority, curve_meta.\n */\nexport function buildSwitchPriceCurve(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n params: SwitchCurveParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1 + 1);\n data.writeUInt8(Discriminator.SwitchPriceCurve, 0);\n data.writeUInt8(params.side, 1);\n data.writeUInt8(params.slot, 2);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a SwitchRiskCurve instruction (hot path).\n * Accounts: authority, curve_meta.\n */\nexport function buildSwitchRiskCurve(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n params: SwitchCurveParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1 + 1);\n data.writeUInt8(Discriminator.SwitchRiskCurve, 0);\n data.writeUInt8(params.side, 1);\n data.writeUInt8(params.slot, 2);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport {\n Discriminator,\n CURVE_UPDATE_OP_SIZE,\n HADRON_PROGRAM_ID,\n} from \"../constants\";\nimport type { CurveUpdateOp } from \"../types\";\n\n/**\n * Build a SubmitCurveUpdates instruction (hot path, 2 accounts).\n * Accounts: authority, curve_updates.\n */\nexport function buildSubmitCurveUpdates(\n authority: PublicKey,\n curveUpdatesPda: PublicKey,\n ops: CurveUpdateOp[],\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1 + ops.length * CURVE_UPDATE_OP_SIZE);\n let offset = 0;\n\n data.writeUInt8(Discriminator.SubmitCurveUpdates, offset);\n offset += 1;\n data.writeUInt8(ops.length, offset);\n offset += 1;\n\n for (const op of ops) {\n data.writeUInt8(op.curveType, offset);\n offset += 1;\n data.writeUInt8(op.opKind, offset);\n offset += 1;\n data.writeUInt8(op.pointIndex, offset);\n offset += 1;\n data.writeUInt8(op.interpolation, offset);\n offset += 1;\n data.writeBigUInt64LE(op.amountIn, offset);\n offset += 8;\n data.writeBigUInt64LE(op.priceFactorQ32, offset);\n offset += 8;\n const params = op.params ?? new Uint8Array(4);\n Buffer.from(params).copy(data, offset, 0, 4);\n offset += 4;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveUpdatesPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build an ApplyCurveUpdates instruction.\n * Accounts: authority, curve_meta, curve_prefabs, curve_updates.\n */\nexport function buildApplyCurveUpdates(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n curveUpdatesPda: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1);\n data.writeUInt8(Discriminator.ApplyCurveUpdates, 0);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: false },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n { pubkey: curveUpdatesPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n","import {\n PublicKey,\n SYSVAR_CLOCK_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type { NominateAuthorityParams, SetQuotingAuthorityParams } from \"../types\";\n\n/**\n * Build a NominateAuthority instruction (step 1 of 2-step authority transfer).\n * Accounts: authority, config, clock.\n */\nexport function buildNominateAuthority(\n authority: PublicKey,\n configPda: PublicKey,\n params: NominateAuthorityParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 32 + 8);\n let offset = 0;\n\n data.writeUInt8(Discriminator.NominateAuthority, offset);\n offset += 1;\n params.newAuthority.toBuffer().copy(data, offset);\n offset += 32;\n data.writeBigUInt64LE(params.expirySlot, offset);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an AcceptAuthority instruction (step 2 of 2-step authority transfer).\n * Only updates Config.authority. Quoting authority is managed via SetQuotingAuthority.\n * Accounts: new_authority, config, clock.\n */\nexport function buildAcceptAuthority(\n newAuthority: PublicKey,\n configPda: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1);\n data.writeUInt8(Discriminator.AcceptAuthority, 0);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: newAuthority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build a SetQuotingAuthority instruction.\n * Pool authority sets a new quoting authority on MidpriceOracle, CurveMeta,\n * CurveUpdates, and optionally SpreadConfig.\n * Accounts: authority, config, midprice_oracle, curve_meta, curve_updates, [spread_config?].\n */\nexport function buildSetQuotingAuthority(\n authority: PublicKey,\n configPda: PublicKey,\n oraclePda: PublicKey,\n curveMetaPda: PublicKey,\n curveUpdatesPda: PublicKey,\n params: SetQuotingAuthorityParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 32);\n data.writeUInt8(Discriminator.SetQuotingAuthority, 0);\n params.newQuotingAuthority.toBuffer().copy(data, 1);\n\n const keys = [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: false },\n { pubkey: oraclePda, isSigner: false, isWritable: true },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curveUpdatesPda, isSigner: false, isWritable: true },\n ];\n\n if (params.spreadConfigPda) {\n keys.push({\n pubkey: params.spreadConfigPda,\n isSigner: false,\n isWritable: true,\n });\n }\n\n return new TransactionInstruction({\n programId,\n keys,\n data,\n });\n}\n","import {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport { getFeeConfigAddress } from \"../helpers/derive\";\nimport type {\n InitializeFeeConfigParams,\n RotateFeeAdminParams,\n UpdateFeeConfigParams,\n} from \"../types\";\n\n/**\n * Build an InitializeFeeConfig instruction (one-time global setup).\n * Accounts: payer, authority, fee_config, system_program.\n */\nexport function buildInitializeFeeConfig(\n payer: PublicKey,\n authority: PublicKey,\n params: InitializeFeeConfigParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [feeConfigPda] = getFeeConfigAddress(programId);\n\n const data = Buffer.alloc(1 + 4 + 32 + 32);\n let offset = 0;\n\n data.writeUInt8(Discriminator.InitializeFeeConfig, offset);\n offset += 1;\n data.writeUInt32LE(params.feePpm, offset);\n offset += 4;\n params.feeAdmin.toBuffer().copy(data, offset);\n offset += 32;\n params.feeRecipient.toBuffer().copy(data, offset);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: feeConfigPda, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateFeeConfig instruction.\n * Accounts: fee_admin, fee_config.\n */\nexport function buildUpdateFeeConfig(\n feeAdmin: PublicKey,\n params: UpdateFeeConfigParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [feeConfigPda] = getFeeConfigAddress(programId);\n\n const data = Buffer.alloc(1 + 4 + 32);\n let offset = 0;\n\n data.writeUInt8(Discriminator.UpdateFeeConfig, offset);\n offset += 1;\n // u32::MAX = no change\n data.writeUInt32LE(params.feePpm !== null ? params.feePpm : 0xffffffff, offset);\n offset += 4;\n // all zeros = no change\n if (params.feeRecipient) {\n params.feeRecipient.toBuffer().copy(data, offset);\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: feeAdmin, isSigner: true, isWritable: false },\n { pubkey: feeConfigPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a RotateFeeAdmin instruction.\n * Accounts: fee_admin (signer), fee_config (mut).\n */\nexport function buildRotateFeeAdmin(\n feeAdmin: PublicKey,\n params: RotateFeeAdminParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [feeConfigPda] = getFeeConfigAddress(programId);\n\n const data = Buffer.alloc(1 + 32);\n data.writeUInt8(Discriminator.RotateFeeAdmin, 0);\n params.newFeeAdmin.toBuffer().copy(data, 1);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: feeAdmin, isSigner: true, isWritable: false },\n { pubkey: feeConfigPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n","import {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport { getSpreadConfigAddress } from \"../helpers/derive\";\nimport type {\n InitializeSpreadConfigParams,\n UpdateSpreadConfigParams,\n} from \"../types\";\n\n/**\n * Build an InitializeSpreadConfig instruction.\n * Accounts: payer, authority, config, spread_config, system_program.\n */\nexport function buildInitializeSpreadConfig(\n payer: PublicKey,\n authority: PublicKey,\n configPda: PublicKey,\n params: InitializeSpreadConfigParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [spreadConfigPda] = getSpreadConfigAddress(configPda, programId);\n\n const data = Buffer.alloc(1 + 32);\n data.writeUInt8(Discriminator.InitializeSpreadConfig, 0);\n params.admin.toBuffer().copy(data, 1);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: spreadConfigPda, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateSpreadConfig instruction.\n * Accounts: admin, config, spread_config.\n */\nexport function buildUpdateSpreadConfig(\n admin: PublicKey,\n configPda: PublicKey,\n params: UpdateSpreadConfigParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [spreadConfigPda] = getSpreadConfigAddress(configPda, programId);\n\n // data: disc(1) + num_triggers(1) + triggers(34 each)\n const numTriggers = params.triggers.length;\n const data = Buffer.alloc(1 + 1 + numTriggers * 34);\n let offset = 0;\n\n data.writeUInt8(Discriminator.UpdateSpreadConfig, offset);\n offset += 1;\n data.writeUInt8(numTriggers, offset);\n offset += 1;\n\n for (const t of params.triggers) {\n t.account.toBuffer().copy(data, offset);\n offset += 32;\n data.writeUInt16LE(t.spreadBps, offset);\n offset += 2;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: admin, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: false },\n { pubkey: spreadConfigPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n","import {\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport { getSpreadConfigAddress } from \"../helpers/derive\";\nimport type {\n SetPoolStateParams,\n UpdateDeltaStalenessParams,\n} from \"../types\";\n\n/**\n * Build a SetPoolState instruction.\n * Accounts: authority, config.\n */\nexport function buildSetPoolState(\n authority: PublicKey,\n configPda: PublicKey,\n params: SetPoolStateParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1);\n data.writeUInt8(Discriminator.SetPoolState, 0);\n data.writeUInt8(params.newState, 1);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateDeltaStaleness instruction.\n * Accounts: authority, config.\n */\nexport function buildUpdateDeltaStaleness(\n authority: PublicKey,\n configPda: PublicKey,\n params: UpdateDeltaStalenessParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1);\n data.writeUInt8(Discriminator.UpdateDeltaStaleness, 0);\n data.writeUInt8(params.deltaStaleness, 1);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a ClosePool instruction.\n * Accounts: authority, config, midprice_oracle, curve_meta, curve_prefabs,\n * curve_updates, vault_x, vault_y, token_program_x, token_program_y,\n * [optional: spread_config if initialized].\n */\nexport function buildClosePool(\n authority: PublicKey,\n configPda: PublicKey,\n midpriceOraclePda: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n curveUpdatesPda: PublicKey,\n vaultX: PublicKey,\n vaultY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n spreadConfigInitialized: boolean = false,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1);\n data.writeUInt8(Discriminator.ClosePool, 0);\n\n const keys = [\n { pubkey: authority, isSigner: true, isWritable: true },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: midpriceOraclePda, isSigner: false, isWritable: true },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n { pubkey: curveUpdatesPda, isSigner: false, isWritable: true },\n { pubkey: vaultX, isSigner: false, isWritable: true },\n { pubkey: vaultY, isSigner: false, isWritable: true },\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n ];\n\n if (spreadConfigInitialized) {\n const [spreadConfigPda] = getSpreadConfigAddress(configPda, programId);\n keys.push({\n pubkey: spreadConfigPda,\n isSigner: false,\n isWritable: true,\n });\n }\n\n return new TransactionInstruction({ programId, keys, data });\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport {\n HADRON_PROGRAM_ID,\n curvePrefabsSize,\n DEFAULT_MAX_PREFAB_SLOTS,\n DEFAULT_MAX_CURVE_POINTS,\n} from \"./constants\";\nimport {\n derivePoolAddresses,\n getConfigAddress,\n getFeeConfigAddress,\n getSpreadConfigAddress,\n} from \"./helpers/derive\";\nimport { fromQ32 } from \"./helpers/math\";\nimport { getOrCreateAta } from \"./helpers/token\";\nimport {\n decodeConfig,\n decodeMidpriceOracle,\n decodeCurveMeta,\n decodeFeeConfig,\n decodeSpreadConfig,\n decodeCurveUpdates,\n decodeCurveSide,\n decodeActiveCurves,\n isSlotInitialized,\n} from \"./accounts\";\nimport {\n buildInitialize,\n buildAllocateCurvePrefabs,\n buildDeposit,\n buildWithdraw,\n buildSwapExactIn,\n buildSetCurve,\n buildSetCurveBoth,\n buildSetRiskCurve,\n buildSetRiskCurveBoth,\n buildSetRiskCurveAbsolute,\n buildSetRiskCurveAbsoluteBoth,\n buildUpdateMidprice,\n buildUpdateBaseSpread,\n buildUpdateMidpriceAndBaseSpread,\n buildSwitchPriceCurve,\n buildSwitchRiskCurve,\n buildSubmitCurveUpdates,\n buildApplyCurveUpdates,\n buildNominateAuthority,\n buildAcceptAuthority,\n buildSetPoolState,\n buildUpdateDeltaStaleness,\n buildClosePool,\n buildInitializeFeeConfig,\n buildUpdateFeeConfig,\n buildInitializeSpreadConfig,\n buildUpdateSpreadConfig,\n} from \"./instructions\";\nimport type {\n DecodedConfig,\n DecodedMidpriceOracle,\n DecodedCurveMeta,\n DecodedFeeConfig,\n CurveSide,\n CurveUpdateOp,\n PoolAddresses,\n InitializeParams,\n DepositParams,\n WithdrawParams,\n SwapParams,\n SetCurveParams,\n SetCurveBothParams,\n SetRiskCurveParams,\n SetRiskCurveBothParams,\n SetRiskCurveAbsoluteParams,\n SetRiskCurveAbsoluteBothParams,\n UpdateMidpriceParams,\n UpdateBaseSpreadParams,\n UpdateMidpriceAndBaseSpreadParams,\n SwitchCurveParams,\n NominateAuthorityParams,\n SetPoolStateParams,\n UpdateDeltaStalenessParams,\n InitializeFeeConfigParams,\n UpdateFeeConfigParams,\n InitializeSpreadConfigParams,\n UpdateSpreadConfigParams,\n SpreadTriggerInput,\n AllocateCurvePrefabsParams,\n} from \"./types\";\n\n/**\n * Main SDK class for interacting with a Hadron pool.\n *\n * Usage:\n * ```ts\n * const pool = await Hadron.load(connection, poolAddress);\n * const midprice = pool.getMidprice();\n * const ix = pool.swap(user, params);\n * ```\n */\nexport class Hadron {\n public readonly programId: PublicKey;\n public readonly poolAddress: PublicKey;\n public readonly addresses: PoolAddresses;\n\n public config: DecodedConfig;\n public oracle: DecodedMidpriceOracle;\n public curveMeta: DecodedCurveMeta;\n public curvePrefabsData: Uint8Array;\n\n private connection: Connection;\n\n constructor(\n connection: Connection,\n poolAddress: PublicKey,\n addresses: PoolAddresses,\n config: DecodedConfig,\n oracle: DecodedMidpriceOracle,\n curveMeta: DecodedCurveMeta,\n curvePrefabsData: Uint8Array,\n programId: PublicKey = HADRON_PROGRAM_ID\n ) {\n this.connection = connection;\n this.poolAddress = poolAddress;\n this.addresses = addresses;\n this.config = config;\n this.oracle = oracle;\n this.curveMeta = curveMeta;\n this.curvePrefabsData = curvePrefabsData;\n this.programId = programId;\n }\n\n // ==========================================================================\n // Static Factory Methods\n // ==========================================================================\n\n /**\n * Load a Hadron instance from an existing pool address.\n * Fetches all required accounts from the chain.\n */\n static async load(\n connection: Connection,\n poolAddress: PublicKey\n ): Promise<Hadron> {\n const programId = HADRON_PROGRAM_ID;\n\n // Fetch config first to get pool identity\n const configInfo = await connection.getAccountInfo(poolAddress);\n if (!configInfo) throw new Error(\"Config account not found\");\n const config = decodeConfig(configInfo.data);\n\n // Derive all addresses\n const tokenProgramX = config.tokenProgramX;\n const tokenProgramY = config.tokenProgramY;\n const addresses = derivePoolAddresses(\n config.seed,\n config.mintX,\n config.mintY,\n tokenProgramX,\n tokenProgramY,\n programId\n );\n\n // Fetch remaining accounts in parallel\n const [oracleInfo, curveMetaInfo, curvePrefabsInfo] = await Promise.all([\n connection.getAccountInfo(addresses.midpriceOracle),\n connection.getAccountInfo(addresses.curveMeta),\n connection.getAccountInfo(addresses.curvePrefabs),\n ]);\n\n if (!oracleInfo) throw new Error(\"MidpriceOracle account not found\");\n if (!curveMetaInfo) throw new Error(\"CurveMeta account not found\");\n if (!curvePrefabsInfo) throw new Error(\"CurvePrefabs account not found\");\n\n const oracle = decodeMidpriceOracle(oracleInfo.data);\n const curveMeta = decodeCurveMeta(curveMetaInfo.data);\n\n return new Hadron(\n connection,\n poolAddress,\n addresses,\n config,\n oracle,\n curveMeta,\n curvePrefabsInfo.data,\n programId\n );\n }\n\n /**\n * Load a Hadron instance from pool identity (seed + mints).\n */\n static async loadFromSeed(\n connection: Connection,\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey\n ): Promise<Hadron> {\n const programId = HADRON_PROGRAM_ID;\n const [poolAddress] = getConfigAddress(seed, mintX, mintY, programId);\n return Hadron.load(connection, poolAddress);\n }\n\n /**\n * Build all instructions needed to initialize a new pool.\n *\n * Returns the allocate + initialize instructions and the derived pool address.\n * The caller is responsible for grouping them into transactions and sending.\n * The allocate instruction(s) must be confirmed before the initialize instruction.\n *\n * After the pool is live on-chain, load it with `Hadron.load(connection, poolAddress)`.\n *\n * ```ts\n * const { instructions, poolAddress, seed } = Hadron.initialize(payer, {\n * mintX,\n * mintY,\n * authority: payer,\n * initialMidpriceQ32: Q32_ONE,\n * });\n * ```\n */\n static initialize(\n payer: PublicKey,\n params: InitializeParams\n ): { instructions: TransactionInstruction[]; poolAddress: PublicKey; seed: bigint } {\n const programId = HADRON_PROGRAM_ID;\n const seed = params.seed ?? Hadron.randomSeed();\n const maxPrefabSlots = params.maxPrefabSlots ?? DEFAULT_MAX_PREFAB_SLOTS;\n const maxCurvePoints = params.maxCurvePoints ?? DEFAULT_MAX_CURVE_POINTS;\n\n const resolvedParams = { ...params, seed };\n\n const [poolAddress] = getConfigAddress(\n seed,\n params.mintX,\n params.mintY,\n programId\n );\n\n const allocateParams: AllocateCurvePrefabsParams = {\n seed,\n mintX: params.mintX,\n mintY: params.mintY,\n maxPrefabSlots,\n maxCurvePoints,\n };\n\n const instructions: TransactionInstruction[] = [];\n\n const size = curvePrefabsSize(maxPrefabSlots, maxCurvePoints);\n const allocateCalls = size > 10_240 ? 2 : 1;\n for (let i = 0; i < allocateCalls; i++) {\n instructions.push(buildAllocateCurvePrefabs(payer, allocateParams, programId));\n }\n\n instructions.push(buildInitialize(payer, resolvedParams, programId));\n\n return { instructions, poolAddress, seed };\n }\n\n /** Generate a random u64 seed. */\n private static randomSeed(): bigint {\n const buf = new Uint8Array(8);\n crypto.getRandomValues(buf);\n return new DataView(buf.buffer).getBigUint64(0, true);\n }\n\n // ==========================================================================\n // State Queries\n // ==========================================================================\n\n /** Re-fetch all account state from the chain. */\n async refetchStates(): Promise<void> {\n const [configInfo, oracleInfo, curveMetaInfo, curvePrefabsInfo] =\n await Promise.all([\n this.connection.getAccountInfo(this.poolAddress),\n this.connection.getAccountInfo(this.addresses.midpriceOracle),\n this.connection.getAccountInfo(this.addresses.curveMeta),\n this.connection.getAccountInfo(this.addresses.curvePrefabs),\n ]);\n\n if (configInfo) this.config = decodeConfig(configInfo.data);\n if (oracleInfo) this.oracle = decodeMidpriceOracle(oracleInfo.data);\n if (curveMetaInfo) this.curveMeta = decodeCurveMeta(curveMetaInfo.data);\n if (curvePrefabsInfo) this.curvePrefabsData = curvePrefabsInfo.data;\n }\n\n /** Get midprice as a floating-point number. */\n getMidprice(): number {\n return fromQ32(this.oracle.midpriceQ32);\n }\n\n /** Get base spread as a floating-point number. */\n getBaseSpread(): number {\n return fromQ32(this.oracle.baseSpreadQ32);\n }\n\n /** Get the currently active curve slot indices. */\n getActiveCurveSlots(): {\n priceBid: number;\n priceAsk: number;\n riskBid: number;\n riskAsk: number;\n } {\n return {\n priceBid: this.curveMeta.activePriceBidSlot,\n priceAsk: this.curveMeta.activePriceAskSlot,\n riskBid: this.curveMeta.activeRiskBidSlot,\n riskAsk: this.curveMeta.activeRiskAskSlot,\n };\n }\n\n /** Decode the currently active curves from prefabs data. */\n getActiveCurves(): {\n priceBid: CurveSide;\n priceAsk: CurveSide;\n riskBid: CurveSide;\n riskAsk: CurveSide;\n } {\n return decodeActiveCurves(this.curvePrefabsData, this.curveMeta);\n }\n\n /** Decode a specific curve slot. */\n getCurveSlot(\n curveType: import(\"./types\").CurveType,\n slot: number\n ): CurveSide {\n return decodeCurveSide(\n this.curvePrefabsData,\n curveType,\n slot,\n this.curveMeta.maxPrefabSlots,\n this.curveMeta.maxCurvePoints\n );\n }\n\n // ==========================================================================\n // Instruction Builders (convenience wrappers)\n // ==========================================================================\n\n /** Build deposit instruction. */\n deposit(user: PublicKey, params: DepositParams): TransactionInstruction {\n return buildDeposit(\n user,\n this.poolAddress,\n this.config.mintX,\n this.config.mintY,\n this.config.tokenProgramX,\n this.config.tokenProgramY,\n params,\n this.programId\n );\n }\n\n /** Build withdraw instruction. */\n withdraw(user: PublicKey, params: WithdrawParams): TransactionInstruction {\n return buildWithdraw(\n user,\n this.poolAddress,\n this.config.mintX,\n this.config.mintY,\n this.config.tokenProgramX,\n this.config.tokenProgramY,\n params,\n this.programId\n );\n }\n\n /** Build swap instruction. */\n swap(user: PublicKey, params: SwapParams): TransactionInstruction {\n return buildSwapExactIn(\n user,\n this.addresses,\n this.config.mintX,\n this.config.mintY,\n this.config.tokenProgramX,\n this.config.tokenProgramY,\n params,\n this.programId,\n this.config.spreadConfigInitialized\n );\n }\n\n /** Build set curve instruction. */\n setCurve(\n authority: PublicKey,\n params: SetCurveParams\n ): TransactionInstruction {\n return buildSetCurve(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set risk curve instruction (percent-based x-axis). */\n setRiskCurve(\n authority: PublicKey,\n params: SetRiskCurveParams\n ): TransactionInstruction {\n return buildSetRiskCurve(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set risk curve instruction (absolute x-axis). */\n setRiskCurveAbsolute(\n authority: PublicKey,\n params: SetRiskCurveAbsoluteParams\n ): TransactionInstruction {\n return buildSetRiskCurveAbsolute(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set curve instructions for both bid and ask. Returns [bidIx, askIx]. */\n setCurveBoth(\n authority: PublicKey,\n params: SetCurveBothParams\n ): [TransactionInstruction, TransactionInstruction] {\n return buildSetCurveBoth(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set risk curve instructions for both bid and ask. Returns [bidIx, askIx]. */\n setRiskCurveBoth(\n authority: PublicKey,\n params: SetRiskCurveBothParams\n ): [TransactionInstruction, TransactionInstruction] {\n return buildSetRiskCurveBoth(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set risk curve (absolute x-axis) instructions for both bid and ask. Returns [bidIx, askIx]. */\n setRiskCurveAbsoluteBoth(\n authority: PublicKey,\n params: SetRiskCurveAbsoluteBothParams\n ): [TransactionInstruction, TransactionInstruction] {\n return buildSetRiskCurveAbsoluteBoth(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build update midprice instruction. */\n updateMidprice(\n authority: PublicKey,\n params: UpdateMidpriceParams\n ): TransactionInstruction {\n return buildUpdateMidprice(\n authority,\n this.addresses.midpriceOracle,\n params,\n this.programId\n );\n }\n\n /** Build update base spread instruction. */\n updateBaseSpread(\n authority: PublicKey,\n params: UpdateBaseSpreadParams\n ): TransactionInstruction {\n return buildUpdateBaseSpread(\n authority,\n this.addresses.midpriceOracle,\n params,\n this.programId\n );\n }\n\n /** Build atomic update of midprice + base spread. */\n updateMidpriceAndBaseSpread(\n authority: PublicKey,\n params: UpdateMidpriceAndBaseSpreadParams\n ): TransactionInstruction {\n return buildUpdateMidpriceAndBaseSpread(\n authority,\n this.addresses.midpriceOracle,\n params,\n this.programId\n );\n }\n\n /** Build switch price curve instruction (hot path). */\n switchPriceCurve(\n authority: PublicKey,\n params: SwitchCurveParams\n ): TransactionInstruction {\n return buildSwitchPriceCurve(\n authority,\n this.addresses.curveMeta,\n params,\n this.programId\n );\n }\n\n /** Build switch risk curve instruction (hot path). */\n switchRiskCurve(\n authority: PublicKey,\n params: SwitchCurveParams\n ): TransactionInstruction {\n return buildSwitchRiskCurve(\n authority,\n this.addresses.curveMeta,\n params,\n this.programId\n );\n }\n\n /** Build submit curve updates instruction (hot path). */\n submitCurveUpdates(\n authority: PublicKey,\n ops: CurveUpdateOp[]\n ): TransactionInstruction {\n return buildSubmitCurveUpdates(\n authority,\n this.addresses.curveUpdates,\n ops,\n this.programId\n );\n }\n\n /** Build apply curve updates instruction. */\n applyCurveUpdates(authority: PublicKey): TransactionInstruction {\n return buildApplyCurveUpdates(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n this.addresses.curveUpdates,\n this.programId\n );\n }\n\n /** Build nominate authority instruction. */\n nominateAuthority(\n authority: PublicKey,\n params: NominateAuthorityParams\n ): TransactionInstruction {\n return buildNominateAuthority(\n authority,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /** Build accept authority instruction. */\n acceptAuthority(newAuthority: PublicKey): TransactionInstruction {\n return buildAcceptAuthority(\n newAuthority,\n this.poolAddress,\n this.programId\n );\n }\n\n /** Build set pool state instruction. */\n setPoolState(\n authority: PublicKey,\n params: SetPoolStateParams\n ): TransactionInstruction {\n return buildSetPoolState(\n authority,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /** Build update delta staleness instruction. */\n updateDeltaStaleness(\n authority: PublicKey,\n params: UpdateDeltaStalenessParams\n ): TransactionInstruction {\n return buildUpdateDeltaStaleness(\n authority,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /** Build initialize spread config instruction. */\n initializeSpreadConfig(\n payer: PublicKey,\n authority: PublicKey,\n params: InitializeSpreadConfigParams\n ): TransactionInstruction {\n return buildInitializeSpreadConfig(\n payer,\n authority,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /** Build update spread config instruction (full replacement). */\n updateSpreadConfig(\n admin: PublicKey,\n params: UpdateSpreadConfigParams\n ): TransactionInstruction {\n return buildUpdateSpreadConfig(\n admin,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /**\n * Fetch current spread triggers, append new ones, and return the update ix.\n * If a trigger for the same account already exists, its spreadBps is updated.\n */\n async addSpreadTriggers(\n admin: PublicKey,\n triggers: SpreadTriggerInput[]\n ): Promise<TransactionInstruction> {\n const current = await this.fetchSpreadTriggers();\n const merged = [...current];\n for (const t of triggers) {\n const existing = merged.findIndex(\n (e) => e.account.equals(t.account)\n );\n if (existing >= 0) {\n merged[existing] = t;\n } else {\n merged.push(t);\n }\n }\n return this.updateSpreadConfig(admin, { triggers: merged });\n }\n\n /**\n * Fetch current spread triggers, remove the given accounts, and return the update ix.\n */\n async removeSpreadTriggers(\n admin: PublicKey,\n accounts: PublicKey[]\n ): Promise<TransactionInstruction> {\n const current = await this.fetchSpreadTriggers();\n const removeSet = new Set(accounts.map((a) => a.toBase58()));\n const filtered = current.filter(\n (t) => !removeSet.has(t.account.toBase58())\n );\n return this.updateSpreadConfig(admin, { triggers: filtered });\n }\n\n /** Fetch and decode the current spread config triggers from chain. */\n private async fetchSpreadTriggers(): Promise<SpreadTriggerInput[]> {\n const [spreadConfigPda] = getSpreadConfigAddress(\n this.poolAddress,\n this.programId\n );\n const info = await this.connection.getAccountInfo(spreadConfigPda);\n if (!info) return [];\n const decoded = decodeSpreadConfig(info.data);\n return decoded.triggers;\n }\n\n /** Build close pool instruction. */\n closePool(authority: PublicKey): TransactionInstruction {\n return buildClosePool(\n authority,\n this.poolAddress,\n this.addresses.midpriceOracle,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n this.addresses.curveUpdates,\n this.addresses.vaultX,\n this.addresses.vaultY,\n this.config.tokenProgramX,\n this.config.tokenProgramY,\n this.config.spreadConfigInitialized,\n this.programId\n );\n }\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Hadron } from \"./hadron\";\nimport { fromQ32, toQ32 } from \"./helpers/math\";\nimport { MAX_SETCURVE_POINTS, MAX_CURVE_UPDATE_OPS } from \"./constants\";\nimport {\n Interpolation,\n Side,\n RiskMode,\n CurveXMode,\n CurveType,\n CurveUpdateOpKind,\n} from \"./types\";\nimport type {\n StagedOrder,\n OrderSide,\n PlaceOrderParams,\n AmendOrderParams,\n CancelOrderParams,\n OrderbookLevel,\n OrderbookState,\n SetRiskCurveAbsolutePointInput,\n SetCurvePointInput,\n DepositParams,\n WithdrawParams,\n SetPoolStateParams,\n UpdateMidpriceParams,\n CurveUpdateOp,\n CurvePoint,\n} from \"./types\";\n\n/** Maximum orders per side (MAX_SETCURVE_POINTS minus terminal point). */\nconst MAX_ORDERS_PER_SIDE = MAX_SETCURVE_POINTS - 1;\n\nfunction tokensToAtoms(tokens: number, decimals: number): bigint {\n return BigInt(Math.round(tokens * 10 ** decimals));\n}\n\nfunction atomsToTokens(atoms: bigint, decimals: number): number {\n return Number(atoms) / 10 ** decimals;\n}\n\n/**\n * High-level orderbook abstraction over a Hadron pool.\n *\n * Maps limit orders to risk curve points using `CurveXMode.Alternate`\n * (absolute vault balance x-axis) and `RiskMode.Integrated`.\n *\n * ```ts\n * const book = await HadronOrderbook.load({ connection, pool: poolAddress });\n * book.placeOrder({ side: \"bid\", size: 100, spreadBps: 10 });\n * book.placeOrder({ side: \"ask\", size: 100, spreadBps: 10 });\n * const ixs = book.push(authority);\n * ```\n */\nexport class HadronOrderbook {\n /** Underlying Hadron pool instance. */\n public readonly pool: Hadron;\n /** Decimals for token X (base). */\n public readonly decimalsX: number;\n /** Decimals for token Y (quote). */\n public readonly decimalsY: number;\n /** Vault X balance at time of load (atoms). */\n public readonly initialVaultX: bigint;\n /** Vault Y balance at time of load (atoms). */\n public readonly initialVaultY: bigint;\n\n private bidOrders: StagedOrder[] = [];\n private askOrders: StagedOrder[] = [];\n private bidsDirty = false;\n private asksDirty = false;\n private priceCurvesSet = false;\n\n private riskBidInitialized = false;\n private riskAskInitialized = false;\n private committedBidPoints: CurvePoint[] = [];\n private committedAskPoints: CurvePoint[] = [];\n\n private constructor(\n pool: Hadron,\n decimalsX: number,\n decimalsY: number,\n initialVaultX: bigint,\n initialVaultY: bigint\n ) {\n this.pool = pool;\n this.decimalsX = decimalsX;\n this.decimalsY = decimalsY;\n this.initialVaultX = initialVaultX;\n this.initialVaultY = initialVaultY;\n }\n\n // ==========================================================================\n // Static Factories\n // ==========================================================================\n\n /**\n * Load an orderbook from an existing on-chain pool.\n * Fetches decimals and vault balances, and reconstructs staged orders\n * from the active risk curves.\n */\n static async load(params: {\n connection: Connection;\n pool: PublicKey;\n }): Promise<HadronOrderbook> {\n const { connection, pool: poolAddress } = params;\n\n const hadron = await Hadron.load(connection, poolAddress);\n\n // Fetch mint info for decimals\n const [mintXInfo, mintYInfo, vaultXInfo, vaultYInfo] = await Promise.all([\n connection.getAccountInfo(hadron.config.mintX),\n connection.getAccountInfo(hadron.config.mintY),\n connection.getAccountInfo(hadron.addresses.vaultX),\n connection.getAccountInfo(hadron.addresses.vaultY),\n ]);\n\n if (!mintXInfo || !mintYInfo) throw new Error(\"Mint account(s) not found\");\n if (!vaultXInfo || !vaultYInfo) throw new Error(\"Vault account(s) not found\");\n\n // SPL Token mint layout: decimals at offset 44 (1 byte)\n const decimalsX = mintXInfo.data[44];\n const decimalsY = mintYInfo.data[44];\n\n // SPL Token account layout: amount at offset 64 (u64 LE)\n const vaultXBalance = new DataView(\n vaultXInfo.data.buffer,\n vaultXInfo.data.byteOffset\n ).getBigUint64(64, true);\n const vaultYBalance = new DataView(\n vaultYInfo.data.buffer,\n vaultYInfo.data.byteOffset\n ).getBigUint64(64, true);\n\n const book = new HadronOrderbook(\n hadron,\n decimalsX,\n decimalsY,\n vaultXBalance,\n vaultYBalance\n );\n\n // Reconstruct orders from on-chain risk curves\n book.reconstructFromCurves();\n\n return book;\n }\n\n /**\n * Wrap an existing Hadron instance as an orderbook.\n * Useful for tests or when you already have the pool loaded.\n */\n static fromPool(\n pool: Hadron,\n decimalsX: number,\n decimalsY: number,\n initialVaultX: bigint,\n initialVaultY: bigint\n ): HadronOrderbook {\n return new HadronOrderbook(\n pool,\n decimalsX,\n decimalsY,\n initialVaultX,\n initialVaultY\n );\n }\n\n // ==========================================================================\n // Order Management\n // ==========================================================================\n\n /**\n * Place a new order. Orders are staged locally and pushed on-chain via `push()`.\n * Orders on each side are sorted by spreadBps ascending (tightest first).\n * @throws If more than 31 orders on a side.\n */\n placeOrder(params: PlaceOrderParams): void {\n const orders = params.side === \"bid\" ? this.bidOrders : this.askOrders;\n\n if (orders.length >= MAX_ORDERS_PER_SIDE) {\n throw new Error(\n `Cannot place more than ${MAX_ORDERS_PER_SIDE} orders per side`\n );\n }\n\n orders.push({ size: params.size, spreadBps: params.spreadBps });\n orders.sort((a, b) => a.spreadBps - b.spreadBps);\n\n if (params.side === \"bid\") this.bidsDirty = true;\n else this.asksDirty = true;\n }\n\n /**\n * Amend an existing order at the given level index.\n * Re-sorts if spread changes.\n * @throws On invalid index.\n */\n amendOrder(params: AmendOrderParams): void {\n const orders = params.side === \"bid\" ? this.bidOrders : this.askOrders;\n\n if (params.level < 0 || params.level >= orders.length) {\n throw new Error(\n `Invalid level ${params.level} for ${params.side} (have ${orders.length} orders)`\n );\n }\n\n const order = orders[params.level];\n if (params.spreadBps !== undefined) order.spreadBps = params.spreadBps;\n if (params.size !== undefined) order.size = params.size;\n\n orders.sort((a, b) => a.spreadBps - b.spreadBps);\n\n if (params.side === \"bid\") this.bidsDirty = true;\n else this.asksDirty = true;\n }\n\n /**\n * Cancel the order at the given level index.\n * @throws On invalid index.\n */\n cancelOrder(params: CancelOrderParams): void {\n const orders = params.side === \"bid\" ? this.bidOrders : this.askOrders;\n\n if (params.level < 0 || params.level >= orders.length) {\n throw new Error(\n `Invalid level ${params.level} for ${params.side} (have ${orders.length} orders)`\n );\n }\n\n orders.splice(params.level, 1);\n\n if (params.side === \"bid\") this.bidsDirty = true;\n else this.asksDirty = true;\n }\n\n /** Cancel all orders on one or both sides. */\n cancelAll(side?: OrderSide): void {\n if (!side || side === \"bid\") {\n this.bidOrders = [];\n this.bidsDirty = true;\n }\n if (!side || side === \"ask\") {\n this.askOrders = [];\n this.asksDirty = true;\n }\n }\n\n /** Read-only access to staged bid orders. */\n getBids(): readonly StagedOrder[] {\n return this.bidOrders;\n }\n\n /** Read-only access to staged ask orders. */\n getAsks(): readonly StagedOrder[] {\n return this.askOrders;\n }\n\n // ==========================================================================\n // Push (orders → on-chain risk curves)\n // ==========================================================================\n\n /**\n * Build transaction instructions to push the current staged orders on-chain.\n *\n * 1. On first push, sets flat price curves (factor=1.0, Step interpolation).\n * 2. If risk curves not yet initialized, uses setRiskCurveAbsolute (sets headers).\n * 3. On subsequent pushes, computes a minimal diff and uses curve updates\n * (submit + apply) when possible, falling back to full rewrite for large diffs.\n */\n push(authority: PublicKey): TransactionInstruction[] {\n const ixs: TransactionInstruction[] = [];\n\n // First push: set flat price curves so price curve doesn't interfere\n if (!this.priceCurvesSet) {\n const flatPoints: SetCurvePointInput[] = [\n { amountIn: 0n, priceFactor: 1.0, interpolation: Interpolation.Step },\n {\n amountIn: BigInt(\"1000000000000000000\"),\n priceFactor: 1.0,\n interpolation: Interpolation.Step,\n },\n ];\n const [bidPriceIx, askPriceIx] = this.pool.setCurveBoth(authority, {\n bid: { defaultInterpolation: Interpolation.Step, points: flatPoints },\n ask: { defaultInterpolation: Interpolation.Step, points: flatPoints },\n });\n ixs.push(bidPriceIx, askPriceIx);\n this.priceCurvesSet = true;\n }\n\n // If any side not initialized, use full setRiskCurve (sets headers + points)\n if (!this.riskBidInitialized || !this.riskAskInitialized) {\n ixs.push(...this.buildFullRiskCurveIxs(authority));\n this.bidsDirty = false;\n this.asksDirty = false;\n return ixs;\n }\n\n // Both sides initialized — use curve updates path\n const updateIxs = this.buildCurveUpdateIxs(authority);\n ixs.push(...updateIxs);\n\n this.bidsDirty = false;\n this.asksDirty = false;\n\n return ixs;\n }\n\n // ==========================================================================\n // Delegated Methods\n // ==========================================================================\n\n /** Build an updateMidprice instruction. */\n updateMidprice(\n authority: PublicKey,\n midprice: number,\n sequence?: bigint\n ): TransactionInstruction {\n const params: UpdateMidpriceParams = {\n midpriceQ32: BigInt(Math.floor(midprice * 2 ** 32)),\n sequence,\n };\n return this.pool.updateMidprice(authority, params);\n }\n\n /** Build a deposit instruction. */\n deposit(user: PublicKey, params: DepositParams): TransactionInstruction {\n return this.pool.deposit(user, params);\n }\n\n /** Build a withdraw instruction. */\n withdraw(user: PublicKey, params: WithdrawParams): TransactionInstruction {\n return this.pool.withdraw(user, params);\n }\n\n /** Build a setPoolState instruction. */\n setPoolState(\n authority: PublicKey,\n params: SetPoolStateParams\n ): TransactionInstruction {\n return this.pool.setPoolState(authority, params);\n }\n\n /**\n * Get the current book state by reading on-chain risk curves + midprice.\n * Reconstructs levels from curve points.\n */\n getBookState(): OrderbookState {\n const midprice = this.pool.getMidprice();\n const curves = this.pool.getActiveCurves();\n\n const bids = this.curveSideToLevels(\n curves.riskBid,\n midprice,\n \"bid\",\n this.decimalsX\n );\n const asks = this.curveSideToLevels(\n curves.riskAsk,\n midprice,\n \"ask\",\n this.decimalsY\n );\n\n const base = atomsToTokens(this.initialVaultX, this.decimalsX);\n const quote = atomsToTokens(this.initialVaultY, this.decimalsY);\n\n return { midprice, bids, asks, inventory: { base, quote } };\n }\n\n // ==========================================================================\n // Curve Update Diff Algorithm\n // ==========================================================================\n\n /**\n * Compute the minimal set of curve update ops to transform `committed` into `desired`.\n *\n * Algorithm:\n * 1. Scan left-to-right for factor-only diffs (amountIn unchanged) → Edit ops.\n * 2. At the first structural diff (amountIn changed or length mismatch),\n * truncate-and-rebuild: remove all from that index to end, then add desired.\n * 3. Returns the ops array.\n */\n static computeCurveOps(\n committed: CurvePoint[],\n desired: CurvePoint[],\n curveType: CurveType\n ): CurveUpdateOp[] {\n const ops: CurveUpdateOp[] = [];\n const minLen = Math.min(committed.length, desired.length);\n\n let structuralDiffIndex = minLen;\n\n // Phase 1: scan for factor-only edits\n for (let i = 0; i < minLen; i++) {\n const c = committed[i];\n const d = desired[i];\n\n if (c.amountIn !== d.amountIn) {\n structuralDiffIndex = i;\n break;\n }\n\n if (c.priceFactorQ32 !== d.priceFactorQ32 || c.interpolation !== d.interpolation) {\n ops.push({\n curveType,\n opKind: CurveUpdateOpKind.Edit,\n pointIndex: i,\n interpolation: d.interpolation,\n amountIn: d.amountIn,\n priceFactorQ32: d.priceFactorQ32,\n params: d.params,\n });\n }\n }\n\n // If lengths differ but we scanned all of minLen without structural diff\n if (structuralDiffIndex === minLen && committed.length !== desired.length) {\n structuralDiffIndex = minLen;\n }\n\n // If no structural diff and same length, we're done (only factor edits)\n if (structuralDiffIndex === minLen && committed.length === desired.length) {\n return ops;\n }\n\n // Phase 2: truncate-and-rebuild from structuralDiffIndex\n // Remove all committed points from structuralDiffIndex to end\n // Each remove at structuralDiffIndex shifts the next point into that slot\n const numToRemove = committed.length - structuralDiffIndex;\n for (let i = 0; i < numToRemove; i++) {\n ops.push({\n curveType,\n opKind: CurveUpdateOpKind.Remove,\n pointIndex: structuralDiffIndex,\n interpolation: Interpolation.Step,\n amountIn: 0n,\n priceFactorQ32: 0n,\n params: new Uint8Array(4),\n });\n }\n\n // Add all desired points from structuralDiffIndex to end\n for (let i = structuralDiffIndex; i < desired.length; i++) {\n const d = desired[i];\n ops.push({\n curveType,\n opKind: CurveUpdateOpKind.Add,\n pointIndex: i,\n interpolation: d.interpolation,\n amountIn: d.amountIn,\n priceFactorQ32: d.priceFactorQ32,\n params: d.params,\n });\n }\n\n return ops;\n }\n\n // ==========================================================================\n // Internal Helpers\n // ==========================================================================\n\n /** Convert SetRiskCurveAbsolutePointInput[] to CurvePoint[] for diffing. */\n private static toCommittedPoints(\n points: SetRiskCurveAbsolutePointInput[]\n ): CurvePoint[] {\n return points.map((p) => ({\n amountIn: p.vaultBalance,\n priceFactorQ32: toQ32(p.priceFactor),\n interpolation: p.interpolation ?? Interpolation.Step,\n params: p.params ?? new Uint8Array(4),\n }));\n }\n\n /**\n * Build full setRiskCurveAbsolute instructions for sides that need initialization.\n * After sending, snapshots committed points and marks sides as initialized.\n */\n private buildFullRiskCurveIxs(\n authority: PublicKey\n ): TransactionInstruction[] {\n const ixs: TransactionInstruction[] = [];\n const hasBids = this.bidOrders.length > 0;\n const hasAsks = this.askOrders.length > 0;\n\n const bidPoints = hasBids ? this.buildBidRiskPoints() : undefined;\n const askPoints = hasAsks ? this.buildAskRiskPoints() : undefined;\n\n if (bidPoints && askPoints && !this.riskBidInitialized && !this.riskAskInitialized) {\n const [bidIx, askIx] = this.pool.setRiskCurveAbsoluteBoth(authority, {\n bid: {\n defaultInterpolation: Interpolation.Step,\n points: bidPoints,\n riskMode: RiskMode.Integrated,\n },\n ask: {\n defaultInterpolation: Interpolation.Step,\n points: askPoints,\n riskMode: RiskMode.Integrated,\n },\n });\n ixs.push(bidIx, askIx);\n this.committedBidPoints = HadronOrderbook.toCommittedPoints(bidPoints);\n this.committedAskPoints = HadronOrderbook.toCommittedPoints(askPoints);\n this.riskBidInitialized = true;\n this.riskAskInitialized = true;\n } else {\n if (bidPoints && !this.riskBidInitialized) {\n ixs.push(\n this.pool.setRiskCurveAbsolute(authority, {\n side: Side.Bid,\n defaultInterpolation: Interpolation.Step,\n points: bidPoints,\n riskMode: RiskMode.Integrated,\n })\n );\n this.committedBidPoints = HadronOrderbook.toCommittedPoints(bidPoints);\n this.riskBidInitialized = true;\n }\n if (askPoints && !this.riskAskInitialized) {\n ixs.push(\n this.pool.setRiskCurveAbsolute(authority, {\n side: Side.Ask,\n defaultInterpolation: Interpolation.Step,\n points: askPoints,\n riskMode: RiskMode.Integrated,\n })\n );\n this.committedAskPoints = HadronOrderbook.toCommittedPoints(askPoints);\n this.riskAskInitialized = true;\n }\n }\n\n return ixs;\n }\n\n /**\n * Build curve update instructions (submit + apply pairs) for both sides.\n * Falls back to full setRiskCurve rewrite if diff is too large.\n */\n private buildCurveUpdateIxs(\n authority: PublicKey\n ): TransactionInstruction[] {\n const bidPoints = this.buildBidRiskPoints();\n const askPoints = this.buildAskRiskPoints();\n const desiredBid = HadronOrderbook.toCommittedPoints(bidPoints);\n const desiredAsk = HadronOrderbook.toCommittedPoints(askPoints);\n\n const bidOps = HadronOrderbook.computeCurveOps(\n this.committedBidPoints,\n desiredBid,\n CurveType.RiskBid\n );\n const askOps = HadronOrderbook.computeCurveOps(\n this.committedAskPoints,\n desiredAsk,\n CurveType.RiskAsk\n );\n\n const allOps = [...bidOps, ...askOps];\n\n // No-op: nothing changed\n if (allOps.length === 0) {\n return [];\n }\n\n // Fallback: too many ops → full rewrite is cheaper\n if (allOps.length > MAX_CURVE_UPDATE_OPS * 4) {\n return this.buildFallbackRewrite(authority, bidPoints, askPoints);\n }\n\n // Batch ops into submit+apply pairs (each batch ≤ MAX_CURVE_UPDATE_OPS)\n const ixs: TransactionInstruction[] = [];\n for (let i = 0; i < allOps.length; i += MAX_CURVE_UPDATE_OPS) {\n const batch = allOps.slice(i, i + MAX_CURVE_UPDATE_OPS);\n ixs.push(this.pool.submitCurveUpdates(authority, batch));\n ixs.push(this.pool.applyCurveUpdates(authority));\n }\n\n // Update committed snapshots\n this.committedBidPoints = desiredBid;\n this.committedAskPoints = desiredAsk;\n\n return ixs;\n }\n\n /** Fallback: full setRiskCurve rewrite for both sides. */\n private buildFallbackRewrite(\n authority: PublicKey,\n bidPoints: SetRiskCurveAbsolutePointInput[],\n askPoints: SetRiskCurveAbsolutePointInput[]\n ): TransactionInstruction[] {\n const [bidIx, askIx] = this.pool.setRiskCurveAbsoluteBoth(authority, {\n bid: {\n defaultInterpolation: Interpolation.Step,\n points: bidPoints,\n riskMode: RiskMode.Integrated,\n },\n ask: {\n defaultInterpolation: Interpolation.Step,\n points: askPoints,\n riskMode: RiskMode.Integrated,\n },\n });\n\n this.committedBidPoints = HadronOrderbook.toCommittedPoints(bidPoints);\n this.committedAskPoints = HadronOrderbook.toCommittedPoints(askPoints);\n\n return [bidIx, askIx];\n }\n\n private buildBidRiskPoints(): SetRiskCurveAbsolutePointInput[] {\n const points: SetRiskCurveAbsolutePointInput[] = [];\n let cumulativeAtoms = this.initialVaultX;\n\n for (const order of this.bidOrders) {\n const priceFactor = 1 - order.spreadBps / 10_000;\n points.push({\n vaultBalance: cumulativeAtoms,\n priceFactor,\n interpolation: Interpolation.Step,\n });\n cumulativeAtoms += tokensToAtoms(order.size, this.decimalsX);\n }\n\n // Terminal point at final cumulative with last order's price factor\n const lastFactor =\n this.bidOrders.length > 0\n ? 1 - this.bidOrders[this.bidOrders.length - 1].spreadBps / 10_000\n : 1.0;\n points.push({\n vaultBalance: cumulativeAtoms,\n priceFactor: lastFactor,\n interpolation: Interpolation.Step,\n });\n\n return points;\n }\n\n private buildAskRiskPoints(): SetRiskCurveAbsolutePointInput[] {\n const points: SetRiskCurveAbsolutePointInput[] = [];\n let cumulativeAtoms = this.initialVaultY;\n const midprice = this.pool.getMidprice();\n\n for (const order of this.askOrders) {\n const priceFactor = 1 + order.spreadBps / 10_000;\n points.push({\n vaultBalance: cumulativeAtoms,\n priceFactor,\n interpolation: Interpolation.Step,\n });\n // Convert base size to quote atoms via midprice\n const quoteSizeTokens = order.size * midprice;\n cumulativeAtoms += tokensToAtoms(quoteSizeTokens, this.decimalsY);\n }\n\n // Terminal point\n const lastFactor =\n this.askOrders.length > 0\n ? 1 + this.askOrders[this.askOrders.length - 1].spreadBps / 10_000\n : 1.0;\n points.push({\n vaultBalance: cumulativeAtoms,\n priceFactor: lastFactor,\n interpolation: Interpolation.Step,\n });\n\n return points;\n }\n\n /**\n * Reconstruct staged orders from on-chain risk curves (after load).\n * Assumes curves were set via this class (CurveXMode.Alternate, RiskMode.Integrated, Step).\n */\n private reconstructFromCurves(): void {\n const curves = this.pool.getActiveCurves();\n\n // Detect initialized state and snapshot committed points\n if (\n curves.riskBid.xMode === CurveXMode.Alternate &&\n curves.riskBid.riskMode === RiskMode.Integrated &&\n curves.riskBid.numPoints >= 2\n ) {\n this.riskBidInitialized = true;\n this.priceCurvesSet = true;\n this.committedBidPoints = curves.riskBid.points.map((p) => ({\n amountIn: p.amountIn,\n priceFactorQ32: p.priceFactorQ32,\n interpolation: p.interpolation,\n params: new Uint8Array(p.params),\n }));\n }\n if (\n curves.riskAsk.xMode === CurveXMode.Alternate &&\n curves.riskAsk.riskMode === RiskMode.Integrated &&\n curves.riskAsk.numPoints >= 2\n ) {\n this.riskAskInitialized = true;\n this.priceCurvesSet = true;\n this.committedAskPoints = curves.riskAsk.points.map((p) => ({\n amountIn: p.amountIn,\n priceFactorQ32: p.priceFactorQ32,\n interpolation: p.interpolation,\n params: new Uint8Array(p.params),\n }));\n }\n\n this.bidOrders = this.reconstructSide(\n curves.riskBid,\n \"bid\",\n this.initialVaultX,\n this.decimalsX\n );\n this.askOrders = this.reconstructSide(\n curves.riskAsk,\n \"ask\",\n this.initialVaultY,\n this.decimalsY\n );\n }\n\n private reconstructSide(\n curve: import(\"./types\").CurveSide,\n side: OrderSide,\n initialVault: bigint,\n decimals: number\n ): StagedOrder[] {\n if (\n curve.xMode !== CurveXMode.Alternate ||\n curve.riskMode !== RiskMode.Integrated\n ) {\n return [];\n }\n\n const orders: StagedOrder[] = [];\n const points = curve.points;\n\n // Last point is terminal — skip it\n for (let i = 0; i < points.length - 1; i++) {\n const pt = points[i];\n const nextPt = points[i + 1];\n const priceFactor = fromQ32(pt.priceFactorQ32);\n\n let spreadBps: number;\n if (side === \"bid\") {\n spreadBps = Math.round((1 - priceFactor) * 10_000);\n } else {\n spreadBps = Math.round((priceFactor - 1) * 10_000);\n }\n\n const sizeAtoms = nextPt.amountIn - pt.amountIn;\n let sizeTokens: number;\n\n if (side === \"ask\") {\n // Ask sizes are in quote atoms, convert back to base tokens via midprice\n const midprice = this.pool.getMidprice();\n sizeTokens = atomsToTokens(sizeAtoms, decimals) / midprice;\n } else {\n sizeTokens = atomsToTokens(sizeAtoms, decimals);\n }\n\n orders.push({ size: sizeTokens, spreadBps });\n }\n\n return orders;\n }\n\n private curveSideToLevels(\n curve: import(\"./types\").CurveSide,\n midprice: number,\n side: OrderSide,\n decimals: number\n ): OrderbookLevel[] {\n if (curve.numPoints < 2) return [];\n\n const levels: OrderbookLevel[] = [];\n let cumulative = 0;\n const points = curve.points;\n\n for (let i = 0; i < points.length - 1; i++) {\n const pt = points[i];\n const nextPt = points[i + 1];\n const priceFactor = fromQ32(pt.priceFactorQ32);\n const price = midprice * priceFactor;\n\n const sizeAtoms = nextPt.amountIn - pt.amountIn;\n let sizeTokens: number;\n\n if (side === \"ask\") {\n sizeTokens = atomsToTokens(sizeAtoms, decimals) / midprice;\n } else {\n sizeTokens = atomsToTokens(sizeAtoms, decimals);\n }\n\n cumulative += sizeTokens;\n levels.push({ price, size: sizeTokens, cumulative });\n }\n\n return levels;\n }\n}\n","import {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport {\n getAssociatedTokenAddressSync,\n createAssociatedTokenAccountInstruction,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport type { Connection } from \"@solana/web3.js\";\n\n/**\n * Get the ATA address, and optionally return a create instruction if it doesn't exist.\n */\nexport async function getOrCreateAta(\n connection: Connection,\n mint: PublicKey,\n owner: PublicKey,\n payer: PublicKey,\n tokenProgram: PublicKey = TOKEN_PROGRAM_ID,\n allowOwnerOffCurve: boolean = false\n): Promise<{ address: PublicKey; instruction: TransactionInstruction | null }> {\n const address = getAssociatedTokenAddressSync(\n mint,\n owner,\n allowOwnerOffCurve,\n tokenProgram\n );\n const account = await connection.getAccountInfo(address);\n if (account) {\n return { address, instruction: null };\n }\n const instruction = createAssociatedTokenAccountInstruction(\n payer,\n address,\n owner,\n mint,\n tokenProgram\n );\n return { address, instruction };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/adampeters/Documents/sol/hadron-sdk/dist/index.js","../src/constants/index.ts","../src/helpers/derive.ts","../src/helpers/math.ts","../src/accounts/index.ts","../src/types/index.ts","../src/instructions/initialize.ts","../src/instructions/deposit.ts","../src/instructions/withdraw.ts","../src/instructions/swap.ts","../src/instructions/setCurve.ts","../src/instructions/oracle.ts","../src/instructions/switchCurve.ts","../src/instructions/curveUpdates.ts","../src/instructions/authority.ts","../src/instructions/feeConfig.ts","../src/instructions/spreadConfig.ts","../src/instructions/poolState.ts","../src/hadron.ts","../src/orderbook.ts","../src/helpers/token.ts"],"names":["PublicKey","PoolState","OracleMode","Interpolation","CurveType","CurveXMode","RiskMode","CurveUpdateOpKind","Side","getAssociatedTokenAddressSync","TransactionInstruction","SYSVAR_CLOCK_PUBKEY","SystemProgram","TOKEN_PROGRAM_ID"],"mappings":"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Cd,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,IAAA,EAAM,UAAA,EAAY,WAAW,CAAC,CAAA;AAAA,IACrD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;AnBk3CA;AACA;AoBnpEA;AACE;AACA;AAEA;AAAA;AAOF,MAAA,SAAsB,cAAA,CACpB,UAAA,EACA,IAAA,EACA,KAAA,EACA,KAAA,EACA,aAAA,EAA0BG,0BAAAA,EAC1B,mBAAA,EAA8B,KAAA,EAC+C;AAC7E,EAAA,MAAM,QAAA,EAAUJ,qDAAAA;AAAA,IACd,IAAA;AAAA,IACA,KAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,EACF,CAAA;AACA,EAAA,MAAM,QAAA,EAAU,MAAM,UAAA,CAAW,cAAA,CAAe,OAAO,CAAA;AACvD,EAAA,GAAA,CAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,OAAA,EAAS,WAAA,EAAa,KAAK,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,YAAA,EAAc,+DAAA;AAAA,IAClB,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,EACF,CAAA;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,YAAY,CAAA;AAChC;ApBwoEA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,ylIAAC","file":"/Users/adampeters/Documents/sol/hadron-sdk/dist/index.js","sourcesContent":[null,"import { PublicKey } from \"@solana/web3.js\";\n\n// ============================================================================\n// Program\n// ============================================================================\n\nexport const HADRON_PROGRAM_ID = new PublicKey(\n \"Q72w4coozA552keKDdeeh2EyQw32qfMFsHPu6cbatom\"\n);\n\n// ============================================================================\n// PDA Seeds\n// ============================================================================\n\nexport const CONFIG_SEED = Buffer.from(\"hadron-config\");\nexport const MIDPRICE_ORACLE_SEED = Buffer.from(\"hadron-midprice\");\nexport const CURVE_META_SEED = Buffer.from(\"hadron-curve-meta\");\nexport const CURVE_PREFABS_SEED = Buffer.from(\"hadron-curve-prefabs\");\nexport const CURVE_UPDATES_SEED = Buffer.from(\"hadron-curve-updates\");\nexport const FEE_CONFIG_SEED = Buffer.from(\"fee_config\");\nexport const SPREAD_CONFIG_SEED = Buffer.from(\"spread_config\");\n\n// ============================================================================\n// Account Sizes\n// ============================================================================\n\nexport const CONFIG_SIZE = 248;\nexport const MIDPRICE_ORACLE_SIZE = 64;\nexport const CURVE_META_SIZE = 48;\nexport const FEE_CONFIG_SIZE = 72;\nexport const CURVE_UPDATES_SIZE = 258;\nexport const CURVE_SIDE_HEADER = 8;\nexport const CURVE_POINT_LEN = 24;\n\n// ============================================================================\n// Pool Parameter Defaults & Limits\n// ============================================================================\n\nexport const DEFAULT_MAX_PREFAB_SLOTS = 10;\nexport const DEFAULT_MAX_CURVE_POINTS = 16;\nexport const ABSOLUTE_MAX_PREFAB_SLOTS = 16;\nexport const ABSOLUTE_MAX_CURVE_POINTS = 128;\nexport const MAX_SETCURVE_POINTS = 32;\nexport const MAX_CURVE_UPDATE_OPS = 8;\n\n// ============================================================================\n// Fixed-Point Math\n// ============================================================================\n\n/** Q32.32 representation of 1.0 */\nexport const Q32_ONE = BigInt(1) << BigInt(32); // 4294967296n\n\n// ============================================================================\n// Instruction Discriminators\n// ============================================================================\n\nexport const Discriminator = {\n Initialize: 0,\n Deposit: 1,\n Withdraw: 2,\n SwapExactIn: 3,\n SetCurve: 4,\n UpdateMidprice: 5,\n InitializeFeeConfig: 6,\n UpdateFeeConfig: 7,\n SetRiskCurve: 8,\n UpdateBaseSpread: 9,\n UpdateMidpriceAndBaseSpread: 10,\n SwitchPriceCurve: 11,\n SwitchRiskCurve: 12,\n InitializeSpreadConfig: 13,\n UpdateSpreadConfig: 14,\n UpdateDeltaStaleness: 15,\n NominateAuthority: 16,\n AcceptAuthority: 17,\n SubmitCurveUpdates: 18,\n ApplyCurveUpdates: 19,\n ClosePool: 20,\n SetPoolState: 21,\n AllocateCurvePrefabs: 22,\n SetQuotingAuthority: 23,\n RotateFeeAdmin: 24,\n} as const;\n\n// ============================================================================\n// Instruction Data Sizes\n// ============================================================================\n\n/** Per-point data in SetCurve/SetRiskCurve: u64 + u64 + u8 + 4 params = 21 bytes */\nexport const POINT_DATA_SIZE = 21;\n\n/** Per-op data in SubmitCurveUpdates: curve_type(1)+op_kind(1)+point_index(1)+interp(1)+amount_in(8)+price(8)+params(4) = 24 bytes */\nexport const CURVE_UPDATE_OP_SIZE = 24;\n\n// ============================================================================\n// Size Helpers\n// ============================================================================\n\n/** Compute CurvePrefabs account size for given pool parameters. */\nexport function curvePrefabsSize(\n maxSlots: number,\n maxPoints: number\n): number {\n return 32 + 4 * maxSlots * (CURVE_SIDE_HEADER + maxPoints * CURVE_POINT_LEN);\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport {\n CONFIG_SEED,\n MIDPRICE_ORACLE_SEED,\n CURVE_META_SEED,\n CURVE_PREFABS_SEED,\n CURVE_UPDATES_SEED,\n FEE_CONFIG_SEED,\n SPREAD_CONFIG_SEED,\n HADRON_PROGRAM_ID,\n} from \"../constants\";\nimport type { PoolAddresses } from \"../types\";\n\nfunction seedToBuffer(seed: bigint): Buffer {\n const buf = Buffer.alloc(8);\n buf.writeBigUInt64LE(seed);\n return buf;\n}\n\nexport function getConfigAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [CONFIG_SEED, seedToBuffer(seed), mintX.toBuffer(), mintY.toBuffer()],\n programId\n );\n}\n\nexport function getMidpriceOracleAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n MIDPRICE_ORACLE_SEED,\n seedToBuffer(seed),\n mintX.toBuffer(),\n mintY.toBuffer(),\n ],\n programId\n );\n}\n\nexport function getCurveMetaAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [CURVE_META_SEED, seedToBuffer(seed), mintX.toBuffer(), mintY.toBuffer()],\n programId\n );\n}\n\nexport function getCurvePrefabsAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n CURVE_PREFABS_SEED,\n seedToBuffer(seed),\n mintX.toBuffer(),\n mintY.toBuffer(),\n ],\n programId\n );\n}\n\nexport function getCurveUpdatesAddress(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [\n CURVE_UPDATES_SEED,\n seedToBuffer(seed),\n mintX.toBuffer(),\n mintY.toBuffer(),\n ],\n programId\n );\n}\n\nexport function getFeeConfigAddress(\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([FEE_CONFIG_SEED], programId);\n}\n\nexport function getSpreadConfigAddress(\n configPda: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SPREAD_CONFIG_SEED, configPda.toBuffer()],\n programId\n );\n}\n\n/**\n * Derive all PDA addresses for a pool.\n */\nexport function derivePoolAddresses(\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): PoolAddresses {\n const [config, configBump] = getConfigAddress(seed, mintX, mintY, programId);\n const [midpriceOracle] = getMidpriceOracleAddress(\n seed,\n mintX,\n mintY,\n programId\n );\n const [curveMeta] = getCurveMetaAddress(seed, mintX, mintY, programId);\n const [curvePrefabs] = getCurvePrefabsAddress(seed, mintX, mintY, programId);\n const [curveUpdates] = getCurveUpdatesAddress(seed, mintX, mintY, programId);\n\n const vaultX = getAssociatedTokenAddressSync(\n mintX,\n config,\n true,\n tokenProgramX\n );\n const vaultY = getAssociatedTokenAddressSync(\n mintY,\n config,\n true,\n tokenProgramY\n );\n\n return {\n config,\n configBump,\n midpriceOracle,\n curveMeta,\n curvePrefabs,\n curveUpdates,\n vaultX,\n vaultY,\n };\n}\n","import { Q32_ONE } from \"../constants\";\n\n/** Convert a floating-point number to Q32.32 fixed point (bigint). */\nexport function toQ32(value: number): bigint {\n return BigInt(Math.floor(value * Number(Q32_ONE)));\n}\n\n/** Convert a Q32.32 fixed-point bigint to a floating-point number.\n * Splits into integer + fractional parts to avoid precision loss\n * when the integer part exceeds 2^21 (~2 million). */\nexport function fromQ32(q32: bigint): number {\n const intPart = q32 >> 32n;\n const fracPart = q32 & 0xFFFF_FFFFn;\n return Number(intPart) + Number(fracPart) / Number(Q32_ONE);\n}\n\n/** Convert a percentage (0.0 to 1.0) to Q32.32. */\nexport function pctToQ32(pct: number): bigint {\n return toQ32(pct);\n}\n\n/** Convert basis points to a spread factor in Q32 (e.g. 5 bps → toQ32(0.9995)). */\nexport function spreadBpsToQ32(bps: number): bigint {\n return toQ32(1 - bps / 10_000);\n}\n\n/** Convert a spread factor in Q32 to basis points (e.g. toQ32(0.9995) → 5). */\nexport function spreadQ32ToBps(q32: bigint): number {\n return (1 - fromQ32(q32)) * 10_000;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport {\n CURVE_SIDE_HEADER,\n CURVE_POINT_LEN,\n MIDPRICE_ORACLE_SIZE,\n CURVE_UPDATE_OP_SIZE,\n MAX_CURVE_UPDATE_OPS,\n} from \"../constants\";\nimport {\n PoolState,\n OracleMode,\n Interpolation,\n CurveXMode,\n RiskMode,\n CurveType,\n CurveUpdateOpKind,\n} from \"../types\";\nimport type {\n DecodedConfig,\n DecodedMidpriceOracle,\n DecodedCurveMeta,\n DecodedFeeConfig,\n DecodedSpreadConfig,\n DecodedCurveUpdates,\n CurvePoint,\n CurveSide,\n CurveUpdateOp,\n SpreadTriggerInput,\n} from \"../types\";\n\n// ============================================================================\n// Config (248 bytes)\n// ============================================================================\n\nexport function decodeConfig(data: Uint8Array): DecodedConfig {\n const buf = Buffer.from(data);\n let offset = 0;\n\n const state: PoolState = buf.readUInt8(offset);\n offset += 1;\n\n const seed = buf.readBigUInt64LE(offset);\n offset += 8;\n\n const authority = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const mintX = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const mintY = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const configBump = buf.readUInt8(offset);\n offset += 1;\n\n const curveMeta = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const spreadConfigInitialized = buf.readUInt8(offset) !== 0;\n offset += 1;\n\n const deltaStaleness = buf.readUInt8(offset);\n offset += 1;\n\n const oracleMode: OracleMode = buf.readUInt8(offset);\n offset += 1;\n\n // _padding [u8; 3]\n offset += 3;\n\n const pendingAuthority = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const nominationExpiry = buf.readBigUInt64LE(offset);\n offset += 8;\n\n const tokenProgramX = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const tokenProgramY = new PublicKey(buf.subarray(offset, offset + 32));\n\n return {\n state,\n seed,\n authority,\n mintX,\n mintY,\n configBump,\n curveMeta,\n spreadConfigInitialized,\n deltaStaleness,\n oracleMode,\n pendingAuthority,\n nominationExpiry,\n tokenProgramX,\n tokenProgramY,\n };\n}\n\n// ============================================================================\n// MidpriceOracle (64 bytes)\n// ============================================================================\n\nexport function decodeMidpriceOracle(data: Uint8Array): DecodedMidpriceOracle {\n const buf = Buffer.from(data);\n\n const authority = new PublicKey(buf.subarray(0, 32));\n const sequence = buf.readBigUInt64LE(32);\n const midpriceQ32 = buf.readBigUInt64LE(40);\n const spreadFactorQ32 = buf.readBigUInt64LE(48);\n const lastUpdateSlot =\n buf.length >= MIDPRICE_ORACLE_SIZE ? buf.readBigUInt64LE(56) : 0n;\n\n return { authority, sequence, midpriceQ32, spreadFactorQ32, lastUpdateSlot };\n}\n\n// ============================================================================\n// CurveMeta (48 bytes)\n// ============================================================================\n\nexport function decodeCurveMeta(data: Uint8Array): DecodedCurveMeta {\n const buf = Buffer.from(data);\n\n return {\n authority: new PublicKey(buf.subarray(0, 32)),\n activePriceBidSlot: buf.readUInt8(32),\n activePriceAskSlot: buf.readUInt8(33),\n activeRiskBidSlot: buf.readUInt8(34),\n activeRiskAskSlot: buf.readUInt8(35),\n initializedSlots: new Uint8Array(buf.subarray(36, 44)),\n maxPrefabSlots: buf.readUInt8(44),\n maxCurvePoints: buf.readUInt8(45),\n };\n}\n\n/**\n * Check if a specific slot is initialized in the CurveMeta bitmap.\n */\nexport function isSlotInitialized(\n initializedSlots: Uint8Array,\n curveType: CurveType,\n slot: number,\n maxSlots: number\n): boolean {\n const bitIndex = curveType * maxSlots + slot;\n const byteIndex = Math.floor(bitIndex / 8);\n const bitOffset = bitIndex % 8;\n return (initializedSlots[byteIndex] & (1 << bitOffset)) !== 0;\n}\n\n// ============================================================================\n// FeeConfig (72 bytes)\n// ============================================================================\n\nexport function decodeFeeConfig(data: Uint8Array): DecodedFeeConfig {\n const buf = Buffer.from(data);\n\n return {\n initialized: buf.readUInt8(0) !== 0,\n feePpm: buf.readUInt32LE(1),\n bump: buf.readUInt8(5),\n // skip 2 bytes padding\n feeAdmin: new PublicKey(buf.subarray(8, 40)),\n feeRecipient: new PublicKey(buf.subarray(40, 72)),\n };\n}\n\n// ============================================================================\n// SpreadConfig (4072 bytes)\n// ============================================================================\n\nconst SPREAD_TRIGGER_LEN = 40; // 32 (account) + 2 (spread_bps) + 6 (padding)\n\nexport function decodeSpreadConfig(data: Uint8Array): DecodedSpreadConfig {\n const buf = Buffer.from(data);\n const initialized = buf.readUInt8(0) !== 0;\n const bump = buf.readUInt8(1);\n const numTriggers = buf.readUInt8(2);\n // skip 5 bytes padding\n const admin = new PublicKey(buf.subarray(8, 40));\n const config = new PublicKey(buf.subarray(40, 72));\n\n const triggers: SpreadTriggerInput[] = [];\n const triggersStart = 72;\n for (let i = 0; i < numTriggers; i++) {\n const off = triggersStart + i * SPREAD_TRIGGER_LEN;\n const account = new PublicKey(buf.subarray(off, off + 32));\n const spreadBps = buf.readUInt16LE(off + 32);\n triggers.push({ account, spreadBps });\n }\n\n return { initialized, bump, numTriggers, admin, config, triggers };\n}\n\n// ============================================================================\n// CurveUpdates (258 bytes)\n// ============================================================================\n\nexport function decodeCurveUpdates(data: Uint8Array): DecodedCurveUpdates {\n const buf = Buffer.from(data);\n let offset = 0;\n\n const authority = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const curveMeta = new PublicKey(buf.subarray(offset, offset + 32));\n offset += 32;\n\n const numOps = buf.readUInt8(offset);\n offset += 1;\n\n // skip padding\n offset += 1;\n\n const ops: CurveUpdateOp[] = [];\n for (let i = 0; i < numOps && i < MAX_CURVE_UPDATE_OPS; i++) {\n const opOffset = offset + i * CURVE_UPDATE_OP_SIZE;\n ops.push({\n curveType: buf.readUInt8(opOffset) as CurveType,\n opKind: buf.readUInt8(opOffset + 1) as CurveUpdateOpKind,\n pointIndex: buf.readUInt8(opOffset + 2),\n interpolation: buf.readUInt8(opOffset + 3) as Interpolation,\n amountIn: buf.readBigUInt64LE(opOffset + 4),\n priceFactorQ32: buf.readBigUInt64LE(opOffset + 12),\n params: new Uint8Array(buf.subarray(opOffset + 20, opOffset + 24)),\n });\n }\n\n return { authority, curveMeta, numOps, ops };\n}\n\n// ============================================================================\n// CurvePrefabs (variable size) — decode individual curve sides\n// ============================================================================\n\n/**\n * Decode a single curve side from a CurvePrefabs account.\n */\nexport function decodeCurveSide(\n data: Uint8Array,\n curveType: CurveType,\n slot: number,\n maxSlots: number,\n maxPoints: number\n): CurveSide {\n const sideSize = CURVE_SIDE_HEADER + maxPoints * CURVE_POINT_LEN;\n const offset = 32 + (curveType * maxSlots + slot) * sideSize;\n const buf = Buffer.from(data);\n\n const numPoints = buf.readUInt8(offset);\n const defaultInterpolation = buf.readUInt8(offset + 1) as Interpolation;\n const xMode = buf.readUInt8(offset + 2) as CurveXMode;\n const riskMode = buf.readUInt8(offset + 3) as RiskMode;\n\n const points: CurvePoint[] = [];\n const pointsStart = offset + CURVE_SIDE_HEADER;\n const n = Math.min(numPoints, maxPoints);\n for (let i = 0; i < n; i++) {\n const pOff = pointsStart + i * CURVE_POINT_LEN;\n points.push({\n amountIn: buf.readBigUInt64LE(pOff),\n priceFactorQ32: buf.readBigUInt64LE(pOff + 8),\n interpolation: buf.readUInt8(pOff + 16) as Interpolation,\n params: new Uint8Array(buf.subarray(pOff + 17, pOff + 21)),\n });\n }\n\n return { numPoints, defaultInterpolation, xMode, riskMode, points };\n}\n\n/**\n * Decode all active curve slots from a CurvePrefabs account using CurveMeta info.\n */\nexport function decodeActiveCurves(\n prefabsData: Uint8Array,\n meta: DecodedCurveMeta\n): {\n priceBid: CurveSide;\n priceAsk: CurveSide;\n riskBid: CurveSide;\n riskAsk: CurveSide;\n} {\n const { maxPrefabSlots, maxCurvePoints } = meta;\n return {\n priceBid: decodeCurveSide(\n prefabsData,\n CurveType.PriceBid,\n meta.activePriceBidSlot,\n maxPrefabSlots,\n maxCurvePoints\n ),\n priceAsk: decodeCurveSide(\n prefabsData,\n CurveType.PriceAsk,\n meta.activePriceAskSlot,\n maxPrefabSlots,\n maxCurvePoints\n ),\n riskBid: decodeCurveSide(\n prefabsData,\n CurveType.RiskBid,\n meta.activeRiskBidSlot,\n maxPrefabSlots,\n maxCurvePoints\n ),\n riskAsk: decodeCurveSide(\n prefabsData,\n CurveType.RiskAsk,\n meta.activeRiskAskSlot,\n maxPrefabSlots,\n maxCurvePoints\n ),\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\n\n// ============================================================================\n// Enums\n// ============================================================================\n\nexport enum PoolState {\n Uninitialized = 0,\n Initialized = 1,\n Paused = 2,\n WithdrawOnly = 3,\n}\n//\nexport enum OracleMode {\n /** Off-chain authority updates the oracle */\n Authority = 0,\n /** Midprice computed from vault ratio (vault_y / vault_x) */\n Relative = 1,\n}\n\nexport enum Interpolation {\n Step = 0,\n Linear = 1,\n MarginalStep = 2,\n Hyperbolic = 3,\n Quadratic = 4,\n Cubic = 5,\n}\n\nexport enum CurveType {\n PriceBid = 0,\n PriceAsk = 1,\n RiskBid = 2,\n RiskAsk = 3,\n}\n\nexport enum CurveXMode {\n /** Price: absolute tokens. Risk: percent Q32. */\n Native = 0,\n /** Price: percent of vault Q32. Risk: absolute tokens. */\n Alternate = 1,\n}\n\nexport enum RiskMode {\n Virtual = 0,\n Integrated = 1,\n}\n\nexport enum CurveUpdateOpKind {\n Edit = 0,\n Add = 1,\n Remove = 2,\n}\n\nexport enum Side {\n Bid = 0,\n Ask = 1,\n}\n\n// ============================================================================\n// Decoded Account Types\n// ============================================================================\n\nexport interface DecodedConfig {\n state: PoolState;\n seed: bigint;\n authority: PublicKey;\n mintX: PublicKey;\n mintY: PublicKey;\n configBump: number;\n curveMeta: PublicKey;\n spreadConfigInitialized: boolean;\n deltaStaleness: number;\n oracleMode: OracleMode;\n pendingAuthority: PublicKey;\n nominationExpiry: bigint;\n tokenProgramX: PublicKey;\n tokenProgramY: PublicKey;\n}\n\nexport interface DecodedMidpriceOracle {\n authority: PublicKey;\n sequence: bigint;\n midpriceQ32: bigint;\n /** Spread as a discount factor in Q32 (e.g. toQ32(0.9995) = 5 bps). */\n spreadFactorQ32: bigint;\n lastUpdateSlot: bigint;\n}\n\nexport interface DecodedCurveMeta {\n authority: PublicKey;\n activePriceBidSlot: number;\n activePriceAskSlot: number;\n activeRiskBidSlot: number;\n activeRiskAskSlot: number;\n initializedSlots: Uint8Array;\n maxPrefabSlots: number;\n maxCurvePoints: number;\n}\n\nexport interface DecodedFeeConfig {\n initialized: boolean;\n feePpm: number;\n bump: number;\n feeAdmin: PublicKey;\n feeRecipient: PublicKey;\n}\n\nexport interface DecodedSpreadConfig {\n initialized: boolean;\n bump: number;\n numTriggers: number;\n admin: PublicKey;\n config: PublicKey;\n triggers: SpreadTriggerInput[];\n}\n\nexport interface DecodedCurveUpdates {\n authority: PublicKey;\n curveMeta: PublicKey;\n numOps: number;\n ops: CurveUpdateOp[];\n}\n\n// ============================================================================\n// Curve Data Types\n// ============================================================================\n\nexport interface CurvePoint {\n amountIn: bigint;\n priceFactorQ32: bigint;\n interpolation: Interpolation;\n params: Uint8Array;\n}\n\nexport interface CurveSide {\n numPoints: number;\n defaultInterpolation: Interpolation;\n xMode: CurveXMode;\n riskMode: RiskMode;\n points: CurvePoint[];\n}\n\nexport interface CurveUpdateOp {\n curveType: CurveType;\n opKind: CurveUpdateOpKind;\n pointIndex: number;\n interpolation: Interpolation;\n amountIn: bigint;\n priceFactorQ32: bigint;\n params: Uint8Array;\n}\n\n// ============================================================================\n// Instruction Parameter Types\n// ============================================================================\n\nexport interface InitializeParams {\n /** Pool seed. If omitted, a random seed is generated automatically. */\n seed?: bigint;\n mintX: PublicKey;\n mintY: PublicKey;\n authority: PublicKey;\n initialMidpriceQ32: bigint;\n oracleMode?: OracleMode;\n maxPrefabSlots?: number;\n maxCurvePoints?: number;\n /** Token program for mint X (defaults to TOKEN_PROGRAM_ID) */\n tokenProgramX?: PublicKey;\n /** Token program for mint Y (defaults to TOKEN_PROGRAM_ID) */\n tokenProgramY?: PublicKey;\n}\n\nexport interface DepositParams {\n amountX: bigint;\n amountY: bigint;\n expiration?: number;\n}\n\nexport interface WithdrawParams {\n amountX: bigint;\n amountY: bigint;\n expiration?: number;\n}\n\nexport interface SwapParams {\n isX: boolean;\n amountIn: bigint;\n minOut: bigint;\n feeRecipient: PublicKey;\n expiration?: number;\n}\n\nexport interface SetCurvePointInput {\n amountIn: bigint;\n /** Price factor as floating point (e.g. 0.99). Converted to Q32 internally. */\n priceFactor: number;\n interpolation?: Interpolation;\n params?: Uint8Array;\n}\n\nexport interface SetCurveParams {\n side: Side;\n defaultInterpolation: Interpolation;\n points: SetCurvePointInput[];\n slot?: number;\n xMode?: CurveXMode;\n}\n\n/** Params for setting price curve on both bid and ask in one call (returns two instructions). */\nexport interface SetCurveBothParams {\n bid: Omit<SetCurveParams, \"side\">;\n ask: Omit<SetCurveParams, \"side\">;\n}\n\nexport interface SetRiskCurvePointInput {\n /** Percent of base vault (0.0 to 1.0) — converted to Q32 internally */\n pctBase: number;\n /** Price factor as floating point */\n priceFactor: number;\n interpolation?: Interpolation;\n params?: Uint8Array;\n}\n\nexport interface SetRiskCurveAbsolutePointInput {\n /** Absolute vault balance in token atoms */\n vaultBalance: bigint;\n priceFactor: number;\n interpolation?: Interpolation;\n params?: Uint8Array;\n}\n\nexport interface SetRiskCurveParams {\n side: Side;\n defaultInterpolation: Interpolation;\n points: SetRiskCurvePointInput[];\n slot?: number;\n xMode?: CurveXMode;\n riskMode?: RiskMode;\n}\n\n/** Params for setting risk curve (percent x-axis) on both bid and ask in one call. */\nexport interface SetRiskCurveBothParams {\n bid: Omit<SetRiskCurveParams, \"side\">;\n ask: Omit<SetRiskCurveParams, \"side\">;\n}\n\nexport interface SetRiskCurveAbsoluteParams {\n side: Side;\n defaultInterpolation: Interpolation;\n points: SetRiskCurveAbsolutePointInput[];\n slot?: number;\n riskMode?: RiskMode;\n}\n\n/** Params for setting risk curve (absolute x-axis) on both bid and ask in one call. */\nexport interface SetRiskCurveAbsoluteBothParams {\n bid: Omit<SetRiskCurveAbsoluteParams, \"side\">;\n ask: Omit<SetRiskCurveAbsoluteParams, \"side\">;\n}\n\nexport interface UpdateMidpriceParams {\n midpriceQ32: bigint;\n sequence?: bigint;\n}\n\nexport interface UpdateBaseSpreadParams {\n /** Spread as a discount factor in Q32 (e.g. toQ32(0.9995) = 5 bps). */\n spreadFactorQ32: bigint;\n sequence?: bigint;\n}\n\nexport interface UpdateMidpriceAndBaseSpreadParams {\n midpriceQ32: bigint;\n /** Spread as a discount factor in Q32 (e.g. toQ32(0.9995) = 5 bps). */\n spreadFactorQ32: bigint;\n sequence?: bigint;\n}\n\nexport interface SwitchCurveParams {\n side: Side;\n slot: number;\n}\n\nexport interface NominateAuthorityParams {\n newAuthority: PublicKey;\n expirySlot: bigint;\n}\n\nexport interface SetQuotingAuthorityParams {\n newQuotingAuthority: PublicKey;\n /** If provided, also updates SpreadConfig.admin */\n spreadConfigPda?: PublicKey;\n}\n\nexport interface InitializeFeeConfigParams {\n feePpm: number;\n feeAdmin: PublicKey;\n feeRecipient: PublicKey;\n}\n\nexport interface UpdateFeeConfigParams {\n /** Pass null for no change (sends u32::MAX) */\n feePpm: number | null;\n /** Pass null for no change (sends zeros) */\n feeRecipient: PublicKey | null;\n}\n\nexport interface RotateFeeAdminParams {\n newFeeAdmin: PublicKey;\n}\n\nexport interface SetPoolStateParams {\n newState: PoolState;\n}\n\nexport interface UpdateDeltaStalenessParams {\n deltaStaleness: number;\n}\n\nexport interface InitializeSpreadConfigParams {\n admin: PublicKey;\n}\n\nexport interface SpreadTriggerInput {\n account: PublicKey;\n spreadBps: number;\n}\n\nexport interface UpdateSpreadConfigParams {\n triggers: SpreadTriggerInput[];\n}\n\nexport interface AllocateCurvePrefabsParams {\n seed: bigint;\n mintX: PublicKey;\n mintY: PublicKey;\n maxPrefabSlots?: number;\n maxCurvePoints?: number;\n}\n\n// ============================================================================\n// Orderbook Types\n// ============================================================================\n\nexport type OrderSide = \"bid\" | \"ask\";\n\nexport interface PlaceOrderParams {\n side: OrderSide;\n /** Size in base tokens (human-readable, not atoms) */\n size: number;\n /** Spread from midprice in basis points */\n spreadBps: number;\n}\n\nexport interface AmendOrderParams {\n side: OrderSide;\n /** 0-based index into the staged orders for that side */\n level: number;\n spreadBps?: number;\n size?: number;\n}\n\nexport interface CancelOrderParams {\n side: OrderSide;\n level: number;\n}\n\nexport interface OrderbookLevel {\n /** Absolute price (midprice * priceFactor) */\n price: number;\n /** Size at this level in base tokens */\n size: number;\n /** Cumulative size up to and including this level */\n cumulative: number;\n}\n\nexport interface OrderbookState {\n midprice: number;\n bids: OrderbookLevel[];\n asks: OrderbookLevel[];\n inventory: { base: number; quote: number };\n}\n\nexport interface StagedOrder {\n /** Size in base tokens (human-readable) */\n size: number;\n /** Spread from midprice in basis points */\n spreadBps: number;\n}\n\n// ============================================================================\n// Pool Addresses (derived PDAs)\n// ============================================================================\n\nexport interface PoolAddresses {\n config: PublicKey;\n configBump: number;\n midpriceOracle: PublicKey;\n curveMeta: PublicKey;\n curvePrefabs: PublicKey;\n curveUpdates: PublicKey;\n vaultX: PublicKey;\n vaultY: PublicKey;\n}\n","import {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport {\n Discriminator,\n DEFAULT_MAX_PREFAB_SLOTS,\n DEFAULT_MAX_CURVE_POINTS,\n HADRON_PROGRAM_ID,\n curvePrefabsSize,\n} from \"../constants\";\nimport { derivePoolAddresses } from \"../helpers/derive\";\nimport type { InitializeParams, AllocateCurvePrefabsParams } from \"../types\";\n\n/**\n * Build an Initialize instruction.\n * Creates the pool: Config, MidpriceOracle, CurveMeta, CurveUpdates.\n * CurvePrefabs must be pre-allocated (use buildAllocateCurvePrefabs).\n */\nexport function buildInitialize(\n payer: PublicKey,\n params: InitializeParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const seed = params.seed;\n if (seed === undefined) throw new Error(\"seed is required — use Hadron.initialize() to auto-generate one\");\n const tokenProgramX = params.tokenProgramX ?? TOKEN_PROGRAM_ID;\n const tokenProgramY = params.tokenProgramY ?? TOKEN_PROGRAM_ID;\n const maxPrefabSlots = params.maxPrefabSlots ?? DEFAULT_MAX_PREFAB_SLOTS;\n const maxCurvePoints = params.maxCurvePoints ?? DEFAULT_MAX_CURVE_POINTS;\n const oracleMode = params.oracleMode ?? 0;\n\n const addrs = derivePoolAddresses(\n seed,\n params.mintX,\n params.mintY,\n tokenProgramX,\n tokenProgramY,\n programId\n );\n\n // Build data: disc(1) + seed(8) + mintX(32) + mintY(32) + authority(32) + midprice(8) + trailing(0|1|3)\n const hasCustomSlots =\n params.maxPrefabSlots !== undefined || params.maxCurvePoints !== undefined;\n const hasOracleMode = oracleMode !== 0 || hasCustomSlots;\n const trailingLen = hasCustomSlots ? 3 : hasOracleMode ? 1 : 0;\n const data = Buffer.alloc(1 + 8 + 32 + 32 + 32 + 8 + trailingLen);\n let offset = 0;\n\n data.writeUInt8(Discriminator.Initialize, offset);\n offset += 1;\n data.writeBigUInt64LE(seed, offset);\n offset += 8;\n params.mintX.toBuffer().copy(data, offset);\n offset += 32;\n params.mintY.toBuffer().copy(data, offset);\n offset += 32;\n params.authority.toBuffer().copy(data, offset);\n offset += 32;\n data.writeBigUInt64LE(params.initialMidpriceQ32, offset);\n offset += 8;\n\n if (hasOracleMode) {\n data.writeUInt8(oracleMode, offset);\n offset += 1;\n }\n if (hasCustomSlots) {\n data.writeUInt8(maxPrefabSlots, offset);\n offset += 1;\n data.writeUInt8(maxCurvePoints, offset);\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: addrs.config, isSigner: false, isWritable: true },\n { pubkey: params.mintX, isSigner: false, isWritable: false },\n { pubkey: params.mintY, isSigner: false, isWritable: false },\n { pubkey: addrs.vaultX, isSigner: false, isWritable: true },\n { pubkey: addrs.vaultY, isSigner: false, isWritable: true },\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n {\n pubkey: ASSOCIATED_TOKEN_PROGRAM_ID,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: addrs.midpriceOracle, isSigner: false, isWritable: true },\n { pubkey: addrs.curveMeta, isSigner: false, isWritable: true },\n { pubkey: addrs.curvePrefabs, isSigner: false, isWritable: true },\n { pubkey: addrs.curveUpdates, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build an AllocateCurvePrefabs instruction.\n * Must be called before Initialize (possibly twice if size > 10240).\n */\nexport function buildAllocateCurvePrefabs(\n payer: PublicKey,\n params: AllocateCurvePrefabsParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const maxPrefabSlots = params.maxPrefabSlots ?? DEFAULT_MAX_PREFAB_SLOTS;\n const maxCurvePoints = params.maxCurvePoints ?? DEFAULT_MAX_CURVE_POINTS;\n\n const data = Buffer.alloc(1 + 8 + 32 + 32 + 1 + 1);\n let offset = 0;\n\n data.writeUInt8(Discriminator.AllocateCurvePrefabs, offset);\n offset += 1;\n data.writeBigUInt64LE(params.seed, offset);\n offset += 8;\n params.mintX.toBuffer().copy(data, offset);\n offset += 32;\n params.mintY.toBuffer().copy(data, offset);\n offset += 32;\n data.writeUInt8(maxPrefabSlots, offset);\n offset += 1;\n data.writeUInt8(maxCurvePoints, offset);\n\n const [curvePrefabsPda] = PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"hadron-curve-prefabs\"),\n (() => {\n const b = Buffer.alloc(8);\n b.writeBigUInt64LE(params.seed);\n return b;\n })(),\n params.mintX.toBuffer(),\n params.mintY.toBuffer(),\n ],\n programId\n );\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type { DepositParams } from \"../types\";\n\n/**\n * Build a Deposit instruction.\n */\nexport function buildDeposit(\n user: PublicKey,\n configPda: PublicKey,\n mintX: PublicKey,\n mintY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n params: DepositParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8 + 8);\n let offset = 0;\n\n data.writeUInt8(Discriminator.Deposit, offset);\n offset += 1;\n data.writeBigUInt64LE(params.amountX, offset);\n offset += 8;\n data.writeBigUInt64LE(params.amountY, offset);\n offset += 8;\n const exp = params.expiration ?? Math.floor(Date.now() / 1000) + 3600;\n data.writeBigInt64LE(BigInt(exp), offset);\n\n const userX = getAssociatedTokenAddressSync(mintX, user, false, tokenProgramX);\n const userY = getAssociatedTokenAddressSync(mintY, user, false, tokenProgramY);\n const vaultX = getAssociatedTokenAddressSync(mintX, configPda, true, tokenProgramX);\n const vaultY = getAssociatedTokenAddressSync(mintY, configPda, true, tokenProgramY);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: user, isSigner: true, isWritable: false },\n { pubkey: vaultX, isSigner: false, isWritable: true },\n { pubkey: vaultY, isSigner: false, isWritable: true },\n { pubkey: userX, isSigner: false, isWritable: true },\n { pubkey: userY, isSigner: false, isWritable: true },\n { pubkey: configPda, isSigner: false, isWritable: false },\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type { WithdrawParams } from \"../types\";\n\n/**\n * Build a Withdraw instruction.\n */\nexport function buildWithdraw(\n user: PublicKey,\n configPda: PublicKey,\n mintX: PublicKey,\n mintY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n params: WithdrawParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8 + 8);\n let offset = 0;\n\n data.writeUInt8(Discriminator.Withdraw, offset);\n offset += 1;\n data.writeBigUInt64LE(params.amountX, offset);\n offset += 8;\n data.writeBigUInt64LE(params.amountY, offset);\n offset += 8;\n const exp = params.expiration ?? Math.floor(Date.now() / 1000) + 3600;\n data.writeBigInt64LE(BigInt(exp), offset);\n\n const userX = getAssociatedTokenAddressSync(mintX, user, false, tokenProgramX);\n const userY = getAssociatedTokenAddressSync(mintY, user, false, tokenProgramY);\n const vaultX = getAssociatedTokenAddressSync(mintX, configPda, true, tokenProgramX);\n const vaultY = getAssociatedTokenAddressSync(mintY, configPda, true, tokenProgramY);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: user, isSigner: true, isWritable: false },\n { pubkey: vaultX, isSigner: false, isWritable: true },\n { pubkey: vaultY, isSigner: false, isWritable: true },\n { pubkey: userX, isSigner: false, isWritable: true },\n { pubkey: userY, isSigner: false, isWritable: true },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n","import {\n PublicKey,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport { getFeeConfigAddress, getSpreadConfigAddress } from \"../helpers/derive\";\nimport type { SwapParams } from \"../types\";\nimport type { PoolAddresses } from \"../types\";\n\n/**\n * Build a SwapExactIn instruction.\n *\n * Account order (16 base): token_program_x, token_program_y, config,\n * midprice_oracle, curve_meta, curve_prefabs, authority(=pool address PDA), user,\n * user_source, vault_source, vault_dest, user_dest, fee_config,\n * fee_recipient_ata, clock, curve_updates.\n *\n * When spread config is initialized: spread_config (#16) + instructions_sysvar (#17).\n */\nexport function buildSwapExactIn(\n user: PublicKey,\n poolAddresses: PoolAddresses,\n mintX: PublicKey,\n mintY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n params: SwapParams,\n programId: PublicKey = HADRON_PROGRAM_ID,\n spreadConfigInitialized: boolean = false\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1 + 8 + 8 + 8);\n let offset = 0;\n\n data.writeUInt8(Discriminator.SwapExactIn, offset);\n offset += 1;\n data.writeUInt8(params.isX ? 1 : 0, offset);\n offset += 1;\n data.writeBigUInt64LE(params.amountIn, offset);\n offset += 8;\n data.writeBigUInt64LE(params.minOut, offset);\n offset += 8;\n const exp = params.expiration ?? Math.floor(Date.now() / 1000) + 3600;\n data.writeBigInt64LE(BigInt(exp), offset);\n\n const userX = getAssociatedTokenAddressSync(mintX, user, false, tokenProgramX);\n const userY = getAssociatedTokenAddressSync(mintY, user, false, tokenProgramY);\n\n const [userSource, vaultSource, vaultDest, userDest] = params.isX\n ? [userX, poolAddresses.vaultX, poolAddresses.vaultY, userY]\n : [userY, poolAddresses.vaultY, poolAddresses.vaultX, userX];\n\n const [feeConfigPda] = getFeeConfigAddress(programId);\n const inputMint = params.isX ? mintX : mintY;\n const inputMintProgram = params.isX ? tokenProgramX : tokenProgramY;\n const feeRecipientAta = getAssociatedTokenAddressSync(\n inputMint,\n params.feeRecipient,\n false,\n inputMintProgram\n );\n\n const keys = [\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n { pubkey: poolAddresses.config, isSigner: false, isWritable: false },\n {\n pubkey: poolAddresses.midpriceOracle,\n isSigner: false,\n isWritable: false,\n },\n { pubkey: poolAddresses.curveMeta, isSigner: false, isWritable: false },\n {\n pubkey: poolAddresses.curvePrefabs,\n isSigner: false,\n isWritable: true,\n },\n { pubkey: poolAddresses.config, isSigner: false, isWritable: false }, // authority = pool address PDA\n { pubkey: user, isSigner: true, isWritable: false },\n { pubkey: userSource, isSigner: false, isWritable: true },\n { pubkey: vaultSource, isSigner: false, isWritable: true },\n { pubkey: vaultDest, isSigner: false, isWritable: true },\n { pubkey: userDest, isSigner: false, isWritable: true },\n { pubkey: feeConfigPda, isSigner: false, isWritable: false },\n { pubkey: feeRecipientAta, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n {\n pubkey: poolAddresses.curveUpdates,\n isSigner: false,\n isWritable: true,\n },\n ];\n\n if (spreadConfigInitialized) {\n const [spreadConfigPda] = getSpreadConfigAddress(\n poolAddresses.config,\n programId\n );\n keys.push(\n { pubkey: spreadConfigPda, isSigner: false, isWritable: false },\n { pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false }\n );\n }\n\n return new TransactionInstruction({\n programId,\n keys,\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { Discriminator, POINT_DATA_SIZE, HADRON_PROGRAM_ID } from \"../constants\";\nimport { Interpolation, Side, CurveXMode, RiskMode } from \"../types\";\nimport { toQ32 } from \"../helpers/math\";\nimport type {\n SetCurveParams,\n SetCurveBothParams,\n SetRiskCurveParams,\n SetRiskCurveBothParams,\n SetRiskCurveAbsoluteParams,\n SetRiskCurveAbsoluteBothParams,\n} from \"../types\";\n\nfunction interpolationToByte(interp: Interpolation): number {\n return interp as number;\n}\n\n/**\n * Build a SetCurve instruction (price curve).\n * Accounts: authority, curve_meta, curve_prefabs.\n */\nexport function buildSetCurve(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetCurveParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const slot = params.slot ?? 0;\n const xMode = params.xMode ?? CurveXMode.Native;\n const numPoints = params.points.length;\n const data = Buffer.alloc(1 + 1 + 1 + 1 + 1 + 1 + numPoints * POINT_DATA_SIZE);\n let offset = 0;\n\n data.writeUInt8(Discriminator.SetCurve, offset);\n offset += 1;\n data.writeUInt8(slot, offset);\n offset += 1;\n data.writeUInt8(params.side, offset);\n offset += 1;\n data.writeUInt8(interpolationToByte(params.defaultInterpolation), offset);\n offset += 1;\n data.writeUInt8(numPoints, offset);\n offset += 1;\n data.writeUInt8(xMode, offset);\n offset += 1;\n\n for (const p of params.points) {\n data.writeBigUInt64LE(p.amountIn, offset);\n offset += 8;\n data.writeBigUInt64LE(toQ32(p.priceFactor), offset);\n offset += 8;\n data.writeUInt8(\n interpolationToByte(p.interpolation ?? params.defaultInterpolation),\n offset\n );\n offset += 1;\n const params_ = p.params ?? new Uint8Array(4);\n Buffer.from(params_).copy(data, offset, 0, 4);\n offset += 4;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a SetRiskCurve instruction (risk curve, percent-based x-axis by default).\n * Accounts: authority, curve_meta, curve_prefabs.\n */\nexport function buildSetRiskCurve(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetRiskCurveParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const slot = params.slot ?? 0;\n const xMode = params.xMode ?? CurveXMode.Native;\n const riskMode = params.riskMode ?? RiskMode.Virtual;\n const numPoints = params.points.length;\n const data = Buffer.alloc(\n 1 + 1 + 1 + 1 + 1 + 1 + 1 + numPoints * POINT_DATA_SIZE\n );\n let offset = 0;\n\n data.writeUInt8(Discriminator.SetRiskCurve, offset);\n offset += 1;\n data.writeUInt8(slot, offset);\n offset += 1;\n data.writeUInt8(params.side, offset);\n offset += 1;\n data.writeUInt8(interpolationToByte(params.defaultInterpolation), offset);\n offset += 1;\n data.writeUInt8(numPoints, offset);\n offset += 1;\n data.writeUInt8(xMode, offset);\n offset += 1;\n data.writeUInt8(riskMode, offset);\n offset += 1;\n\n for (const p of params.points) {\n data.writeBigUInt64LE(toQ32(p.pctBase), offset);\n offset += 8;\n data.writeBigUInt64LE(toQ32(p.priceFactor), offset);\n offset += 8;\n data.writeUInt8(\n interpolationToByte(p.interpolation ?? params.defaultInterpolation),\n offset\n );\n offset += 1;\n const params_ = p.params ?? new Uint8Array(4);\n Buffer.from(params_).copy(data, offset, 0, 4);\n offset += 4;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a SetRiskCurve instruction with absolute x-axis (CurveXMode::Alternate).\n */\nexport function buildSetRiskCurveAbsolute(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetRiskCurveAbsoluteParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const slot = params.slot ?? 0;\n const riskMode = params.riskMode ?? RiskMode.Virtual;\n const numPoints = params.points.length;\n const data = Buffer.alloc(\n 1 + 1 + 1 + 1 + 1 + 1 + 1 + numPoints * POINT_DATA_SIZE\n );\n let offset = 0;\n\n data.writeUInt8(Discriminator.SetRiskCurve, offset);\n offset += 1;\n data.writeUInt8(slot, offset);\n offset += 1;\n data.writeUInt8(params.side, offset);\n offset += 1;\n data.writeUInt8(interpolationToByte(params.defaultInterpolation), offset);\n offset += 1;\n data.writeUInt8(numPoints, offset);\n offset += 1;\n data.writeUInt8(CurveXMode.Alternate, offset); // absolute tokens\n offset += 1;\n data.writeUInt8(riskMode, offset);\n offset += 1;\n\n for (const p of params.points) {\n data.writeBigUInt64LE(p.vaultBalance, offset);\n offset += 8;\n data.writeBigUInt64LE(toQ32(p.priceFactor), offset);\n offset += 8;\n data.writeUInt8(\n interpolationToByte(p.interpolation ?? params.defaultInterpolation),\n offset\n );\n offset += 1;\n const params_ = p.params ?? new Uint8Array(4);\n Buffer.from(params_).copy(data, offset, 0, 4);\n offset += 4;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build SetCurve instructions for both bid and ask in one call.\n * Returns [bidIx, askIx] — add both to the same transaction.\n */\nexport function buildSetCurveBoth(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetCurveBothParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [TransactionInstruction, TransactionInstruction] {\n const bidIx = buildSetCurve(authority, curveMetaPda, curvePrefabsPda, { ...params.bid, side: Side.Bid }, programId);\n const askIx = buildSetCurve(authority, curveMetaPda, curvePrefabsPda, { ...params.ask, side: Side.Ask }, programId);\n return [bidIx, askIx];\n}\n\n/**\n * Build SetRiskCurve instructions for both bid and ask in one call.\n * Returns [bidIx, askIx].\n */\nexport function buildSetRiskCurveBoth(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetRiskCurveBothParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [TransactionInstruction, TransactionInstruction] {\n const bidIx = buildSetRiskCurve(authority, curveMetaPda, curvePrefabsPda, { ...params.bid, side: Side.Bid }, programId);\n const askIx = buildSetRiskCurve(authority, curveMetaPda, curvePrefabsPda, { ...params.ask, side: Side.Ask }, programId);\n return [bidIx, askIx];\n}\n\n/**\n * Build SetRiskCurve (absolute x-axis) instructions for both bid and ask in one call.\n * Returns [bidIx, askIx].\n */\nexport function buildSetRiskCurveAbsoluteBoth(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n params: SetRiskCurveAbsoluteBothParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): [TransactionInstruction, TransactionInstruction] {\n const bidIx = buildSetRiskCurveAbsolute(authority, curveMetaPda, curvePrefabsPda, { ...params.bid, side: Side.Bid }, programId);\n const askIx = buildSetRiskCurveAbsolute(authority, curveMetaPda, curvePrefabsPda, { ...params.ask, side: Side.Ask }, programId);\n return [bidIx, askIx];\n}\n","import {\n PublicKey,\n SYSVAR_CLOCK_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type {\n UpdateMidpriceParams,\n UpdateBaseSpreadParams,\n UpdateMidpriceAndBaseSpreadParams,\n} from \"../types\";\n\n/**\n * Build an UpdateMidprice instruction.\n * Accounts: authority, midprice_oracle, clock.\n */\nexport function buildUpdateMidprice(\n authority: PublicKey,\n midpriceOraclePda: PublicKey,\n params: UpdateMidpriceParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8);\n data.writeUInt8(Discriminator.UpdateMidprice, 0);\n data.writeBigUInt64LE(params.sequence ?? 0n, 1);\n data.writeBigUInt64LE(params.midpriceQ32, 9);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: midpriceOraclePda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateBaseSpread instruction.\n * Accounts: authority, midprice_oracle, clock.\n */\nexport function buildUpdateBaseSpread(\n authority: PublicKey,\n midpriceOraclePda: PublicKey,\n params: UpdateBaseSpreadParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8);\n data.writeUInt8(Discriminator.UpdateBaseSpread, 0);\n data.writeBigUInt64LE(params.sequence ?? 0n, 1);\n data.writeBigUInt64LE(params.spreadFactorQ32, 9);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: midpriceOraclePda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateMidpriceAndBaseSpread instruction (atomic update of both).\n * Accounts: authority, midprice_oracle, clock.\n */\nexport function buildUpdateMidpriceAndBaseSpread(\n authority: PublicKey,\n midpriceOraclePda: PublicKey,\n params: UpdateMidpriceAndBaseSpreadParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 8 + 8 + 8);\n data.writeUInt8(Discriminator.UpdateMidpriceAndBaseSpread, 0);\n data.writeBigUInt64LE(params.sequence ?? 0n, 1);\n data.writeBigUInt64LE(params.midpriceQ32, 9);\n data.writeBigUInt64LE(params.spreadFactorQ32, 17);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: midpriceOraclePda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type { SwitchCurveParams } from \"../types\";\n\n/**\n * Build a SwitchPriceCurve instruction (hot path).\n * Accounts: authority, curve_meta.\n */\nexport function buildSwitchPriceCurve(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n params: SwitchCurveParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1 + 1);\n data.writeUInt8(Discriminator.SwitchPriceCurve, 0);\n data.writeUInt8(params.side, 1);\n data.writeUInt8(params.slot, 2);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a SwitchRiskCurve instruction (hot path).\n * Accounts: authority, curve_meta.\n */\nexport function buildSwitchRiskCurve(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n params: SwitchCurveParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1 + 1);\n data.writeUInt8(Discriminator.SwitchRiskCurve, 0);\n data.writeUInt8(params.side, 1);\n data.writeUInt8(params.slot, 2);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport {\n Discriminator,\n CURVE_UPDATE_OP_SIZE,\n HADRON_PROGRAM_ID,\n} from \"../constants\";\nimport type { CurveUpdateOp } from \"../types\";\n\n/**\n * Build a SubmitCurveUpdates instruction (hot path, 2 accounts).\n * Accounts: authority, curve_updates.\n */\nexport function buildSubmitCurveUpdates(\n authority: PublicKey,\n curveUpdatesPda: PublicKey,\n ops: CurveUpdateOp[],\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1 + ops.length * CURVE_UPDATE_OP_SIZE);\n let offset = 0;\n\n data.writeUInt8(Discriminator.SubmitCurveUpdates, offset);\n offset += 1;\n data.writeUInt8(ops.length, offset);\n offset += 1;\n\n for (const op of ops) {\n data.writeUInt8(op.curveType, offset);\n offset += 1;\n data.writeUInt8(op.opKind, offset);\n offset += 1;\n data.writeUInt8(op.pointIndex, offset);\n offset += 1;\n data.writeUInt8(op.interpolation, offset);\n offset += 1;\n data.writeBigUInt64LE(op.amountIn, offset);\n offset += 8;\n data.writeBigUInt64LE(op.priceFactorQ32, offset);\n offset += 8;\n const params = op.params ?? new Uint8Array(4);\n Buffer.from(params).copy(data, offset, 0, 4);\n offset += 4;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveUpdatesPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build an ApplyCurveUpdates instruction.\n * Accounts: authority, curve_meta, curve_prefabs, curve_updates.\n */\nexport function buildApplyCurveUpdates(\n authority: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n curveUpdatesPda: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1);\n data.writeUInt8(Discriminator.ApplyCurveUpdates, 0);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: curveMetaPda, isSigner: false, isWritable: false },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n { pubkey: curveUpdatesPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n","import {\n PublicKey,\n SYSVAR_CLOCK_PUBKEY,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport type { NominateAuthorityParams, SetQuotingAuthorityParams } from \"../types\";\n\n/**\n * Build a NominateAuthority instruction (step 1 of 2-step authority transfer).\n * Accounts: authority, config, clock.\n */\nexport function buildNominateAuthority(\n authority: PublicKey,\n configPda: PublicKey,\n params: NominateAuthorityParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 32 + 8);\n let offset = 0;\n\n data.writeUInt8(Discriminator.NominateAuthority, offset);\n offset += 1;\n params.newAuthority.toBuffer().copy(data, offset);\n offset += 32;\n data.writeBigUInt64LE(params.expirySlot, offset);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an AcceptAuthority instruction (step 2 of 2-step authority transfer).\n * Only updates Config.authority. Quoting authority is managed via SetQuotingAuthority.\n * Accounts: new_authority, config, clock.\n */\nexport function buildAcceptAuthority(\n newAuthority: PublicKey,\n configPda: PublicKey,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1);\n data.writeUInt8(Discriminator.AcceptAuthority, 0);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: newAuthority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build a SetQuotingAuthority instruction.\n * Pool authority sets a new quoting authority on MidpriceOracle, CurveMeta,\n * CurveUpdates, and optionally SpreadConfig.\n * Accounts: authority, config, midprice_oracle, curve_meta, curve_updates, [spread_config?].\n */\nexport function buildSetQuotingAuthority(\n authority: PublicKey,\n configPda: PublicKey,\n oraclePda: PublicKey,\n curveMetaPda: PublicKey,\n curveUpdatesPda: PublicKey,\n params: SetQuotingAuthorityParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 32);\n data.writeUInt8(Discriminator.SetQuotingAuthority, 0);\n params.newQuotingAuthority.toBuffer().copy(data, 1);\n\n const keys = [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: false },\n { pubkey: oraclePda, isSigner: false, isWritable: true },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curveUpdatesPda, isSigner: false, isWritable: true },\n ];\n\n if (params.spreadConfigPda) {\n keys.push({\n pubkey: params.spreadConfigPda,\n isSigner: false,\n isWritable: true,\n });\n }\n\n return new TransactionInstruction({\n programId,\n keys,\n data,\n });\n}\n","import {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport { getFeeConfigAddress } from \"../helpers/derive\";\nimport type {\n InitializeFeeConfigParams,\n RotateFeeAdminParams,\n UpdateFeeConfigParams,\n} from \"../types\";\n\n/**\n * Build an InitializeFeeConfig instruction (one-time global setup).\n * Accounts: payer, authority, fee_config, system_program.\n */\nexport function buildInitializeFeeConfig(\n payer: PublicKey,\n authority: PublicKey,\n params: InitializeFeeConfigParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [feeConfigPda] = getFeeConfigAddress(programId);\n\n const data = Buffer.alloc(1 + 4 + 32 + 32);\n let offset = 0;\n\n data.writeUInt8(Discriminator.InitializeFeeConfig, offset);\n offset += 1;\n data.writeUInt32LE(params.feePpm, offset);\n offset += 4;\n params.feeAdmin.toBuffer().copy(data, offset);\n offset += 32;\n params.feeRecipient.toBuffer().copy(data, offset);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: feeConfigPda, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateFeeConfig instruction.\n * Accounts: fee_admin, fee_config.\n */\nexport function buildUpdateFeeConfig(\n feeAdmin: PublicKey,\n params: UpdateFeeConfigParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [feeConfigPda] = getFeeConfigAddress(programId);\n\n const data = Buffer.alloc(1 + 4 + 32);\n let offset = 0;\n\n data.writeUInt8(Discriminator.UpdateFeeConfig, offset);\n offset += 1;\n // u32::MAX = no change\n data.writeUInt32LE(params.feePpm !== null ? params.feePpm : 0xffffffff, offset);\n offset += 4;\n // all zeros = no change\n if (params.feeRecipient) {\n params.feeRecipient.toBuffer().copy(data, offset);\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: feeAdmin, isSigner: true, isWritable: false },\n { pubkey: feeConfigPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a RotateFeeAdmin instruction.\n * Accounts: fee_admin (signer), fee_config (mut).\n */\nexport function buildRotateFeeAdmin(\n feeAdmin: PublicKey,\n params: RotateFeeAdminParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [feeConfigPda] = getFeeConfigAddress(programId);\n\n const data = Buffer.alloc(1 + 32);\n data.writeUInt8(Discriminator.RotateFeeAdmin, 0);\n params.newFeeAdmin.toBuffer().copy(data, 1);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: feeAdmin, isSigner: true, isWritable: false },\n { pubkey: feeConfigPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n","import {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport { getSpreadConfigAddress } from \"../helpers/derive\";\nimport type {\n InitializeSpreadConfigParams,\n UpdateSpreadConfigParams,\n} from \"../types\";\n\n/**\n * Build an InitializeSpreadConfig instruction.\n * Accounts: payer, authority, config, spread_config, system_program.\n */\nexport function buildInitializeSpreadConfig(\n payer: PublicKey,\n authority: PublicKey,\n configPda: PublicKey,\n params: InitializeSpreadConfigParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [spreadConfigPda] = getSpreadConfigAddress(configPda, programId);\n\n const data = Buffer.alloc(1 + 32);\n data.writeUInt8(Discriminator.InitializeSpreadConfig, 0);\n params.admin.toBuffer().copy(data, 1);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: payer, isSigner: true, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: spreadConfigPda, isSigner: false, isWritable: true },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateSpreadConfig instruction.\n * Accounts: admin, config, spread_config.\n */\nexport function buildUpdateSpreadConfig(\n admin: PublicKey,\n configPda: PublicKey,\n params: UpdateSpreadConfigParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const [spreadConfigPda] = getSpreadConfigAddress(configPda, programId);\n\n // data: disc(1) + num_triggers(1) + triggers(34 each)\n const numTriggers = params.triggers.length;\n const data = Buffer.alloc(1 + 1 + numTriggers * 34);\n let offset = 0;\n\n data.writeUInt8(Discriminator.UpdateSpreadConfig, offset);\n offset += 1;\n data.writeUInt8(numTriggers, offset);\n offset += 1;\n\n for (const t of params.triggers) {\n t.account.toBuffer().copy(data, offset);\n offset += 32;\n data.writeUInt16LE(t.spreadBps, offset);\n offset += 2;\n }\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: admin, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: false },\n { pubkey: spreadConfigPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n","import {\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Discriminator, HADRON_PROGRAM_ID } from \"../constants\";\nimport { getSpreadConfigAddress } from \"../helpers/derive\";\nimport type {\n SetPoolStateParams,\n UpdateDeltaStalenessParams,\n} from \"../types\";\n\n/**\n * Build a SetPoolState instruction.\n * Accounts: authority, config.\n */\nexport function buildSetPoolState(\n authority: PublicKey,\n configPda: PublicKey,\n params: SetPoolStateParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1);\n data.writeUInt8(Discriminator.SetPoolState, 0);\n data.writeUInt8(params.newState, 1);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build an UpdateDeltaStaleness instruction.\n * Accounts: authority, config.\n */\nexport function buildUpdateDeltaStaleness(\n authority: PublicKey,\n configPda: PublicKey,\n params: UpdateDeltaStalenessParams,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1 + 1);\n data.writeUInt8(Discriminator.UpdateDeltaStaleness, 0);\n data.writeUInt8(params.deltaStaleness, 1);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: configPda, isSigner: false, isWritable: true },\n ],\n data,\n });\n}\n\n/**\n * Build a ClosePool instruction.\n * Accounts: authority, config, midprice_oracle, curve_meta, curve_prefabs,\n * curve_updates, vault_x, vault_y, token_program_x, token_program_y,\n * [optional: spread_config if initialized].\n */\nexport function buildClosePool(\n authority: PublicKey,\n configPda: PublicKey,\n midpriceOraclePda: PublicKey,\n curveMetaPda: PublicKey,\n curvePrefabsPda: PublicKey,\n curveUpdatesPda: PublicKey,\n vaultX: PublicKey,\n vaultY: PublicKey,\n tokenProgramX: PublicKey,\n tokenProgramY: PublicKey,\n spreadConfigInitialized: boolean = false,\n programId: PublicKey = HADRON_PROGRAM_ID\n): TransactionInstruction {\n const data = Buffer.alloc(1);\n data.writeUInt8(Discriminator.ClosePool, 0);\n\n const keys = [\n { pubkey: authority, isSigner: true, isWritable: true },\n { pubkey: configPda, isSigner: false, isWritable: true },\n { pubkey: midpriceOraclePda, isSigner: false, isWritable: true },\n { pubkey: curveMetaPda, isSigner: false, isWritable: true },\n { pubkey: curvePrefabsPda, isSigner: false, isWritable: true },\n { pubkey: curveUpdatesPda, isSigner: false, isWritable: true },\n { pubkey: vaultX, isSigner: false, isWritable: true },\n { pubkey: vaultY, isSigner: false, isWritable: true },\n { pubkey: tokenProgramX, isSigner: false, isWritable: false },\n { pubkey: tokenProgramY, isSigner: false, isWritable: false },\n ];\n\n if (spreadConfigInitialized) {\n const [spreadConfigPda] = getSpreadConfigAddress(configPda, programId);\n keys.push({\n pubkey: spreadConfigPda,\n isSigner: false,\n isWritable: true,\n });\n }\n\n return new TransactionInstruction({ programId, keys, data });\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport {\n HADRON_PROGRAM_ID,\n curvePrefabsSize,\n DEFAULT_MAX_PREFAB_SLOTS,\n DEFAULT_MAX_CURVE_POINTS,\n} from \"./constants\";\nimport {\n derivePoolAddresses,\n getConfigAddress,\n getFeeConfigAddress,\n getSpreadConfigAddress,\n} from \"./helpers/derive\";\nimport { fromQ32 } from \"./helpers/math\";\nimport { getOrCreateAta } from \"./helpers/token\";\nimport {\n decodeConfig,\n decodeMidpriceOracle,\n decodeCurveMeta,\n decodeFeeConfig,\n decodeSpreadConfig,\n decodeCurveUpdates,\n decodeCurveSide,\n decodeActiveCurves,\n isSlotInitialized,\n} from \"./accounts\";\nimport {\n buildInitialize,\n buildAllocateCurvePrefabs,\n buildDeposit,\n buildWithdraw,\n buildSwapExactIn,\n buildSetCurve,\n buildSetCurveBoth,\n buildSetRiskCurve,\n buildSetRiskCurveBoth,\n buildSetRiskCurveAbsolute,\n buildSetRiskCurveAbsoluteBoth,\n buildUpdateMidprice,\n buildUpdateBaseSpread,\n buildUpdateMidpriceAndBaseSpread,\n buildSwitchPriceCurve,\n buildSwitchRiskCurve,\n buildSubmitCurveUpdates,\n buildApplyCurveUpdates,\n buildNominateAuthority,\n buildAcceptAuthority,\n buildSetPoolState,\n buildUpdateDeltaStaleness,\n buildClosePool,\n buildInitializeFeeConfig,\n buildUpdateFeeConfig,\n buildInitializeSpreadConfig,\n buildUpdateSpreadConfig,\n} from \"./instructions\";\nimport type {\n DecodedConfig,\n DecodedMidpriceOracle,\n DecodedCurveMeta,\n DecodedFeeConfig,\n CurveSide,\n CurveUpdateOp,\n PoolAddresses,\n InitializeParams,\n DepositParams,\n WithdrawParams,\n SwapParams,\n SetCurveParams,\n SetCurveBothParams,\n SetRiskCurveParams,\n SetRiskCurveBothParams,\n SetRiskCurveAbsoluteParams,\n SetRiskCurveAbsoluteBothParams,\n UpdateMidpriceParams,\n UpdateBaseSpreadParams,\n UpdateMidpriceAndBaseSpreadParams,\n SwitchCurveParams,\n NominateAuthorityParams,\n SetPoolStateParams,\n UpdateDeltaStalenessParams,\n InitializeFeeConfigParams,\n UpdateFeeConfigParams,\n InitializeSpreadConfigParams,\n UpdateSpreadConfigParams,\n SpreadTriggerInput,\n AllocateCurvePrefabsParams,\n} from \"./types\";\n\n/**\n * Main SDK class for interacting with a Hadron pool.\n *\n * Usage:\n * ```ts\n * const pool = await Hadron.load(connection, poolAddress);\n * const midprice = pool.getMidprice();\n * const ix = pool.swap(user, params);\n * ```\n */\nexport class Hadron {\n public readonly programId: PublicKey;\n public readonly poolAddress: PublicKey;\n public readonly addresses: PoolAddresses;\n\n public config: DecodedConfig;\n public oracle: DecodedMidpriceOracle;\n public curveMeta: DecodedCurveMeta;\n public curvePrefabsData: Uint8Array;\n\n private connection: Connection;\n\n constructor(\n connection: Connection,\n poolAddress: PublicKey,\n addresses: PoolAddresses,\n config: DecodedConfig,\n oracle: DecodedMidpriceOracle,\n curveMeta: DecodedCurveMeta,\n curvePrefabsData: Uint8Array,\n programId: PublicKey = HADRON_PROGRAM_ID\n ) {\n this.connection = connection;\n this.poolAddress = poolAddress;\n this.addresses = addresses;\n this.config = config;\n this.oracle = oracle;\n this.curveMeta = curveMeta;\n this.curvePrefabsData = curvePrefabsData;\n this.programId = programId;\n }\n\n // ==========================================================================\n // Static Factory Methods\n // ==========================================================================\n\n /**\n * Load a Hadron instance from an existing pool address.\n * Fetches all required accounts from the chain.\n */\n static async load(\n connection: Connection,\n poolAddress: PublicKey\n ): Promise<Hadron> {\n const programId = HADRON_PROGRAM_ID;\n\n // Fetch config first to get pool identity\n const configInfo = await connection.getAccountInfo(poolAddress);\n if (!configInfo) throw new Error(\"Config account not found\");\n const config = decodeConfig(configInfo.data);\n\n // Derive all addresses\n const tokenProgramX = config.tokenProgramX;\n const tokenProgramY = config.tokenProgramY;\n const addresses = derivePoolAddresses(\n config.seed,\n config.mintX,\n config.mintY,\n tokenProgramX,\n tokenProgramY,\n programId\n );\n\n // Fetch remaining accounts in parallel\n const [oracleInfo, curveMetaInfo, curvePrefabsInfo] = await Promise.all([\n connection.getAccountInfo(addresses.midpriceOracle),\n connection.getAccountInfo(addresses.curveMeta),\n connection.getAccountInfo(addresses.curvePrefabs),\n ]);\n\n if (!oracleInfo) throw new Error(\"MidpriceOracle account not found\");\n if (!curveMetaInfo) throw new Error(\"CurveMeta account not found\");\n if (!curvePrefabsInfo) throw new Error(\"CurvePrefabs account not found\");\n\n const oracle = decodeMidpriceOracle(oracleInfo.data);\n const curveMeta = decodeCurveMeta(curveMetaInfo.data);\n\n return new Hadron(\n connection,\n poolAddress,\n addresses,\n config,\n oracle,\n curveMeta,\n curvePrefabsInfo.data,\n programId\n );\n }\n\n /**\n * Load a Hadron instance from pool identity (seed + mints).\n */\n static async loadFromSeed(\n connection: Connection,\n seed: bigint,\n mintX: PublicKey,\n mintY: PublicKey\n ): Promise<Hadron> {\n const programId = HADRON_PROGRAM_ID;\n const [poolAddress] = getConfigAddress(seed, mintX, mintY, programId);\n return Hadron.load(connection, poolAddress);\n }\n\n /**\n * Build all instructions needed to initialize a new pool.\n *\n * Returns the allocate + initialize instructions and the derived pool address.\n * The caller is responsible for grouping them into transactions and sending.\n * The allocate instruction(s) must be confirmed before the initialize instruction.\n *\n * After the pool is live on-chain, load it with `Hadron.load(connection, poolAddress)`.\n *\n * ```ts\n * const { instructions, poolAddress, seed } = Hadron.initialize(payer, {\n * mintX,\n * mintY,\n * authority: payer,\n * initialMidpriceQ32: Q32_ONE,\n * });\n * ```\n */\n static initialize(\n payer: PublicKey,\n params: InitializeParams\n ): { instructions: TransactionInstruction[]; poolAddress: PublicKey; seed: bigint } {\n const programId = HADRON_PROGRAM_ID;\n const seed = params.seed ?? Hadron.randomSeed();\n const maxPrefabSlots = params.maxPrefabSlots ?? DEFAULT_MAX_PREFAB_SLOTS;\n const maxCurvePoints = params.maxCurvePoints ?? DEFAULT_MAX_CURVE_POINTS;\n\n const resolvedParams = { ...params, seed };\n\n const [poolAddress] = getConfigAddress(\n seed,\n params.mintX,\n params.mintY,\n programId\n );\n\n const allocateParams: AllocateCurvePrefabsParams = {\n seed,\n mintX: params.mintX,\n mintY: params.mintY,\n maxPrefabSlots,\n maxCurvePoints,\n };\n\n const instructions: TransactionInstruction[] = [];\n\n const size = curvePrefabsSize(maxPrefabSlots, maxCurvePoints);\n const allocateCalls = size > 10_240 ? 2 : 1;\n for (let i = 0; i < allocateCalls; i++) {\n instructions.push(buildAllocateCurvePrefabs(payer, allocateParams, programId));\n }\n\n instructions.push(buildInitialize(payer, resolvedParams, programId));\n\n return { instructions, poolAddress, seed };\n }\n\n /** Generate a random u64 seed. */\n private static randomSeed(): bigint {\n const buf = new Uint8Array(8);\n crypto.getRandomValues(buf);\n return new DataView(buf.buffer).getBigUint64(0, true);\n }\n\n // ==========================================================================\n // State Queries\n // ==========================================================================\n\n /** Re-fetch all account state from the chain. */\n async refetchStates(): Promise<void> {\n const [configInfo, oracleInfo, curveMetaInfo, curvePrefabsInfo] =\n await Promise.all([\n this.connection.getAccountInfo(this.poolAddress),\n this.connection.getAccountInfo(this.addresses.midpriceOracle),\n this.connection.getAccountInfo(this.addresses.curveMeta),\n this.connection.getAccountInfo(this.addresses.curvePrefabs),\n ]);\n\n if (configInfo) this.config = decodeConfig(configInfo.data);\n if (oracleInfo) this.oracle = decodeMidpriceOracle(oracleInfo.data);\n if (curveMetaInfo) this.curveMeta = decodeCurveMeta(curveMetaInfo.data);\n if (curvePrefabsInfo) this.curvePrefabsData = curvePrefabsInfo.data;\n }\n\n /** Get midprice as a floating-point number. */\n getMidprice(): number {\n return fromQ32(this.oracle.midpriceQ32);\n }\n\n /** Get spread factor as a floating-point number (e.g. 0.9995 = 5 bps). */\n getSpreadFactor(): number {\n return fromQ32(this.oracle.spreadFactorQ32);\n }\n\n /** Get spread in basis points (e.g. 5 for a 0.9995 factor). */\n getSpreadBps(): number {\n return (1 - fromQ32(this.oracle.spreadFactorQ32)) * 10_000;\n }\n\n /** Get the currently active curve slot indices. */\n getActiveCurveSlots(): {\n priceBid: number;\n priceAsk: number;\n riskBid: number;\n riskAsk: number;\n } {\n return {\n priceBid: this.curveMeta.activePriceBidSlot,\n priceAsk: this.curveMeta.activePriceAskSlot,\n riskBid: this.curveMeta.activeRiskBidSlot,\n riskAsk: this.curveMeta.activeRiskAskSlot,\n };\n }\n\n /** Decode the currently active curves from prefabs data. */\n getActiveCurves(): {\n priceBid: CurveSide;\n priceAsk: CurveSide;\n riskBid: CurveSide;\n riskAsk: CurveSide;\n } {\n return decodeActiveCurves(this.curvePrefabsData, this.curveMeta);\n }\n\n /** Decode a specific curve slot. */\n getCurveSlot(\n curveType: import(\"./types\").CurveType,\n slot: number\n ): CurveSide {\n return decodeCurveSide(\n this.curvePrefabsData,\n curveType,\n slot,\n this.curveMeta.maxPrefabSlots,\n this.curveMeta.maxCurvePoints\n );\n }\n\n // ==========================================================================\n // Instruction Builders (convenience wrappers)\n // ==========================================================================\n\n /** Build deposit instruction. */\n deposit(user: PublicKey, params: DepositParams): TransactionInstruction {\n return buildDeposit(\n user,\n this.poolAddress,\n this.config.mintX,\n this.config.mintY,\n this.config.tokenProgramX,\n this.config.tokenProgramY,\n params,\n this.programId\n );\n }\n\n /** Build withdraw instruction. */\n withdraw(user: PublicKey, params: WithdrawParams): TransactionInstruction {\n return buildWithdraw(\n user,\n this.poolAddress,\n this.config.mintX,\n this.config.mintY,\n this.config.tokenProgramX,\n this.config.tokenProgramY,\n params,\n this.programId\n );\n }\n\n /** Build swap instruction. */\n swap(user: PublicKey, params: SwapParams): TransactionInstruction {\n return buildSwapExactIn(\n user,\n this.addresses,\n this.config.mintX,\n this.config.mintY,\n this.config.tokenProgramX,\n this.config.tokenProgramY,\n params,\n this.programId,\n this.config.spreadConfigInitialized\n );\n }\n\n /** Build set curve instruction. */\n setCurve(\n authority: PublicKey,\n params: SetCurveParams\n ): TransactionInstruction {\n return buildSetCurve(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set risk curve instruction (percent-based x-axis). */\n setRiskCurve(\n authority: PublicKey,\n params: SetRiskCurveParams\n ): TransactionInstruction {\n return buildSetRiskCurve(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set risk curve instruction (absolute x-axis). */\n setRiskCurveAbsolute(\n authority: PublicKey,\n params: SetRiskCurveAbsoluteParams\n ): TransactionInstruction {\n return buildSetRiskCurveAbsolute(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set curve instructions for both bid and ask. Returns [bidIx, askIx]. */\n setCurveBoth(\n authority: PublicKey,\n params: SetCurveBothParams\n ): [TransactionInstruction, TransactionInstruction] {\n return buildSetCurveBoth(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set risk curve instructions for both bid and ask. Returns [bidIx, askIx]. */\n setRiskCurveBoth(\n authority: PublicKey,\n params: SetRiskCurveBothParams\n ): [TransactionInstruction, TransactionInstruction] {\n return buildSetRiskCurveBoth(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build set risk curve (absolute x-axis) instructions for both bid and ask. Returns [bidIx, askIx]. */\n setRiskCurveAbsoluteBoth(\n authority: PublicKey,\n params: SetRiskCurveAbsoluteBothParams\n ): [TransactionInstruction, TransactionInstruction] {\n return buildSetRiskCurveAbsoluteBoth(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n params,\n this.programId\n );\n }\n\n /** Build update midprice instruction. */\n updateMidprice(\n authority: PublicKey,\n params: UpdateMidpriceParams\n ): TransactionInstruction {\n return buildUpdateMidprice(\n authority,\n this.addresses.midpriceOracle,\n params,\n this.programId\n );\n }\n\n /** Build update base spread instruction. */\n updateBaseSpread(\n authority: PublicKey,\n params: UpdateBaseSpreadParams\n ): TransactionInstruction {\n return buildUpdateBaseSpread(\n authority,\n this.addresses.midpriceOracle,\n params,\n this.programId\n );\n }\n\n /** Build atomic update of midprice + base spread. */\n updateMidpriceAndBaseSpread(\n authority: PublicKey,\n params: UpdateMidpriceAndBaseSpreadParams\n ): TransactionInstruction {\n return buildUpdateMidpriceAndBaseSpread(\n authority,\n this.addresses.midpriceOracle,\n params,\n this.programId\n );\n }\n\n /** Build switch price curve instruction (hot path). */\n switchPriceCurve(\n authority: PublicKey,\n params: SwitchCurveParams\n ): TransactionInstruction {\n return buildSwitchPriceCurve(\n authority,\n this.addresses.curveMeta,\n params,\n this.programId\n );\n }\n\n /** Build switch risk curve instruction (hot path). */\n switchRiskCurve(\n authority: PublicKey,\n params: SwitchCurveParams\n ): TransactionInstruction {\n return buildSwitchRiskCurve(\n authority,\n this.addresses.curveMeta,\n params,\n this.programId\n );\n }\n\n /** Build submit curve updates instruction (hot path). */\n submitCurveUpdates(\n authority: PublicKey,\n ops: CurveUpdateOp[]\n ): TransactionInstruction {\n return buildSubmitCurveUpdates(\n authority,\n this.addresses.curveUpdates,\n ops,\n this.programId\n );\n }\n\n /** Build apply curve updates instruction. */\n applyCurveUpdates(authority: PublicKey): TransactionInstruction {\n return buildApplyCurveUpdates(\n authority,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n this.addresses.curveUpdates,\n this.programId\n );\n }\n\n /** Build nominate authority instruction. */\n nominateAuthority(\n authority: PublicKey,\n params: NominateAuthorityParams\n ): TransactionInstruction {\n return buildNominateAuthority(\n authority,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /** Build accept authority instruction. */\n acceptAuthority(newAuthority: PublicKey): TransactionInstruction {\n return buildAcceptAuthority(\n newAuthority,\n this.poolAddress,\n this.programId\n );\n }\n\n /** Build set pool state instruction. */\n setPoolState(\n authority: PublicKey,\n params: SetPoolStateParams\n ): TransactionInstruction {\n return buildSetPoolState(\n authority,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /** Build update delta staleness instruction. */\n updateDeltaStaleness(\n authority: PublicKey,\n params: UpdateDeltaStalenessParams\n ): TransactionInstruction {\n return buildUpdateDeltaStaleness(\n authority,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /** Build initialize spread config instruction. */\n initializeSpreadConfig(\n payer: PublicKey,\n authority: PublicKey,\n params: InitializeSpreadConfigParams\n ): TransactionInstruction {\n return buildInitializeSpreadConfig(\n payer,\n authority,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /** Build update spread config instruction (full replacement). */\n updateSpreadConfig(\n admin: PublicKey,\n params: UpdateSpreadConfigParams\n ): TransactionInstruction {\n return buildUpdateSpreadConfig(\n admin,\n this.poolAddress,\n params,\n this.programId\n );\n }\n\n /**\n * Fetch current spread triggers, append new ones, and return the update ix.\n * If a trigger for the same account already exists, its spreadBps is updated.\n */\n async addSpreadTriggers(\n admin: PublicKey,\n triggers: SpreadTriggerInput[]\n ): Promise<TransactionInstruction> {\n const current = await this.fetchSpreadTriggers();\n const merged = [...current];\n for (const t of triggers) {\n const existing = merged.findIndex(\n (e) => e.account.equals(t.account)\n );\n if (existing >= 0) {\n merged[existing] = t;\n } else {\n merged.push(t);\n }\n }\n return this.updateSpreadConfig(admin, { triggers: merged });\n }\n\n /**\n * Fetch current spread triggers, remove the given accounts, and return the update ix.\n */\n async removeSpreadTriggers(\n admin: PublicKey,\n accounts: PublicKey[]\n ): Promise<TransactionInstruction> {\n const current = await this.fetchSpreadTriggers();\n const removeSet = new Set(accounts.map((a) => a.toBase58()));\n const filtered = current.filter(\n (t) => !removeSet.has(t.account.toBase58())\n );\n return this.updateSpreadConfig(admin, { triggers: filtered });\n }\n\n /** Fetch and decode the current spread config triggers from chain. */\n private async fetchSpreadTriggers(): Promise<SpreadTriggerInput[]> {\n const [spreadConfigPda] = getSpreadConfigAddress(\n this.poolAddress,\n this.programId\n );\n const info = await this.connection.getAccountInfo(spreadConfigPda);\n if (!info) return [];\n const decoded = decodeSpreadConfig(info.data);\n return decoded.triggers;\n }\n\n /** Build close pool instruction. */\n closePool(authority: PublicKey): TransactionInstruction {\n return buildClosePool(\n authority,\n this.poolAddress,\n this.addresses.midpriceOracle,\n this.addresses.curveMeta,\n this.addresses.curvePrefabs,\n this.addresses.curveUpdates,\n this.addresses.vaultX,\n this.addresses.vaultY,\n this.config.tokenProgramX,\n this.config.tokenProgramY,\n this.config.spreadConfigInitialized,\n this.programId\n );\n }\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Hadron } from \"./hadron\";\nimport { fromQ32, toQ32 } from \"./helpers/math\";\nimport { MAX_SETCURVE_POINTS, MAX_CURVE_UPDATE_OPS } from \"./constants\";\nimport {\n Interpolation,\n Side,\n RiskMode,\n CurveXMode,\n CurveType,\n CurveUpdateOpKind,\n} from \"./types\";\nimport type {\n StagedOrder,\n OrderSide,\n PlaceOrderParams,\n AmendOrderParams,\n CancelOrderParams,\n OrderbookLevel,\n OrderbookState,\n SetRiskCurveAbsolutePointInput,\n SetCurvePointInput,\n DepositParams,\n WithdrawParams,\n SetPoolStateParams,\n UpdateMidpriceParams,\n CurveUpdateOp,\n CurvePoint,\n} from \"./types\";\n\n/** Maximum orders per side (MAX_SETCURVE_POINTS minus terminal point). */\nconst MAX_ORDERS_PER_SIDE = MAX_SETCURVE_POINTS - 1;\n\nfunction tokensToAtoms(tokens: number, decimals: number): bigint {\n return BigInt(Math.round(tokens * 10 ** decimals));\n}\n\nfunction atomsToTokens(atoms: bigint, decimals: number): number {\n return Number(atoms) / 10 ** decimals;\n}\n\n/**\n * High-level orderbook abstraction over a Hadron pool.\n *\n * Maps limit orders to risk curve points using `CurveXMode.Alternate`\n * (absolute vault balance x-axis) and `RiskMode.Integrated`.\n *\n * ```ts\n * const book = await HadronOrderbook.load({ connection, pool: poolAddress });\n * book.placeOrder({ side: \"bid\", size: 100, spreadBps: 10 });\n * book.placeOrder({ side: \"ask\", size: 100, spreadBps: 10 });\n * const ixs = book.push(authority);\n * ```\n */\nexport class HadronOrderbook {\n /** Underlying Hadron pool instance. */\n public readonly pool: Hadron;\n /** Decimals for token X (base). */\n public readonly decimalsX: number;\n /** Decimals for token Y (quote). */\n public readonly decimalsY: number;\n /** Vault X balance at time of load (atoms). */\n public readonly initialVaultX: bigint;\n /** Vault Y balance at time of load (atoms). */\n public readonly initialVaultY: bigint;\n\n private bidOrders: StagedOrder[] = [];\n private askOrders: StagedOrder[] = [];\n private bidsDirty = false;\n private asksDirty = false;\n private priceCurvesSet = false;\n\n private riskBidInitialized = false;\n private riskAskInitialized = false;\n private committedBidPoints: CurvePoint[] = [];\n private committedAskPoints: CurvePoint[] = [];\n\n private constructor(\n pool: Hadron,\n decimalsX: number,\n decimalsY: number,\n initialVaultX: bigint,\n initialVaultY: bigint\n ) {\n this.pool = pool;\n this.decimalsX = decimalsX;\n this.decimalsY = decimalsY;\n this.initialVaultX = initialVaultX;\n this.initialVaultY = initialVaultY;\n }\n\n // ==========================================================================\n // Static Factories\n // ==========================================================================\n\n /**\n * Load an orderbook from an existing on-chain pool.\n * Fetches decimals and vault balances, and reconstructs staged orders\n * from the active risk curves.\n */\n static async load(params: {\n connection: Connection;\n pool: PublicKey;\n }): Promise<HadronOrderbook> {\n const { connection, pool: poolAddress } = params;\n\n const hadron = await Hadron.load(connection, poolAddress);\n\n // Fetch mint info for decimals\n const [mintXInfo, mintYInfo, vaultXInfo, vaultYInfo] = await Promise.all([\n connection.getAccountInfo(hadron.config.mintX),\n connection.getAccountInfo(hadron.config.mintY),\n connection.getAccountInfo(hadron.addresses.vaultX),\n connection.getAccountInfo(hadron.addresses.vaultY),\n ]);\n\n if (!mintXInfo || !mintYInfo) throw new Error(\"Mint account(s) not found\");\n if (!vaultXInfo || !vaultYInfo) throw new Error(\"Vault account(s) not found\");\n\n // SPL Token mint layout: decimals at offset 44 (1 byte)\n const decimalsX = mintXInfo.data[44];\n const decimalsY = mintYInfo.data[44];\n\n // SPL Token account layout: amount at offset 64 (u64 LE)\n const vaultXBalance = new DataView(\n vaultXInfo.data.buffer,\n vaultXInfo.data.byteOffset\n ).getBigUint64(64, true);\n const vaultYBalance = new DataView(\n vaultYInfo.data.buffer,\n vaultYInfo.data.byteOffset\n ).getBigUint64(64, true);\n\n const book = new HadronOrderbook(\n hadron,\n decimalsX,\n decimalsY,\n vaultXBalance,\n vaultYBalance\n );\n\n // Reconstruct orders from on-chain risk curves\n book.reconstructFromCurves();\n\n return book;\n }\n\n /**\n * Wrap an existing Hadron instance as an orderbook.\n * Useful for tests or when you already have the pool loaded.\n */\n static fromPool(\n pool: Hadron,\n decimalsX: number,\n decimalsY: number,\n initialVaultX: bigint,\n initialVaultY: bigint\n ): HadronOrderbook {\n return new HadronOrderbook(\n pool,\n decimalsX,\n decimalsY,\n initialVaultX,\n initialVaultY\n );\n }\n\n // ==========================================================================\n // Order Management\n // ==========================================================================\n\n /**\n * Place a new order. Orders are staged locally and pushed on-chain via `push()`.\n * Orders on each side are sorted by spreadBps ascending (tightest first).\n * @throws If more than 31 orders on a side.\n */\n placeOrder(params: PlaceOrderParams): void {\n const orders = params.side === \"bid\" ? this.bidOrders : this.askOrders;\n\n if (orders.length >= MAX_ORDERS_PER_SIDE) {\n throw new Error(\n `Cannot place more than ${MAX_ORDERS_PER_SIDE} orders per side`\n );\n }\n\n orders.push({ size: params.size, spreadBps: params.spreadBps });\n orders.sort((a, b) => a.spreadBps - b.spreadBps);\n\n if (params.side === \"bid\") this.bidsDirty = true;\n else this.asksDirty = true;\n }\n\n /**\n * Amend an existing order at the given level index.\n * Re-sorts if spread changes.\n * @throws On invalid index.\n */\n amendOrder(params: AmendOrderParams): void {\n const orders = params.side === \"bid\" ? this.bidOrders : this.askOrders;\n\n if (params.level < 0 || params.level >= orders.length) {\n throw new Error(\n `Invalid level ${params.level} for ${params.side} (have ${orders.length} orders)`\n );\n }\n\n const order = orders[params.level];\n if (params.spreadBps !== undefined) order.spreadBps = params.spreadBps;\n if (params.size !== undefined) order.size = params.size;\n\n orders.sort((a, b) => a.spreadBps - b.spreadBps);\n\n if (params.side === \"bid\") this.bidsDirty = true;\n else this.asksDirty = true;\n }\n\n /**\n * Cancel the order at the given level index.\n * @throws On invalid index.\n */\n cancelOrder(params: CancelOrderParams): void {\n const orders = params.side === \"bid\" ? this.bidOrders : this.askOrders;\n\n if (params.level < 0 || params.level >= orders.length) {\n throw new Error(\n `Invalid level ${params.level} for ${params.side} (have ${orders.length} orders)`\n );\n }\n\n orders.splice(params.level, 1);\n\n if (params.side === \"bid\") this.bidsDirty = true;\n else this.asksDirty = true;\n }\n\n /** Cancel all orders on one or both sides. */\n cancelAll(side?: OrderSide): void {\n if (!side || side === \"bid\") {\n this.bidOrders = [];\n this.bidsDirty = true;\n }\n if (!side || side === \"ask\") {\n this.askOrders = [];\n this.asksDirty = true;\n }\n }\n\n /** Read-only access to staged bid orders. */\n getBids(): readonly StagedOrder[] {\n return this.bidOrders;\n }\n\n /** Read-only access to staged ask orders. */\n getAsks(): readonly StagedOrder[] {\n return this.askOrders;\n }\n\n // ==========================================================================\n // Push (orders → on-chain risk curves)\n // ==========================================================================\n\n /**\n * Build transaction instructions to push the current staged orders on-chain.\n *\n * 1. On first push, sets flat price curves (factor=1.0, Step interpolation).\n * 2. If risk curves not yet initialized, uses setRiskCurveAbsolute (sets headers).\n * 3. On subsequent pushes, computes a minimal diff and uses curve updates\n * (submit + apply) when possible, falling back to full rewrite for large diffs.\n */\n push(authority: PublicKey): TransactionInstruction[] {\n const ixs: TransactionInstruction[] = [];\n\n // First push: set flat price curves so price curve doesn't interfere\n if (!this.priceCurvesSet) {\n const flatPoints: SetCurvePointInput[] = [\n { amountIn: 0n, priceFactor: 1.0, interpolation: Interpolation.Step },\n {\n amountIn: BigInt(\"1000000000000000000\"),\n priceFactor: 1.0,\n interpolation: Interpolation.Step,\n },\n ];\n const [bidPriceIx, askPriceIx] = this.pool.setCurveBoth(authority, {\n bid: { defaultInterpolation: Interpolation.Step, points: flatPoints },\n ask: { defaultInterpolation: Interpolation.Step, points: flatPoints },\n });\n ixs.push(bidPriceIx, askPriceIx);\n this.priceCurvesSet = true;\n }\n\n // If any side not initialized, use full setRiskCurve (sets headers + points)\n if (!this.riskBidInitialized || !this.riskAskInitialized) {\n ixs.push(...this.buildFullRiskCurveIxs(authority));\n this.bidsDirty = false;\n this.asksDirty = false;\n return ixs;\n }\n\n // Both sides initialized — use curve updates path\n const updateIxs = this.buildCurveUpdateIxs(authority);\n ixs.push(...updateIxs);\n\n this.bidsDirty = false;\n this.asksDirty = false;\n\n return ixs;\n }\n\n // ==========================================================================\n // Delegated Methods\n // ==========================================================================\n\n /** Build an updateMidprice instruction. */\n updateMidprice(\n authority: PublicKey,\n midprice: number,\n sequence?: bigint\n ): TransactionInstruction {\n const params: UpdateMidpriceParams = {\n midpriceQ32: BigInt(Math.floor(midprice * 2 ** 32)),\n sequence,\n };\n return this.pool.updateMidprice(authority, params);\n }\n\n /** Build a deposit instruction. */\n deposit(user: PublicKey, params: DepositParams): TransactionInstruction {\n return this.pool.deposit(user, params);\n }\n\n /** Build a withdraw instruction. */\n withdraw(user: PublicKey, params: WithdrawParams): TransactionInstruction {\n return this.pool.withdraw(user, params);\n }\n\n /** Build a setPoolState instruction. */\n setPoolState(\n authority: PublicKey,\n params: SetPoolStateParams\n ): TransactionInstruction {\n return this.pool.setPoolState(authority, params);\n }\n\n /**\n * Get the current book state by reading on-chain risk curves + midprice.\n * Reconstructs levels from curve points.\n */\n getBookState(): OrderbookState {\n const midprice = this.pool.getMidprice();\n const curves = this.pool.getActiveCurves();\n\n const bids = this.curveSideToLevels(\n curves.riskBid,\n midprice,\n \"bid\",\n this.decimalsX\n );\n const asks = this.curveSideToLevels(\n curves.riskAsk,\n midprice,\n \"ask\",\n this.decimalsY\n );\n\n const base = atomsToTokens(this.initialVaultX, this.decimalsX);\n const quote = atomsToTokens(this.initialVaultY, this.decimalsY);\n\n return { midprice, bids, asks, inventory: { base, quote } };\n }\n\n // ==========================================================================\n // Curve Update Diff Algorithm\n // ==========================================================================\n\n /**\n * Compute the minimal set of curve update ops to transform `committed` into `desired`.\n *\n * Algorithm:\n * 1. Scan left-to-right for factor-only diffs (amountIn unchanged) → Edit ops.\n * 2. At the first structural diff (amountIn changed or length mismatch),\n * truncate-and-rebuild: remove all from that index to end, then add desired.\n * 3. Returns the ops array.\n */\n static computeCurveOps(\n committed: CurvePoint[],\n desired: CurvePoint[],\n curveType: CurveType\n ): CurveUpdateOp[] {\n const ops: CurveUpdateOp[] = [];\n const minLen = Math.min(committed.length, desired.length);\n\n let structuralDiffIndex = minLen;\n\n // Phase 1: scan for factor-only edits\n for (let i = 0; i < minLen; i++) {\n const c = committed[i];\n const d = desired[i];\n\n if (c.amountIn !== d.amountIn) {\n structuralDiffIndex = i;\n break;\n }\n\n if (c.priceFactorQ32 !== d.priceFactorQ32 || c.interpolation !== d.interpolation) {\n ops.push({\n curveType,\n opKind: CurveUpdateOpKind.Edit,\n pointIndex: i,\n interpolation: d.interpolation,\n amountIn: d.amountIn,\n priceFactorQ32: d.priceFactorQ32,\n params: d.params,\n });\n }\n }\n\n // If lengths differ but we scanned all of minLen without structural diff\n if (structuralDiffIndex === minLen && committed.length !== desired.length) {\n structuralDiffIndex = minLen;\n }\n\n // If no structural diff and same length, we're done (only factor edits)\n if (structuralDiffIndex === minLen && committed.length === desired.length) {\n return ops;\n }\n\n // Phase 2: truncate-and-rebuild from structuralDiffIndex\n // Remove all committed points from structuralDiffIndex to end\n // Each remove at structuralDiffIndex shifts the next point into that slot\n const numToRemove = committed.length - structuralDiffIndex;\n for (let i = 0; i < numToRemove; i++) {\n ops.push({\n curveType,\n opKind: CurveUpdateOpKind.Remove,\n pointIndex: structuralDiffIndex,\n interpolation: Interpolation.Step,\n amountIn: 0n,\n priceFactorQ32: 0n,\n params: new Uint8Array(4),\n });\n }\n\n // Add all desired points from structuralDiffIndex to end\n for (let i = structuralDiffIndex; i < desired.length; i++) {\n const d = desired[i];\n ops.push({\n curveType,\n opKind: CurveUpdateOpKind.Add,\n pointIndex: i,\n interpolation: d.interpolation,\n amountIn: d.amountIn,\n priceFactorQ32: d.priceFactorQ32,\n params: d.params,\n });\n }\n\n return ops;\n }\n\n // ==========================================================================\n // Internal Helpers\n // ==========================================================================\n\n /** Convert SetRiskCurveAbsolutePointInput[] to CurvePoint[] for diffing. */\n private static toCommittedPoints(\n points: SetRiskCurveAbsolutePointInput[]\n ): CurvePoint[] {\n return points.map((p) => ({\n amountIn: p.vaultBalance,\n priceFactorQ32: toQ32(p.priceFactor),\n interpolation: p.interpolation ?? Interpolation.Step,\n params: p.params ?? new Uint8Array(4),\n }));\n }\n\n /**\n * Build full setRiskCurveAbsolute instructions for sides that need initialization.\n * After sending, snapshots committed points and marks sides as initialized.\n */\n private buildFullRiskCurveIxs(\n authority: PublicKey\n ): TransactionInstruction[] {\n const ixs: TransactionInstruction[] = [];\n const hasBids = this.bidOrders.length > 0;\n const hasAsks = this.askOrders.length > 0;\n\n const bidPoints = hasBids ? this.buildBidRiskPoints() : undefined;\n const askPoints = hasAsks ? this.buildAskRiskPoints() : undefined;\n\n if (bidPoints && askPoints && !this.riskBidInitialized && !this.riskAskInitialized) {\n const [bidIx, askIx] = this.pool.setRiskCurveAbsoluteBoth(authority, {\n bid: {\n defaultInterpolation: Interpolation.Step,\n points: bidPoints,\n riskMode: RiskMode.Integrated,\n },\n ask: {\n defaultInterpolation: Interpolation.Step,\n points: askPoints,\n riskMode: RiskMode.Integrated,\n },\n });\n ixs.push(bidIx, askIx);\n this.committedBidPoints = HadronOrderbook.toCommittedPoints(bidPoints);\n this.committedAskPoints = HadronOrderbook.toCommittedPoints(askPoints);\n this.riskBidInitialized = true;\n this.riskAskInitialized = true;\n } else {\n if (bidPoints && !this.riskBidInitialized) {\n ixs.push(\n this.pool.setRiskCurveAbsolute(authority, {\n side: Side.Bid,\n defaultInterpolation: Interpolation.Step,\n points: bidPoints,\n riskMode: RiskMode.Integrated,\n })\n );\n this.committedBidPoints = HadronOrderbook.toCommittedPoints(bidPoints);\n this.riskBidInitialized = true;\n }\n if (askPoints && !this.riskAskInitialized) {\n ixs.push(\n this.pool.setRiskCurveAbsolute(authority, {\n side: Side.Ask,\n defaultInterpolation: Interpolation.Step,\n points: askPoints,\n riskMode: RiskMode.Integrated,\n })\n );\n this.committedAskPoints = HadronOrderbook.toCommittedPoints(askPoints);\n this.riskAskInitialized = true;\n }\n }\n\n return ixs;\n }\n\n /**\n * Build curve update instructions (submit + apply pairs) for both sides.\n * Falls back to full setRiskCurve rewrite if diff is too large.\n */\n private buildCurveUpdateIxs(\n authority: PublicKey\n ): TransactionInstruction[] {\n const bidPoints = this.buildBidRiskPoints();\n const askPoints = this.buildAskRiskPoints();\n const desiredBid = HadronOrderbook.toCommittedPoints(bidPoints);\n const desiredAsk = HadronOrderbook.toCommittedPoints(askPoints);\n\n const bidOps = HadronOrderbook.computeCurveOps(\n this.committedBidPoints,\n desiredBid,\n CurveType.RiskBid\n );\n const askOps = HadronOrderbook.computeCurveOps(\n this.committedAskPoints,\n desiredAsk,\n CurveType.RiskAsk\n );\n\n const allOps = [...bidOps, ...askOps];\n\n // No-op: nothing changed\n if (allOps.length === 0) {\n return [];\n }\n\n // Fallback: too many ops → full rewrite is cheaper\n if (allOps.length > MAX_CURVE_UPDATE_OPS * 4) {\n return this.buildFallbackRewrite(authority, bidPoints, askPoints);\n }\n\n // Batch ops into submit+apply pairs (each batch ≤ MAX_CURVE_UPDATE_OPS)\n const ixs: TransactionInstruction[] = [];\n for (let i = 0; i < allOps.length; i += MAX_CURVE_UPDATE_OPS) {\n const batch = allOps.slice(i, i + MAX_CURVE_UPDATE_OPS);\n ixs.push(this.pool.submitCurveUpdates(authority, batch));\n ixs.push(this.pool.applyCurveUpdates(authority));\n }\n\n // Update committed snapshots\n this.committedBidPoints = desiredBid;\n this.committedAskPoints = desiredAsk;\n\n return ixs;\n }\n\n /** Fallback: full setRiskCurve rewrite for both sides. */\n private buildFallbackRewrite(\n authority: PublicKey,\n bidPoints: SetRiskCurveAbsolutePointInput[],\n askPoints: SetRiskCurveAbsolutePointInput[]\n ): TransactionInstruction[] {\n const [bidIx, askIx] = this.pool.setRiskCurveAbsoluteBoth(authority, {\n bid: {\n defaultInterpolation: Interpolation.Step,\n points: bidPoints,\n riskMode: RiskMode.Integrated,\n },\n ask: {\n defaultInterpolation: Interpolation.Step,\n points: askPoints,\n riskMode: RiskMode.Integrated,\n },\n });\n\n this.committedBidPoints = HadronOrderbook.toCommittedPoints(bidPoints);\n this.committedAskPoints = HadronOrderbook.toCommittedPoints(askPoints);\n\n return [bidIx, askIx];\n }\n\n private buildBidRiskPoints(): SetRiskCurveAbsolutePointInput[] {\n const points: SetRiskCurveAbsolutePointInput[] = [];\n let cumulativeAtoms = this.initialVaultX;\n\n for (const order of this.bidOrders) {\n const priceFactor = 1 - order.spreadBps / 10_000;\n points.push({\n vaultBalance: cumulativeAtoms,\n priceFactor,\n interpolation: Interpolation.Step,\n });\n cumulativeAtoms += tokensToAtoms(order.size, this.decimalsX);\n }\n\n // Terminal point at final cumulative with last order's price factor\n const lastFactor =\n this.bidOrders.length > 0\n ? 1 - this.bidOrders[this.bidOrders.length - 1].spreadBps / 10_000\n : 1.0;\n points.push({\n vaultBalance: cumulativeAtoms,\n priceFactor: lastFactor,\n interpolation: Interpolation.Step,\n });\n\n return points;\n }\n\n private buildAskRiskPoints(): SetRiskCurveAbsolutePointInput[] {\n const points: SetRiskCurveAbsolutePointInput[] = [];\n let cumulativeAtoms = this.initialVaultY;\n const midprice = this.pool.getMidprice();\n\n for (const order of this.askOrders) {\n const priceFactor = 1 + order.spreadBps / 10_000;\n points.push({\n vaultBalance: cumulativeAtoms,\n priceFactor,\n interpolation: Interpolation.Step,\n });\n // Convert base size to quote atoms via midprice\n const quoteSizeTokens = order.size * midprice;\n cumulativeAtoms += tokensToAtoms(quoteSizeTokens, this.decimalsY);\n }\n\n // Terminal point\n const lastFactor =\n this.askOrders.length > 0\n ? 1 + this.askOrders[this.askOrders.length - 1].spreadBps / 10_000\n : 1.0;\n points.push({\n vaultBalance: cumulativeAtoms,\n priceFactor: lastFactor,\n interpolation: Interpolation.Step,\n });\n\n return points;\n }\n\n /**\n * Reconstruct staged orders from on-chain risk curves (after load).\n * Assumes curves were set via this class (CurveXMode.Alternate, RiskMode.Integrated, Step).\n */\n private reconstructFromCurves(): void {\n const curves = this.pool.getActiveCurves();\n\n // Detect initialized state and snapshot committed points\n if (\n curves.riskBid.xMode === CurveXMode.Alternate &&\n curves.riskBid.riskMode === RiskMode.Integrated &&\n curves.riskBid.numPoints >= 2\n ) {\n this.riskBidInitialized = true;\n this.priceCurvesSet = true;\n this.committedBidPoints = curves.riskBid.points.map((p) => ({\n amountIn: p.amountIn,\n priceFactorQ32: p.priceFactorQ32,\n interpolation: p.interpolation,\n params: new Uint8Array(p.params),\n }));\n }\n if (\n curves.riskAsk.xMode === CurveXMode.Alternate &&\n curves.riskAsk.riskMode === RiskMode.Integrated &&\n curves.riskAsk.numPoints >= 2\n ) {\n this.riskAskInitialized = true;\n this.priceCurvesSet = true;\n this.committedAskPoints = curves.riskAsk.points.map((p) => ({\n amountIn: p.amountIn,\n priceFactorQ32: p.priceFactorQ32,\n interpolation: p.interpolation,\n params: new Uint8Array(p.params),\n }));\n }\n\n this.bidOrders = this.reconstructSide(\n curves.riskBid,\n \"bid\",\n this.initialVaultX,\n this.decimalsX\n );\n this.askOrders = this.reconstructSide(\n curves.riskAsk,\n \"ask\",\n this.initialVaultY,\n this.decimalsY\n );\n }\n\n private reconstructSide(\n curve: import(\"./types\").CurveSide,\n side: OrderSide,\n initialVault: bigint,\n decimals: number\n ): StagedOrder[] {\n if (\n curve.xMode !== CurveXMode.Alternate ||\n curve.riskMode !== RiskMode.Integrated\n ) {\n return [];\n }\n\n const orders: StagedOrder[] = [];\n const points = curve.points;\n\n // Last point is terminal — skip it\n for (let i = 0; i < points.length - 1; i++) {\n const pt = points[i];\n const nextPt = points[i + 1];\n const priceFactor = fromQ32(pt.priceFactorQ32);\n\n let spreadBps: number;\n if (side === \"bid\") {\n spreadBps = Math.round((1 - priceFactor) * 10_000);\n } else {\n spreadBps = Math.round((priceFactor - 1) * 10_000);\n }\n\n const sizeAtoms = nextPt.amountIn - pt.amountIn;\n let sizeTokens: number;\n\n if (side === \"ask\") {\n // Ask sizes are in quote atoms, convert back to base tokens via midprice\n const midprice = this.pool.getMidprice();\n sizeTokens = atomsToTokens(sizeAtoms, decimals) / midprice;\n } else {\n sizeTokens = atomsToTokens(sizeAtoms, decimals);\n }\n\n orders.push({ size: sizeTokens, spreadBps });\n }\n\n return orders;\n }\n\n private curveSideToLevels(\n curve: import(\"./types\").CurveSide,\n midprice: number,\n side: OrderSide,\n decimals: number\n ): OrderbookLevel[] {\n if (curve.numPoints < 2) return [];\n\n const levels: OrderbookLevel[] = [];\n let cumulative = 0;\n const points = curve.points;\n\n for (let i = 0; i < points.length - 1; i++) {\n const pt = points[i];\n const nextPt = points[i + 1];\n const priceFactor = fromQ32(pt.priceFactorQ32);\n const price = midprice * priceFactor;\n\n const sizeAtoms = nextPt.amountIn - pt.amountIn;\n let sizeTokens: number;\n\n if (side === \"ask\") {\n sizeTokens = atomsToTokens(sizeAtoms, decimals) / midprice;\n } else {\n sizeTokens = atomsToTokens(sizeAtoms, decimals);\n }\n\n cumulative += sizeTokens;\n levels.push({ price, size: sizeTokens, cumulative });\n }\n\n return levels;\n }\n}\n","import {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport {\n getAssociatedTokenAddressSync,\n createAssociatedTokenAccountInstruction,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport type { Connection } from \"@solana/web3.js\";\n\n/**\n * Get the ATA address, and optionally return a create instruction if it doesn't exist.\n */\nexport async function getOrCreateAta(\n connection: Connection,\n mint: PublicKey,\n owner: PublicKey,\n payer: PublicKey,\n tokenProgram: PublicKey = TOKEN_PROGRAM_ID,\n allowOwnerOffCurve: boolean = false\n): Promise<{ address: PublicKey; instruction: TransactionInstruction | null }> {\n const address = getAssociatedTokenAddressSync(\n mint,\n owner,\n allowOwnerOffCurve,\n tokenProgram\n );\n const account = await connection.getAccountInfo(address);\n if (account) {\n return { address, instruction: null };\n }\n const instruction = createAssociatedTokenAccountInstruction(\n payer,\n address,\n owner,\n mint,\n tokenProgram\n );\n return { address, instruction };\n}\n"]}
|