import { IAppToolkit } from '../../../app-toolkit/app-toolkit.interface';
import { StatsItem } from '../../../position/display.interface';
import { AppTokenTemplatePositionFetcher } from '../../../position/template/app-token.template.position-fetcher';
import { GetUnderlyingTokensParams, GetAddressesParams, GetDisplayPropsParams, GetPricePerShareParams, GetDataPropsParams, DefaultAppTokenDataProps } from '../../../position/template/app-token.template.types';
import { ArrakisContractFactory, ArrakisGelatoPool } from '../contracts';
import { ArrakisPoolDefinitionsResolver } from './arrakis.pool-definition-resolver';
export declare type ArrakisPoolDefinition = {
    address: string;
    underlyingTokenAddress0: string;
    underlyingTokenAddress1: string;
};
export declare type ArrakisPoolTokenDataProps = DefaultAppTokenDataProps & {
    fee: number;
};
export declare abstract class ArrakisPoolTokenFetcher extends AppTokenTemplatePositionFetcher<ArrakisGelatoPool, ArrakisPoolTokenDataProps, ArrakisPoolDefinition> {
    protected readonly appToolkit: IAppToolkit;
    private readonly poolDefinitionsResolver;
    private readonly contractFactory;
    constructor(appToolkit: IAppToolkit, poolDefinitionsResolver: ArrakisPoolDefinitionsResolver, contractFactory: ArrakisContractFactory);
    getContract(address: string): ArrakisGelatoPool;
    getDefinitions(): Promise<ArrakisPoolDefinition[]>;
    getAddresses({ definitions }: GetAddressesParams<ArrakisPoolDefinition>): Promise<string[]>;
    getUnderlyingTokenDefinitions({ definition, }: GetUnderlyingTokensParams<ArrakisGelatoPool, ArrakisPoolDefinition>): Promise<{
        address: string;
        network: import("../../../types").Network;
    }[]>;
    getPricePerShare({ appToken, contract, }: GetPricePerShareParams<ArrakisGelatoPool, ArrakisPoolTokenDataProps, ArrakisPoolDefinition>): Promise<number[]>;
    getLabel({ appToken }: GetDisplayPropsParams<ArrakisGelatoPool, ArrakisPoolTokenDataProps>): Promise<string>;
    getSecondaryLabel({ appToken, }: GetDisplayPropsParams<ArrakisGelatoPool, ArrakisPoolTokenDataProps, ArrakisPoolDefinition>): Promise<string>;
    getFee({ multicall, appToken, contract, }: GetDataPropsParams<ArrakisGelatoPool, ArrakisPoolTokenDataProps, ArrakisPoolDefinition>): Promise<number>;
    getDataProps(params: GetDataPropsParams<ArrakisGelatoPool, ArrakisPoolTokenDataProps, ArrakisPoolDefinition>): Promise<{
        fee: number;
        liquidity: number;
        reserves: number[];
        apy: number;
        isDebt: boolean;
    }>;
    getStatsItems({ appToken, }: GetDisplayPropsParams<ArrakisGelatoPool, ArrakisPoolTokenDataProps, ArrakisPoolDefinition>): Promise<StatsItem[] | undefined>;
}
