/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
  BaseContract,
  BigNumberish,
  BytesLike,
  FunctionFragment,
  Result,
  Interface,
  EventFragment,
  AddressLike,
  ContractRunner,
  ContractMethod,
  Listener,
} from "ethers";
import type {
  TypedContractEvent,
  TypedDeferredTopicFilter,
  TypedEventLog,
  TypedLogDescription,
  TypedListener,
  TypedContractMethod,
} from "./common";

export declare namespace IVault {
  export type RateInfoStruct = {
    rate: BigNumberish;
    accumulatedRate: BigNumberish;
    lastUpdateTime: BigNumberish;
  };

  export type RateInfoStructOutput = [
    rate: bigint,
    accumulatedRate: bigint,
    lastUpdateTime: bigint
  ] & { rate: bigint; accumulatedRate: bigint; lastUpdateTime: bigint };
}

export interface VaultInterface extends Interface {
  getFunction(
    nameOrSignature:
      | "CURRENCY_TOKEN"
      | "baseRateInfo"
      | "burnCurrency"
      | "cancelOwnershipHandover"
      | "collateralMapping"
      | "completeOwnershipHandover"
      | "createCollateralType"
      | "debt"
      | "debtCeiling"
      | "deny"
      | "depositCollateral"
      | "feedModule"
      | "liquidate"
      | "mintCurrency"
      | "owner"
      | "ownershipHandoverExpiresAt"
      | "paidFees"
      | "pause"
      | "rateModule"
      | "recoverToken"
      | "rely"
      | "relyMapping"
      | "renounceOwnership"
      | "requestOwnershipHandover"
      | "stabilityModule"
      | "status"
      | "transferOwnership"
      | "unpause"
      | "updateBaseRate"
      | "updateCollateralData"
      | "updateDebtCeiling"
      | "updateFeedModule"
      | "updatePrice"
      | "updateRateModule"
      | "updateStabilityModule"
      | "vaultMapping"
      | "withdrawCollateral"
      | "withdrawFees"
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic:
      | "CollateralDeposited"
      | "CollateralTypeAdded"
      | "CollateralWithdrawn"
      | "CurrencyBurned"
      | "CurrencyMinted"
      | "FeesPaid"
      | "Liquidated"
      | "OwnershipHandoverCanceled"
      | "OwnershipHandoverRequested"
      | "OwnershipTransferred"
  ): EventFragment;

