import { BigNumberish, Contract } from 'ethers';
import { DisplayProps, StatsItem } from '../../../position/display.interface';
import { AppTokenTemplatePositionFetcher } from '../../../position/template/app-token.template.position-fetcher';
import { DefaultAppTokenDataProps, GetAddressesParams, GetDataPropsParams, GetDisplayPropsParams, GetPricePerShareParams, GetUnderlyingTokensParams } from '../../../position/template/app-token.template.types';
export declare type GetMarketsParams<S> = GetAddressesParams & {
    contract: S;
};
export declare type CompoundSupplyTokenDataProps = DefaultAppTokenDataProps & {
    exchangeRate: number;
};
export declare abstract class CompoundSupplyTokenFetcher<R extends Contract, S extends Contract> extends AppTokenTemplatePositionFetcher<R> {
    protected isExchangeable: boolean;
    abstract comptrollerAddress: string;
    abstract getCompoundCTokenContract(address: string): R;
    abstract getCompoundComptrollerContract(address: string): S;
    abstract getMarkets(params: GetMarketsParams<S>): Promise<string[]>;
    abstract getUnderlyingAddress(params: GetUnderlyingTokensParams<R>): Promise<string>;
    abstract getExchangeRate(params: GetPricePerShareParams<R, CompoundSupplyTokenDataProps>): Promise<BigNumberish>;
    abstract getSupplyRate(params: GetDataPropsParams<R, CompoundSupplyTokenDataProps>): Promise<BigNumberish>;
    getContract(address: string): R;
    getAddresses(params: GetAddressesParams): Promise<string[]>;
    getUnderlyingTokenDefinitions(params: GetUnderlyingTokensParams<R>): Promise<{
        address: string;
        network: import("../../../types").Network;
    }[]>;
    getExchangeRateMantissa(params: GetPricePerShareParams<R, CompoundSupplyTokenDataProps>): Promise<number>;
    getPricePerShare(params: GetPricePerShareParams<R, CompoundSupplyTokenDataProps>): Promise<number[]>;
    getLabel({ appToken }: GetDisplayPropsParams<R, CompoundSupplyTokenDataProps>): Promise<DisplayProps['label']>;
    getLabelDetailed({ appToken, }: GetDisplayPropsParams<R, CompoundSupplyTokenDataProps>): Promise<DisplayProps['labelDetailed']>;
    getBalanceDisplayMode(_params: GetDisplayPropsParams<R>): Promise<DisplayProps['balanceDisplayMode']>;
    getLiquidity({ appToken }: GetDataPropsParams<R, CompoundSupplyTokenDataProps>): Promise<number>;
    getReserves({ appToken }: GetDataPropsParams<R, CompoundSupplyTokenDataProps>): Promise<number[]>;
    getApy(params: GetDataPropsParams<R, CompoundSupplyTokenDataProps>): Promise<number>;
    getDataProps(params: GetDataPropsParams<R, CompoundSupplyTokenDataProps>): Promise<CompoundSupplyTokenDataProps>;
    getStatsItems({ appToken, }: GetDisplayPropsParams<R, CompoundSupplyTokenDataProps>): Promise<StatsItem[] | undefined>;
}
