/* 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 type OnchainCrossChainOrderStruct = {
  fillDeadline: BigNumberish;
  orderDataType: BytesLike;
  orderData: BytesLike;
};

export type OnchainCrossChainOrderStructOutput = [
  fillDeadline: bigint,
  orderDataType: string,
  orderData: string
] & { fillDeadline: bigint; orderDataType: string; orderData: string };

export type GaslessCrossChainOrderStruct = {
  originSettler: AddressLike;
  user: AddressLike;
  nonce: BigNumberish;
  originChainId: BigNumberish;
  openDeadline: BigNumberish;
  fillDeadline: BigNumberish;
  orderDataType: BytesLike;
  orderData: BytesLike;
};

export type GaslessCrossChainOrderStructOutput = [
  originSettler: string,
  user: string,
  nonce: bigint,
  originChainId: bigint,
  openDeadline: bigint,
  fillDeadline: bigint,
  orderDataType: string,
  orderData: string
] & {
  originSettler: string;
  user: string;
  nonce: bigint;
  originChainId: bigint;
  openDeadline: bigint;
  fillDeadline: bigint;
  orderDataType: string;
  orderData: string;
};

export type OutputStruct = {
  token: BytesLike;
  amount: BigNumberish;
  recipient: BytesLike;
  chainId: BigNumberish;
};

export type OutputStructOutput = [
  token: string,
  amount: bigint,
  recipient: string,
  chainId: bigint
] & { token: string; amount: bigint; recipient: string; chainId: bigint };

export type FillInstructionStruct = {
  destinationChainId: BigNumberish;
  destinationSettler: BytesLike;
  originData: BytesLike;
};

export type FillInstructionStructOutput = [
  destinationChainId: bigint,
  destinationSettler: string,
  originData: string
] & {
  destinationChainId: bigint;
  destinationSettler: string;
  originData: string;
};

export type ResolvedCrossChainOrderStruct = {
  user: AddressLike;
  originChainId: BigNumberish;
  openDeadline: BigNumberish;
  fillDeadline: BigNumberish;
  orderId: BytesLike;
  maxSpent: OutputStruct[];
  minReceived: OutputStruct[];
  fillInstructions: FillInstructionStruct[];
};

export type ResolvedCrossChainOrderStructOutput = [
  user: string,
  originChainId: bigint,
  openDeadline: bigint,
  fillDeadline: bigint,
  orderId: string,
  maxSpent: OutputStructOutput[],
  minReceived: OutputStructOutput[],
  fillInstructions: FillInstructionStructOutput[]
] & {
  user: string;
  originChainId: bigint;
  openDeadline: bigint;
  fillDeadline: bigint;
  orderId: string;
  maxSpent: OutputStructOutput[];
  minReceived: OutputStructOutput[];
  fillInstructions: FillInstructionStructOutput[];
};

export declare namespace GasRouter {
  export type GasRouterConfigStruct = {
    domain: BigNumberish;
    gas: BigNumberish;
  };

  export type GasRouterConfigStructOutput = [domain: bigint, gas: bigint] & {
    domain: bigint;
    gas: bigint;
  };
}

export interface Hyperlane7683Interface extends Interface {
  getFunction(
    nameOrSignature:
      | "FILLED"
      | "OPENED"
      | "PACKAGE_VERSION"
      | "PERMIT2"
      | "REFUNDED"
      | "RESOLVED_CROSS_CHAIN_ORDER_TYPEHASH"
      | "SETTLED"
      | "UNKNOWN"
      | "destinationGas"
      | "domains"
      | "enrollRemoteRouter"
      | "enrollRemoteRouters"
      | "fill"
      | "filledOrders"
      | "handle"
      | "hook"
      | "initialize"
      | "interchainSecurityModule"
      | "invalidateNonces"
      | "isValidNonce"
      | "localDomain"
      | "mailbox"
      | "open"
      | "openFor"
      | "openOrders"
      | "orderStatus"
      | "owner"
      | "quoteGasPayment"
      | "refund((uint32,bytes32,bytes)[])"
      | "refund((address,address,uint256,uint256,uint32,uint32,bytes32,bytes)[])"
      | "renounceOwnership"
      | "resolve"
      | "resolveFor"
      | "routers"
      | "setDestinationGas(uint32,uint256)"
      | "setDestinationGas((uint32,uint256)[])"
      | "setHook"
      | "setInterchainSecurityModule"
      | "settle"
      | "transferOwnership"
      | "unenrollRemoteRouter"
      | "unenrollRemoteRouters"
      | "usedNonces"
      | "witnessHash"
      | "witnessTypeString"
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic:
      | "Filled"
      | "GasSet"
      | "HookSet"
      | "Initialized"
      | "IsmSet"
      | "NonceInvalidation"
      | "Open"
      | "OwnershipTransferred"
      | "Refund"
      | "Refunded"
      | "Settle"
      | "Settled"
  ): EventFragment;

  encodeFunctionData(functionFragment: "FILLED", values?: undefined): string;
  encodeFunctionData(functionFragment: "OPENED", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "PACKAGE_VERSION",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "PERMIT2", values?: undefined): string;
  encodeFunctionData(functionFragment: "REFUNDED", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "RESOLVED_CROSS_CHAIN_ORDER_TYPEHASH",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "SETTLED", values?: undefined): string;
  encodeFunctionData(functionFragment: "UNKNOWN", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "destinationGas",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(functionFragment: "domains", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "enrollRemoteRouter",
    values: [BigNumberish, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "enrollRemoteRouters",
    values: [BigNumberish[], BytesLike[]]
  ): string;
  encodeFunctionData(
    functionFragment: "fill",
    values: [BytesLike, BytesLike, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "filledOrders",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "handle",
    values: [BigNumberish, BytesLike, BytesLike]
  ): string;
  encodeFunctionData(functionFragment: "hook", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "initialize",
    values: [AddressLike, AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "interchainSecurityModule",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "invalidateNonces",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "isValidNonce",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "localDomain",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "mailbox", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "open",
    values: [OnchainCrossChainOrderStruct]
  ): string;
  encodeFunctionData(
    functionFragment: "openFor",
    values: [GaslessCrossChainOrderStruct, BytesLike, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "openOrders",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "orderStatus",
    values: [BytesLike]
  ): string;
  encodeFunctionData(functionFragment: "owner", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "quoteGasPayment",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "refund((uint32,bytes32,bytes)[])",
    values: [OnchainCrossChainOrderStruct[]]
  ): string;
  encodeFunctionData(
    functionFragment: "refund((address,address,uint256,uint256,uint32,uint32,bytes32,bytes)[])",
    values: [GaslessCrossChainOrderStruct[]]
  ): string;
  encodeFunctionData(
    functionFragment: "renounceOwnership",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "resolve",
    values: [OnchainCrossChainOrderStruct]
  ): string;
  encodeFunctionData(
    functionFragment: "resolveFor",
    values: [GaslessCrossChainOrderStruct, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "routers",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "setDestinationGas(uint32,uint256)",
    values: [BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "setDestinationGas((uint32,uint256)[])",
    values: [GasRouter.GasRouterConfigStruct[]]
  ): string;
  encodeFunctionData(
    functionFragment: "setHook",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "setInterchainSecurityModule",
    values: [AddressLike]
  ): string;
  encodeFunctionData(functionFragment: "settle", values: [BytesLike[]]): string;
  encodeFunctionData(
    functionFragment: "transferOwnership",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "unenrollRemoteRouter",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "unenrollRemoteRouters",
    values: [BigNumberish[]]
  ): string;
  encodeFunctionData(
    functionFragment: "usedNonces",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "witnessHash",
    values: [ResolvedCrossChainOrderStruct]
  ): string;
  encodeFunctionData(
    functionFragment: "witnessTypeString",
    values?: undefined
  ): string;

  decodeFunctionResult(functionFragment: "FILLED", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "OPENED", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "PACKAGE_VERSION",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "PERMIT2", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "REFUNDED", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "RESOLVED_CROSS_CHAIN_ORDER_TYPEHASH",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "SETTLED", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "UNKNOWN", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "destinationGas",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "domains", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "enrollRemoteRouter",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "enrollRemoteRouters",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "fill", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "filledOrders",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "handle", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "hook", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "interchainSecurityModule",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "invalidateNonces",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isValidNonce",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "localDomain",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "mailbox", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "open", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "openFor", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "openOrders", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "orderStatus",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "quoteGasPayment",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "refund((uint32,bytes32,bytes)[])",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "refund((address,address,uint256,uint256,uint32,uint32,bytes32,bytes)[])",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "renounceOwnership",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "resolve", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "resolveFor", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "routers", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setDestinationGas(uint32,uint256)",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDestinationGas((uint32,uint256)[])",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "setHook", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setInterchainSecurityModule",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "settle", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "transferOwnership",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "unenrollRemoteRouter",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "unenrollRemoteRouters",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "usedNonces", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "witnessHash",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "witnessTypeString",
    data: BytesLike
  ): Result;
}

export namespace FilledEvent {
  export type InputTuple = [
    orderId: BytesLike,
    originData: BytesLike,
    fillerData: BytesLike
  ];
  export type OutputTuple = [
    orderId: string,
    originData: string,
    fillerData: string
  ];
  export interface OutputObject {
    orderId: string;
    originData: string;
    fillerData: 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 GasSetEvent {
  export type InputTuple = [domain: BigNumberish, gas: BigNumberish];
  export type OutputTuple = [domain: bigint, gas: bigint];
  export interface OutputObject {
    domain: bigint;
    gas: 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 HookSetEvent {
  export type InputTuple = [_hook: AddressLike];
  export type OutputTuple = [_hook: string];
  export interface OutputObject {
    _hook: 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 InitializedEvent {
  export type InputTuple = [version: BigNumberish];
  export type OutputTuple = [version: bigint];
  export interface OutputObject {
    version: 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 IsmSetEvent {
  export type InputTuple = [_ism: AddressLike];
  export type OutputTuple = [_ism: string];
  export interface OutputObject {
    _ism: 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 NonceInvalidationEvent {
  export type InputTuple = [owner: AddressLike, nonce: BigNumberish];
  export type OutputTuple = [owner: string, nonce: bigint];
  export interface OutputObject {
    owner: string;
    nonce: 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 OpenEvent {
  export type InputTuple = [
    orderId: BytesLike,
    resolvedOrder: ResolvedCrossChainOrderStruct
  ];
  export type OutputTuple = [
    orderId: string,
    resolvedOrder: ResolvedCrossChainOrderStructOutput
  ];
  export interface OutputObject {
    orderId: string;
    resolvedOrder: ResolvedCrossChainOrderStructOutput;
  }
  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 = [previousOwner: AddressLike, newOwner: AddressLike];
  export type OutputTuple = [previousOwner: string, newOwner: string];
  export interface OutputObject {
    previousOwner: 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 namespace RefundEvent {
  export type InputTuple = [orderIds: BytesLike[]];
  export type OutputTuple = [orderIds: string[]];
  export interface OutputObject {
    orderIds: 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 RefundedEvent {
  export type InputTuple = [orderId: BytesLike, receiver: AddressLike];
  export type OutputTuple = [orderId: string, receiver: string];
  export interface OutputObject {
    orderId: string;
    receiver: 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 SettleEvent {
  export type InputTuple = [
    orderIds: BytesLike[],
    ordersFillerData: BytesLike[]
  ];
  export type OutputTuple = [orderIds: string[], ordersFillerData: string[]];
  export interface OutputObject {
    orderIds: string[];
    ordersFillerData: 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 SettledEvent {
  export type InputTuple = [orderId: BytesLike, receiver: AddressLike];
  export type OutputTuple = [orderId: string, receiver: string];
  export interface OutputObject {
    orderId: string;
    receiver: 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 Hyperlane7683 extends BaseContract {
  connect(runner?: ContractRunner | null): Hyperlane7683;
  waitForDeployment(): Promise<this>;

  interface: Hyperlane7683Interface;

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

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

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

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

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

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

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

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

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

  destinationGas: TypedContractMethod<[arg0: BigNumberish], [bigint], "view">;

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

  enrollRemoteRouter: TypedContractMethod<
    [_domain: BigNumberish, _router: BytesLike],
    [void],
    "nonpayable"
  >;

  enrollRemoteRouters: TypedContractMethod<
    [_domains: BigNumberish[], _addresses: BytesLike[]],
    [void],
    "nonpayable"
  >;

  fill: TypedContractMethod<
    [_orderId: BytesLike, _originData: BytesLike, _fillerData: BytesLike],
    [void],
    "payable"
  >;

  filledOrders: TypedContractMethod<
    [orderId: BytesLike],
    [[string, string] & { originData: string; fillerData: string }],
    "view"
  >;

  handle: TypedContractMethod<
    [_origin: BigNumberish, _sender: BytesLike, _message: BytesLike],
    [void],
    "payable"
  >;

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

  initialize: TypedContractMethod<
    [
      _customHook: AddressLike,
      _interchainSecurityModule: AddressLike,
      _owner: AddressLike
    ],
    [void],
    "nonpayable"
  >;

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

  invalidateNonces: TypedContractMethod<
    [_nonce: BigNumberish],
    [void],
    "nonpayable"
  >;

  isValidNonce: TypedContractMethod<
    [_from: AddressLike, _nonce: BigNumberish],
    [boolean],
    "view"
  >;

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

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

  open: TypedContractMethod<
    [_order: OnchainCrossChainOrderStruct],
    [void],
    "payable"
  >;

  openFor: TypedContractMethod<
    [
      _order: GaslessCrossChainOrderStruct,
      _signature: BytesLike,
      _originFillerData: BytesLike
    ],
    [void],
    "nonpayable"
  >;

  openOrders: TypedContractMethod<[orderId: BytesLike], [string], "view">;

  orderStatus: TypedContractMethod<[orderId: BytesLike], [string], "view">;

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

  quoteGasPayment: TypedContractMethod<
    [_destinationDomain: BigNumberish],
    [bigint],
    "view"
  >;

  "refund((uint32,bytes32,bytes)[])": TypedContractMethod<
    [_orders: OnchainCrossChainOrderStruct[]],
    [void],
    "payable"
  >;

  "refund((address,address,uint256,uint256,uint32,uint32,bytes32,bytes)[])": TypedContractMethod<
    [_orders: GaslessCrossChainOrderStruct[]],
    [void],
    "payable"
  >;

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

  resolve: TypedContractMethod<
    [_order: OnchainCrossChainOrderStruct],
    [ResolvedCrossChainOrderStructOutput],
    "view"
  >;

  resolveFor: TypedContractMethod<
    [_order: GaslessCrossChainOrderStruct, _originFillerData: BytesLike],
    [ResolvedCrossChainOrderStructOutput],
    "view"
  >;

  routers: TypedContractMethod<[_domain: BigNumberish], [string], "view">;

  "setDestinationGas(uint32,uint256)": TypedContractMethod<
    [domain: BigNumberish, gas: BigNumberish],
    [void],
    "nonpayable"
  >;

  "setDestinationGas((uint32,uint256)[])": TypedContractMethod<
    [gasConfigs: GasRouter.GasRouterConfigStruct[]],
    [void],
    "nonpayable"
  >;

  setHook: TypedContractMethod<[_hook: AddressLike], [void], "nonpayable">;

  setInterchainSecurityModule: TypedContractMethod<
    [_module: AddressLike],
    [void],
    "nonpayable"
  >;

  settle: TypedContractMethod<[_orderIds: BytesLike[]], [void], "payable">;

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

  unenrollRemoteRouter: TypedContractMethod<
    [_domain: BigNumberish],
    [void],
    "nonpayable"
  >;

  unenrollRemoteRouters: TypedContractMethod<
    [_domains: BigNumberish[]],
    [void],
    "nonpayable"
  >;

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

  witnessHash: TypedContractMethod<
    [_resolvedOrder: ResolvedCrossChainOrderStruct],
    [string],
    "view"
  >;

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

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

  getFunction(
    nameOrSignature: "FILLED"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "OPENED"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "PACKAGE_VERSION"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "PERMIT2"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "REFUNDED"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "RESOLVED_CROSS_CHAIN_ORDER_TYPEHASH"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "SETTLED"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "UNKNOWN"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "destinationGas"
  ): TypedContractMethod<[arg0: BigNumberish], [bigint], "view">;
  getFunction(
    nameOrSignature: "domains"
  ): TypedContractMethod<[], [bigint[]], "view">;
  getFunction(
    nameOrSignature: "enrollRemoteRouter"
  ): TypedContractMethod<
    [_domain: BigNumberish, _router: BytesLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "enrollRemoteRouters"
  ): TypedContractMethod<
    [_domains: BigNumberish[], _addresses: BytesLike[]],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "fill"
  ): TypedContractMethod<
    [_orderId: BytesLike, _originData: BytesLike, _fillerData: BytesLike],
    [void],
    "payable"
  >;
  getFunction(
    nameOrSignature: "filledOrders"
  ): TypedContractMethod<
    [orderId: BytesLike],
    [[string, string] & { originData: string; fillerData: string }],
    "view"
  >;
  getFunction(
    nameOrSignature: "handle"
  ): TypedContractMethod<
    [_origin: BigNumberish, _sender: BytesLike, _message: BytesLike],
    [void],
    "payable"
  >;
  getFunction(
    nameOrSignature: "hook"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "initialize"
  ): TypedContractMethod<
    [
      _customHook: AddressLike,
      _interchainSecurityModule: AddressLike,
      _owner: AddressLike
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "interchainSecurityModule"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "invalidateNonces"
  ): TypedContractMethod<[_nonce: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "isValidNonce"
  ): TypedContractMethod<
    [_from: AddressLike, _nonce: BigNumberish],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "localDomain"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "mailbox"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "open"
  ): TypedContractMethod<
    [_order: OnchainCrossChainOrderStruct],
    [void],
    "payable"
  >;
  getFunction(
    nameOrSignature: "openFor"
  ): TypedContractMethod<
    [
      _order: GaslessCrossChainOrderStruct,
      _signature: BytesLike,
      _originFillerData: BytesLike
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "openOrders"
  ): TypedContractMethod<[orderId: BytesLike], [string], "view">;
  getFunction(
    nameOrSignature: "orderStatus"
  ): TypedContractMethod<[orderId: BytesLike], [string], "view">;
  getFunction(
    nameOrSignature: "owner"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "quoteGasPayment"
  ): TypedContractMethod<[_destinationDomain: BigNumberish], [bigint], "view">;
  getFunction(
    nameOrSignature: "refund((uint32,bytes32,bytes)[])"
  ): TypedContractMethod<
    [_orders: OnchainCrossChainOrderStruct[]],
    [void],
    "payable"
  >;
  getFunction(
    nameOrSignature: "refund((address,address,uint256,uint256,uint32,uint32,bytes32,bytes)[])"
  ): TypedContractMethod<
    [_orders: GaslessCrossChainOrderStruct[]],
    [void],
    "payable"
  >;
  getFunction(
    nameOrSignature: "renounceOwnership"
  ): TypedContractMethod<[], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "resolve"
  ): TypedContractMethod<
    [_order: OnchainCrossChainOrderStruct],
    [ResolvedCrossChainOrderStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "resolveFor"
  ): TypedContractMethod<
    [_order: GaslessCrossChainOrderStruct, _originFillerData: BytesLike],
    [ResolvedCrossChainOrderStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "routers"
  ): TypedContractMethod<[_domain: BigNumberish], [string], "view">;
  getFunction(
    nameOrSignature: "setDestinationGas(uint32,uint256)"
  ): TypedContractMethod<
    [domain: BigNumberish, gas: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setDestinationGas((uint32,uint256)[])"
  ): TypedContractMethod<
    [gasConfigs: GasRouter.GasRouterConfigStruct[]],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setHook"
  ): TypedContractMethod<[_hook: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setInterchainSecurityModule"
  ): TypedContractMethod<[_module: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "settle"
  ): TypedContractMethod<[_orderIds: BytesLike[]], [void], "payable">;
  getFunction(
    nameOrSignature: "transferOwnership"
  ): TypedContractMethod<[newOwner: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "unenrollRemoteRouter"
  ): TypedContractMethod<[_domain: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "unenrollRemoteRouters"
  ): TypedContractMethod<[_domains: BigNumberish[]], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "usedNonces"
  ): TypedContractMethod<
    [arg0: AddressLike, arg1: BigNumberish],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "witnessHash"
  ): TypedContractMethod<
    [_resolvedOrder: ResolvedCrossChainOrderStruct],
    [string],
    "view"
  >;
  getFunction(
    nameOrSignature: "witnessTypeString"
  ): TypedContractMethod<[], [string], "view">;

  getEvent(
    key: "Filled"
  ): TypedContractEvent<
    FilledEvent.InputTuple,
    FilledEvent.OutputTuple,
    FilledEvent.OutputObject
  >;
  getEvent(
    key: "GasSet"
  ): TypedContractEvent<
    GasSetEvent.InputTuple,
    GasSetEvent.OutputTuple,
    GasSetEvent.OutputObject
  >;
  getEvent(
    key: "HookSet"
  ): TypedContractEvent<
    HookSetEvent.InputTuple,
    HookSetEvent.OutputTuple,
    HookSetEvent.OutputObject
  >;
  getEvent(
    key: "Initialized"
  ): TypedContractEvent<
    InitializedEvent.InputTuple,
    InitializedEvent.OutputTuple,
    InitializedEvent.OutputObject
  >;
  getEvent(
    key: "IsmSet"
  ): TypedContractEvent<
    IsmSetEvent.InputTuple,
    IsmSetEvent.OutputTuple,
    IsmSetEvent.OutputObject
  >;
  getEvent(
    key: "NonceInvalidation"
  ): TypedContractEvent<
    NonceInvalidationEvent.InputTuple,
    NonceInvalidationEvent.OutputTuple,
    NonceInvalidationEvent.OutputObject
  >;
  getEvent(
    key: "Open"
  ): TypedContractEvent<
    OpenEvent.InputTuple,
    OpenEvent.OutputTuple,
    OpenEvent.OutputObject
  >;
  getEvent(
    key: "OwnershipTransferred"
  ): TypedContractEvent<
    OwnershipTransferredEvent.InputTuple,
    OwnershipTransferredEvent.OutputTuple,
    OwnershipTransferredEvent.OutputObject
  >;
  getEvent(
    key: "Refund"
  ): TypedContractEvent<
    RefundEvent.InputTuple,
    RefundEvent.OutputTuple,
    RefundEvent.OutputObject
  >;
  getEvent(
    key: "Refunded"
  ): TypedContractEvent<
    RefundedEvent.InputTuple,
    RefundedEvent.OutputTuple,
    RefundedEvent.OutputObject
  >;
  getEvent(
    key: "Settle"
  ): TypedContractEvent<
    SettleEvent.InputTuple,
    SettleEvent.OutputTuple,
    SettleEvent.OutputObject
  >;
  getEvent(
    key: "Settled"
  ): TypedContractEvent<
    SettledEvent.InputTuple,
    SettledEvent.OutputTuple,
    SettledEvent.OutputObject
  >;

  filters: {
    "Filled(bytes32,bytes,bytes)": TypedContractEvent<
      FilledEvent.InputTuple,
      FilledEvent.OutputTuple,
      FilledEvent.OutputObject
    >;
    Filled: TypedContractEvent<
      FilledEvent.InputTuple,
      FilledEvent.OutputTuple,
      FilledEvent.OutputObject
    >;

    "GasSet(uint32,uint256)": TypedContractEvent<
      GasSetEvent.InputTuple,
      GasSetEvent.OutputTuple,
      GasSetEvent.OutputObject
    >;
    GasSet: TypedContractEvent<
      GasSetEvent.InputTuple,
      GasSetEvent.OutputTuple,
      GasSetEvent.OutputObject
    >;

    "HookSet(address)": TypedContractEvent<
      HookSetEvent.InputTuple,
      HookSetEvent.OutputTuple,
      HookSetEvent.OutputObject
    >;
    HookSet: TypedContractEvent<
      HookSetEvent.InputTuple,
      HookSetEvent.OutputTuple,
      HookSetEvent.OutputObject
    >;

    "Initialized(uint8)": TypedContractEvent<
      InitializedEvent.InputTuple,
      InitializedEvent.OutputTuple,
      InitializedEvent.OutputObject
    >;
    Initialized: TypedContractEvent<
      InitializedEvent.InputTuple,
      InitializedEvent.OutputTuple,
      InitializedEvent.OutputObject
    >;

    "IsmSet(address)": TypedContractEvent<
      IsmSetEvent.InputTuple,
      IsmSetEvent.OutputTuple,
      IsmSetEvent.OutputObject
    >;
    IsmSet: TypedContractEvent<
      IsmSetEvent.InputTuple,
      IsmSetEvent.OutputTuple,
      IsmSetEvent.OutputObject
    >;

    "NonceInvalidation(address,uint256)": TypedContractEvent<
      NonceInvalidationEvent.InputTuple,
      NonceInvalidationEvent.OutputTuple,
      NonceInvalidationEvent.OutputObject
    >;
    NonceInvalidation: TypedContractEvent<
      NonceInvalidationEvent.InputTuple,
      NonceInvalidationEvent.OutputTuple,
      NonceInvalidationEvent.OutputObject
    >;

    "Open(bytes32,tuple)": TypedContractEvent<
      OpenEvent.InputTuple,
      OpenEvent.OutputTuple,
      OpenEvent.OutputObject
    >;
    Open: TypedContractEvent<
      OpenEvent.InputTuple,
      OpenEvent.OutputTuple,
      OpenEvent.OutputObject
    >;

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

    "Refund(bytes32[])": TypedContractEvent<
      RefundEvent.InputTuple,
      RefundEvent.OutputTuple,
      RefundEvent.OutputObject
    >;
    Refund: TypedContractEvent<
      RefundEvent.InputTuple,
      RefundEvent.OutputTuple,
      RefundEvent.OutputObject
    >;

    "Refunded(bytes32,address)": TypedContractEvent<
      RefundedEvent.InputTuple,
      RefundedEvent.OutputTuple,
      RefundedEvent.OutputObject
    >;
    Refunded: TypedContractEvent<
      RefundedEvent.InputTuple,
      RefundedEvent.OutputTuple,
      RefundedEvent.OutputObject
    >;

    "Settle(bytes32[],bytes[])": TypedContractEvent<
      SettleEvent.InputTuple,
      SettleEvent.OutputTuple,
      SettleEvent.OutputObject
    >;
    Settle: TypedContractEvent<
      SettleEvent.InputTuple,
      SettleEvent.OutputTuple,
      SettleEvent.OutputObject
    >;

    "Settled(bytes32,address)": TypedContractEvent<
      SettledEvent.InputTuple,
      SettledEvent.OutputTuple,
      SettledEvent.OutputObject
    >;
    Settled: TypedContractEvent<
      SettledEvent.InputTuple,
      SettledEvent.OutputTuple,
      SettledEvent.OutputObject
    >;
  };
}
