import { BigNumber, BigNumberish, Contract } from 'ethers';
import { IAppToolkit } from '../../../app-toolkit/app-toolkit.interface';
import { IMulticallWrapper } from '../../../multicall';
import { BalanceDisplayMode } from '../../../position/display.interface';
import { AppTokenTemplatePositionFetcher } from '../../../position/template/app-token.template.position-fetcher';
import { GetUnderlyingTokensParams, GetPricePerShareParams, GetDataPropsParams, GetDisplayPropsParams, DefaultAppTokenDataProps } from '../../../position/template/app-token.template.types';
import { FusePoolDirectory } from '../contracts/ethers/MidasPoolDirectory';
export declare type MidasMarketTokenDataProps = DefaultAppTokenDataProps & {
    marketName: string;
    comptroller: string;
};
export declare type MidasMarketTokenDefinition = {
    address: string;
    marketName: string;
    comptroller: string;
};
export declare abstract class MidasMarketTokenFetcher<PD extends Contract, CT extends Contract, PL extends Contract> extends AppTokenTemplatePositionFetcher<CT, MidasMarketTokenDataProps, MidasMarketTokenDefinition> {
    protected readonly appToolkit: IAppToolkit;
    abstract poolDirectoryAddress: string;
    abstract poolLensAddress: string;
    abstract getPoolDirectoryContract(address: string): PD;
    abstract getCTokenContract(address: string): CT;
    abstract getPoolLensContract(address: string): PL;
    abstract getPools(contract: PD): Promise<[BigNumber[], FusePoolDirectory.FusePoolStructOutput[]]>;
    abstract getPool(contract: PD, poolId: BigNumberish): Promise<[
        string,
        string,
        string,
        BigNumber,
        BigNumber
    ] & {
        name: string;
        creator: string;
        comptroller: string;
        blockPosted: BigNumber;
        timestampPosted: BigNumber;
    }>;
    abstract getMarketTokenAddresses(contract: PL, poolAddress: string): Promise<string[]>;
    abstract getUnderlyingTokenAddress(contract: CT): Promise<string>;
    abstract getExchangeRateCurrent(contract: CT): Promise<BigNumberish>;
    abstract getSupplyRateRaw(contract: CT): Promise<BigNumberish>;
    constructor(appToolkit: IAppToolkit);
    getContract(address: string): CT;
    getDefinitions(): Promise<{
        address: string;
        comptroller: string;
        marketName: string;
    }[]>;
    getAddresses({ definitions }: {
        multicall: IMulticallWrapper;
        definitions: MidasMarketTokenDefinition[];
    }): Promise<string[]>;
    getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams<CT>): Promise<{
        address: string;
        network: import("../../../types").Network;
    }[]>;
    getPricePerShare({ contract, appToken, }: GetPricePerShareParams<CT, MidasMarketTokenDataProps, MidasMarketTokenDefinition>): Promise<number[]>;
    getLiquidity({ appToken }: GetDataPropsParams<CT>): Promise<number>;
    getReserves({ appToken }: GetDataPropsParams<CT>): Promise<number[]>;
    getApy({ contract }: GetDataPropsParams<CT>): Promise<number>;
    getDataProps(params: GetDataPropsParams<CT, MidasMarketTokenDataProps, MidasMarketTokenDefinition>): Promise<{
        marketName: string;
        comptroller: string;
        liquidity: number;
        reserves: number[];
        apy: number;
        isDebt: boolean;
    }>;
    getLabel({ appToken }: GetDisplayPropsParams<CT, MidasMarketTokenDataProps, MidasMarketTokenDefinition>): Promise<string>;
    getLabelDetailed({ appToken, }: GetDisplayPropsParams<CT, MidasMarketTokenDataProps, MidasMarketTokenDefinition>): Promise<string>;
    getSecondaryLabel({ appToken, }: GetDisplayPropsParams<CT, MidasMarketTokenDataProps, MidasMarketTokenDefinition>): Promise<import("../../../position/display.interface").DollarDisplayItem>;
    getBalanceDisplayMode(): Promise<BalanceDisplayMode>;
}
