UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

1,687 lines (1,673 loc) 54.9 kB
import { AxiosInstance } from 'axios'; import { Cluster } from './solana/type.js'; import { PublicKey, TransactionInstruction, Signer, Transaction, VersionedTransaction, Connection, Commitment, Keypair } from '@solana/web3.js'; import BN__default from 'bn.js'; import { Mint, getTransferFeeConfig } from '@solana/spl-token'; import { API_URL_CONFIG } from './api/url.js'; import { Owner } from './common/owner.js'; import { CacheLTA } from './common/txTool/lookupTable.js'; import { TxVersion } from './common/txTool/txType.js'; import Decimal from 'decimal.js'; import { Token, TokenProps } from './module/token.js'; import { Logger } from './common/logger.js'; import { Currency } from './module/currency.js'; import { Structure, GetStructureFromLayoutSchema } from './marshmallow/index.js'; import { GetStructureSchema } from './marshmallow/buffer-layout.js'; interface ExecuteParams { skipPreflight?: boolean; recentBlockHash?: string; sendAndConfirm?: boolean; notSendToRpc?: boolean; } interface TxBuilderInit { connection: Connection; feePayer: PublicKey; cluster: Cluster; owner?: Owner; blockhashCommitment?: Commitment; loopMultiTxStatus?: boolean; api?: Api; signAllTransactions?: SignAllTransactions; } interface AddInstructionParam { addresses?: Record<string, PublicKey>; instructions?: TransactionInstruction[]; endInstructions?: TransactionInstruction[]; lookupTableAddress?: string[]; signers?: Signer[]; instructionTypes?: string[]; endInstructionTypes?: string[]; } interface TxBuildData<T = Record<string, any>> { builder: TxBuilder; transaction: Transaction; instructionTypes: string[]; signers: Signer[]; execute: (params?: ExecuteParams) => Promise<{ txId: string; signedTx: Transaction; }>; extInfo: T; } interface TxV0BuildData<T = Record<string, any>> extends Omit<TxBuildData<T>, "transaction" | "execute"> { builder: TxBuilder; transaction: VersionedTransaction; buildProps?: { lookupTableCache?: CacheLTA; lookupTableAddress?: string[]; }; execute: (params?: ExecuteParams) => Promise<{ txId: string; signedTx: VersionedTransaction; }>; } declare type TxUpdateParams = { txId: string; status: "success" | "error" | "sent"; signedTx: Transaction | VersionedTransaction; }; interface MultiTxExecuteParam extends ExecuteParams { sequentially: boolean; skipTxCount?: number; onTxUpdate?: (completeTxs: TxUpdateParams[]) => void; } interface MultiTxBuildData<T = Record<string, any>> { builder: TxBuilder; transactions: Transaction[]; instructionTypes: string[]; signers: Signer[][]; execute: (executeParams?: MultiTxExecuteParam) => Promise<{ txIds: string[]; signedTxs: Transaction[]; }>; extInfo: T; } interface MultiTxV0BuildData<T = Record<string, any>> extends Omit<MultiTxBuildData<T>, "transactions" | "execute"> { builder: TxBuilder; transactions: VersionedTransaction[]; buildProps?: { lookupTableCache?: CacheLTA; lookupTableAddress?: string[]; }; execute: (executeParams?: MultiTxExecuteParam) => Promise<{ txIds: string[]; signedTxs: VersionedTransaction[]; }>; } declare type MakeMultiTxData<T = TxVersion.LEGACY, O = Record<string, any>> = T extends TxVersion.LEGACY ? MultiTxBuildData<O> : MultiTxV0BuildData<O>; declare type MakeTxData<T = TxVersion.LEGACY, O = Record<string, any>> = T extends TxVersion.LEGACY ? TxBuildData<O> : TxV0BuildData<O>; declare class TxBuilder { private connection; private owner?; private instructions; private endInstructions; private lookupTableAddress; private signers; private instructionTypes; private endInstructionTypes; private feePayer; private cluster; private signAllTransactions?; private blockhashCommitment?; private loopMultiTxStatus; constructor(params: TxBuilderInit); get AllTxData(): { instructions: TransactionInstruction[]; endInstructions: TransactionInstruction[]; signers: Signer[]; instructionTypes: string[]; endInstructionTypes: string[]; lookupTableAddress: string[]; }; get allInstructions(): TransactionInstruction[]; getComputeBudgetConfig(): Promise<ComputeBudgetConfig | undefined>; addCustomComputeBudget(config?: ComputeBudgetConfig): boolean; addTipInstruction(tipConfig?: TxTipConfig): boolean; calComputeBudget({ config: propConfig, defaultIns, }: { config?: ComputeBudgetConfig; defaultIns?: TransactionInstruction[]; }): Promise<void>; addInstruction({ instructions, endInstructions, signers, instructionTypes, endInstructionTypes, lookupTableAddress, }: AddInstructionParam): TxBuilder; versionBuild<O = Record<string, any>>({ txVersion, extInfo, lookupTableAddress, }: { txVersion?: TxVersion; extInfo?: O; lookupTableAddress?: string[]; }): Promise<MakeTxData<TxVersion.LEGACY, O> | MakeTxData<TxVersion.V0, O>>; build<O = Record<string, any>>(extInfo?: O): MakeTxData<TxVersion.LEGACY, O>; buildMultiTx<T = Record<string, any>>(params: { extraPreBuildData?: MakeTxData<TxVersion.LEGACY>[]; extInfo?: T; }): MultiTxBuildData; versionMultiBuild<T extends TxVersion, O = Record<string, any>>({ extraPreBuildData, txVersion, extInfo, }: { extraPreBuildData?: MakeTxData<TxVersion.V0>[] | MakeTxData<TxVersion.LEGACY>[]; txVersion?: T; extInfo?: O; }): Promise<MakeMultiTxData<T, O>>; buildV0<O = Record<string, any>>(props?: O & { lookupTableCache?: CacheLTA; lookupTableAddress?: string[]; forerunCreate?: boolean; recentBlockhash?: string; }): Promise<MakeTxData<TxVersion.V0, O>>; buildV0MultiTx<T = Record<string, any>>(params: { extraPreBuildData?: MakeTxData<TxVersion.V0>[]; buildProps?: T & { lookupTableCache?: CacheLTA; lookupTableAddress?: string[]; forerunCreate?: boolean; recentBlockhash?: string; }; }): Promise<MultiTxV0BuildData>; sizeCheckBuild(props?: Record<string, any> & { computeBudgetConfig?: ComputeBudgetConfig; splitIns?: TransactionInstruction[]; }): Promise<MultiTxBuildData>; sizeCheckBuildV0(props?: Record<string, any> & { computeBudgetConfig?: ComputeBudgetConfig; lookupTableCache?: CacheLTA; lookupTableAddress?: string[]; splitIns?: TransactionInstruction[]; insCountLimit?: number; }): Promise<MultiTxV0BuildData>; } declare enum Rounding { ROUND_DOWN = 0, ROUND_HALF_UP = 1, ROUND_UP = 2 } declare function parseBigNumberish(value: BigNumberish): BN__default; declare class Fraction { readonly numerator: BN__default; readonly denominator: BN__default; constructor(numerator: BigNumberish, denominator?: BigNumberish); get quotient(): BN__default; invert(): Fraction; add(other: Fraction | BigNumberish): Fraction; sub(other: Fraction | BigNumberish): Fraction; mul(other: Fraction | BigNumberish): Fraction; div(other: Fraction | BigNumberish): Fraction; toSignificant(significantDigits: number, format?: object, rounding?: Rounding): string; toFixed(decimalPlaces: number, format?: object, rounding?: Rounding): string; isZero(): boolean; } declare const _100_PERCENT: Fraction; declare class Percent extends Fraction { toSignificant(significantDigits?: number, format?: object, rounding?: Rounding): string; toFixed(decimalPlaces?: number, format?: object, rounding?: Rounding): string; } interface PriceProps { baseToken: Token; denominator: BigNumberish; quoteToken: Token; numerator: BigNumberish; } declare class Price extends Fraction { readonly baseToken: Token; readonly quoteToken: Token; readonly scalar: Fraction; constructor(params: PriceProps); get raw(): Fraction; get adjusted(): Fraction; invert(): Price; mul(other: Price): Price; toSignificant(significantDigits?: number, format?: object, rounding?: Rounding): string; toFixed(decimalPlaces?: number, format?: object, rounding?: Rounding): string; } declare type TokenInfo = ApiV3Token & { priority: number; userAdded?: boolean; type?: string; }; interface TokenJson { symbol: string; name: string; mint: string; decimals: number; extensions: { coingeckoId?: string; }; icon: string; hasFreeze?: boolean; } declare type SplToken = TokenProps & { icon: string; id: string; extensions: { [key in "coingeckoId" | "website" | "whitepaper"]?: string; }; userAdded?: boolean; }; declare type LpToken = Token & { isLp: true; base: SplToken; quote: SplToken; icon: string; /** mint. for `<TokenSelector>`*/ id: string; extensions: { [key in "coingeckoId" | "website" | "whitepaper"]?: string; }; }; declare const BN_ZERO: BN__default; declare const BN_ONE: BN__default; declare const BN_TWO: BN__default; declare const BN_THREE: BN__default; declare const BN_FIVE: BN__default; declare const BN_TEN: BN__default; declare const BN_100: BN__default; declare const BN_1000: BN__default; declare const BN_10000: BN__default; declare type BigNumberish = BN__default | string | number | bigint; declare type Numberish = number | string | bigint | Fraction | BN__default; declare function tenExponential(shift: BigNumberish): BN__default; /** * * @example * getIntInfo(0.34) => { numerator: '34', denominator: '100'} * getIntInfo('0.34') //=> { numerator: '34', denominator: '100'} */ declare function parseNumberInfo(n: Numberish | undefined): { denominator: string; numerator: string; sign?: string; int?: string; dec?: string; }; declare function divCeil(a: BN__default, b: BN__default): BN__default; declare function shakeFractionDecimal(n: Fraction): string; declare function toBN(n: Numberish, decimal?: BigNumberish): BN__default; declare function toFraction(value: Numberish): Fraction; declare function ceilDiv(tokenAmount: BN__default, feeNumerator: BN__default, feeDenominator: BN__default): BN__default; declare function floorDiv(tokenAmount: BN__default, feeNumerator: BN__default, feeDenominator: BN__default): BN__default; /** * @example * toPercent(3.14) // => Percent { 314.00% } * toPercent(3.14, { alreadyDecimaled: true }) // => Percent {3.14%} */ declare function toPercent(n: Numberish, options?: { alreadyDecimaled?: boolean; }): Percent; declare function toTokenPrice(params: { token: TokenJson | Token | SplToken; numberPrice: Numberish; decimalDone?: boolean; }): Price; declare function toUsdCurrency(amount: Numberish): CurrencyAmount; declare function toTotalPrice(amount: Numberish | undefined, price: Price | undefined): CurrencyAmount; declare function decimalToFraction(n: Decimal | undefined): Fraction | undefined; declare function isDecimal(val: unknown): boolean; declare function splitNumber(num: string, decimals: number): [string, string]; declare class TokenAmount extends Fraction { readonly token: Token; protected logger: Logger; constructor(token: Token, amount: BigNumberish, isRaw?: boolean, name?: string); get raw(): BN__default; isZero(): boolean; gt(other: TokenAmount): boolean; /** * a less than b */ lt(other: TokenAmount): boolean; add(other: TokenAmount): TokenAmount; subtract(other: TokenAmount): TokenAmount; toSignificant(significantDigits?: number, format?: object, rounding?: Rounding): string; /** * To fixed * * @example * ``` * 1 -> 1.000000000 * 1.234 -> 1.234000000 * 1.123456789876543 -> 1.123456789 * ``` */ toFixed(decimalPlaces?: number, format?: object, rounding?: Rounding): string; /** * To exact * * @example * ``` * 1 -> 1 * 1.234 -> 1.234 * 1.123456789876543 -> 1.123456789 * ``` */ toExact(format?: object): string; } declare class CurrencyAmount extends Fraction { readonly currency: Currency; protected logger: Logger; constructor(currency: Currency, amount: BigNumberish, isRaw?: boolean, name?: string); get raw(): BN__default; isZero(): boolean; /** * a greater than b */ gt(other: CurrencyAmount): boolean; /** * a less than b */ lt(other: CurrencyAmount): boolean; add(other: CurrencyAmount): CurrencyAmount; sub(other: CurrencyAmount): CurrencyAmount; toSignificant(significantDigits?: number, format?: object, rounding?: Rounding): string; /** * To fixed * * @example * ``` * 1 -> 1.000000000 * 1.234 -> 1.234000000 * 1.123456789876543 -> 1.123456789 * ``` */ toFixed(decimalPlaces?: number, format?: object, rounding?: Rounding): string; /** * To exact * * @example * ``` * 1 -> 1 * 1.234 -> 1.234 * 1.123456789876543 -> 1.123456789 * ``` */ toExact(format?: object): string; } interface ReturnTypeMakeInstructions<T = Record<string, PublicKey>> { signers: (Signer | Keypair)[]; instructions: TransactionInstruction[]; instructionTypes: string[]; address: T; lookupTableAddress: string[]; } declare type SignAllTransactions = (<T extends Transaction | VersionedTransaction>(transaction: T[]) => Promise<T[]>) | undefined; interface MakeTransaction<T = Record<string, any>> { builder: TxBuilder; signers: Signer[]; transaction: Transaction; instructionTypes: string[]; execute: () => Promise<{ txId: string; signedTx: Transaction; }>; extInfo: T; } interface MakeV0Transaction<T = Record<string, any>> { builder: TxBuilder; signers: Signer[]; transaction: VersionedTransaction; instructionTypes: string[]; execute: () => Promise<string>; extInfo: T; } interface MakeMultiTransaction { builder: TxBuilder; signers: Signer[][]; transactions: Transaction[]; instructionTypes: string[]; execute: (params?: MultiTxExecuteParam) => Promise<{ txIds: string[]; signedTxs: Transaction[]; }>; extInfo: Record<string, any>; } interface InstructionReturn { instruction: TransactionInstruction; instructionType: string; } interface ComputeBudgetConfig { units?: number; microLamports?: number; } interface TxTipConfig { feePayer?: PublicKey; address: PublicKey; amount: BN__default; } interface LoadParams { forceUpdate?: boolean; } interface TransferAmountFee { amount: TokenAmount; fee: TokenAmount | undefined; expirationTime: number | undefined; } interface GetTransferAmountFee { amount: BN__default; fee: BN__default | undefined; expirationTime: number | undefined; } declare type ReturnTypeFetchMultipleMintInfo = Mint & { feeConfig: ReturnType<typeof getTransferFeeConfig> | undefined; }; interface ReturnTypeFetchMultipleMintInfos { [mint: string]: ReturnTypeFetchMultipleMintInfo & { programId: PublicKey; }; } declare type Primitive = boolean | number | string | null | undefined | PublicKey; /** * * @example * ```typescript * interface A { * keyA: string; * keyB: string; * map: { * hello: string; * i: number; * }; * list: (string | number)[]; * keyC: number; * } * * type WrappedA = ReplaceType<A, string, boolean> // { * keyA: boolean; * keyB: boolean; * map: { * hello: boolean; * i: number; * }; * list: (number | boolean)[]; * keyC: number; * } * ``` */ declare type ReplaceType<Old, From, To> = { [T in keyof Old]: Old[T] extends From ? Exclude<Old[T], From> | To : Old[T] extends Primitive ? From extends Old[T] ? Exclude<Old[T], From> | To : Old[T] : ReplaceType<Old[T], From, To>; }; declare type MayArray<T> = T | Array<T>; declare type MayDeepArray<T> = T | Array<MayDeepArray<T>>; declare type MayFunction<T, PS extends any[] = []> = T | ((...Params: PS) => T); declare type ArrayItem<T extends ReadonlyArray<any>> = T extends Array<infer P> ? P : never; declare type ExactPartial<T, U> = { [P in Extract<keyof T, U>]?: T[P]; } & { [P in Exclude<keyof T, U>]: T[P]; }; declare type ExactRequired<T, U> = { [P in Extract<keyof T, U>]-?: T[P]; } & { [P in Exclude<keyof T, U>]: T[P]; }; /** * extract only string and number */ declare type SKeyof<O> = Extract<keyof O, string>; declare type GetValue<T, K> = K extends keyof T ? T[K] : undefined; /** * @example * type A = { a: number; b: string; c?: string } * type B = { a: string; c: string; d?: boolean } * * type D = SOR<A, B> // { a: number | string; b: string | undefined; c: string | undefined; d: boolean | undefined } // ! if use SOR, you lost union type guard feature, try NOT to use this trick */ declare type SOR<T, U> = { [K in keyof T | keyof U]: GetValue<T, K> | GetValue<U, K>; }; declare type Fallback<T, FallbackT> = T extends undefined ? FallbackT : T; /** * @example * type A = { a: number; b: string; c?: string } * type B = { a: string; c: string; d?: boolean } * * type D = Cover<A, B> // { a: string; b: string; c: string; d?: boolean} */ declare type Cover<O, T> = { [K in SKeyof<O> | SKeyof<T>]: Fallback<GetValue<T, K>, GetValue<O, K>>; }; declare type UnionCover<O, T> = T extends T ? Cover<O, T> : never; declare type MergeArr<Arr> = (Arr extends (infer T)[] ? T : never)[]; /** * typescript type helper function * @example * type A = { hello: string; version: 3 }[] * type B = { hello: string; version: 5 }[] * type OK = MergeArr<A | B> // ({ hello: string; version: 3 } | { hello: string; version: 5 })[] * type Wrong = A | B // { hello: string; version: 3 }[] | { hello: string; version: 5 }[] // <= this type can't have auto type intelligense of array.map */ declare const unionArr: <T>(arr: T) => MergeArr<T>; declare type FarmVersion = 3 | 4 | 5 | 6; declare const FARM_LOCK_MINT: PublicKey; declare const FARM_LOCK_VAULT: PublicKey; declare const DEV_FARM_LOCK_MINT: PublicKey; declare const DEV_FARM_LOCK_VAULT: PublicKey; declare const FARM_VERSION_TO_STATE_LAYOUT: { [version in FarmVersion]?: FarmStateLayout; }; declare const FARM_VERSION_TO_LEDGER_LAYOUT: { [version in FarmVersion]?: FarmLedgerLayout; }; declare const isValidFarmVersion: (version: number) => boolean; declare const validateFarmRewards: (params: { version: number; rewardInfos: { mint: ApiV3Token; }[]; rewardTokenAccountsPublicKeys: PublicKey[]; }) => (() => string | undefined); declare const poolTypeV6: { "Standard SPL": number; "Option tokens": number; }; declare const FARM_PROGRAM_TO_VERSION: Record<string, 3 | 4 | 5 | 6>; declare type RewardType = keyof typeof poolTypeV6; interface APIRewardInfo { rewardMint: string; rewardVault: string; rewardOpenTime: number; rewardEndTime: number; rewardPerSecond: string | number; rewardSender?: string; rewardType: string; } interface RewardInfoWithKey { rewardMint: PublicKey; rewardVault: PublicKey; rewardOpenTime: number; rewardEndTime: number; rewardType: RewardType; rewardPerSecond: string | number; rewardSender?: PublicKey; } interface FarmRewardInfo { mint: PublicKey; perSecond: string; openTime: number; endTime: number; rewardType: RewardType; } declare type FarmRewardInfoConfig = ReturnType<typeof farmRewardTimeInfoLayout.decode>; interface RewardInfoKey { rewardMint: PublicKey; rewardVault: PublicKey; userRewardToken: PublicKey; } interface FarmPoolInfoV6 { version: number; programId: PublicKey; lpMint: PublicKey; rewardInfos: FarmRewardInfo[]; lockInfo: { lockMint: PublicKey; lockVault: PublicKey; }; } interface CreateFarm<T = TxVersion.LEGACY> { poolInfo: ApiV3PoolInfoStandardItem; rewardInfos: FarmRewardInfo[]; payer?: PublicKey; programId?: PublicKey; txVersion?: T; computeBudgetConfig?: ComputeBudgetConfig; txTipConfig?: TxTipConfig; feePayer?: PublicKey; lockProgram?: { mint: PublicKey; vault: PublicKey; }; } interface CreateFarmExtInfo { farmId: PublicKey; farmAuthority: PublicKey; lpVault: PublicKey; lockUserAccount: PublicKey; nonce: number; } interface UpdateFarmReward<T = TxVersion.LEGACY> { farmInfo: FormatFarmInfoOut; newRewardInfo: FarmRewardInfo; payer?: PublicKey; txVersion?: T; computeBudgetConfig?: ComputeBudgetConfig; txTipConfig?: TxTipConfig; feePayer?: PublicKey; } interface UpdateFarmRewards<T = TxVersion.LEGACY> { farmInfo: FormatFarmInfoOut; newRewardInfos: FarmRewardInfo[]; payer?: PublicKey; txVersion?: T; computeBudgetConfig?: ComputeBudgetConfig; txTipConfig?: TxTipConfig; feePayer?: PublicKey; } interface FarmDWParam<T = TxVersion.LEGACY> { farmInfo: { id: string; programId: string; lpMint: ApiV3Token; rewardInfos: { mint: ApiV3Token; }[]; }; amount: BigNumberish; feePayer?: PublicKey; useSOLBalance?: boolean; associatedOnly?: boolean; checkCreateATAOwner?: boolean; deposited?: BN__default; txVersion?: T; userAuxiliaryLedgers?: string[]; computeBudgetConfig?: ComputeBudgetConfig; txTipConfig?: TxTipConfig; } declare type FarmPoolKeys = { readonly id: PublicKey; readonly lpMint: PublicKey; readonly version: number; readonly programId: PublicKey; readonly authority: PublicKey; readonly lpVault: PublicKey; readonly upcoming: boolean; readonly rewardInfos: ({ readonly rewardMint: PublicKey; readonly rewardVault: PublicKey; } | { readonly rewardMint: PublicKey; readonly rewardVault: PublicKey; readonly rewardOpenTime: number; readonly rewardEndTime: number; readonly rewardPerSecond: number; readonly rewardType: RewardType; })[]; }; declare const associatedLedgerAccountLayout: Structure<number, "", { instruction: number; }>; declare const withdrawRewardLayout: Structure<number, "", { instruction: number; }>; declare const realFarmStateV3Layout: Structure<PublicKey | BN__default, "", { nonce: BN__default; state: BN__default; lpVault: PublicKey; rewardVault: PublicKey; totalReward: BN__default; perShareReward: BN__default; lastSlot: BN__default; perSlotReward: BN__default; }>; declare const realFarmStateV5Layout: Structure<number | PublicKey | Buffer | BN__default, "", { nonce: BN__default; state: BN__default; lpVault: PublicKey; lastSlot: BN__default; rewardVaultA: PublicKey; totalRewardA: BN__default; perShareRewardA: BN__default; perSlotRewardA: BN__default; option: number; rewardVaultB: PublicKey; totalRewardB: BN__default; perShareRewardB: BN__default; perSlotRewardB: BN__default; }>; declare const realFarmV6Layout: Structure<PublicKey | BN__default | BN__default[] | { rewardVault: PublicKey; totalReward: BN__default; rewardState: BN__default; rewardOpenTime: BN__default; rewardEndTime: BN__default; rewardLastUpdateTime: BN__default; totalRewardEmissioned: BN__default; rewardClaimed: BN__default; rewardPerSecond: BN__default; accRewardPerShare: BN__default; rewardMint: PublicKey; rewardSender: PublicKey; rewardType: BN__default; padding: BN__default[]; }[], "", { nonce: BN__default; state: BN__default; lpVault: PublicKey; validRewardTokenNum: BN__default; rewardMultiplier: BN__default; rewardPeriodMax: BN__default; rewardPeriodMin: BN__default; rewardPeriodExtend: BN__default; lpMint: PublicKey; padding: BN__default[]; rewardInfos: { rewardVault: PublicKey; totalReward: BN__default; rewardState: BN__default; rewardOpenTime: BN__default; rewardEndTime: BN__default; rewardLastUpdateTime: BN__default; totalRewardEmissioned: BN__default; rewardClaimed: BN__default; rewardPerSecond: BN__default; accRewardPerShare: BN__default; rewardMint: PublicKey; rewardSender: PublicKey; rewardType: BN__default; padding: BN__default[]; }[]; creator: PublicKey; }>; declare const farmStateV3Layout: GetStructureFromLayoutSchema<{ version: 3; rewardInfos: { rewardVault: PublicKey; totalReward: BN__default; perSlotReward: BN__default; perShareReward: BN__default; }[]; } & { nonce: BN__default; state: BN__default; lpVault: PublicKey; rewardVault: PublicKey; totalReward: BN__default; perShareReward: BN__default; lastSlot: BN__default; perSlotReward: BN__default; }>; declare const farmStateV5Layout: GetStructureFromLayoutSchema<{ version: 5; rewardInfos: { rewardVault: PublicKey; totalReward: BN__default; perSlotReward: BN__default; perShareReward: BN__default; }[]; } & { nonce: BN__default; state: BN__default; lpVault: PublicKey; lastSlot: BN__default; rewardVaultA: PublicKey; totalRewardA: BN__default; perShareRewardA: BN__default; perSlotRewardA: BN__default; option: number; rewardVaultB: PublicKey; totalRewardB: BN__default; perShareRewardB: BN__default; perSlotRewardB: BN__default; }>; declare const farmStateV6Layout: GetStructureFromLayoutSchema<{ version: 6; rewardInfos: { rewardState: BN__default; rewardOpenTime: BN__default; rewardEndTime: BN__default; rewardLastUpdateTime: BN__default; totalReward: BN__default; totalRewardEmissioned: BN__default; rewardClaimed: BN__default; rewardPerSecond: BN__default; accRewardPerShare: BN__default; rewardVault: PublicKey; rewardMint: PublicKey; rewardSender: PublicKey; rewardType: RewardType; }[]; } & { nonce: BN__default; state: BN__default; lpVault: PublicKey; validRewardTokenNum: BN__default; rewardMultiplier: BN__default; rewardPeriodMax: BN__default; rewardPeriodMin: BN__default; rewardPeriodExtend: BN__default; lpMint: PublicKey; padding: BN__default[]; rewardInfos: { rewardVault: PublicKey; totalReward: BN__default; rewardState: BN__default; rewardOpenTime: BN__default; rewardEndTime: BN__default; rewardLastUpdateTime: BN__default; totalRewardEmissioned: BN__default; rewardClaimed: BN__default; rewardPerSecond: BN__default; accRewardPerShare: BN__default; rewardMint: PublicKey; rewardSender: PublicKey; rewardType: BN__default; padding: BN__default[]; }[]; creator: PublicKey; }>; declare const farmRewardTimeInfoLayout: Structure<BN__default, "", { rewardOpenTime: BN__default; rewardEndTime: BN__default; rewardPerSecond: BN__default; rewardType: BN__default; isSet: BN__default; }>; declare const farmRewardLayout: Structure<number | BN__default | { rewardOpenTime: BN__default; rewardEndTime: BN__default; rewardPerSecond: BN__default; rewardType: BN__default; isSet: BN__default; }[], "", { nonce: BN__default; instruction: number; rewardTimeInfo: { rewardOpenTime: BN__default; rewardEndTime: BN__default; rewardPerSecond: BN__default; rewardType: BN__default; isSet: BN__default; }[]; }>; declare const farmRewardRestartLayout: Structure<number | BN__default, "", { rewardEndTime: BN__default; rewardPerSecond: BN__default; instruction: number; rewardReopenTime: BN__default; }>; declare const farmAddRewardLayout: Structure<number | BN__default, "", { rewardOpenTime: BN__default; rewardEndTime: BN__default; rewardPerSecond: BN__default; rewardType: BN__default; isSet: BN__default; instruction: number; }>; declare type FarmStateLayoutV3 = typeof farmStateV3Layout; declare type FarmStateLayoutV5 = typeof farmStateV5Layout; declare type FarmStateLayoutV6 = typeof farmStateV6Layout; declare type FarmStateV3 = GetStructureSchema<FarmStateLayoutV3>; declare type FarmStateV5 = GetStructureSchema<FarmStateLayoutV5>; declare type FarmStateV6 = GetStructureSchema<FarmStateLayoutV6>; declare type FarmState = FarmStateV3 | FarmStateV5 | FarmStateV6; declare type FarmStateLayout = FarmStateLayoutV3 | FarmStateLayoutV5 | FarmStateLayoutV6; declare const farmLedgerLayoutV3_1: Structure<PublicKey | BN__default | BN__default[], "", { id: PublicKey; state: BN__default; owner: PublicKey; deposited: BN__default; rewardDebts: BN__default[]; }>; declare const farmLedgerLayoutV3_2: Structure<PublicKey | BN__default | BN__default[], "", { id: PublicKey; state: BN__default; owner: PublicKey; deposited: BN__default; rewardDebts: BN__default[]; voteLockedBalance: BN__default; }>; declare const farmLedgerLayoutV5_1: Structure<PublicKey | BN__default | BN__default[], "", { id: PublicKey; state: BN__default; owner: PublicKey; deposited: BN__default; rewardDebts: BN__default[]; }>; declare const farmLedgerLayoutV5_2: Structure<PublicKey | BN__default | BN__default[], "", { id: PublicKey; state: BN__default; owner: PublicKey; deposited: BN__default; rewardDebts: BN__default[]; }>; declare const farmLedgerLayoutV6_1: Structure<PublicKey | BN__default | BN__default[], "", { id: PublicKey; state: BN__default; owner: PublicKey; deposited: BN__default; rewardDebts: BN__default[]; }>; declare type FarmLedgerLayoutV3_1 = typeof farmLedgerLayoutV3_1; declare type FarmLedgerLayoutV3_2 = typeof farmLedgerLayoutV3_2; declare type FarmLedgerLayoutV5_1 = typeof farmLedgerLayoutV5_1; declare type FarmLedgerLayoutV5_2 = typeof farmLedgerLayoutV5_2; declare type FarmLedgerLayoutV6_1 = typeof farmLedgerLayoutV6_1; declare type FarmLedgerLayout = FarmLedgerLayoutV3_1 | FarmLedgerLayoutV3_2 | FarmLedgerLayoutV5_1 | FarmLedgerLayoutV5_2 | FarmLedgerLayoutV6_1; declare type FarmLedgerV3_1 = GetStructureSchema<FarmLedgerLayoutV3_1>; declare type FarmLedgerV3_2 = GetStructureSchema<FarmLedgerLayoutV3_2>; declare type FarmLedgerV5_1 = GetStructureSchema<FarmLedgerLayoutV5_1>; declare type FarmLedgerV5_2 = GetStructureSchema<FarmLedgerLayoutV5_2>; declare type FarmLedgerV6_1 = GetStructureSchema<FarmLedgerLayoutV6_1>; declare type FarmLedger = FarmLedgerV3_1 | FarmLedgerV3_2 | FarmLedgerV5_1 | FarmLedgerV5_2 | FarmLedgerV6_1; declare const dwLayout: Structure<number | BN__default, "", { instruction: number; amount: BN__default; }>; declare const VoterVotingMintConfig: Structure<number[] | PublicKey | BN__default | BN__default[], "", { mint: PublicKey; grantAuthority: PublicKey; baselineVoteWeightScaledFactor: BN__default; maxExtraLockupVoteWeightScaledFactor: BN__default; lockupSaturationSecs: BN__default; digitShift: BN__default; reserved1: number[]; reserved2: BN__default[]; }>; declare const VoterRegistrar: Structure<number | number[] | PublicKey | Buffer | BN__default | BN__default[] | { mint: PublicKey; grantAuthority: PublicKey; baselineVoteWeightScaledFactor: BN__default; maxExtraLockupVoteWeightScaledFactor: BN__default; lockupSaturationSecs: BN__default; digitShift: BN__default; reserved1: number[]; reserved2: BN__default[]; }[], "", { reserved1: number[]; reserved2: number[]; governanceProgramId: PublicKey; realm: PublicKey; realmGoverningTokenMint: PublicKey; realmAuthority: PublicKey; votingMints: { mint: PublicKey; grantAuthority: PublicKey; baselineVoteWeightScaledFactor: BN__default; maxExtraLockupVoteWeightScaledFactor: BN__default; lockupSaturationSecs: BN__default; digitShift: BN__default; reserved1: number[]; reserved2: BN__default[]; }[]; timeOffset: BN__default; bump: number; reserved3: BN__default[]; }>; declare const VoterLockup: Structure<number | number[] | BN__default, "", { startTime: BN__default; endTime: BN__default; kind: number; reserved: number[]; }>; declare const VoterDepositEntry: Structure<number | boolean | number[] | BN__default | { startTime: BN__default; endTime: BN__default; kind: number; reserved: number[]; }[], "", { reserved: number[]; lockup: { startTime: BN__default; endTime: BN__default; kind: number; reserved: number[]; }[]; amountDeposited_native: BN__default; amountInitiallyLockedNative: BN__default; isUsed: boolean; allowClawback: boolean; votingMintConfigIdx: number; }>; declare const Voter: Structure<number | number[] | PublicKey | Buffer | { reserved: number[]; lockup: { startTime: BN__default; endTime: BN__default; kind: number; reserved: number[]; }[]; amountDeposited_native: BN__default; amountInitiallyLockedNative: BN__default; isUsed: boolean; allowClawback: boolean; votingMintConfigIdx: number; }[], "", { reserved: number[]; voterAuthority: PublicKey; registrar: PublicKey; deposits: { reserved: number[]; lockup: { startTime: BN__default; endTime: BN__default; kind: number; reserved: number[]; }[]; amountDeposited_native: BN__default; amountInitiallyLockedNative: BN__default; isUsed: boolean; allowClawback: boolean; votingMintConfigIdx: number; }[]; voterBump: number; voterWweightRecordBump: number; }>; declare type LiquidityVersion = 4 | 5; interface ApiPoolInfoV4 { id: string; baseMint: string; quoteMint: string; lpMint: string; baseDecimals: number; quoteDecimals: number; lpDecimals: number; version: 4; programId: string; authority: string; openOrders: string; targetOrders: string; baseVault: string; quoteVault: string; withdrawQueue: string; lpVault: string; marketVersion: 3; marketProgramId: string; marketId: string; marketAuthority: string; marketBaseVault: string; marketQuoteVault: string; marketBids: string; marketAsks: string; marketEventQueue: string; lookupTableAccount: string; } interface FarmRewardInfoV6 { rewardMint: string; rewardVault: string; rewardOpenTime: number; rewardEndTime: number; rewardPerSecond: number; rewardSender: string; } interface ApiStakePoolInfo { id: string; symbol: string; lpMint: string; version: FarmVersion; programId: string; authority: string; lpVault: string; rewardInfos: FarmRewardInfo[] | FarmRewardInfoV6[]; upcoming: boolean; } interface ApiClmmConfigInfo { id: string; index: number; protocolFeeRate: number; tradeFeeRate: number; tickSpacing: number; fundFeeRate: number; defaultRange: number; defaultRangePoint: number[]; } interface ApiCpmmConfigInfo { id: string; index: number; protocolFeeRate: number; tradeFeeRate: number; fundFeeRate: number; createPoolFee: string; creatorFeeRate: number; } interface ApiClmmPoolsItemStatistics { volume: number; volumeFee: number; feeA: number; feeB: number; feeApr: number; rewardApr: { A: number; B: number; C: number; }; apr: number; priceMin: number; priceMax: number; } interface CpmmLockInfo { name: string; symbol: string; description: string; external_url: string; collection: { name: string; family: string; }; image: string; poolInfo: ApiV3PoolInfoStandardItemCpmm; positionInfo: { tvlPercentage: number; usdValue: number; amountA: number; amountB: number; unclaimedFee: { lp: number; amountA: number; amountB: number; usdValue: number; }; }; } /** ====== v3 api types ======= */ interface ApiV3PageIns<T> { count: number; hasNextPage: boolean; data: T[]; } declare enum JupTokenType { ALL = "all", Strict = "strict" } declare type PoolsApiReturn = ApiV3PageIns<ApiV3PoolInfoItem>; interface TransferFeeDataBaseType { transferFeeConfigAuthority: string; withdrawWithheldAuthority: string; withheldAmount: string; olderTransferFee: { epoch: string; maximumFee: string; transferFeeBasisPoints: number; }; newerTransferFee: { epoch: string; maximumFee: string; transferFeeBasisPoints: number; }; } declare type ExtensionsItem = { coingeckoId?: string; feeConfig?: TransferFeeDataBaseType; tips?: { icon: string; link: string; text: string; }; }; declare type ApiV3Token = { chainId: number; address: string; programId: string; logoURI: string; symbol: string; name: string; decimals: number; tags: string[]; extensions: ExtensionsItem; freezeAuthority?: string; mintAuthority?: string; }; declare type JupToken = { id: string; name: string; symbol: string; decimals: number; icon: string; circSupply: number; totalSupply: number; tokenProgram: string; mintAuthority: string | undefined; freezeAuthority: string | undefined; firstPool: { id: string; createdAt: string; }; holderCount: number; audit: { mintAuthorityDisabled: boolean; freezeAuthorityDisabled: boolean; topHoldersPercentage: number; }; apy: { jupEarn: number; }; organicScore: number; organicScoreLabel: string; isVerified: boolean; tags: string[]; fdv: number; mcap: number; usdPrice: number; priceBlockId: number; liquidity: number; stats5m: { priceChange: number; liquidityChange: number; volumeChange: number; buyVolume: number; sellVolume: number; buyOrganicVolume: number; sellOrganicVolume: number; numBuys: number; numSells: number; numTraders: number; numOrganicBuyers: number; numNetBuyers: number; }; stats1h: { priceChange: number; liquidityChange: number; volumeChange: number; buyVolume: number; sellVolume: number; buyOrganicVolume: number; sellOrganicVolume: number; numBuys: number; numSells: number; numTraders: number; numOrganicBuyers: number; numNetBuyers: number; }; stats6h: { priceChange: number; liquidityChange: number; volumeChange: number; buyVolume: number; sellVolume: number; buyOrganicVolume: number; sellOrganicVolume: number; numBuys: number; numSells: number; numTraders: number; numOrganicBuyers: number; numNetBuyers: number; }; stats24h: { priceChange: number; liquidityChange: number; volumeChange: number; buyVolume: number; sellVolume: number; buyOrganicVolume: number; sellOrganicVolume: number; numBuys: number; numSells: number; numTraders: number; numOrganicBuyers: number; numNetBuyers: number; }; ctLikes: number; smartCtLikes: number; updatedAt: string; }; declare type ApiV3TokenRes = { mintList: ApiV3Token[]; blacklist: string[]; whiteList: string[]; }; interface ApiV3PoolInfoCountItem { volume: number; volumeQuote: number; volumeFee: number; apr: number; feeApr: number; priceMin: number; priceMax: number; rewardApr: number[]; } declare type PoolTypeItem = "StablePool" | "OpenBookMarket"; declare type FarmRewardInfoOld = { mint: ApiV3Token; perSecond: number; }; declare type PoolFarmRewardInfo = FarmRewardInfoOld & { startTime?: number; endTime?: number; }; interface PoolRewardInfoItem { mint: ApiV3Token; perSecond?: number; startTime?: number; endTime?: number; } interface ApiV3PoolInfoBaseItem { programId: string; id: string; mintA: ApiV3Token; mintB: ApiV3Token; rewardDefaultInfos: PoolFarmRewardInfo[]; rewardDefaultPoolInfos: "Ecosystem" | "Fusion" | "Raydium" | "Clmm"; price: number; mintAmountA: number; mintAmountB: number; feeRate: number; openTime: string; tvl: number; day: ApiV3PoolInfoCountItem; week: ApiV3PoolInfoCountItem; month: ApiV3PoolInfoCountItem; pooltype: PoolTypeItem[]; farmUpcomingCount: number; farmOngoingCount: number; farmFinishedCount: number; burnPercent: number; } declare type ApiV3PoolInfoConcentratedItem = ApiV3PoolInfoBaseItem & { type: "Concentrated"; config: ApiClmmConfigV3; }; declare type ApiV3PoolInfoStandardItem = ApiV3PoolInfoBaseItem & { type: "Standard"; marketId: string; configId: string; lpPrice: number; lpAmount: number; lpMint: ApiV3Token; }; declare type ApiV3PoolInfoStandardItemCpmm = ApiV3PoolInfoBaseItem & { type: "Standard"; lpMint: ApiV3Token; lpPrice: number; lpAmount: number; config: ApiCpmmConfigV3; }; declare type ApiV3PoolInfoItem = ApiV3PoolInfoConcentratedItem | ApiV3PoolInfoStandardItem | ApiV3PoolInfoStandardItemCpmm; declare enum PoolFetchType { All = "all", Standard = "Standard", Concentrated = "Concentrated" } interface FetchPoolParams { type?: PoolFetchType; sort?: "liquidity" | "volume24h" | "volume7d" | "volume30d" | "fee24h" | "fee7d" | "fee30d" | "apr24h" | "apr7d" | "apr30d"; order?: "desc" | "asc"; pageSize?: number; nextPageId?: string; showFarms?: boolean; mint1?: string; mint2?: string; } interface Point { time: number; liquidity: number; } interface LiquidityLineApi { count: number; line: Point[]; } interface Base { programId: string; id: string; mintA: ApiV3Token; mintB: ApiV3Token; lookupTableAccount?: string; openTime: string; vault: { A: string; B: string; }; } interface _Amm { authority: string; openOrders: string; targetOrders: string; mintLp: ApiV3Token; } interface ApiCpmmConfigV3 { id: string; index: number; protocolFeeRate: number; tradeFeeRate: number; fundFeeRate: number; createPoolFee: string; } interface _Cpmm { authority: string; mintLp: ApiV3Token; config: ApiCpmmConfigV3; observationId: string; } interface _Market { marketProgramId: string; marketId: string; marketAuthority: string; marketBaseVault: string; marketQuoteVault: string; marketBids: string; marketAsks: string; marketEventQueue: string; } declare type AmmV4Keys = Base & _Amm & _Market; declare type AmmV5Keys = Base & _Amm & _Market & { modelDataAccount: string; }; declare type CpmmKeys = Base & _Cpmm; interface ClmmRewardType { mint: ApiV3Token; vault: string; } declare type ClmmKeys = Base & { config: ApiClmmConfigV3; rewardInfos: ClmmRewardType[]; observationId: string; exBitmapAccount: string; }; declare type PoolKeys = AmmV4Keys | AmmV5Keys | ClmmKeys | CpmmKeys; interface ApiClmmConfigV3 { id: string; index: number; protocolFeeRate: number; tradeFeeRate: number; tickSpacing: number; fundFeeRate: number; description: string; defaultRange: number; defaultRangePoint: number[]; } interface RpcItemA { url: string; weight: number; batch: boolean; name: string; } interface RpcItemB { url: string; batch: boolean; name: string; } declare type RpcStrategy = "speed" | "first"; declare type RpcTypeWeight = { strategy: "weight"; rpcs: RpcItemA[]; }; declare type RpcTypeOther = { strategy: RpcStrategy; rpcs: RpcItemB[]; }; declare type RpcType = RpcTypeWeight | RpcTypeOther; declare type FarmRewardTypeV6Key = "Standard SPL" | "Option tokens"; interface RewardKeyInfoV345 { mint: ApiV3Token; vault: string; type: FarmRewardTypeV6Key; perSecond: number; perBlock: number; } interface RewardKeyInfoV6 { mint: ApiV3Token; vault: string; type: FarmRewardTypeV6Key; perSecond: number; openTime: string; endTime: string; sender: string; } interface FormatFarmKeyOutBase { programId: string; id: string; symbolMints: ApiV3Token[]; lpMint: ApiV3Token; authority: string; lpVault: string; } declare type FormatFarmKeyOutV345 = FormatFarmKeyOutBase & { rewardInfos: RewardKeyInfoV345[]; }; declare type FormatFarmKeyOutV6 = FormatFarmKeyOutBase & { config: { periodMax: number; periodMin: number; periodExtend: number; }; rewardInfos: RewardKeyInfoV6[]; }; declare type FormatFarmKeyOut = FormatFarmKeyOutV345 | FormatFarmKeyOutV6; interface RewardInfoV345 { mint: ApiV3Token; type: FarmRewardTypeV6Key; apr: number; perSecond: string; } interface RewardInfoV6 { mint: ApiV3Token; type: FarmRewardTypeV6Key; apr: number; perSecond: string; openTime: string; endTime: string; } declare type FarmTagsItem = "Ecosystem" | "Farm" | "Fusion" | "Stake"; interface FormatFarmInfoOutBase { programId: string; id: string; symbolMints: ApiV3Token[]; lpMint: ApiV3Token; tvl: number; lpPrice: number; apr: number; tags: FarmTagsItem[]; } declare type FormatFarmInfoOutV345 = FormatFarmInfoOutBase & { rewardInfos: RewardInfoV345[]; }; declare type FormatFarmInfoOutV6 = FormatFarmInfoOutBase & { rewardInfos: RewardInfoV6[]; }; declare type FormatFarmInfoOut = FormatFarmInfoOutV345 | FormatFarmInfoOutV6; interface AvailabilityCheckAPI3 { all: boolean; swap: boolean; createConcentratedPosition: boolean; addConcentratedPosition: boolean; addStandardPosition: boolean; removeConcentratedPosition: boolean; removeStandardPosition: boolean; addFarm: boolean; removeFarm: boolean; } declare type OwnerCreatedFarmInfo = { farm: { id: string; programId: string; }[]; clmm: { id: string; programId: string; }[]; }; declare type OwnerIdoInfo = Record<string, { programId: string; poolId: string; coin: string; pc: string; }>; declare type IdoKeysData = { programId: string; id: string; authority: string; projectInfo: { mint: ApiV3Token; vault: string; }; buyInfo: { mint: ApiV3Token; vault: string; }; }; interface ApiStakePool { programId: string; id: string; apr: number; lpMint: ApiV3Token; lpPrice: number; symbolMints: ApiV3Token[]; tvl: number; tags: FarmTagsItem[]; rewardInfos: RewardInfoV345[]; } declare type FarmPositionData = Record<string, Record<string, Record<string, { programId: string; lpAmount: string; version: "V1" | "V2"; }>>>; interface ApiLaunchConfig { key: { name: string; pubKey: string; epoch: number; curveType: number; index: number; migrateFee: string; tradeFeeRate: string; maxShareFeeRate: string; minSupplyA: string; maxLockRate: string; minSellRateA: string; minMigrateRateA: string; minFundRaisingB: string; protocolFeeOwner: string; migrateFeeOwner: string; migrateToAmmWallet: string; migrateToCpmmWallet: string; mintB: string; }; mintInfoB: ApiV3Token; defaultParams: { supplyInit: string; totalFundRaisingB: string; totalSellA: string; }; } declare function endlessRetry<T>(name: string, call: () => Promise<T>, interval?: number): Promise<T>; interface ApiProps { cluster: Cluster; timeout: number; logRequests?: boolean; logCount?: number; urlConfigs?: API_URL_CONFIG; } declare class Api { cluster: Cluster; api: AxiosInstance; logCount: number; urlConfigs: API_URL_CONFIG; constructor({ cluster, timeout, logRequests, logCount, urlConfigs }: ApiProps); getClmmConfigs(): Promise<ApiClmmConfigInfo[]>; getCpmmConfigs(): Promise<ApiCpmmConfigInfo[]>; getClmmPoolLines(poolId: string): Promise<{ price: string; liquidity: string; }[]>; getBlockSlotCountForSecond(endpointUrl?: string): Promise<number>; getChainTimeOffset(): Promise<{ offset: number; }>; getRpcs(): Promise<{ rpcs: { batch: boolean; name: string; url: string; weight: number; }[]; strategy: string; }>; getTokenList(): Promise<{ mintList: ApiV3Token[]; blacklist: string[]; whiteList: string[]; }>; getJupTokenList(): Promise<(ApiV3Token & { freeze_authority: string | null; mint_authority: string | null; permanent_delegate: string | null; minted_at: string; })[]>; getTokenInfo(mint: (string | PublicKey)[]): Promise<ApiV3Token[]>; getPoolList(props?: FetchPoolParams): Promise<PoolsApiReturn>; fetchPoolById(props: { ids: string; }): Promise<ApiV3PoolInfoItem[]>; fetchPoolKeysById(props: { idList: string[]; }): Promise<PoolKeys[]>; fetchPoolByMints(props: { min