import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, AddressLike, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedListener, TypedContractMethod } from "../../common";
export declare namespace CompoundLens {
    type CTokenBalancesStruct = {
        cToken: AddressLike;
        isCToken: boolean;
        isCEther: boolean;
        balanceOf: BigNumberish;
        borrowBalanceCurrent: BigNumberish;
        balanceOfUnderlying: BigNumberish;
        tokenBalance: BigNumberish;
        tokenAllowance: BigNumberish;
    };
    type CTokenBalancesStructOutput = [
        cToken: string,
        isCToken: boolean,
        isCEther: boolean,
        balanceOf: bigint,
        borrowBalanceCurrent: bigint,
        balanceOfUnderlying: bigint,
        tokenBalance: bigint,
        tokenAllowance: bigint
    ] & {
        cToken: string;
        isCToken: boolean;
        isCEther: boolean;
        balanceOf: bigint;
        borrowBalanceCurrent: bigint;
        balanceOfUnderlying: bigint;
        tokenBalance: bigint;
        tokenAllowance: bigint;
    };
    type CTokenMetadataStruct = {
        cToken: AddressLike;
        exchangeRateCurrent: BigNumberish;
        supplyRatePerBlock: BigNumberish;
        borrowRatePerBlock: BigNumberish;
        reserveFactorMantissa: BigNumberish;
        totalBorrows: BigNumberish;
        totalReserves: BigNumberish;
        totalSupply: BigNumberish;
        totalCash: BigNumberish;
        isListed: boolean;
        underlyingAssetAddress: AddressLike;
        cTokenDecimals: BigNumberish;
        underlyingDecimals: BigNumberish;
        isCToken: boolean;
        isCEther: boolean;
        borrowCap: BigNumberish;
        depositCap: BigNumberish;
        heteroLiquidationIncentive: BigNumberish;
        homoLiquidationIncentive: BigNumberish;
        sutokenLiquidationIncentive: BigNumberish;
        groupId: BigNumberish;
        intraRate: BigNumberish;
        mintRate: BigNumberish;
        interRate: BigNumberish;
        discountRate: BigNumberish;
        interMintAllowed: boolean;
    };
    type CTokenMetadataStructOutput = [
        cToken: string,
        exchangeRateCurrent: bigint,
        supplyRatePerBlock: bigint,
        borrowRatePerBlock: bigint,
        reserveFactorMantissa: bigint,
        totalBorrows: bigint,
        totalReserves: bigint,
        totalSupply: bigint,
        totalCash: bigint,
        isListed: boolean,
        underlyingAssetAddress: string,
        cTokenDecimals: bigint,
        underlyingDecimals: bigint,
        isCToken: boolean,
        isCEther: boolean,
        borrowCap: bigint,
        depositCap: bigint,
        heteroLiquidationIncentive: bigint,
        homoLiquidationIncentive: bigint,
        sutokenLiquidationIncentive: bigint,
        groupId: bigint,
        intraRate: bigint,
        mintRate: bigint,
        interRate: bigint,
        discountRate: bigint,
        interMintAllowed: boolean
    ] & {
        cToken: string;
        exchangeRateCurrent: bigint;
        supplyRatePerBlock: bigint;
        borrowRatePerBlock: bigint;
        reserveFactorMantissa: bigint;
        totalBorrows: bigint;
        totalReserves: bigint;
        totalSupply: bigint;
        totalCash: bigint;
        isListed: boolean;
        underlyingAssetAddress: string;
        cTokenDecimals: bigint;
        underlyingDecimals: bigint;
        isCToken: boolean;
        isCEther: boolean;
        borrowCap: bigint;
        depositCap: bigint;
        heteroLiquidationIncentive: bigint;
        homoLiquidationIncentive: bigint;
        sutokenLiquidationIncentive: bigint;
        groupId: bigint;
        intraRate: bigint;
        mintRate: bigint;
        interRate: bigint;
        discountRate: bigint;
        interMintAllowed: boolean;
    };
    type CTokenUnderlyingPriceStruct = {
        cToken: AddressLike;
        underlyingPrice: BigNumberish;
    };
    type CTokenUnderlyingPriceStructOutput = [
        cToken: string,
        underlyingPrice: bigint
    ] & {
        cToken: string;
        underlyingPrice: bigint;
    };
    type AccountLimitsStruct = {
        markets: AddressLike[];
        liquidity: BigNumberish;
        shortfall: BigNumberish;
    };
    type AccountLimitsStructOutput = [
        markets: string[],
        liquidity: bigint,
        shortfall: bigint
    ] & {
        markets: string[];
        liquidity: bigint;
        shortfall: bigint;
    };
    type CompBalanceMetadataStruct = {
        balance: BigNumberish;
        votes: BigNumberish;
        delegate: AddressLike;
    };
    type CompBalanceMetadataStructOutput = [
        balance: bigint,
        votes: bigint,
        delegate: string
    ] & {
        balance: bigint;
        votes: bigint;
        delegate: string;
    };
    type CompBalanceMetadataExtStruct = {
        balance: BigNumberish;
        votes: BigNumberish;
        delegate: AddressLike;
        allocated: BigNumberish;
    };
    type CompBalanceMetadataExtStructOutput = [
        balance: bigint,
        votes: bigint,
        delegate: string,
        allocated: bigint
    ] & {
        balance: bigint;
        votes: bigint;
        delegate: string;
        allocated: bigint;
    };
    type CompVotesStruct = {
        blockNumber: BigNumberish;
        votes: BigNumberish;
    };
    type CompVotesStructOutput = [blockNumber: bigint, votes: bigint] & {
        blockNumber: bigint;
        votes: bigint;
    };
    type GovBravoProposalStruct = {
        proposalId: BigNumberish;
        proposer: AddressLike;
        eta: BigNumberish;
        targets: AddressLike[];
        values: BigNumberish[];
        signatures: string[];
        calldatas: BytesLike[];
        startBlock: BigNumberish;
        endBlock: BigNumberish;
        forVotes: BigNumberish;
        againstVotes: BigNumberish;
        abstainVotes: BigNumberish;
        canceled: boolean;
        executed: boolean;
    };
    type GovBravoProposalStructOutput = [
        proposalId: bigint,
        proposer: string,
        eta: bigint,
        targets: string[],
        values: bigint[],
        signatures: string[],
        calldatas: string[],
        startBlock: bigint,
        endBlock: bigint,
        forVotes: bigint,
        againstVotes: bigint,
        abstainVotes: bigint,
        canceled: boolean,
        executed: boolean
    ] & {
        proposalId: bigint;
        proposer: string;
        eta: bigint;
        targets: string[];
        values: bigint[];
        signatures: string[];
        calldatas: string[];
        startBlock: bigint;
        endBlock: bigint;
        forVotes: bigint;
        againstVotes: bigint;
        abstainVotes: bigint;
        canceled: boolean;
        executed: boolean;
    };
    type GovBravoReceiptStruct = {
        proposalId: BigNumberish;
        hasVoted: boolean;
        support: BigNumberish;
        votes: BigNumberish;
    };
    type GovBravoReceiptStructOutput = [
        proposalId: bigint,
        hasVoted: boolean,
        support: bigint,
        votes: bigint
    ] & {
        proposalId: bigint;
        hasVoted: boolean;
        support: bigint;
        votes: bigint;
    };
    type GovProposalStruct = {
        proposalId: BigNumberish;
        proposer: AddressLike;
        eta: BigNumberish;
        targets: AddressLike[];
        values: BigNumberish[];
        signatures: string[];
        calldatas: BytesLike[];
        startBlock: BigNumberish;
        endBlock: BigNumberish;
        forVotes: BigNumberish;
        againstVotes: BigNumberish;
        canceled: boolean;
        executed: boolean;
    };
    type GovProposalStructOutput = [
        proposalId: bigint,
        proposer: string,
        eta: bigint,
        targets: string[],
        values: bigint[],
        signatures: string[],
        calldatas: string[],
        startBlock: bigint,
        endBlock: bigint,
        forVotes: bigint,
        againstVotes: bigint,
        canceled: boolean,
        executed: boolean
    ] & {
        proposalId: bigint;
        proposer: string;
        eta: bigint;
        targets: string[];
        values: bigint[];
        signatures: string[];
        calldatas: string[];
        startBlock: bigint;
        endBlock: bigint;
        forVotes: bigint;
        againstVotes: bigint;
        canceled: boolean;
        executed: boolean;
    };
    type GovReceiptStruct = {
        proposalId: BigNumberish;
        hasVoted: boolean;
        support: boolean;
        votes: BigNumberish;
    };
    type GovReceiptStructOutput = [
        proposalId: bigint,
        hasVoted: boolean,
        support: boolean,
        votes: bigint
    ] & {
        proposalId: bigint;
        hasVoted: boolean;
        support: boolean;
        votes: bigint;
    };
}
export interface CompoundLensInterface extends Interface {
    getFunction(nameOrSignature: "cTokenBalances" | "cTokenBalancesAll" | "cTokenMetadata" | "cTokenMetadataAll" | "cTokenUnderlyingPrice" | "cTokenUnderlyingPriceAll" | "calcBorrowAmountForProtectedMint" | "getAccountLimits" | "getCollateralRate" | "getCompBalanceMetadata" | "getCompBalanceMetadataExt" | "getCompVotes" | "getGovBravoProposals" | "getGovBravoReceipts" | "getGovProposals" | "getGovReceipts" | "percentScale" | "version"): FunctionFragment;
    encodeFunctionData(functionFragment: "cTokenBalances", values: [AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "cTokenBalancesAll", values: [AddressLike[], AddressLike]): string;
    encodeFunctionData(functionFragment: "cTokenMetadata", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "cTokenMetadataAll", values: [AddressLike[]]): string;
    encodeFunctionData(functionFragment: "cTokenUnderlyingPrice", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "cTokenUnderlyingPriceAll", values: [AddressLike[]]): string;
    encodeFunctionData(functionFragment: "calcBorrowAmountForProtectedMint", values: [AddressLike, AddressLike, AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "getAccountLimits", values: [AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "getCollateralRate", values: [AddressLike, AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "getCompBalanceMetadata", values: [AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "getCompBalanceMetadataExt", values: [AddressLike, AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "getCompVotes", values: [AddressLike, AddressLike, BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "getGovBravoProposals", values: [AddressLike, BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "getGovBravoReceipts", values: [AddressLike, AddressLike, BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "getGovProposals", values: [AddressLike, BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "getGovReceipts", values: [AddressLike, AddressLike, BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "percentScale", values?: undefined): string;
    encodeFunctionData(functionFragment: "version", values?: undefined): string;
    decodeFunctionResult(functionFragment: "cTokenBalances", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "cTokenBalancesAll", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "cTokenMetadata", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "cTokenMetadataAll", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "cTokenUnderlyingPrice", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "cTokenUnderlyingPriceAll", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "calcBorrowAmountForProtectedMint", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getAccountLimits", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getCollateralRate", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getCompBalanceMetadata", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getCompBalanceMetadataExt", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getCompVotes", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getGovBravoProposals", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getGovBravoReceipts", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getGovProposals", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getGovReceipts", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "percentScale", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "version", data: BytesLike): Result;
}
export interface CompoundLens extends BaseContract {
    connect(runner?: ContractRunner | null): CompoundLens;
    waitForDeployment(): Promise<this>;
    interface: CompoundLensInterface;
    queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
    listeners(eventName?: string): Promise<Array<Listener>>;
    removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
    cTokenBalances: TypedContractMethod<[
        cToken: AddressLike,
        account: AddressLike
    ], [
        CompoundLens.CTokenBalancesStructOutput
    ], "nonpayable">;
    cTokenBalancesAll: TypedContractMethod<[
        cTokens: AddressLike[],
        account: AddressLike
    ], [
        CompoundLens.CTokenBalancesStructOutput[]
    ], "nonpayable">;
    cTokenMetadata: TypedContractMethod<[
        cToken: AddressLike
    ], [
        CompoundLens.CTokenMetadataStructOutput
    ], "nonpayable">;
    cTokenMetadataAll: TypedContractMethod<[
        cTokens: AddressLike[]
    ], [
        CompoundLens.CTokenMetadataStructOutput[]
    ], "nonpayable">;
    cTokenUnderlyingPrice: TypedContractMethod<[
        cToken: AddressLike
    ], [
        CompoundLens.CTokenUnderlyingPriceStructOutput
    ], "view">;
    cTokenUnderlyingPriceAll: TypedContractMethod<[
        cTokens: AddressLike[]
    ], [
        CompoundLens.CTokenUnderlyingPriceStructOutput[]
    ], "view">;
    calcBorrowAmountForProtectedMint: TypedContractMethod<[
        account: AddressLike,
        cTokenCollateral: AddressLike,
        suToken: AddressLike,
        suBorrowAmount: BigNumberish
    ], [
        [bigint, bigint]
    ], "view">;
    getAccountLimits: TypedContractMethod<[
        comptroller: AddressLike,
        account: AddressLike
    ], [
        CompoundLens.AccountLimitsStructOutput
    ], "view">;
    getCollateralRate: TypedContractMethod<[
        comptroller: AddressLike,
        collateralToken: AddressLike,
        liabilityToken: AddressLike
    ], [
        bigint
    ], "view">;
    getCompBalanceMetadata: TypedContractMethod<[
        comp: AddressLike,
        account: AddressLike
    ], [
        CompoundLens.CompBalanceMetadataStructOutput
    ], "view">;
    getCompBalanceMetadataExt: TypedContractMethod<[
        comp: AddressLike,
        comptroller: AddressLike,
        account: AddressLike
    ], [
        CompoundLens.CompBalanceMetadataExtStructOutput
    ], "nonpayable">;
    getCompVotes: TypedContractMethod<[
        comp: AddressLike,
        account: AddressLike,
        blockNumbers: BigNumberish[]
    ], [
        CompoundLens.CompVotesStructOutput[]
    ], "view">;
    getGovBravoProposals: TypedContractMethod<[
        governor: AddressLike,
        proposalIds: BigNumberish[]
    ], [
        CompoundLens.GovBravoProposalStructOutput[]
    ], "view">;
    getGovBravoReceipts: TypedContractMethod<[
        governor: AddressLike,
        voter: AddressLike,
        proposalIds: BigNumberish[]
    ], [
        CompoundLens.GovBravoReceiptStructOutput[]
    ], "view">;
    getGovProposals: TypedContractMethod<[
        governor: AddressLike,
        proposalIds: BigNumberish[]
    ], [
        CompoundLens.GovProposalStructOutput[]
    ], "view">;
    getGovReceipts: TypedContractMethod<[
        governor: AddressLike,
        voter: AddressLike,
        proposalIds: BigNumberish[]
    ], [
        CompoundLens.GovReceiptStructOutput[]
    ], "view">;
    percentScale: TypedContractMethod<[], [bigint], "view">;
    version: TypedContractMethod<[], [bigint], "view">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "cTokenBalances"): TypedContractMethod<[
        cToken: AddressLike,
        account: AddressLike
    ], [
        CompoundLens.CTokenBalancesStructOutput
    ], "nonpayable">;
    getFunction(nameOrSignature: "cTokenBalancesAll"): TypedContractMethod<[
        cTokens: AddressLike[],
        account: AddressLike
    ], [
        CompoundLens.CTokenBalancesStructOutput[]
    ], "nonpayable">;
    getFunction(nameOrSignature: "cTokenMetadata"): TypedContractMethod<[
        cToken: AddressLike
    ], [
        CompoundLens.CTokenMetadataStructOutput
    ], "nonpayable">;
    getFunction(nameOrSignature: "cTokenMetadataAll"): TypedContractMethod<[
        cTokens: AddressLike[]
    ], [
        CompoundLens.CTokenMetadataStructOutput[]
    ], "nonpayable">;
    getFunction(nameOrSignature: "cTokenUnderlyingPrice"): TypedContractMethod<[
        cToken: AddressLike
    ], [
        CompoundLens.CTokenUnderlyingPriceStructOutput
    ], "view">;
    getFunction(nameOrSignature: "cTokenUnderlyingPriceAll"): TypedContractMethod<[
        cTokens: AddressLike[]
    ], [
        CompoundLens.CTokenUnderlyingPriceStructOutput[]
    ], "view">;
    getFunction(nameOrSignature: "calcBorrowAmountForProtectedMint"): TypedContractMethod<[
        account: AddressLike,
        cTokenCollateral: AddressLike,
        suToken: AddressLike,
        suBorrowAmount: BigNumberish
    ], [
        [bigint, bigint]
    ], "view">;
    getFunction(nameOrSignature: "getAccountLimits"): TypedContractMethod<[
        comptroller: AddressLike,
        account: AddressLike
    ], [
        CompoundLens.AccountLimitsStructOutput
    ], "view">;
    getFunction(nameOrSignature: "getCollateralRate"): TypedContractMethod<[
        comptroller: AddressLike,
        collateralToken: AddressLike,
        liabilityToken: AddressLike
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "getCompBalanceMetadata"): TypedContractMethod<[
        comp: AddressLike,
        account: AddressLike
    ], [
        CompoundLens.CompBalanceMetadataStructOutput
    ], "view">;
    getFunction(nameOrSignature: "getCompBalanceMetadataExt"): TypedContractMethod<[
        comp: AddressLike,
        comptroller: AddressLike,
        account: AddressLike
    ], [
        CompoundLens.CompBalanceMetadataExtStructOutput
    ], "nonpayable">;
    getFunction(nameOrSignature: "getCompVotes"): TypedContractMethod<[
        comp: AddressLike,
        account: AddressLike,
        blockNumbers: BigNumberish[]
    ], [
        CompoundLens.CompVotesStructOutput[]
    ], "view">;
    getFunction(nameOrSignature: "getGovBravoProposals"): TypedContractMethod<[
        governor: AddressLike,
        proposalIds: BigNumberish[]
    ], [
        CompoundLens.GovBravoProposalStructOutput[]
    ], "view">;
    getFunction(nameOrSignature: "getGovBravoReceipts"): TypedContractMethod<[
        governor: AddressLike,
        voter: AddressLike,
        proposalIds: BigNumberish[]
    ], [
        CompoundLens.GovBravoReceiptStructOutput[]
    ], "view">;
    getFunction(nameOrSignature: "getGovProposals"): TypedContractMethod<[
        governor: AddressLike,
        proposalIds: BigNumberish[]
    ], [
        CompoundLens.GovProposalStructOutput[]
    ], "view">;
    getFunction(nameOrSignature: "getGovReceipts"): TypedContractMethod<[
        governor: AddressLike,
        voter: AddressLike,
        proposalIds: BigNumberish[]
    ], [
        CompoundLens.GovReceiptStructOutput[]
    ], "view">;
    getFunction(nameOrSignature: "percentScale"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "version"): TypedContractMethod<[], [bigint], "view">;
    filters: {};
}
