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 ClaimStruct = {
    stateRoot: BytesLike;
    claimer: AddressLike;
    timestampClaimed: BigNumberish;
    timestampVerification: BigNumberish;
    blocknumberVerification: BigNumberish;
    honest: BigNumberish;
    challenger: AddressLike;
};
export type ClaimStructOutput = [
    stateRoot: string,
    claimer: string,
    timestampClaimed: bigint,
    timestampVerification: bigint,
    blocknumberVerification: bigint,
    honest: bigint,
    challenger: string
] & {
    stateRoot: string;
    claimer: string;
    timestampClaimed: bigint;
    timestampVerification: bigint;
    blocknumberVerification: bigint;
    honest: bigint;
    challenger: string;
};
export interface RouterArbToGnosisInterface extends Interface {
    getFunction(nameOrSignature: "amb" | "bridge" | "executeSequencerDelayLimitDecreaseRequest" | "route" | "sequencerDelayLimit" | "sequencerDelayLimitDecreaseRequest" | "updateSequencerDelayLimit" | "veaInboxArbToGnosis" | "veaOutboxArbToGnosis"): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: "Routed" | "SequencerDelayLimitDecreaseRequested" | "SequencerDelayLimitSent" | "SequencerDelayLimitUpdated"): EventFragment;
    encodeFunctionData(functionFragment: "amb", values?: undefined): string;
    encodeFunctionData(functionFragment: "bridge", values?: undefined): string;
    encodeFunctionData(functionFragment: "executeSequencerDelayLimitDecreaseRequest", values?: undefined): string;
    encodeFunctionData(functionFragment: "route", values: [BigNumberish, BytesLike, BigNumberish, ClaimStruct]): string;
    encodeFunctionData(functionFragment: "sequencerDelayLimit", values?: undefined): string;
    encodeFunctionData(functionFragment: "sequencerDelayLimitDecreaseRequest", values?: undefined): string;
    encodeFunctionData(functionFragment: "updateSequencerDelayLimit", values?: undefined): string;
    encodeFunctionData(functionFragment: "veaInboxArbToGnosis", values?: undefined): string;
    encodeFunctionData(functionFragment: "veaOutboxArbToGnosis", values?: undefined): string;
    decodeFunctionResult(functionFragment: "amb", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "bridge", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "executeSequencerDelayLimitDecreaseRequest", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "route", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "sequencerDelayLimit", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "sequencerDelayLimitDecreaseRequest", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "updateSequencerDelayLimit", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "veaInboxArbToGnosis", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "veaOutboxArbToGnosis", data: BytesLike): Result;
}
export declare namespace RoutedEvent {
    type InputTuple = [_epoch: BigNumberish, _ticketID: BytesLike];
    type OutputTuple = [_epoch: bigint, _ticketID: string];
    interface OutputObject {
        _epoch: bigint;
        _ticketID: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SequencerDelayLimitDecreaseRequestedEvent {
    type InputTuple = [_requestedSequencerDelayLimit: BigNumberish];
    type OutputTuple = [_requestedSequencerDelayLimit: bigint];
    interface OutputObject {
        _requestedSequencerDelayLimit: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SequencerDelayLimitSentEvent {
    type InputTuple = [_ticketID: BytesLike];
    type OutputTuple = [_ticketID: string];
    interface OutputObject {
        _ticketID: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SequencerDelayLimitUpdatedEvent {
    type InputTuple = [_newSequencerDelayLimit: BigNumberish];
    type OutputTuple = [_newSequencerDelayLimit: bigint];
    interface OutputObject {
        _newSequencerDelayLimit: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface RouterArbToGnosis extends BaseContract {
    connect(runner?: ContractRunner | null): RouterArbToGnosis;
    waitForDeployment(): Promise<this>;
    interface: RouterArbToGnosisInterface;
    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>;
    amb: TypedContractMethod<[], [string], "view">;
    bridge: TypedContractMethod<[], [string], "view">;
    executeSequencerDelayLimitDecreaseRequest: TypedContractMethod<[
    ], [
        void
    ], "nonpayable">;
    route: TypedContractMethod<[
        _epoch: BigNumberish,
        _stateroot: BytesLike,
        _gasLimit: BigNumberish,
        _claim: ClaimStruct
    ], [
        void
    ], "nonpayable">;
    sequencerDelayLimit: TypedContractMethod<[], [bigint], "view">;
    sequencerDelayLimitDecreaseRequest: TypedContractMethod<[
    ], [
        [bigint, bigint] & {
            requestedSequencerLimit: bigint;
            timestamp: bigint;
        }
    ], "view">;
    updateSequencerDelayLimit: TypedContractMethod<[], [void], "nonpayable">;
    veaInboxArbToGnosis: TypedContractMethod<[], [string], "view">;
    veaOutboxArbToGnosis: TypedContractMethod<[], [string], "view">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "amb"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "bridge"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "executeSequencerDelayLimitDecreaseRequest"): TypedContractMethod<[], [void], "nonpayable">;
    getFunction(nameOrSignature: "route"): TypedContractMethod<[
        _epoch: BigNumberish,
        _stateroot: BytesLike,
        _gasLimit: BigNumberish,
        _claim: ClaimStruct
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "sequencerDelayLimit"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "sequencerDelayLimitDecreaseRequest"): TypedContractMethod<[
    ], [
        [bigint, bigint] & {
            requestedSequencerLimit: bigint;
            timestamp: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "updateSequencerDelayLimit"): TypedContractMethod<[], [void], "nonpayable">;
    getFunction(nameOrSignature: "veaInboxArbToGnosis"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "veaOutboxArbToGnosis"): TypedContractMethod<[], [string], "view">;
    getEvent(key: "Routed"): TypedContractEvent<RoutedEvent.InputTuple, RoutedEvent.OutputTuple, RoutedEvent.OutputObject>;
    getEvent(key: "SequencerDelayLimitDecreaseRequested"): TypedContractEvent<SequencerDelayLimitDecreaseRequestedEvent.InputTuple, SequencerDelayLimitDecreaseRequestedEvent.OutputTuple, SequencerDelayLimitDecreaseRequestedEvent.OutputObject>;
    getEvent(key: "SequencerDelayLimitSent"): TypedContractEvent<SequencerDelayLimitSentEvent.InputTuple, SequencerDelayLimitSentEvent.OutputTuple, SequencerDelayLimitSentEvent.OutputObject>;
    getEvent(key: "SequencerDelayLimitUpdated"): TypedContractEvent<SequencerDelayLimitUpdatedEvent.InputTuple, SequencerDelayLimitUpdatedEvent.OutputTuple, SequencerDelayLimitUpdatedEvent.OutputObject>;
    filters: {
        "Routed(uint256,bytes32)": TypedContractEvent<RoutedEvent.InputTuple, RoutedEvent.OutputTuple, RoutedEvent.OutputObject>;
        Routed: TypedContractEvent<RoutedEvent.InputTuple, RoutedEvent.OutputTuple, RoutedEvent.OutputObject>;
        "SequencerDelayLimitDecreaseRequested(uint256)": TypedContractEvent<SequencerDelayLimitDecreaseRequestedEvent.InputTuple, SequencerDelayLimitDecreaseRequestedEvent.OutputTuple, SequencerDelayLimitDecreaseRequestedEvent.OutputObject>;
        SequencerDelayLimitDecreaseRequested: TypedContractEvent<SequencerDelayLimitDecreaseRequestedEvent.InputTuple, SequencerDelayLimitDecreaseRequestedEvent.OutputTuple, SequencerDelayLimitDecreaseRequestedEvent.OutputObject>;
        "SequencerDelayLimitSent(bytes32)": TypedContractEvent<SequencerDelayLimitSentEvent.InputTuple, SequencerDelayLimitSentEvent.OutputTuple, SequencerDelayLimitSentEvent.OutputObject>;
        SequencerDelayLimitSent: TypedContractEvent<SequencerDelayLimitSentEvent.InputTuple, SequencerDelayLimitSentEvent.OutputTuple, SequencerDelayLimitSentEvent.OutputObject>;
        "SequencerDelayLimitUpdated(uint256)": TypedContractEvent<SequencerDelayLimitUpdatedEvent.InputTuple, SequencerDelayLimitUpdatedEvent.OutputTuple, SequencerDelayLimitUpdatedEvent.OutputObject>;
        SequencerDelayLimitUpdated: TypedContractEvent<SequencerDelayLimitUpdatedEvent.InputTuple, SequencerDelayLimitUpdatedEvent.OutputTuple, SequencerDelayLimitUpdatedEvent.OutputObject>;
    };
}
