import Decimal from 'decimal.js'; import BN from 'bn.js'; import { AccountInfo, PublicKey } from '@solana/web3.js'; import { OracleSettings, Side } from '../../layouts/oracle'; import { OraclePrice } from './oracle'; declare class Observation { timestamp: BN; cumT0Price: BN; cumT1Price: BN; constructor(params: { timestamp: BN; cumT0Price: BN; cumT1Price: BN; }); static decode(data: Buffer, offset?: number): [Observation, number]; sub(other: Observation): Observation; add(other: Observation): Observation; getWeightedObservation(time: BN): Observation; adjustToTimestamp(targetTimestamp: BN, observationPrev: Observation): Observation; getTwap(side: Side): BN; } declare class VaultState { mint: PublicKey; owner: PublicKey; amount: string; constructor(params: { mint: PublicKey; owner: PublicKey; amount: string; }); static decode(data: Buffer, offset?: number): [VaultState, number]; } declare class PoolState { ammConfig: PublicKey; poolCreator: PublicKey; token0Vault: PublicKey; token1Vault: PublicKey; lpMint: PublicKey; token0Mint: PublicKey; token1Mint: PublicKey; token0Program: PublicKey; token1Program: PublicKey; observationKey: PublicKey; authBump: number; status: number; lpMintDecimals: number; mint0Decimals: number; mint1Decimals: number; lpSupply: BN; protocolFeesToken0: BN; protocolFeesToken1: BN; fundFeesToken0: BN; fundFeesToken1: BN; openTime: BN; recentEpoch: BN; creatorFeeOn: number; enableCreatorFee: boolean; padding1: number[]; creatorFeesToken0: BN; creatorFeesToken1: BN; padding: BN[]; constructor(params: { ammConfig: PublicKey; poolCreator: PublicKey; token0Vault: PublicKey; token1Vault: PublicKey; lpMint: PublicKey; token0Mint: PublicKey; token1Mint: PublicKey; token0Program: PublicKey; token1Program: PublicKey; observationKey: PublicKey; authBump: number; status: number; lpMintDecimals: number; mint0Decimals: number; mint1Decimals: number; lpSupply: BN; protocolFeesToken0: BN; protocolFeesToken1: BN; fundFeesToken0: BN; fundFeesToken1: BN; openTime: BN; recentEpoch: BN; creatorFeeOn: number; enableCreatorFee: boolean; padding1: number[]; creatorFeesToken0: BN; creatorFeesToken1: BN; padding: BN[]; }); static decode(data: Buffer, offset?: number): [PoolState, number]; } export declare class RaydiumCPMMOracle { static deriveObservationKey(poolId: PublicKey): [PublicKey, number]; static getObservationAtIndex(observations: Observation[], index: number): Observation; static getObservationAtTimestamp(timestamp: BN, observations: Observation[], startIndex: number): Observation; static getDeltaObservations(currentTime: BN, observations: Observation[], observationIndex: number, primarySeconds: BN, secondarySeconds: BN): Observation[]; static getDecimals(side: Side, mint0Decimals: number, mint1Decimals: number): number; /** * Calculate spot price from pool reserves after subtracting all fees. * Returns: { netBase, netQuote, spotPrice } where spotPrice is in USD per base token. */ static getSpotPriceWithReserves(poolState: PoolState, vault0State: VaultState, vault1State: VaultState, side: Side, quotePrice: OraclePrice): { netBase: Decimal; netQuote: Decimal; spotPrice: Decimal; }; static getTwapPrimary(currentTime: BN, observations: Observation[], observationIndex: number, side: Side, primarySeconds: BN, secondarySeconds: BN, mint0Decimals: number, mint1Decimals: number): Decimal; static getTwapSecondary(currentTime: BN, observations: Observation[], observationIndex: number, side: Side, primarySeconds: BN, secondarySeconds: BN, mint0Decimals: number, mint1Decimals: number): Decimal; /** * Calculate max price impact for minLiquidity trade in both directions (buy and sell). * Uses constant-product AMM formulas: * - BUY: delta_base_out = netBase * delta_q / (netQuote + delta_q) * - SELL: delta_quote_out = netQuote * delta_base / (netBase + delta_base) */ static calculateMaxPriceImpactForMinLiquidity(oracleParams: OracleSettings, netBase: Decimal, netQuote: Decimal, spotPriceUsd: Decimal, quotePrice: OraclePrice): Decimal; static fetch(oracleParams: OracleSettings, accountInfos: AccountInfo[], solPrice: OraclePrice, usdPrice: OraclePrice): OraclePrice; } export {};