import { type BigNumber } from 'ethers';
import { type IAppToolkit } from '../../../app-toolkit/app-toolkit.interface';
import { BalanceDisplayMode } from '../../../position/display.interface';
import { AppTokenTemplatePositionFetcher } from '../../../position/template/app-token.template.position-fetcher';
import type { GetAddressesParams, GetDataPropsParams, GetDefinitionsParams, GetTokenPropsParams, GetUnderlyingTokensParams, DefaultAppTokenDataProps, GetPricePerShareParams, GetDisplayPropsParams } from '../../../position/template/app-token.template.types';
import { ExactlyContractFactory, type Market } from '../contracts';
import { ExactlyDefinitionsResolver, type ExactlyMarketDefinition } from './exactly.definitions-resolver';
export declare type ExactlyMarketProps = DefaultAppTokenDataProps & {
    apr: number;
};
export declare abstract class ExactlyTokenFetcher<V extends ExactlyMarketProps = ExactlyMarketProps> extends AppTokenTemplatePositionFetcher<Market, V, ExactlyMarketDefinition> {
    protected readonly appToolkit: IAppToolkit;
    protected readonly contractFactory: ExactlyContractFactory;
    protected readonly definitionsResolver: ExactlyDefinitionsResolver;
    constructor(appToolkit: IAppToolkit, contractFactory: ExactlyContractFactory, definitionsResolver: ExactlyDefinitionsResolver);
    getDefinitions({ multicall }: GetDefinitionsParams): Promise<ExactlyMarketDefinition[]>;
    getContract(address: string): Market;
    getAddresses({ definitions }: GetAddressesParams<ExactlyMarketDefinition>): string[];
    getUnderlyingTokenDefinitions({ definition }: GetUnderlyingTokensParams<Market, ExactlyMarketDefinition>): Promise<{
        address: string;
        network: import("../../../types").Network;
    }[]>;
    getSymbol({ definition }: GetTokenPropsParams<Market, V, ExactlyMarketDefinition>): Promise<string>;
    getDecimals({ definition }: GetTokenPropsParams<Market, V, ExactlyMarketDefinition>): Promise<number>;
    getLabel({ appToken }: GetDisplayPropsParams<Market, V, ExactlyMarketDefinition>): Promise<string>;
    getLabelDetailed({ appToken }: GetDisplayPropsParams<Market, V, ExactlyMarketDefinition>): Promise<string>;
    getBalanceDisplayMode(): Promise<BalanceDisplayMode>;
    getPricePerShare(params: GetPricePerShareParams<Market, V, ExactlyMarketDefinition>): Promise<number[]>;
    getApy(params: GetDataPropsParams<Market, V, ExactlyMarketDefinition>): Promise<number>;
    getDataProps(params: GetDataPropsParams<Market, V, ExactlyMarketDefinition>): Promise<Awaited<V> & {
        apr: number;
    }>;
    abstract getTotalAssets(_: GetTokenPropsParams<Market, V, ExactlyMarketDefinition>): BigNumber | Promise<BigNumber>;
    getApr(_: GetDataPropsParams<Market, V, ExactlyMarketDefinition>): number | Promise<number>;
}
