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 {
    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;
    };
    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 {
    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;
    };
    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 declare namespace CallbackEvent {
    type InputTuple = [
        callbackTarget: AddressLike,
        success: boolean,
        gasLimit: BigNumberish
    ];
    type OutputTuple = [
        callbackTarget: string,
        success: boolean,
        gasLimit: bigint
    ];
    interface OutputObject {
        callbackTarget: string;
        success: boolean;
        gasLimit: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace ExecutionFailedEvent {
    type InputTuple = [
        perpetualId: BigNumberish,
        trader: AddressLike,
        digest: BytesLike,
        reason: string
    ];
    type OutputTuple = [
        perpetualId: bigint,
        trader: string,
        digest: string,
        reason: string
    ];
    interface OutputObject {
        perpetualId: bigint;
        trader: string;
        digest: string;
        reason: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace InitializedEvent {
    type InputTuple = [version: BigNumberish];
    type OutputTuple = [version: bigint];
    interface OutputObject {
        version: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace PerpetualLimitOrderCreatedEvent {
    type InputTuple = [
        perpetualId: BigNumberish,
        trader: AddressLike,
        brokerAddr: AddressLike,
        order: IPerpetualOrder.OrderStruct,
        digest: BytesLike
    ];
    type OutputTuple = [
        perpetualId: bigint,
        trader: string,
        brokerAddr: string,
        order: IPerpetualOrder.OrderStructOutput,
        digest: string
    ];
    interface OutputObject {
        perpetualId: bigint;
        trader: string;
        brokerAddr: string;
        order: IPerpetualOrder.OrderStructOutput;
        digest: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    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>;
    };
}
