import BN from "bn.js"; import type { MintWithTokenProgram } from "@orca-so/common-sdk"; import type { WhirlpoolAccountFetchOptions, WhirlpoolAccountFetcherInterface, WhirlpoolData } from "../.."; import type { AccountMeta, Connection } from "@solana/web3.js"; import { PublicKey } from "@solana/web3.js"; export type TransferFeeIncludedAmount = { amount: BN; fee: BN; }; export type TransferFeeExcludedAmount = { amount: BN; fee: BN; }; export type TokenExtensionContext = { currentEpoch: number; tokenMintWithProgramA: MintWithTokenProgram; tokenMintWithProgramB: MintWithTokenProgram; rewardTokenMintsWithProgram: [ MintWithTokenProgram | null, MintWithTokenProgram | null, MintWithTokenProgram | null ]; }; export type TokenExtensionContextForPool = Omit; export type TokenExtensionContextForReward = Omit; export declare const NO_TOKEN_EXTENSION_CONTEXT: TokenExtensionContext; export declare class TokenExtensionUtil { static calculateTransferFeeIncludedAmount(transferFeeExcludedAmount: BN, tokenInfo: MintWithTokenProgram, currentEpoch: number): TransferFeeIncludedAmount; static calculateTransferFeeExcludedAmount(transferFeeIncludedAmount: BN, tokenInfo: MintWithTokenProgram, currentEpoch: number): TransferFeeExcludedAmount; static buildTokenExtensionContext(fetcher: WhirlpoolAccountFetcherInterface, whirlpoolData: WhirlpoolData, opts?: WhirlpoolAccountFetchOptions): Promise; static buildTokenExtensionContextForPool(fetcher: WhirlpoolAccountFetcherInterface, tokenMintA: PublicKey, tokenMintB: PublicKey, opts?: WhirlpoolAccountFetchOptions): Promise; static getExtraAccountMetasForTransferHook(connection: Connection, tokenMintWithProgram: MintWithTokenProgram, source: PublicKey, destination: PublicKey, owner: PublicKey): Promise; static getExtraAccountMetasForTransferHookForPool(connection: Connection, tokenExtensionCtx: TokenExtensionContextForPool, sourceA: PublicKey, destinationA: PublicKey, ownerA: PublicKey, sourceB: PublicKey, destinationB: PublicKey, ownerB: PublicKey): Promise<{ tokenTransferHookAccountsA: AccountMeta[] | undefined; tokenTransferHookAccountsB: AccountMeta[] | undefined; }>; static isV2IxRequiredPool(tokenExtensionCtx: TokenExtensionContextForPool): boolean; static isV2IxRequiredReward(tokenExtensionCtx: TokenExtensionContextForReward, rewardIndex: number): boolean; }