import { BigNumberish, Contract } from 'ethers';
import { AppTokenTemplatePositionFetcher } from '../../../position/template/app-token.template.position-fetcher';
import { DefaultAppTokenDefinition, GetAddressesParams, GetDataPropsParams, GetDisplayPropsParams, GetPricePerShareParams, GetUnderlyingTokensParams } from '../../../position/template/app-token.template.types';
export declare type UniswapV2TokenDataProps = {
    liquidity: number;
    reserves: number[];
    fee: number;
    apy: number;
    volume: number;
};
export declare abstract class UniswapV2PoolOnChainTemplateTokenFetcher<T extends Contract, V extends Contract> extends AppTokenTemplatePositionFetcher<T, UniswapV2TokenDataProps> {
    abstract factoryAddress: string;
    abstract getPoolTokenContract(address: string): T;
    abstract getPoolFactoryContract(address: string): V;
    abstract getPoolsLength(contract: V): Promise<BigNumberish>;
    abstract getPoolAddress(contract: V, index: number): Promise<string>;
    abstract getPoolToken0(contract: T): Promise<string>;
    abstract getPoolToken1(contract: T): Promise<string>;
    abstract getPoolReserves(contract: T): Promise<BigNumberish[]>;
    fee: number;
    getContract(address: string): T;
    getAddresses({ multicall }: GetAddressesParams<DefaultAppTokenDefinition>): Promise<string[]>;
    getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams<T>): Promise<{
        address: string;
        network: import("../../../types").Network;
    }[]>;
    getPricePerShare({ appToken, contract }: GetPricePerShareParams<T, UniswapV2TokenDataProps>): Promise<number[]>;
    getDataProps(params: GetDataPropsParams<T, UniswapV2TokenDataProps>): Promise<{
        fee: number;
        volume: number;
        liquidity: number;
        reserves: number[];
        apy: number;
    }>;
    getLabel({ appToken }: GetDisplayPropsParams<T, UniswapV2TokenDataProps>): Promise<string>;
    getSecondaryLabel({ appToken }: GetDisplayPropsParams<T, UniswapV2TokenDataProps>): Promise<string>;
    getStatsItems({ appToken }: GetDisplayPropsParams<T, UniswapV2TokenDataProps>): Promise<({
        label: string;
        value: import("../../../position/display.interface").PercentageDisplayItem;
    } | {
        label: string;
        value: import("../../../position/display.interface").DollarDisplayItem;
    } | {
        label: string;
        value: string;
    })[]>;
}