  encodeFunctionData(
    functionFragment: "CURRENCY_TOKEN",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "baseRateInfo",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "burnCurrency",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "cancelOwnershipHandover",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "collateralMapping",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "completeOwnershipHandover",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "createCollateralType",
    values: [
      AddressLike,
      BigNumberish,
      BigNumberish,
      BigNumberish,
      BigNumberish,
      BigNumberish
    ]
  ): string;
  encodeFunctionData(functionFragment: "debt", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "debtCeiling",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "deny", values: [AddressLike]): string;
  encodeFunctionData(
    functionFragment: "depositCollateral",
    values: [AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "feedModule",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "liquidate",
    values: [AddressLike, AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "mintCurrency",
    values: [AddressLike, AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "owner", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "ownershipHandoverExpiresAt",
    values: [AddressLike]
  ): string;
  encodeFunctionData(functionFragment: "paidFees", values?: undefined): string;
  encodeFunctionData(functionFragment: "pause", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "rateModule",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "recoverToken",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(functionFragment: "rely", values: [AddressLike]): string;
  encodeFunctionData(
    functionFragment: "relyMapping",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "renounceOwnership",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "requestOwnershipHandover",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "stabilityModule",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "status", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "transferOwnership",
    values: [AddressLike]
  ): string;
  encodeFunctionData(functionFragment: "unpause", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "updateBaseRate",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "updateCollateralData",
    values: [AddressLike, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "updateDebtCeiling",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "updateFeedModule",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "updatePrice",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "updateRateModule",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "updateStabilityModule",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "vaultMapping",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "withdrawCollateral",
    values: [AddressLike, AddressLike, AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "withdrawFees",
    values?: undefined
  ): string;

  decodeFunctionResult(
    functionFragment: "CURRENCY_TOKEN",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "baseRateInfo",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "burnCurrency",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "cancelOwnershipHandover",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "collateralMapping",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "completeOwnershipHandover",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "createCollateralType",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "debt", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "debtCeiling",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "deny", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "depositCollateral",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "feedModule", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "liquidate", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "mintCurrency",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "ownershipHandoverExpiresAt",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "paidFees", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "rateModule", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "recoverToken",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "rely", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "relyMapping",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "renounceOwnership",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "requestOwnershipHandover",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "stabilityModule",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "status", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "transferOwnership",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "updateBaseRate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "updateCollateralData",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "updateDebtCeiling",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "updateFeedModule",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "updatePrice",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "updateRateModule",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "updateStabilityModule",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "vaultMapping",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "withdrawCollateral",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "withdrawFees",
    data: BytesLike
  ): Result;
}

export namespace CollateralDepositedEvent {
  export type InputTuple = [owner: AddressLike, amount: BigNumberish];
  export type OutputTuple = [owner: string, amount: bigint];
  export interface OutputObject {
    owner: string;
    amount: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace CollateralTypeAddedEvent {
  export type InputTuple = [collateralAddress: AddressLike];
  export type OutputTuple = [collateralAddress: string];
  export interface OutputObject {
    collateralAddress: string;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace CollateralWithdrawnEvent {
  export type InputTuple = [
    owner: AddressLike,
    to: AddressLike,
    amount: BigNumberish
  ];
  export type OutputTuple = [owner: string, to: string, amount: bigint];
  export interface OutputObject {
    owner: string;
    to: string;
    amount: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace CurrencyBurnedEvent {
  export type InputTuple = [owner: AddressLike, amount: BigNumberish];
  export type OutputTuple = [owner: string, amount: bigint];
  export interface OutputObject {
    owner: string;
    amount: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace CurrencyMintedEvent {
  export type InputTuple = [owner: AddressLike, amount: BigNumberish];
  export type OutputTuple = [owner: string, amount: bigint];
  export interface OutputObject {
    owner: string;
    amount: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace FeesPaidEvent {
  export type InputTuple = [owner: AddressLike, amount: BigNumberish];
  export type OutputTuple = [owner: string, amount: bigint];
  export interface OutputObject {
    owner: string;
    amount: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace LiquidatedEvent {
  export type InputTuple = [
    owner: AddressLike,
    liquidator: AddressLike,
    currencyAmountPaid: BigNumberish,
    collateralAmountCovered: BigNumberish
  ];
  export type OutputTuple = [
    owner: string,
    liquidator: string,
    currencyAmountPaid: bigint,
    collateralAmountCovered: bigint
  ];
  export interface OutputObject {
    owner: string;
    liquidator: string;
    currencyAmountPaid: bigint;
    collateralAmountCovered: bigint;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace OwnershipHandoverCanceledEvent {
  export type InputTuple = [pendingOwner: AddressLike];
  export type OutputTuple = [pendingOwner: string];
  export interface OutputObject {
    pendingOwner: string;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace OwnershipHandoverRequestedEvent {
  export type InputTuple = [pendingOwner: AddressLike];
  export type OutputTuple = [pendingOwner: string];
  export interface OutputObject {
    pendingOwner: string;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export namespace OwnershipTransferredEvent {
  export type InputTuple = [oldOwner: AddressLike, newOwner: AddressLike];
  export type OutputTuple = [oldOwner: string, newOwner: string];
  export interface OutputObject {
    oldOwner: string;
    newOwner: string;
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
  export type Filter = TypedDeferredTopicFilter<Event>;
  export type Log = TypedEventLog<Event>;
  export type LogDescription = TypedLogDescription<Event>;
}

export interface Vault extends BaseContract {
  connect(runner?: ContractRunner | null): Vault;
  waitForDeployment(): Promise<this>;

  interface: VaultInterface;

  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>;

  CURRENCY_TOKEN: TypedContractMethod<[], [string], "view">;

  baseRateInfo: TypedContractMethod<
    [],
    [
      [bigint, bigint, bigint] & {
        rate: bigint;
        accumulatedRate: bigint;
        lastUpdateTime: bigint;
      }
    ],
    "view"
  >;

  burnCurrency: TypedContractMethod<
    [_collateralToken: AddressLike, _owner: AddressLike, _amount: BigNumberish],
    [void],
    "nonpayable"
  >;

  cancelOwnershipHandover: TypedContractMethod<[], [void], "payable">;

  collateralMapping: TypedContractMethod<
    [arg0: AddressLike],
    [
      [
        bigint,
        bigint,
        bigint,
        bigint,
        IVault.RateInfoStructOutput,
        bigint,
        bigint,
        bigint,
        bigint
      ] & {
        totalDepositedCollateral: bigint;
        totalBorrowedAmount: bigint;
        liquidationThreshold: bigint;
        liquidationBonus: bigint;
        rateInfo: IVault.RateInfoStructOutput;
        price: bigint;
        debtCeiling: bigint;
        collateralFloorPerPosition: bigint;
        additionalCollateralPrecision: bigint;
      }
    ],
    "view"
  >;

  completeOwnershipHandover: TypedContractMethod<
    [pendingOwner: AddressLike],
    [void],
    "payable"
  >;

  createCollateralType: TypedContractMethod<
    [
      _collateralToken: AddressLike,
      _rate: BigNumberish,
      _liquidationThreshold: BigNumberish,
      _liquidationBonus: BigNumberish,
      _debtCeiling: BigNumberish,
      _collateralFloorPerPosition: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  debt: TypedContractMethod<[], [bigint], "view">;

  debtCeiling: TypedContractMethod<[], [bigint], "view">;

  deny: TypedContractMethod<[_reliedUpon: AddressLike], [void], "nonpayable">;

  depositCollateral: TypedContractMethod<
    [_collateralToken: AddressLike, _owner: AddressLike, _amount: BigNumberish],
    [void],
    "nonpayable"
  >;

  feedModule: TypedContractMethod<[], [string], "view">;

  liquidate: TypedContractMethod<
    [
      _collateralToken: AddressLike,
      _owner: AddressLike,
      _to: AddressLike,
      _currencyAmountToPay: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  mintCurrency: TypedContractMethod<
    [
      _collateralToken: AddressLike,
      _owner: AddressLike,
      _to: AddressLike,
      _amount: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  owner: TypedContractMethod<[], [string], "view">;

  ownershipHandoverExpiresAt: TypedContractMethod<
    [pendingOwner: AddressLike],
    [bigint],
    "view"
  >;

  paidFees: TypedContractMethod<[], [bigint], "view">;

  pause: TypedContractMethod<[], [void], "nonpayable">;

  rateModule: TypedContractMethod<[], [string], "view">;

  recoverToken: TypedContractMethod<
    [_tokenAddress: AddressLike, _to: AddressLike],
    [void],
    "nonpayable"
  >;

  rely: TypedContractMethod<[_relyUpon: AddressLike], [void], "nonpayable">;

  relyMapping: TypedContractMethod<
    [arg0: AddressLike, arg1: AddressLike],
    [boolean],
    "view"
  >;

  renounceOwnership: TypedContractMethod<[], [void], "payable">;

  requestOwnershipHandover: TypedContractMethod<[], [void], "payable">;

  stabilityModule: TypedContractMethod<[], [string], "view">;

  status: TypedContractMethod<[], [bigint], "view">;

  transferOwnership: TypedContractMethod<
    [newOwner: AddressLike],
    [void],
    "payable"
  >;

  unpause: TypedContractMethod<[], [void], "nonpayable">;

  updateBaseRate: TypedContractMethod<
    [_baseRate: BigNumberish],
    [void],
    "nonpayable"
  >;

  updateCollateralData: TypedContractMethod<
    [_collateralToken: AddressLike, _param: BigNumberish, _data: BigNumberish],
    [void],
    "nonpayable"
  >;

  updateDebtCeiling: TypedContractMethod<
    [_debtCeiling: BigNumberish],
    [void],
    "nonpayable"
  >;

  updateFeedModule: TypedContractMethod<
    [_feedModule: AddressLike],
    [void],
    "nonpayable"
  >;

  updatePrice: TypedContractMethod<
    [_collateralAddress: AddressLike, _price: BigNumberish],
    [void],
    "nonpayable"
  >;

  updateRateModule: TypedContractMethod<
    [_rateModule: AddressLike],
    [void],
    "nonpayable"
  >;

  updateStabilityModule: TypedContractMethod<
    [_stabilityModule: AddressLike],
    [void],
    "nonpayable"
  >;

  vaultMapping: TypedContractMethod<
    [arg0: AddressLike, arg1: AddressLike],
    [
      [bigint, bigint, bigint, bigint] & {
        depositedCollateral: bigint;
        borrowedAmount: bigint;
        accruedFees: bigint;
        lastTotalAccumulatedRate: bigint;
      }
    ],
    "view"
  >;

  withdrawCollateral: TypedContractMethod<
    [
      _collateralToken: AddressLike,
      _owner: AddressLike,
      _to: AddressLike,
      _amount: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

  withdrawFees: TypedContractMethod<[], [void], "nonpayable">;

  getFunction<T extends ContractMethod = ContractMethod>(
    key: string | FunctionFragment
  ): T;

  getFunction(
    nameOrSignature: "CURRENCY_TOKEN"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "baseRateInfo"
  ): TypedContractMethod<
    [],
    [
      [bigint, bigint, bigint] & {
        rate: bigint;
        accumulatedRate: bigint;
        lastUpdateTime: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "burnCurrency"
  ): TypedContractMethod<
    [_collateralToken: AddressLike, _owner: AddressLike, _amount: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "cancelOwnershipHandover"
  ): TypedContractMethod<[], [void], "payable">;
  getFunction(
    nameOrSignature: "collateralMapping"
  ): TypedContractMethod<
    [arg0: AddressLike],
    [
      [
        bigint,
        bigint,
        bigint,
        bigint,
        IVault.RateInfoStructOutput,
        bigint,
        bigint,
        bigint,
        bigint
      ] & {
        totalDepositedCollateral: bigint;
        totalBorrowedAmount: bigint;
        liquidationThreshold: bigint;
        liquidationBonus: bigint;
        rateInfo: IVault.RateInfoStructOutput;
        price: bigint;
        debtCeiling: bigint;
        collateralFloorPerPosition: bigint;
        additionalCollateralPrecision: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "completeOwnershipHandover"
  ): TypedContractMethod<[pendingOwner: AddressLike], [void], "payable">;
  getFunction(
    nameOrSignature: "createCollateralType"
  ): TypedContractMethod<
    [
      _collateralToken: AddressLike,
      _rate: BigNumberish,
      _liquidationThreshold: BigNumberish,
      _liquidationBonus: BigNumberish,
      _debtCeiling: BigNumberish,
      _collateralFloorPerPosition: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "debt"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "debtCeiling"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "deny"
  ): TypedContractMethod<[_reliedUpon: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "depositCollateral"
  ): TypedContractMethod<
    [_collateralToken: AddressLike, _owner: AddressLike, _amount: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "feedModule"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "liquidate"
  ): TypedContractMethod<
    [
      _collateralToken: AddressLike,
      _owner: AddressLike,
      _to: AddressLike,
      _currencyAmountToPay: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "mintCurrency"
  ): TypedContractMethod<
    [
      _collateralToken: AddressLike,
      _owner: AddressLike,
      _to: AddressLike,
      _amount: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "owner"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "ownershipHandoverExpiresAt"
  ): TypedContractMethod<[pendingOwner: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "paidFees"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "pause"
  ): TypedContractMethod<[], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "rateModule"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "recoverToken"
  ): TypedContractMethod<
    [_tokenAddress: AddressLike, _to: AddressLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "rely"
  ): TypedContractMethod<[_relyUpon: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "relyMapping"
  ): TypedContractMethod<
    [arg0: AddressLike, arg1: AddressLike],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "renounceOwnership"
  ): TypedContractMethod<[], [void], "payable">;
  getFunction(
    nameOrSignature: "requestOwnershipHandover"
  ): TypedContractMethod<[], [void], "payable">;
  getFunction(
    nameOrSignature: "stabilityModule"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "status"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "transferOwnership"
  ): TypedContractMethod<[newOwner: AddressLike], [void], "payable">;
  getFunction(
    nameOrSignature: "unpause"
  ): TypedContractMethod<[], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "updateBaseRate"
  ): TypedContractMethod<[_baseRate: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "updateCollateralData"
  ): TypedContractMethod<
    [_collateralToken: AddressLike, _param: BigNumberish, _data: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "updateDebtCeiling"
  ): TypedContractMethod<[_debtCeiling: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "updateFeedModule"
  ): TypedContractMethod<[_feedModule: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "updatePrice"
  ): TypedContractMethod<
    [_collateralAddress: AddressLike, _price: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "updateRateModule"
  ): TypedContractMethod<[_rateModule: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "updateStabilityModule"
  ): TypedContractMethod<[_stabilityModule: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "vaultMapping"
  ): TypedContractMethod<
    [arg0: AddressLike, arg1: AddressLike],
    [
      [bigint, bigint, bigint, bigint] & {
        depositedCollateral: bigint;
        borrowedAmount: bigint;
        accruedFees: bigint;
        lastTotalAccumulatedRate: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "withdrawCollateral"
  ): TypedContractMethod<
    [
      _collateralToken: AddressLike,
      _owner: AddressLike,
      _to: AddressLike,
      _amount: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "withdrawFees"
  ): TypedContractMethod<[], [void], "nonpayable">;

  getEvent(
    key: "CollateralDeposited"
  ): TypedContractEvent<
    CollateralDepositedEvent.InputTuple,
    CollateralDepositedEvent.OutputTuple,
    CollateralDepositedEvent.OutputObject
  >;
  getEvent(
    key: "CollateralTypeAdded"
  ): TypedContractEvent<
    CollateralTypeAddedEvent.InputTuple,
    CollateralTypeAddedEvent.OutputTuple,
    CollateralTypeAddedEvent.OutputObject
  >;
  getEvent(
    key: "CollateralWithdrawn"
  ): TypedContractEvent<
    CollateralWithdrawnEvent.InputTuple,
    CollateralWithdrawnEvent.OutputTuple,
    CollateralWithdrawnEvent.OutputObject
  >;
  getEvent(
    key: "CurrencyBurned"
  ): TypedContractEvent<
    CurrencyBurnedEvent.InputTuple,
    CurrencyBurnedEvent.OutputTuple,
    CurrencyBurnedEvent.OutputObject
  >;
  getEvent(
    key: "CurrencyMinted"
  ): TypedContractEvent<
    CurrencyMintedEvent.InputTuple,
    CurrencyMintedEvent.OutputTuple,
    CurrencyMintedEvent.OutputObject
  >;
  getEvent(
    key: "FeesPaid"
  ): TypedContractEvent<
    FeesPaidEvent.InputTuple,
    FeesPaidEvent.OutputTuple,
    FeesPaidEvent.OutputObject
  >;
  getEvent(
    key: "Liquidated"
  ): TypedContractEvent<
    LiquidatedEvent.InputTuple,
    LiquidatedEvent.OutputTuple,
    LiquidatedEvent.OutputObject
  >;
  getEvent(
    key: "OwnershipHandoverCanceled"
  ): TypedContractEvent<
    OwnershipHandoverCanceledEvent.InputTuple,
    OwnershipHandoverCanceledEvent.OutputTuple,
    OwnershipHandoverCanceledEvent.OutputObject
  >;
  getEvent(
    key: "OwnershipHandoverRequested"
  ): TypedContractEvent<
    OwnershipHandoverRequestedEvent.InputTuple,
    OwnershipHandoverRequestedEvent.OutputTuple,
    OwnershipHandoverRequestedEvent.OutputObject
  >;
  getEvent(
    key: "OwnershipTransferred"
  ): TypedContractEvent<
    OwnershipTransferredEvent.InputTuple,
    OwnershipTransferredEvent.OutputTuple,
    OwnershipTransferredEvent.OutputObject
  >;

  filters: {
    "CollateralDeposited(address,uint256)": TypedContractEvent<
      CollateralDepositedEvent.InputTuple,
      CollateralDepositedEvent.OutputTuple,
      CollateralDepositedEvent.OutputObject
    >;
    CollateralDeposited: TypedContractEvent<
      CollateralDepositedEvent.InputTuple,
      CollateralDepositedEvent.OutputTuple,
      CollateralDepositedEvent.OutputObject
    >;

    "CollateralTypeAdded(address)": TypedContractEvent<
      CollateralTypeAddedEvent.InputTuple,
      CollateralTypeAddedEvent.OutputTuple,
      CollateralTypeAddedEvent.OutputObject
    >;
    CollateralTypeAdded: TypedContractEvent<
      CollateralTypeAddedEvent.InputTuple,
      CollateralTypeAddedEvent.OutputTuple,
      CollateralTypeAddedEvent.OutputObject
    >;

    "CollateralWithdrawn(address,address,uint256)": TypedContractEvent<
      CollateralWithdrawnEvent.InputTuple,
      CollateralWithdrawnEvent.OutputTuple,
      CollateralWithdrawnEvent.OutputObject
    >;
    CollateralWithdrawn: TypedContractEvent<
      CollateralWithdrawnEvent.InputTuple,
      CollateralWithdrawnEvent.OutputTuple,
      CollateralWithdrawnEvent.OutputObject
    >;

    "CurrencyBurned(address,uint256)": TypedContractEvent<
      CurrencyBurnedEvent.InputTuple,
      CurrencyBurnedEvent.OutputTuple,
      CurrencyBurnedEvent.OutputObject
    >;
    CurrencyBurned: TypedContractEvent<
      CurrencyBurnedEvent.InputTuple,
      CurrencyBurnedEvent.OutputTuple,
      CurrencyBurnedEvent.OutputObject
    >;

    "CurrencyMinted(address,uint256)": TypedContractEvent<
      CurrencyMintedEvent.InputTuple,
      CurrencyMintedEvent.OutputTuple,
      CurrencyMintedEvent.OutputObject
    >;
    CurrencyMinted: TypedContractEvent<
      CurrencyMintedEvent.InputTuple,
      CurrencyMintedEvent.OutputTuple,
      CurrencyMintedEvent.OutputObject
    >;

    "FeesPaid(address,uint256)": TypedContractEvent<
      FeesPaidEvent.InputTuple,
      FeesPaidEvent.OutputTuple,
      FeesPaidEvent.OutputObject
    >;
    FeesPaid: TypedContractEvent<
      FeesPaidEvent.InputTuple,
      FeesPaidEvent.OutputTuple,
      FeesPaidEvent.OutputObject
    >;

    "Liquidated(address,address,uint256,uint256)": TypedContractEvent<
      LiquidatedEvent.InputTuple,
      LiquidatedEvent.OutputTuple,
      LiquidatedEvent.OutputObject
    >;
    Liquidated: TypedContractEvent<
      LiquidatedEvent.InputTuple,
      LiquidatedEvent.OutputTuple,
      LiquidatedEvent.OutputObject
    >;

    "OwnershipHandoverCanceled(address)": TypedContractEvent<
      OwnershipHandoverCanceledEvent.InputTuple,
      OwnershipHandoverCanceledEvent.OutputTuple,
      OwnershipHandoverCanceledEvent.OutputObject
    >;
    OwnershipHandoverCanceled: TypedContractEvent<
      OwnershipHandoverCanceledEvent.InputTuple,
      OwnershipHandoverCanceledEvent.OutputTuple,
      OwnershipHandoverCanceledEvent.OutputObject
    >;

    "OwnershipHandoverRequested(address)": TypedContractEvent<
      OwnershipHandoverRequestedEvent.InputTuple,
      OwnershipHandoverRequestedEvent.OutputTuple,
      OwnershipHandoverRequestedEvent.OutputObject
    >;
    OwnershipHandoverRequested: TypedContractEvent<
      OwnershipHandoverRequestedEvent.InputTuple,
      OwnershipHandoverRequestedEvent.OutputTuple,
      OwnershipHandoverRequestedEvent.OutputObject
    >;

    "OwnershipTransferred(address,address)": TypedContractEvent<
      OwnershipTransferredEvent.InputTuple,
      OwnershipTransferredEvent.OutputTuple,
      OwnershipTransferredEvent.OutputObject
    >;
    OwnershipTransferred: TypedContractEvent<
      OwnershipTransferredEvent.InputTuple,
      OwnershipTransferredEvent.OutputTuple,
      OwnershipTransferredEvent.OutputObject
    >;
  };
}
