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 interface TokenMessengerInterface extends Interface {
    getFunction(nameOrSignature: 'acceptOwnership' | 'addLocalMinter' | 'addRemoteTokenMessenger' | 'depositForBurn' | 'depositForBurnWithCaller' | 'handleReceiveMessage' | 'localMessageTransmitter' | 'localMinter' | 'messageBodyVersion' | 'owner' | 'pendingOwner' | 'remoteTokenMessengers' | 'removeLocalMinter' | 'removeRemoteTokenMessenger' | 'replaceDepositForBurn' | 'rescueERC20' | 'rescuer' | 'transferOwnership' | 'updateRescuer'): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: 'DepositForBurn' | 'LocalMinterAdded' | 'LocalMinterRemoved' | 'MintAndWithdraw' | 'OwnershipTransferStarted' | 'OwnershipTransferred' | 'RemoteTokenMessengerAdded' | 'RemoteTokenMessengerRemoved' | 'RescuerChanged'): EventFragment;
    encodeFunctionData(functionFragment: 'acceptOwnership', values?: undefined): string;
    encodeFunctionData(functionFragment: 'addLocalMinter', values: [AddressLike]): string;
    encodeFunctionData(functionFragment: 'addRemoteTokenMessenger', values: [BigNumberish, BytesLike]): string;
    encodeFunctionData(functionFragment: 'depositForBurn', values: [BigNumberish, BigNumberish, BytesLike, AddressLike]): string;
    encodeFunctionData(functionFragment: 'depositForBurnWithCaller', values: [BigNumberish, BigNumberish, BytesLike, AddressLike, BytesLike]): string;
    encodeFunctionData(functionFragment: 'handleReceiveMessage', values: [BigNumberish, BytesLike, BytesLike]): string;
    encodeFunctionData(functionFragment: 'localMessageTransmitter', values?: undefined): string;
    encodeFunctionData(functionFragment: 'localMinter', values?: undefined): string;
    encodeFunctionData(functionFragment: 'messageBodyVersion', values?: undefined): string;
    encodeFunctionData(functionFragment: 'owner', values?: undefined): string;
    encodeFunctionData(functionFragment: 'pendingOwner', values?: undefined): string;
    encodeFunctionData(functionFragment: 'remoteTokenMessengers', values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: 'removeLocalMinter', values?: undefined): string;
    encodeFunctionData(functionFragment: 'removeRemoteTokenMessenger', values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: 'replaceDepositForBurn', values: [BytesLike, BytesLike, BytesLike, BytesLike]): string;
    encodeFunctionData(functionFragment: 'rescueERC20', values: [AddressLike, AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: 'rescuer', values?: undefined): string;
    encodeFunctionData(functionFragment: 'transferOwnership', values: [AddressLike]): string;
    encodeFunctionData(functionFragment: 'updateRescuer', values: [AddressLike]): string;
    decodeFunctionResult(functionFragment: 'acceptOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'addLocalMinter', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'addRemoteTokenMessenger', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'depositForBurn', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'depositForBurnWithCaller', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'handleReceiveMessage', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'localMessageTransmitter', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'localMinter', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'messageBodyVersion', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'pendingOwner', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'remoteTokenMessengers', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'removeLocalMinter', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'removeRemoteTokenMessenger', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'replaceDepositForBurn', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rescueERC20', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'rescuer', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'transferOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'updateRescuer', data: BytesLike): Result;
}
export declare namespace DepositForBurnEvent {
    type InputTuple = [
        nonce: BigNumberish,
        burnToken: AddressLike,
        amount: BigNumberish,
        depositor: AddressLike,
        mintRecipient: BytesLike,
        destinationDomain: BigNumberish,
        destinationTokenMessenger: BytesLike,
        destinationCaller: BytesLike
    ];
    type OutputTuple = [
        nonce: bigint,
        burnToken: string,
        amount: bigint,
        depositor: string,
        mintRecipient: string,
        destinationDomain: bigint,
        destinationTokenMessenger: string,
        destinationCaller: string
    ];
    interface OutputObject {
        nonce: bigint;
        burnToken: string;
        amount: bigint;
        depositor: string;
        mintRecipient: string;
        destinationDomain: bigint;
        destinationTokenMessenger: string;
        destinationCaller: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace LocalMinterAddedEvent {
    type InputTuple = [localMinter: AddressLike];
    type OutputTuple = [localMinter: string];
    interface OutputObject {
        localMinter: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace LocalMinterRemovedEvent {
    type InputTuple = [localMinter: AddressLike];
    type OutputTuple = [localMinter: string];
    interface OutputObject {
        localMinter: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace MintAndWithdrawEvent {
    type InputTuple = [
        mintRecipient: AddressLike,
        amount: BigNumberish,
        mintToken: AddressLike
    ];
    type OutputTuple = [
        mintRecipient: string,
        amount: bigint,
        mintToken: string
    ];
    interface OutputObject {
        mintRecipient: string;
        amount: bigint;
        mintToken: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace OwnershipTransferStartedEvent {
    type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike];
    type OutputTuple = [previousOwner: string, newOwner: string];
    interface OutputObject {
        previousOwner: string;
        newOwner: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace OwnershipTransferredEvent {
    type InputTuple = [previousOwner: AddressLike, newOwner: AddressLike];
    type OutputTuple = [previousOwner: string, newOwner: string];
    interface OutputObject {
        previousOwner: string;
        newOwner: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RemoteTokenMessengerAddedEvent {
    type InputTuple = [domain: BigNumberish, tokenMessenger: BytesLike];
    type OutputTuple = [domain: bigint, tokenMessenger: string];
    interface OutputObject {
        domain: bigint;
        tokenMessenger: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RemoteTokenMessengerRemovedEvent {
    type InputTuple = [domain: BigNumberish, tokenMessenger: BytesLike];
    type OutputTuple = [domain: bigint, tokenMessenger: string];
    interface OutputObject {
        domain: bigint;
        tokenMessenger: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RescuerChangedEvent {
    type InputTuple = [newRescuer: AddressLike];
    type OutputTuple = [newRescuer: string];
    interface OutputObject {
        newRescuer: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface TokenMessenger extends BaseContract {
    connect(runner?: ContractRunner | null): TokenMessenger;
    waitForDeployment(): Promise<this>;
    interface: TokenMessengerInterface;
    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>;
    acceptOwnership: TypedContractMethod<[], [void], 'nonpayable'>;
    addLocalMinter: TypedContractMethod<[
        newLocalMinter: AddressLike
    ], [
        void
    ], 'nonpayable'>;
    addRemoteTokenMessenger: TypedContractMethod<[
        domain: BigNumberish,
        tokenMessenger: BytesLike
    ], [
        void
    ], 'nonpayable'>;
    depositForBurn: TypedContractMethod<[
        amount: BigNumberish,
        destinationDomain: BigNumberish,
        mintRecipient: BytesLike,
        burnToken: AddressLike
    ], [
        bigint
    ], 'nonpayable'>;
    depositForBurnWithCaller: TypedContractMethod<[
        amount: BigNumberish,
        destinationDomain: BigNumberish,
        mintRecipient: BytesLike,
        burnToken: AddressLike,
        destinationCaller: BytesLike
    ], [
        bigint
    ], 'nonpayable'>;
    handleReceiveMessage: TypedContractMethod<[
        remoteDomain: BigNumberish,
        sender: BytesLike,
        messageBody: BytesLike
    ], [
        boolean
    ], 'nonpayable'>;
    localMessageTransmitter: TypedContractMethod<[], [string], 'view'>;
    localMinter: TypedContractMethod<[], [string], 'view'>;
    messageBodyVersion: TypedContractMethod<[], [bigint], 'view'>;
    owner: TypedContractMethod<[], [string], 'view'>;
    pendingOwner: TypedContractMethod<[], [string], 'view'>;
    remoteTokenMessengers: TypedContractMethod<[
        arg0: BigNumberish
    ], [
        string
    ], 'view'>;
    removeLocalMinter: TypedContractMethod<[], [void], 'nonpayable'>;
    removeRemoteTokenMessenger: TypedContractMethod<[
        domain: BigNumberish
    ], [
        void
    ], 'nonpayable'>;
    replaceDepositForBurn: TypedContractMethod<[
        originalMessage: BytesLike,
        originalAttestation: BytesLike,
        newDestinationCaller: BytesLike,
        newMintRecipient: BytesLike
    ], [
        void
    ], 'nonpayable'>;
    rescueERC20: TypedContractMethod<[
        tokenContract: AddressLike,
        to: AddressLike,
        amount: BigNumberish
    ], [
        void
    ], 'nonpayable'>;
    rescuer: TypedContractMethod<[], [string], 'view'>;
    transferOwnership: TypedContractMethod<[
        newOwner: AddressLike
    ], [
        void
    ], 'nonpayable'>;
    updateRescuer: TypedContractMethod<[
        newRescuer: AddressLike
    ], [
        void
    ], 'nonpayable'>;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: 'acceptOwnership'): TypedContractMethod<[], [void], 'nonpayable'>;
    getFunction(nameOrSignature: 'addLocalMinter'): TypedContractMethod<[newLocalMinter: AddressLike], [void], 'nonpayable'>;
    getFunction(nameOrSignature: 'addRemoteTokenMessenger'): TypedContractMethod<[
        domain: BigNumberish,
        tokenMessenger: BytesLike
    ], [
        void
    ], 'nonpayable'>;
    getFunction(nameOrSignature: 'depositForBurn'): TypedContractMethod<[
        amount: BigNumberish,
        destinationDomain: BigNumberish,
        mintRecipient: BytesLike,
        burnToken: AddressLike
    ], [
        bigint
    ], 'nonpayable'>;
    getFunction(nameOrSignature: 'depositForBurnWithCaller'): TypedContractMethod<[
        amount: BigNumberish,
        destinationDomain: BigNumberish,
        mintRecipient: BytesLike,
        burnToken: AddressLike,
        destinationCaller: BytesLike
    ], [
        bigint
    ], 'nonpayable'>;
    getFunction(nameOrSignature: 'handleReceiveMessage'): TypedContractMethod<[
        remoteDomain: BigNumberish,
        sender: BytesLike,
        messageBody: BytesLike
    ], [
        boolean
    ], 'nonpayable'>;
    getFunction(nameOrSignature: 'localMessageTransmitter'): TypedContractMethod<[], [string], 'view'>;
    getFunction(nameOrSignature: 'localMinter'): TypedContractMethod<[], [string], 'view'>;
    getFunction(nameOrSignature: 'messageBodyVersion'): TypedContractMethod<[], [bigint], 'view'>;
    getFunction(nameOrSignature: 'owner'): TypedContractMethod<[], [string], 'view'>;
    getFunction(nameOrSignature: 'pendingOwner'): TypedContractMethod<[], [string], 'view'>;
    getFunction(nameOrSignature: 'remoteTokenMessengers'): TypedContractMethod<[arg0: BigNumberish], [string], 'view'>;
    getFunction(nameOrSignature: 'removeLocalMinter'): TypedContractMethod<[], [void], 'nonpayable'>;
    getFunction(nameOrSignature: 'removeRemoteTokenMessenger'): TypedContractMethod<[domain: BigNumberish], [void], 'nonpayable'>;
    getFunction(nameOrSignature: 'replaceDepositForBurn'): TypedContractMethod<[
        originalMessage: BytesLike,
        originalAttestation: BytesLike,
        newDestinationCaller: BytesLike,
        newMintRecipient: BytesLike
    ], [
        void
    ], 'nonpayable'>;
    getFunction(nameOrSignature: 'rescueERC20'): TypedContractMethod<[
        tokenContract: AddressLike,
        to: AddressLike,
        amount: BigNumberish
    ], [
        void
    ], 'nonpayable'>;
    getFunction(nameOrSignature: 'rescuer'): TypedContractMethod<[], [string], 'view'>;
    getFunction(nameOrSignature: 'transferOwnership'): TypedContractMethod<[newOwner: AddressLike], [void], 'nonpayable'>;
    getFunction(nameOrSignature: 'updateRescuer'): TypedContractMethod<[newRescuer: AddressLike], [void], 'nonpayable'>;
    getEvent(key: 'DepositForBurn'): TypedContractEvent<DepositForBurnEvent.InputTuple, DepositForBurnEvent.OutputTuple, DepositForBurnEvent.OutputObject>;
    getEvent(key: 'LocalMinterAdded'): TypedContractEvent<LocalMinterAddedEvent.InputTuple, LocalMinterAddedEvent.OutputTuple, LocalMinterAddedEvent.OutputObject>;
    getEvent(key: 'LocalMinterRemoved'): TypedContractEvent<LocalMinterRemovedEvent.InputTuple, LocalMinterRemovedEvent.OutputTuple, LocalMinterRemovedEvent.OutputObject>;
    getEvent(key: 'MintAndWithdraw'): TypedContractEvent<MintAndWithdrawEvent.InputTuple, MintAndWithdrawEvent.OutputTuple, MintAndWithdrawEvent.OutputObject>;
    getEvent(key: 'OwnershipTransferStarted'): TypedContractEvent<OwnershipTransferStartedEvent.InputTuple, OwnershipTransferStartedEvent.OutputTuple, OwnershipTransferStartedEvent.OutputObject>;
    getEvent(key: 'OwnershipTransferred'): TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
    getEvent(key: 'RemoteTokenMessengerAdded'): TypedContractEvent<RemoteTokenMessengerAddedEvent.InputTuple, RemoteTokenMessengerAddedEvent.OutputTuple, RemoteTokenMessengerAddedEvent.OutputObject>;
    getEvent(key: 'RemoteTokenMessengerRemoved'): TypedContractEvent<RemoteTokenMessengerRemovedEvent.InputTuple, RemoteTokenMessengerRemovedEvent.OutputTuple, RemoteTokenMessengerRemovedEvent.OutputObject>;
    getEvent(key: 'RescuerChanged'): TypedContractEvent<RescuerChangedEvent.InputTuple, RescuerChangedEvent.OutputTuple, RescuerChangedEvent.OutputObject>;
    filters: {
        'DepositForBurn(uint64,address,uint256,address,bytes32,uint32,bytes32,bytes32)': TypedContractEvent<DepositForBurnEvent.InputTuple, DepositForBurnEvent.OutputTuple, DepositForBurnEvent.OutputObject>;
        DepositForBurn: TypedContractEvent<DepositForBurnEvent.InputTuple, DepositForBurnEvent.OutputTuple, DepositForBurnEvent.OutputObject>;
        'LocalMinterAdded(address)': TypedContractEvent<LocalMinterAddedEvent.InputTuple, LocalMinterAddedEvent.OutputTuple, LocalMinterAddedEvent.OutputObject>;
        LocalMinterAdded: TypedContractEvent<LocalMinterAddedEvent.InputTuple, LocalMinterAddedEvent.OutputTuple, LocalMinterAddedEvent.OutputObject>;
        'LocalMinterRemoved(address)': TypedContractEvent<LocalMinterRemovedEvent.InputTuple, LocalMinterRemovedEvent.OutputTuple, LocalMinterRemovedEvent.OutputObject>;
        LocalMinterRemoved: TypedContractEvent<LocalMinterRemovedEvent.InputTuple, LocalMinterRemovedEvent.OutputTuple, LocalMinterRemovedEvent.OutputObject>;
        'MintAndWithdraw(address,uint256,address)': TypedContractEvent<MintAndWithdrawEvent.InputTuple, MintAndWithdrawEvent.OutputTuple, MintAndWithdrawEvent.OutputObject>;
        MintAndWithdraw: TypedContractEvent<MintAndWithdrawEvent.InputTuple, MintAndWithdrawEvent.OutputTuple, MintAndWithdrawEvent.OutputObject>;
        'OwnershipTransferStarted(address,address)': TypedContractEvent<OwnershipTransferStartedEvent.InputTuple, OwnershipTransferStartedEvent.OutputTuple, OwnershipTransferStartedEvent.OutputObject>;
        OwnershipTransferStarted: TypedContractEvent<OwnershipTransferStartedEvent.InputTuple, OwnershipTransferStartedEvent.OutputTuple, OwnershipTransferStartedEvent.OutputObject>;
        'OwnershipTransferred(address,address)': TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
        OwnershipTransferred: TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
        'RemoteTokenMessengerAdded(uint32,bytes32)': TypedContractEvent<RemoteTokenMessengerAddedEvent.InputTuple, RemoteTokenMessengerAddedEvent.OutputTuple, RemoteTokenMessengerAddedEvent.OutputObject>;
        RemoteTokenMessengerAdded: TypedContractEvent<RemoteTokenMessengerAddedEvent.InputTuple, RemoteTokenMessengerAddedEvent.OutputTuple, RemoteTokenMessengerAddedEvent.OutputObject>;
        'RemoteTokenMessengerRemoved(uint32,bytes32)': TypedContractEvent<RemoteTokenMessengerRemovedEvent.InputTuple, RemoteTokenMessengerRemovedEvent.OutputTuple, RemoteTokenMessengerRemovedEvent.OutputObject>;
        RemoteTokenMessengerRemoved: TypedContractEvent<RemoteTokenMessengerRemovedEvent.InputTuple, RemoteTokenMessengerRemovedEvent.OutputTuple, RemoteTokenMessengerRemovedEvent.OutputObject>;
        'RescuerChanged(address)': TypedContractEvent<RescuerChangedEvent.InputTuple, RescuerChangedEvent.OutputTuple, RescuerChangedEvent.OutputObject>;
        RescuerChanged: TypedContractEvent<RescuerChangedEvent.InputTuple, RescuerChangedEvent.OutputTuple, RescuerChangedEvent.OutputObject>;
    };
}
//# sourceMappingURL=TokenMessenger.d.ts.map