import BN from "bn.js"; import { AccountInfo, PublicKey } from "@solana/web3.js"; import { RawAccount, RawMint } from "@solana/spl-token"; export interface DepositBaseResult { quote: BN; lpToken: BN; maxBase: BN; maxQuote: BN; } export interface DepositQuoteAndLpTokenFromBaseResult { quote: BN; lpToken: BN; } export interface DepositQuoteResult { base: BN; lpToken: BN; maxBase: BN; maxQuote: BN; } export interface DepositBaseAndLpTokenFromQuoteResult { base: BN; lpToken: BN; } export interface DepositResult { token1: BN; lpToken: BN; maxToken0: BN; maxToken1: BN; } export interface DepositLpTokenResult { maxBase: BN; maxQuote: BN; } export interface WithdrawResult { base: BN; quote: BN; minBase: BN; minQuote: BN; } export interface WithdrawAutocompleteResult { base: BN; quote: BN; } export interface BuyBaseInputResult { internalQuoteAmount: BN; /** * The total amount of quote tokens required to buy `base` tokens, * including LP fee and protocol fee. */ uiQuote: BN; /** * The maximum quote tokens that you are willing to pay, * given the specified slippage tolerance. */ maxQuote: BN; } export interface BuyQuoteInputResult { /** * The amount of base tokens received after fees. */ base: BN; internalQuoteWithoutFees: BN; /** * The maximum quote tokens that you are willing to pay, * given the specified slippage tolerance. */ maxQuote: BN; } export interface SellBaseInputResult { /** * The final amount of quote tokens the user receives (after subtracting LP and protocol fees). */ uiQuote: BN; /** * The minimum quote tokens the user is willing to receive, * given their slippage tolerance. */ minQuote: BN; internalQuoteAmountOut: BN; } export interface SellQuoteInputResult { internalRawQuote: BN; base: BN; minQuote: BN; } export interface Pool { poolBump: number; index: number; creator: PublicKey; baseMint: PublicKey; quoteMint: PublicKey; lpMint: PublicKey; poolBaseTokenAccount: PublicKey; poolQuoteTokenAccount: PublicKey; lpSupply: BN; coinCreator: PublicKey; isMayhemMode: boolean; isCashbackCoin: boolean; } export interface GlobalConfig { admin: PublicKey; lpFeeBasisPoints: BN; protocolFeeBasisPoints: BN; disableFlags: number; protocolFeeRecipients: PublicKey[]; coinCreatorFeeBasisPoints: BN; adminSetCoinCreatorAuthority: PublicKey; whitelistPda: PublicKey; reservedFeeRecipient: PublicKey; mayhemModeEnabled: boolean; reservedFeeRecipients: PublicKey[]; } export interface GlobalVolumeAccumulator { startTime: BN; endTime: BN; secondsInADay: BN; mint: PublicKey; totalTokenSupply: BN[]; solVolumes: BN[]; } export interface UserVolumeAccumulator { user: PublicKey; needsClaim: boolean; totalUnclaimedTokens: BN; totalClaimedTokens: BN; currentSolVolume: BN; lastUpdateTimestamp: BN; } export interface SwapAccounts { pool: PublicKey; globalConfig: PublicKey; user: PublicKey; baseMint: PublicKey; quoteMint: PublicKey; userBaseTokenAccount: PublicKey; userQuoteTokenAccount: PublicKey; poolBaseTokenAccount: PublicKey; poolQuoteTokenAccount: PublicKey; protocolFeeRecipient: PublicKey; protocolFeeRecipientTokenAccount: PublicKey; baseTokenProgram: PublicKey; quoteTokenProgram: PublicKey; systemProgram: PublicKey; associatedTokenProgram: PublicKey; eventAuthority: PublicKey; program: PublicKey; coinCreatorVaultAta: PublicKey; coinCreatorVaultAuthority: PublicKey; } export interface LiquidityAccounts { pool: PublicKey; globalConfig: PublicKey; user: PublicKey; baseMint: PublicKey; quoteMint: PublicKey; lpMint: PublicKey; userBaseTokenAccount: PublicKey; userQuoteTokenAccount: PublicKey; userPoolTokenAccount: PublicKey; poolBaseTokenAccount: PublicKey; poolQuoteTokenAccount: PublicKey; tokenProgram: PublicKey; token2022Program: PublicKey; eventAuthority: PublicKey; program: PublicKey; } export interface CommonSolanaState { poolKey: PublicKey; poolAccountInfo: AccountInfo | null; user: PublicKey; } export interface CreatePoolSolanaState { index: number; baseMint: PublicKey; quoteMint: PublicKey; creator: PublicKey; globalConfig: GlobalConfig; poolKey: PublicKey; poolBaseTokenAccount: PublicKey; poolQuoteTokenAccount: PublicKey; baseTokenProgram: PublicKey; quoteTokenProgram: PublicKey; userBaseTokenAccount: PublicKey; userQuoteTokenAccount: PublicKey; userBaseAccountInfo: AccountInfo | null; userQuoteAccountInfo: AccountInfo | null; poolBaseAccountInfo: AccountInfo | null; poolQuoteAccountInfo: AccountInfo | null; } export interface SwapSolanaState { globalConfig: GlobalConfig; feeConfig: FeeConfig | null; poolKey: PublicKey; poolAccountInfo: AccountInfo | null; pool: Pool; poolBaseAmount: BN; poolQuoteAmount: BN; baseTokenProgram: PublicKey; quoteTokenProgram: PublicKey; baseMint: PublicKey; baseMintAccount: RawMint; user: PublicKey; userBaseTokenAccount: PublicKey; userQuoteTokenAccount: PublicKey; userBaseAccountInfo: AccountInfo | null; userQuoteAccountInfo: AccountInfo | null; } export interface LiquiditySolanaState { globalConfig: GlobalConfig; poolKey: PublicKey; poolAccountInfo: AccountInfo; pool: Pool; poolBaseTokenAccount: RawAccount; poolQuoteTokenAccount: RawAccount; baseTokenProgram: PublicKey; quoteTokenProgram: PublicKey; user: PublicKey; userBaseTokenAccount: PublicKey; userQuoteTokenAccount: PublicKey; userPoolTokenAccount: PublicKey; userBaseAccountInfo: AccountInfo | null; userQuoteAccountInfo: AccountInfo | null; userPoolAccountInfo: AccountInfo | null; } export interface CollectCoinCreatorFeeSolanaState { coinCreator: PublicKey; quoteMint: PublicKey; quoteTokenProgram: PublicKey; coinCreatorVaultAuthority: PublicKey; coinCreatorVaultAta: PublicKey; coinCreatorTokenAccount: PublicKey; coinCreatorVaultAtaAccountInfo: AccountInfo | null; coinCreatorTokenAccountInfo: AccountInfo | null; } export interface FeeConfig { admin: PublicKey; flatFees: Fees; feeTiers: FeeTier[]; } export interface FeeTier { marketCapLamportsThreshold: BN; fees: Fees; } export interface Fees { lpFeeBps: BN; protocolFeeBps: BN; creatorFeeBps: BN; }