import { IAppToolkit } from '../../../app-toolkit/app-toolkit.interface';
import { AppTokenTemplatePositionFetcher } from '../../../position/template/app-token.template.position-fetcher';
import { DefaultAppTokenDataProps, GetAddressesParams, GetDataPropsParams, GetDisplayPropsParams, GetPricePerShareParams, GetTokenPropsParams, GetUnderlyingTokensParams } from '../../../position/template/app-token.template.types';
import { BalancerPool, BalancerV2ContractFactory } from '../contracts';
export declare type BalancerV2PoolTokenDataProps = DefaultAppTokenDataProps & {
    fee: number;
    weights: number[];
    volume: number;
    poolId: string;
    poolType: string;
};
export declare type BalancerV2PoolTokenDefinition = {
    poolType: string;
    address: string;
    factory: string;
};
export declare abstract class BalancerV2PoolTokenFetcher extends AppTokenTemplatePositionFetcher<BalancerPool, BalancerV2PoolTokenDataProps, BalancerV2PoolTokenDefinition> {
    protected readonly appToolkit: IAppToolkit;
    protected readonly contractFactory: BalancerV2ContractFactory;
    constructor(appToolkit: IAppToolkit, contractFactory: BalancerV2ContractFactory);
    abstract subgraphUrl: string;
    abstract vaultAddress: string;
    getContract(address: string): BalancerPool;
    getDefinitions(): Promise<BalancerV2PoolTokenDefinition[]>;
    getAddresses({ definitions }: GetAddressesParams<BalancerV2PoolTokenDefinition>): Promise<string[]>;
    getSupply({ address, contract, definition, multicall, }: GetTokenPropsParams<BalancerPool, BalancerV2PoolTokenDataProps, BalancerV2PoolTokenDefinition>): Promise<import("ethers").BigNumber>;
    getUnderlyingTokenDefinitions({ address, contract, multicall }: GetUnderlyingTokensParams<BalancerPool>): Promise<{
        address: string;
        network: import("../../../types").Network;
    }[]>;
    getPricePerShare({ appToken, contract, multicall }: GetPricePerShareParams<BalancerPool>): Promise<number[]>;
    getDataProps(params: GetDataPropsParams<BalancerPool, BalancerV2PoolTokenDataProps, BalancerV2PoolTokenDefinition>): Promise<BalancerV2PoolTokenDataProps>;
    getLabel({ appToken }: GetDisplayPropsParams<BalancerPool, BalancerV2PoolTokenDataProps>): Promise<string>;
    getSecondaryLabel({ appToken }: GetDisplayPropsParams<BalancerPool, BalancerV2PoolTokenDataProps>): Promise<string>;
}
