import { BigNumberish, Contract } from 'ethers';
import { DisplayProps } from '../../../position/display.interface';
import { ContractPositionTemplatePositionFetcher } from '../../../position/template/contract-position.template.position-fetcher';
import { DefaultContractPositionDefinition, GetDataPropsParams, GetDefinitionsParams, GetDisplayPropsParams, GetTokenBalancesParams, GetTokenDefinitionsParams, UnderlyingTokenDefinition } from '../../../position/template/contract-position.template.types';
export declare type CompoundBorrowTokenDataProps = {
    apy: number;
    liquidity: number;
    isActive: boolean;
};
export declare type GetMarketsParams<S> = GetDefinitionsParams & {
    contract: S;
};
export declare abstract class CompoundBorrowContractPositionFetcher<R extends Contract, S extends Contract> extends ContractPositionTemplatePositionFetcher<R, CompoundBorrowTokenDataProps> {
    abstract comptrollerAddress: string;
    abstract getCompoundCTokenContract(address: string): R;
    abstract getCompoundComptrollerContract(address: string): S;
    abstract getMarkets(params: GetMarketsParams<S>): Promise<string[]>;
    abstract getUnderlyingAddress(params: GetTokenDefinitionsParams<R>): Promise<string>;
    abstract getExchangeRate(params: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<BigNumberish>;
    abstract getBorrowRate(params: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<BigNumberish>;
    abstract getCash(params: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<BigNumberish>;
    abstract getCTokenSupply(params: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<BigNumberish>;
    abstract getCTokenDecimals(params: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<number>;
    abstract getBorrowBalance(params: GetTokenBalancesParams<R, CompoundBorrowTokenDataProps>): Promise<BigNumberish>;
    getContract(address: string): R;
    getDefinitions(params: GetDefinitionsParams): Promise<DefaultContractPositionDefinition[]>;
    getTokenDefinitions(params: GetTokenDefinitionsParams<R>): Promise<UnderlyingTokenDefinition[] | null>;
    getLabel({ contractPosition, }: GetDisplayPropsParams<R, CompoundBorrowTokenDataProps>): Promise<DisplayProps['label']>;
    getSecondaryLabel({ contractPosition, }: GetDisplayPropsParams<R, CompoundBorrowTokenDataProps>): Promise<DisplayProps['secondaryLabel']>;
    getDenormalizedRate({ blocksPerDay, rate }: {
        rate: BigNumberish;
        blocksPerDay: number;
        decimals: number;
    }): number;
    getApy(params: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<number>;
    getExchangeRateMantissa({ contractPosition }: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<number>;
    getPricePerShare(params: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<number>;
    getDataProps(params: GetDataPropsParams<R, CompoundBorrowTokenDataProps>): Promise<CompoundBorrowTokenDataProps>;
    getTokenBalancesPerPosition(params: GetTokenBalancesParams<R, CompoundBorrowTokenDataProps>): Promise<BigNumberish[]>;
}
