///
///
import { GetProgramAccountsFilter, PublicKey } from '@solana/web3.js';
import { BeetStruct } from '@metaplex-foundation/beet';
import { TokenPrice, Yield } from '@sonarwatch/portfolio-core';
import BN from 'bn.js';
import Decimal from 'decimal.js';
import { AmmInfoV4, AmmInfoV5 } from './structs/amms';
import { FarmAccount, FarmAccountV6, UserFarmAccountV3, UserFarmAccountV31, UserFarmAccountV4, UserFarmAccountV5, UserFarmAccountV61 } from './structs/farms';
import { ParsedAccount } from '../../utils/solana';
export declare enum LiquidityPoolStatus {
Uninitialized = 0,
Initialized = 1,
Disabled = 2,
RemoveLiquidityOnly = 3,
LiquidityOnly = 4,
OrderBook = 5,
Swap = 6,
WaitingForStart = 7
}
export type EnhancedAmmInfoV4 = AmmInfoV4 & {
versionId: number;
ammName: string;
};
export type EnhancedAmmInfoV5 = AmmInfoV5 & {
versionId: number;
ammName: string;
};
export type AmmInfo = AmmInfoV4 | AmmInfoV5;
export type EnhancedAmmInfo = EnhancedAmmInfoV4 | EnhancedAmmInfoV5;
export type UserFarmConfig = {
programId: PublicKey;
version: string;
filters: (address: string) => GetProgramAccountsFilter[];
struct: BeetStruct> | BeetStruct> | BeetStruct> | BeetStruct>;
};
export type UserFarmConfigV6 = {
programId: PublicKey;
version: string;
filters: (address: string) => GetProgramAccountsFilter[];
struct: BeetStruct>;
};
export type FarmConfig = {
programId: PublicKey;
version: string;
d: number;
filters: GetProgramAccountsFilter[];
struct: BeetStruct>;
};
export type FarmConfigV6 = {
programId: PublicKey;
version: string;
d: number;
filters: GetProgramAccountsFilter[];
struct: BeetStruct>;
};
export type FarmInfo = {
account: ParsedAccount;
lpToken: TokenPrice;
d: number;
rewardTokenA?: TokenPrice;
rewardTokenB?: TokenPrice;
yields?: Yield[];
};
export interface ClmmPoolRewardInfo {
rewardState: number;
openTime: BN;
endTime: BN;
lastUpdateTime: BN;
emissionsPerSecondX64: BN;
rewardTotalEmissioned: BN;
rewardClaimed: BN;
tokenMint: PublicKey;
tokenVault: PublicKey;
creator: PublicKey;
rewardGrowthGlobalX64: BN;
perSecond: Decimal;
remainingRewards: undefined | BN;
tokenProgramId: PublicKey;
}
export interface ClmmPoolInfo {
id: PublicKey;
mintA: {
programId: PublicKey;
mint: PublicKey;
vault: PublicKey;
decimals: number;
};
mintB: {
programId: PublicKey;
mint: PublicKey;
vault: PublicKey;
decimals: number;
};
ammConfig: ClmmConfigInfo;
observationId: PublicKey;
creator: PublicKey;
programId: PublicKey;
version: 6;
tickSpacing: number;
liquidity: BN;
sqrtPriceX64: BN;
currentPrice: Decimal;
tickCurrent: number;
feeGrowthGlobalX64A: BN;
feeGrowthGlobalX64B: BN;
protocolFeesTokenA: BN;
protocolFeesTokenB: BN;
swapInAmountTokenA: BN;
swapOutAmountTokenB: BN;
swapInAmountTokenB: BN;
swapOutAmountTokenA: BN;
tickArrayBitmap: BN[];
rewardInfos: ClmmPoolRewardInfo[];
day: {
volume: number;
volumeFee: number;
feeA: number;
feeB: number;
feeApr: number;
rewardApr: {
A: number;
B: number;
C: number;
};
apr: number;
priceMin: number;
priceMax: number;
};
week: {
volume: number;
volumeFee: number;
feeA: number;
feeB: number;
feeApr: number;
rewardApr: {
A: number;
B: number;
C: number;
};
apr: number;
priceMin: number;
priceMax: number;
};
month: {
volume: number;
volumeFee: number;
feeA: number;
feeB: number;
feeApr: number;
rewardApr: {
A: number;
B: number;
C: number;
};
apr: number;
priceMin: number;
priceMax: number;
};
tvl: number;
lookupTableAccount: PublicKey;
startTime: number;
exBitmapInfo: TickArrayBitmapExtensionType;
}
export interface ClmmConfigInfo {
id: PublicKey;
index: number;
protocolFeeRate: number;
tradeFeeRate: number;
tickSpacing: number;
fundFeeRate: number;
fundOwner: string;
description: string;
}
export interface TickArrayBitmapExtensionType {
poolId: PublicKey;
positiveTickArrayBitmap: BN[][];
negativeTickArrayBitmap: BN[][];
}
export type Tick = {
tick: number;
liquidityNet: BN;
liquidityGross: BN;
feeGrowthOutsideX64A: BN;
feeGrowthOutsideX64B: BN;
rewardGrowthsOutsideX64: BN[];
};
export type ApiV3Response = {
id: string;
success: boolean;
data: {
count: number;
data: PoolInfo[];
hasNextPage: boolean;
};
};
export type PoolInfo = {
type: string;
programId: string;
id: string;
mintA: LpMint;
mintB: LpMint;
price: number;
mintAmountA: number;
mintAmountB: number;
feeRate: number;
openTime: string;
tvl: number;
day: Stats;
week: Stats;
month: Stats;
pooltype: string[];
rewardDefaultInfos: number[];
farmUpcomingCount: number;
farmOngoingCount: number;
farmFinishedCount: number;
marketId: string;
lpMint?: LpMint;
lpPrice: number;
lpAmount: number;
burnPercent: number;
config?: {
id: string;
index: number;
protocolFeeRate: number;
tradeFeeRate: number;
tickSpacing: number;
fundFeeRate: number;
defaultRange: number;
defaultRangePoint: number[];
};
};
export type Stats = {
volume: number;
volumeQuote: number;
volumeFee: number;
apr: number;
feeApr: number;
priceMin: number;
priceMax: number;
rewardApr: number[];
};
export type LpMint = {
chainId: number;
address: string;
programId: string;
logoURI: string;
symbol: string;
name: string;
decimals: number;
tags: string[];
extensions: Extensions;
};
export type Extensions = object;