/* 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 IPerpetualOrder {
  export type OrderStruct = {
    leverageTDR: BigNumberish;
    brokerFeeTbps: BigNumberish;
    iPerpetualId: BigNumberish;
    traderAddr: AddressLike;
    executionTimestamp: BigNumberish;
    brokerAddr: AddressLike;
    submittedTimestamp: BigNumberish;
    flags: BigNumberish;
    iDeadline: BigNumberish;
    executorAddr: AddressLike;
    fAmount: BigNumberish;
    fLimitPrice: BigNumberish;
    fTriggerPrice: BigNumberish;
    brokerSignature: BytesLike;
  };

  export type OrderStructOutput = [
    leverageTDR: bigint,
    brokerFeeTbps: bigint,
    iPerpetualId: bigint,
    traderAddr: string,
    executionTimestamp: bigint,
    brokerAddr: string,
    submittedTimestamp: bigint,
    flags: bigint,
    iDeadline: bigint,
    executorAddr: string,
    fAmount: bigint,
    fLimitPrice: bigint,
    fTriggerPrice: bigint,
    brokerSignature: string
  ] & {
    leverageTDR: bigint;
    brokerFeeTbps: bigint;
    iPerpetualId: bigint;
    traderAddr: string;
    executionTimestamp: bigint;
    brokerAddr: string;
    submittedTimestamp: bigint;
    flags: bigint;
    iDeadline: bigint;
    executorAddr: string;
    fAmount: bigint;
    fLimitPrice: bigint;
    fTriggerPrice: bigint;
    brokerSignature: string;
  };
}

export declare namespace IClientOrder {
  export type ClientOrderStruct = {
    iPerpetualId: BigNumberish;
    fLimitPrice: BigNumberish;
    leverageTDR: BigNumberish;
    executionTimestamp: BigNumberish;
    flags: BigNumberish;
    iDeadline: BigNumberish;
    brokerAddr: AddressLike;
    fTriggerPrice: BigNumberish;
    fAmount: BigNumberish;
    parentChildDigest1: BytesLike;
    traderAddr: AddressLike;
    parentChildDigest2: BytesLike;
    brokerFeeTbps: BigNumberish;
    brokerSignature: BytesLike;
    callbackTarget: AddressLike;
  };

  export type ClientOrderStructOutput = [
    iPerpetualId: bigint,
    fLimitPrice: bigint,
    leverageTDR: bigint,
    executionTimestamp: bigint,
    flags: bigint,
    iDeadline: bigint,
    brokerAddr: string,
    fTriggerPrice: bigint,
    fAmount: bigint,
    parentChildDigest1: string,
    traderAddr: string,
    parentChildDigest2: string,
    brokerFeeTbps: bigint,
    brokerSignature: string,
    callbackTarget: string
  ] & {
    iPerpetualId: bigint;
    fLimitPrice: bigint;
    leverageTDR: bigint;
    executionTimestamp: bigint;
    flags: bigint;
    iDeadline: bigint;
    brokerAddr: string;
    fTriggerPrice: bigint;
    fAmount: bigint;
    parentChildDigest1: string;
    traderAddr: string;
    parentChildDigest2: string;
    brokerFeeTbps: bigint;
    brokerSignature: string;
    callbackTarget: string;
  };
}

export interface LimitOrderBookInterface extends Interface {
  getFunction(
    nameOrSignature:
      | "CALLBACK_GAS_LIMIT"
      | "actvDigestPos"
      | "callbackFunctions"
      | "cancelOrder"
      | "digestsOfTrader"
      | "executeOrders"
      | "getOrderStatus"
      | "getOrders"
      | "getTrader"
      | "initialize"
      | "lastOrderHash"
      | "limitDigestsOfTrader"
      | "marketCloseSwitchTimestamp"
      | "numberOfDigestsOfTrader"
      | "orderCount"
      | "orderDependency"
      | "orderOfDigest"
      | "perpManager"
      | "perpetualId"
      | "pollRange"
      | "postOrders"
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic:
      | "Callback"
      | "ExecutionFailed"
      | "Initialized"
      | "PerpetualLimitOrderCreated"
  ): EventFragment;

  encodeFunctionData(
    functionFragment: "CALLBACK_GAS_LIMIT",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "actvDigestPos",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "callbackFunctions",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "cancelOrder",
    values: [BytesLike, BytesLike, BytesLike[], BigNumberish[]]
  ): string;
  encodeFunctionData(
    functionFragment: "digestsOfTrader",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "executeOrders",
    values: [BytesLike[], AddressLike, BytesLike[], BigNumberish[]]
  ): string;
  encodeFunctionData(
    functionFragment: "getOrderStatus",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getOrders",
    values: [AddressLike, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getTrader",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "initialize",
    values: [AddressLike, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "lastOrderHash",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "limitDigestsOfTrader",
    values: [AddressLike, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "marketCloseSwitchTimestamp",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "numberOfDigestsOfTrader",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "orderCount",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "orderDependency",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "orderOfDigest",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "perpManager",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "perpetualId",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "pollRange",
    values: [BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "postOrders",
    values: [IClientOrder.ClientOrderStruct[], BytesLike[]]
  ): string;

  decodeFunctionResult(
    functionFragment: "CALLBACK_GAS_LIMIT",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "actvDigestPos",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "callbackFunctions",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "cancelOrder",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "digestsOfTrader",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "executeOrders",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getOrderStatus",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "getOrders", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "getTrader", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "lastOrderHash",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "limitDigestsOfTrader",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "marketCloseSwitchTimestamp",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "numberOfDigestsOfTrader",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "orderCount", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "orderDependency",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "orderOfDigest",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "perpManager",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "perpetualId",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "pollRange", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "postOrders", data: BytesLike): Result;
}

export namespace CallbackEvent {
  export type InputTuple = [
    callbackTarget: AddressLike,
    success: boolean,
    gasLimit: BigNumberish
  ];
  export type OutputTuple = [
    callbackTarget: string,
    success: boolean,
    gasLimit: bigint
  ];
  export interface OutputObject {
    callbackTarget: string;
    success: boolean;
    gasLimit: 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 ExecutionFailedEvent {
  export type InputTuple = [
    perpetualId: BigNumberish,
    trader: AddressLike,
    digest: BytesLike,
    reason: string
  ];
  export type OutputTuple = [
    perpetualId: bigint,
    trader: string,
    digest: string,
    reason: string
  ];
  export interface OutputObject {
    perpetualId: bigint;
    trader: string;
    digest: string;
    reason: 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 PerpetualLimitOrderCreatedEvent {
  export type InputTuple = [
    perpetualId: BigNumberish,
    trader: AddressLike,
    brokerAddr: AddressLike,
    order: IPerpetualOrder.OrderStruct,
    digest: BytesLike
  ];
  export type OutputTuple = [
    perpetualId: bigint,
    trader: string,
    brokerAddr: string,
    order: IPerpetualOrder.OrderStructOutput,
    digest: string
  ];
  export interface OutputObject {
    perpetualId: bigint;
    trader: string;
    brokerAddr: string;
    order: IPerpetualOrder.OrderStructOutput;
    digest: 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 LimitOrderBook extends BaseContract {
  connect(runner?: ContractRunner | null): LimitOrderBook;
  waitForDeployment(): Promise<this>;

  interface: LimitOrderBookInterface;

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

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

  actvDigestPos: TypedContractMethod<[arg0: BytesLike], [bigint], "view">;

  callbackFunctions: TypedContractMethod<[arg0: BytesLike], [string], "view">;

  cancelOrder: TypedContractMethod<
    [
      _digest: BytesLike,
      _signature: BytesLike,
      _updateData: BytesLike[],
      _publishTimes: BigNumberish[]
    ],
    [void],
    "payable"
  >;

  digestsOfTrader: TypedContractMethod<
    [arg0: AddressLike, arg1: BigNumberish],
    [string],
    "view"
  >;

  executeOrders: TypedContractMethod<
    [
      _digests: BytesLike[],
      _executorAddr: AddressLike,
      _updateData: BytesLike[],
      _publishTimes: BigNumberish[]
    ],
    [void],
    "payable"
  >;

  getOrderStatus: TypedContractMethod<[_digest: BytesLike], [bigint], "view">;

  getOrders: TypedContractMethod<
    [trader: AddressLike, offset: BigNumberish, limit: BigNumberish],
    [IClientOrder.ClientOrderStructOutput[]],
    "view"
  >;

  getTrader: TypedContractMethod<[digest: BytesLike], [string], "view">;

  initialize: TypedContractMethod<
    [
      _perpetualManagerAddr: AddressLike,
      _perpetualId: BigNumberish,
      _iCancelDelaySec: BigNumberish
    ],
    [void],
    "nonpayable"
  >;

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

  limitDigestsOfTrader: TypedContractMethod<
    [trader: AddressLike, page: BigNumberish, limit: BigNumberish],
    [string[]],
    "view"
  >;

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

  numberOfDigestsOfTrader: TypedContractMethod<
    [trader: AddressLike],
    [bigint],
    "view"
  >;

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

  orderDependency: TypedContractMethod<
    [arg0: BytesLike],
    [
      [string, string] & {
        parentChildDigest1: string;
        parentChildDigest2: string;
      }
    ],
    "view"
  >;

  orderOfDigest: TypedContractMethod<
    [arg0: BytesLike],
    [
      [
        bigint,
        bigint,
        bigint,
        string,
        bigint,
        string,
        bigint,
        bigint,
        bigint,
        string,
        bigint,
        bigint,
        bigint,
        string
      ] & {
        leverageTDR: bigint;
        brokerFeeTbps: bigint;
        iPerpetualId: bigint;
        traderAddr: string;
        executionTimestamp: bigint;
        brokerAddr: string;
        submittedTimestamp: bigint;
        flags: bigint;
        iDeadline: bigint;
        executorAddr: string;
        fAmount: bigint;
        fLimitPrice: bigint;
        fTriggerPrice: bigint;
        brokerSignature: string;
      }
    ],
    "view"
  >;

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

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

  pollRange: TypedContractMethod<
    [_from: BigNumberish, _numElements: BigNumberish],
    [
      [IClientOrder.ClientOrderStructOutput[], string[], bigint[]] & {
        orders: IClientOrder.ClientOrderStructOutput[];
        orderHashes: string[];
        submittedTs: bigint[];
      }
    ],
    "view"
  >;

  postOrders: TypedContractMethod<
    [_orders: IClientOrder.ClientOrderStruct[], _signatures: BytesLike[]],
    [void],
    "nonpayable"
  >;

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

  getFunction(
    nameOrSignature: "CALLBACK_GAS_LIMIT"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "actvDigestPos"
  ): TypedContractMethod<[arg0: BytesLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "callbackFunctions"
  ): TypedContractMethod<[arg0: BytesLike], [string], "view">;
  getFunction(
    nameOrSignature: "cancelOrder"
  ): TypedContractMethod<
    [
      _digest: BytesLike,
      _signature: BytesLike,
      _updateData: BytesLike[],
      _publishTimes: BigNumberish[]
    ],
    [void],
    "payable"
  >;
  getFunction(
    nameOrSignature: "digestsOfTrader"
  ): TypedContractMethod<
    [arg0: AddressLike, arg1: BigNumberish],
    [string],
    "view"
  >;
  getFunction(
    nameOrSignature: "executeOrders"
  ): TypedContractMethod<
    [
      _digests: BytesLike[],
      _executorAddr: AddressLike,
      _updateData: BytesLike[],
      _publishTimes: BigNumberish[]
    ],
    [void],
    "payable"
  >;
  getFunction(
    nameOrSignature: "getOrderStatus"
  ): TypedContractMethod<[_digest: BytesLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "getOrders"
  ): TypedContractMethod<
    [trader: AddressLike, offset: BigNumberish, limit: BigNumberish],
    [IClientOrder.ClientOrderStructOutput[]],
    "view"
  >;
  getFunction(
    nameOrSignature: "getTrader"
  ): TypedContractMethod<[digest: BytesLike], [string], "view">;
  getFunction(
    nameOrSignature: "initialize"
  ): TypedContractMethod<
    [
      _perpetualManagerAddr: AddressLike,
      _perpetualId: BigNumberish,
      _iCancelDelaySec: BigNumberish
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "lastOrderHash"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "limitDigestsOfTrader"
  ): TypedContractMethod<
    [trader: AddressLike, page: BigNumberish, limit: BigNumberish],
    [string[]],
    "view"
  >;
  getFunction(
    nameOrSignature: "marketCloseSwitchTimestamp"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "numberOfDigestsOfTrader"
  ): TypedContractMethod<[trader: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "orderCount"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "orderDependency"
  ): TypedContractMethod<
    [arg0: BytesLike],
    [
      [string, string] & {
        parentChildDigest1: string;
        parentChildDigest2: string;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "orderOfDigest"
  ): TypedContractMethod<
    [arg0: BytesLike],
    [
      [
        bigint,
        bigint,
        bigint,
        string,
        bigint,
        string,
        bigint,
        bigint,
        bigint,
        string,
        bigint,
        bigint,
        bigint,
        string
      ] & {
        leverageTDR: bigint;
        brokerFeeTbps: bigint;
        iPerpetualId: bigint;
        traderAddr: string;
        executionTimestamp: bigint;
        brokerAddr: string;
        submittedTimestamp: bigint;
        flags: bigint;
        iDeadline: bigint;
        executorAddr: string;
        fAmount: bigint;
        fLimitPrice: bigint;
        fTriggerPrice: bigint;
        brokerSignature: string;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "perpManager"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "perpetualId"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "pollRange"
  ): TypedContractMethod<
    [_from: BigNumberish, _numElements: BigNumberish],
    [
      [IClientOrder.ClientOrderStructOutput[], string[], bigint[]] & {
        orders: IClientOrder.ClientOrderStructOutput[];
        orderHashes: string[];
        submittedTs: bigint[];
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "postOrders"
  ): TypedContractMethod<
    [_orders: IClientOrder.ClientOrderStruct[], _signatures: BytesLike[]],
    [void],
    "nonpayable"
  >;

  getEvent(
    key: "Callback"
  ): TypedContractEvent<
    CallbackEvent.InputTuple,
    CallbackEvent.OutputTuple,
    CallbackEvent.OutputObject
  >;
  getEvent(
    key: "ExecutionFailed"
  ): TypedContractEvent<
    ExecutionFailedEvent.InputTuple,
    ExecutionFailedEvent.OutputTuple,
    ExecutionFailedEvent.OutputObject
  >;
  getEvent(
    key: "Initialized"
  ): TypedContractEvent<
    InitializedEvent.InputTuple,
    InitializedEvent.OutputTuple,
    InitializedEvent.OutputObject
  >;
  getEvent(
    key: "PerpetualLimitOrderCreated"
  ): TypedContractEvent<
    PerpetualLimitOrderCreatedEvent.InputTuple,
    PerpetualLimitOrderCreatedEvent.OutputTuple,
    PerpetualLimitOrderCreatedEvent.OutputObject
  >;

  filters: {
    "Callback(address,bool,uint32)": TypedContractEvent<
      CallbackEvent.InputTuple,
      CallbackEvent.OutputTuple,
      CallbackEvent.OutputObject
    >;
    Callback: TypedContractEvent<
      CallbackEvent.InputTuple,
      CallbackEvent.OutputTuple,
      CallbackEvent.OutputObject
    >;

    "ExecutionFailed(uint24,address,bytes32,string)": TypedContractEvent<
      ExecutionFailedEvent.InputTuple,
      ExecutionFailedEvent.OutputTuple,
      ExecutionFailedEvent.OutputObject
    >;
    ExecutionFailed: TypedContractEvent<
      ExecutionFailedEvent.InputTuple,
      ExecutionFailedEvent.OutputTuple,
      ExecutionFailedEvent.OutputObject
    >;

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

    "PerpetualLimitOrderCreated(uint24,address,address,tuple,bytes32)": TypedContractEvent<
      PerpetualLimitOrderCreatedEvent.InputTuple,
      PerpetualLimitOrderCreatedEvent.OutputTuple,
      PerpetualLimitOrderCreatedEvent.OutputObject
    >;
    PerpetualLimitOrderCreated: TypedContractEvent<
      PerpetualLimitOrderCreatedEvent.InputTuple,
      PerpetualLimitOrderCreatedEvent.OutputTuple,
      PerpetualLimitOrderCreatedEvent.OutputObject
    >;
  };
}
