import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
import type { FunctionFragment, Result } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from "../../../../../../common";
export interface IBorrowableInterface extends utils.Interface {
    functions: {
        "accrueInterest()": FunctionFragment;
        "borrow(address,address,uint256,bytes)": FunctionFragment;
        "borrowApprove(address,uint256)": FunctionFragment;
        "borrowBalance(address)": FunctionFragment;
        "borrowRate()": FunctionFragment;
        "borrowTracker()": FunctionFragment;
        "exchangeRate()": FunctionFragment;
        "exchangeRateLast()": FunctionFragment;
        "kinkUtilizationRate()": FunctionFragment;
        "totalBalance()": FunctionFragment;
        "totalBorrows()": FunctionFragment;
        "totalSupply()": FunctionFragment;
        "underlying()": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "accrueInterest" | "borrow" | "borrowApprove" | "borrowBalance" | "borrowRate" | "borrowTracker" | "exchangeRate" | "exchangeRateLast" | "kinkUtilizationRate" | "totalBalance" | "totalBorrows" | "totalSupply" | "underlying"): FunctionFragment;
    encodeFunctionData(functionFragment: "accrueInterest", values?: undefined): string;
    encodeFunctionData(functionFragment: "borrow", values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BytesLike>
    ]): string;
    encodeFunctionData(functionFragment: "borrowApprove", values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "borrowBalance", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "borrowRate", values?: undefined): string;
    encodeFunctionData(functionFragment: "borrowTracker", values?: undefined): string;
    encodeFunctionData(functionFragment: "exchangeRate", values?: undefined): string;
    encodeFunctionData(functionFragment: "exchangeRateLast", values?: undefined): string;
    encodeFunctionData(functionFragment: "kinkUtilizationRate", values?: undefined): string;
    encodeFunctionData(functionFragment: "totalBalance", values?: undefined): string;
    encodeFunctionData(functionFragment: "totalBorrows", values?: undefined): string;
    encodeFunctionData(functionFragment: "totalSupply", values?: undefined): string;
    encodeFunctionData(functionFragment: "underlying", values?: undefined): string;
    decodeFunctionResult(functionFragment: "accrueInterest", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "borrow", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "borrowApprove", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "borrowBalance", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "borrowRate", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "borrowTracker", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "exchangeRate", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "exchangeRateLast", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "kinkUtilizationRate", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "totalBalance", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "totalBorrows", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "totalSupply", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "underlying", data: BytesLike): Result;
    events: {};
}
export interface IBorrowable extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: IBorrowableInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        accrueInterest(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        borrow(borrower: PromiseOrValue<string>, receiver: PromiseOrValue<string>, borrowAmount: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        borrowApprove(spender: PromiseOrValue<string>, value: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        borrowBalance(borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        borrowRate(overrides?: CallOverrides): Promise<[BigNumber]>;
        borrowTracker(overrides?: CallOverrides): Promise<[string]>;
        exchangeRate(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        exchangeRateLast(overrides?: CallOverrides): Promise<[BigNumber]>;
        kinkUtilizationRate(overrides?: CallOverrides): Promise<[BigNumber]>;
        totalBalance(overrides?: CallOverrides): Promise<[BigNumber]>;
        totalBorrows(overrides?: CallOverrides): Promise<[BigNumber]>;
        totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
        underlying(overrides?: CallOverrides): Promise<[string]>;
    };
    accrueInterest(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    borrow(borrower: PromiseOrValue<string>, receiver: PromiseOrValue<string>, borrowAmount: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    borrowApprove(spender: PromiseOrValue<string>, value: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    borrowBalance(borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    borrowRate(overrides?: CallOverrides): Promise<BigNumber>;
    borrowTracker(overrides?: CallOverrides): Promise<string>;
    exchangeRate(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    exchangeRateLast(overrides?: CallOverrides): Promise<BigNumber>;
    kinkUtilizationRate(overrides?: CallOverrides): Promise<BigNumber>;
    totalBalance(overrides?: CallOverrides): Promise<BigNumber>;
    totalBorrows(overrides?: CallOverrides): Promise<BigNumber>;
    totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
    underlying(overrides?: CallOverrides): Promise<string>;
    callStatic: {
        accrueInterest(overrides?: CallOverrides): Promise<void>;
        borrow(borrower: PromiseOrValue<string>, receiver: PromiseOrValue<string>, borrowAmount: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<void>;
        borrowApprove(spender: PromiseOrValue<string>, value: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<boolean>;
        borrowBalance(borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        borrowRate(overrides?: CallOverrides): Promise<BigNumber>;
        borrowTracker(overrides?: CallOverrides): Promise<string>;
        exchangeRate(overrides?: CallOverrides): Promise<BigNumber>;
        exchangeRateLast(overrides?: CallOverrides): Promise<BigNumber>;
        kinkUtilizationRate(overrides?: CallOverrides): Promise<BigNumber>;
        totalBalance(overrides?: CallOverrides): Promise<BigNumber>;
        totalBorrows(overrides?: CallOverrides): Promise<BigNumber>;
        totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        underlying(overrides?: CallOverrides): Promise<string>;
    };
    filters: {};
    estimateGas: {
        accrueInterest(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        borrow(borrower: PromiseOrValue<string>, receiver: PromiseOrValue<string>, borrowAmount: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        borrowApprove(spender: PromiseOrValue<string>, value: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        borrowBalance(borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        borrowRate(overrides?: CallOverrides): Promise<BigNumber>;
        borrowTracker(overrides?: CallOverrides): Promise<BigNumber>;
        exchangeRate(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        exchangeRateLast(overrides?: CallOverrides): Promise<BigNumber>;
        kinkUtilizationRate(overrides?: CallOverrides): Promise<BigNumber>;
        totalBalance(overrides?: CallOverrides): Promise<BigNumber>;
        totalBorrows(overrides?: CallOverrides): Promise<BigNumber>;
        totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
        underlying(overrides?: CallOverrides): Promise<BigNumber>;
    };
    populateTransaction: {
        accrueInterest(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        borrow(borrower: PromiseOrValue<string>, receiver: PromiseOrValue<string>, borrowAmount: PromiseOrValue<BigNumberish>, data: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        borrowApprove(spender: PromiseOrValue<string>, value: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        borrowBalance(borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        borrowRate(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        borrowTracker(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        exchangeRate(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        exchangeRateLast(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        kinkUtilizationRate(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        totalBalance(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        totalBorrows(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        underlying(overrides?: CallOverrides): Promise<PopulatedTransaction>;
    };
}
