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 InterchainGasPaymaster {
    type DomainGasConfigStruct = {
        gasOracle: AddressLike;
        gasOverhead: BigNumberish;
    };
    type DomainGasConfigStructOutput = [
        gasOracle: string,
        gasOverhead: bigint
    ] & {
        gasOracle: string;
        gasOverhead: bigint;
    };
    type GasParamStruct = {
        remoteDomain: BigNumberish;
        config: InterchainGasPaymaster.DomainGasConfigStruct;
    };
    type GasParamStructOutput = [
        remoteDomain: bigint,
        config: InterchainGasPaymaster.DomainGasConfigStructOutput
    ] & {
        remoteDomain: bigint;
        config: InterchainGasPaymaster.DomainGasConfigStructOutput;
    };
}
export interface InterchainGasPaymasterInterface extends Interface {
    getFunction(nameOrSignature: "PACKAGE_VERSION" | "beneficiary" | "claim" | "deployedBlock" | "destinationGasConfigs" | "destinationGasLimit" | "getExchangeRateAndGasPrice" | "hookType" | "initialize" | "owner" | "payForGas" | "postDispatch" | "quoteDispatch" | "quoteGasPayment" | "renounceOwnership" | "setBeneficiary" | "setDestinationGasConfigs" | "supportsMetadata" | "transferOwnership"): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: "BeneficiarySet" | "DestinationGasConfigSet" | "GasPayment" | "Initialized" | "OwnershipTransferred"): EventFragment;
    encodeFunctionData(functionFragment: "PACKAGE_VERSION", values?: undefined): string;
    encodeFunctionData(functionFragment: "beneficiary", values?: undefined): string;
    encodeFunctionData(functionFragment: "claim", values?: undefined): string;
    encodeFunctionData(functionFragment: "deployedBlock", values?: undefined): string;
    encodeFunctionData(functionFragment: "destinationGasConfigs", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "destinationGasLimit", values: [BigNumberish, BigNumberish]): string;
    encodeFunctionData(functionFragment: "getExchangeRateAndGasPrice", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "hookType", values?: undefined): string;
    encodeFunctionData(functionFragment: "initialize", values: [AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "owner", values?: undefined): string;
    encodeFunctionData(functionFragment: "payForGas", values: [BytesLike, BigNumberish, BigNumberish, AddressLike]): string;
    encodeFunctionData(functionFragment: "postDispatch", values: [BytesLike, BytesLike]): string;
    encodeFunctionData(functionFragment: "quoteDispatch", values: [BytesLike, BytesLike]): string;
    encodeFunctionData(functionFragment: "quoteGasPayment", values: [BigNumberish, BigNumberish]): string;
    encodeFunctionData(functionFragment: "renounceOwnership", values?: undefined): string;
    encodeFunctionData(functionFragment: "setBeneficiary", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "setDestinationGasConfigs", values: [InterchainGasPaymaster.GasParamStruct[]]): string;
    encodeFunctionData(functionFragment: "supportsMetadata", values: [BytesLike]): string;
    encodeFunctionData(functionFragment: "transferOwnership", values: [AddressLike]): string;
    decodeFunctionResult(functionFragment: "PACKAGE_VERSION", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "beneficiary", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "claim", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "deployedBlock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "destinationGasConfigs", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "destinationGasLimit", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getExchangeRateAndGasPrice", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hookType", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "payForGas", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "postDispatch", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "quoteDispatch", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "quoteGasPayment", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "renounceOwnership", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setBeneficiary", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setDestinationGasConfigs", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "supportsMetadata", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "transferOwnership", data: BytesLike): Result;
}
export declare namespace BeneficiarySetEvent {
    type InputTuple = [beneficiary: AddressLike];
    type OutputTuple = [beneficiary: string];
    interface OutputObject {
        beneficiary: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace DestinationGasConfigSetEvent {
    type InputTuple = [
        remoteDomain: BigNumberish,
        gasOracle: AddressLike,
        gasOverhead: BigNumberish
    ];
    type OutputTuple = [
        remoteDomain: bigint,
        gasOracle: string,
        gasOverhead: bigint
    ];
    interface OutputObject {
        remoteDomain: bigint;
        gasOracle: string;
        gasOverhead: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace GasPaymentEvent {
    type InputTuple = [
        messageId: BytesLike,
        destinationDomain: BigNumberish,
        gasAmount: BigNumberish,
        payment: BigNumberish
    ];
    type OutputTuple = [
        messageId: string,
        destinationDomain: bigint,
        gasAmount: bigint,
        payment: bigint
    ];
    interface OutputObject {
        messageId: string;
        destinationDomain: bigint;
        gasAmount: bigint;
        payment: bigint;
    }
    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 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 interface InterchainGasPaymaster extends BaseContract {
    connect(runner?: ContractRunner | null): InterchainGasPaymaster;
    waitForDeployment(): Promise<this>;
    interface: InterchainGasPaymasterInterface;
    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>;
    PACKAGE_VERSION: TypedContractMethod<[], [string], "view">;
    beneficiary: TypedContractMethod<[], [string], "view">;
    claim: TypedContractMethod<[], [void], "nonpayable">;
    deployedBlock: TypedContractMethod<[], [bigint], "view">;
    destinationGasConfigs: TypedContractMethod<[
        arg0: BigNumberish
    ], [
        [string, bigint] & {
            gasOracle: string;
            gasOverhead: bigint;
        }
    ], "view">;
    destinationGasLimit: TypedContractMethod<[
        _destinationDomain: BigNumberish,
        _gasLimit: BigNumberish
    ], [
        bigint
    ], "view">;
    getExchangeRateAndGasPrice: TypedContractMethod<[
        _destinationDomain: BigNumberish
    ], [
        [bigint, bigint] & {
            tokenExchangeRate: bigint;
            gasPrice: bigint;
        }
    ], "view">;
    hookType: TypedContractMethod<[], [bigint], "view">;
    initialize: TypedContractMethod<[
        _owner: AddressLike,
        _beneficiary: AddressLike
    ], [
        void
    ], "nonpayable">;
    owner: TypedContractMethod<[], [string], "view">;
    payForGas: TypedContractMethod<[
        _messageId: BytesLike,
        _destinationDomain: BigNumberish,
        _gasLimit: BigNumberish,
        _refundAddress: AddressLike
    ], [
        void
    ], "payable">;
    postDispatch: TypedContractMethod<[
        metadata: BytesLike,
        message: BytesLike
    ], [
        void
    ], "payable">;
    quoteDispatch: TypedContractMethod<[
        metadata: BytesLike,
        message: BytesLike
    ], [
        bigint
    ], "view">;
    quoteGasPayment: TypedContractMethod<[
        _destinationDomain: BigNumberish,
        _gasLimit: BigNumberish
    ], [
        bigint
    ], "view">;
    renounceOwnership: TypedContractMethod<[], [void], "nonpayable">;
    setBeneficiary: TypedContractMethod<[
        _beneficiary: AddressLike
    ], [
        void
    ], "nonpayable">;
    setDestinationGasConfigs: TypedContractMethod<[
        _configs: InterchainGasPaymaster.GasParamStruct[]
    ], [
        void
    ], "nonpayable">;
    supportsMetadata: TypedContractMethod<[
        metadata: BytesLike
    ], [
        boolean
    ], "view">;
    transferOwnership: TypedContractMethod<[
        newOwner: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "PACKAGE_VERSION"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "beneficiary"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "claim"): TypedContractMethod<[], [void], "nonpayable">;
    getFunction(nameOrSignature: "deployedBlock"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "destinationGasConfigs"): TypedContractMethod<[
        arg0: BigNumberish
    ], [
        [string, bigint] & {
            gasOracle: string;
            gasOverhead: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "destinationGasLimit"): TypedContractMethod<[
        _destinationDomain: BigNumberish,
        _gasLimit: BigNumberish
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "getExchangeRateAndGasPrice"): TypedContractMethod<[
        _destinationDomain: BigNumberish
    ], [
        [bigint, bigint] & {
            tokenExchangeRate: bigint;
            gasPrice: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "hookType"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "initialize"): TypedContractMethod<[
        _owner: AddressLike,
        _beneficiary: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "owner"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "payForGas"): TypedContractMethod<[
        _messageId: BytesLike,
        _destinationDomain: BigNumberish,
        _gasLimit: BigNumberish,
        _refundAddress: AddressLike
    ], [
        void
    ], "payable">;
    getFunction(nameOrSignature: "postDispatch"): TypedContractMethod<[
        metadata: BytesLike,
        message: BytesLike
    ], [
        void
    ], "payable">;
    getFunction(nameOrSignature: "quoteDispatch"): TypedContractMethod<[
        metadata: BytesLike,
        message: BytesLike
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "quoteGasPayment"): TypedContractMethod<[
        _destinationDomain: BigNumberish,
        _gasLimit: BigNumberish
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "renounceOwnership"): TypedContractMethod<[], [void], "nonpayable">;
    getFunction(nameOrSignature: "setBeneficiary"): TypedContractMethod<[_beneficiary: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "setDestinationGasConfigs"): TypedContractMethod<[
        _configs: InterchainGasPaymaster.GasParamStruct[]
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "supportsMetadata"): TypedContractMethod<[metadata: BytesLike], [boolean], "view">;
    getFunction(nameOrSignature: "transferOwnership"): TypedContractMethod<[newOwner: AddressLike], [void], "nonpayable">;
    getEvent(key: "BeneficiarySet"): TypedContractEvent<BeneficiarySetEvent.InputTuple, BeneficiarySetEvent.OutputTuple, BeneficiarySetEvent.OutputObject>;
    getEvent(key: "DestinationGasConfigSet"): TypedContractEvent<DestinationGasConfigSetEvent.InputTuple, DestinationGasConfigSetEvent.OutputTuple, DestinationGasConfigSetEvent.OutputObject>;
    getEvent(key: "GasPayment"): TypedContractEvent<GasPaymentEvent.InputTuple, GasPaymentEvent.OutputTuple, GasPaymentEvent.OutputObject>;
    getEvent(key: "Initialized"): TypedContractEvent<InitializedEvent.InputTuple, InitializedEvent.OutputTuple, InitializedEvent.OutputObject>;
    getEvent(key: "OwnershipTransferred"): TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
    filters: {
        "BeneficiarySet(address)": TypedContractEvent<BeneficiarySetEvent.InputTuple, BeneficiarySetEvent.OutputTuple, BeneficiarySetEvent.OutputObject>;
        BeneficiarySet: TypedContractEvent<BeneficiarySetEvent.InputTuple, BeneficiarySetEvent.OutputTuple, BeneficiarySetEvent.OutputObject>;
        "DestinationGasConfigSet(uint32,address,uint96)": TypedContractEvent<DestinationGasConfigSetEvent.InputTuple, DestinationGasConfigSetEvent.OutputTuple, DestinationGasConfigSetEvent.OutputObject>;
        DestinationGasConfigSet: TypedContractEvent<DestinationGasConfigSetEvent.InputTuple, DestinationGasConfigSetEvent.OutputTuple, DestinationGasConfigSetEvent.OutputObject>;
        "GasPayment(bytes32,uint32,uint256,uint256)": TypedContractEvent<GasPaymentEvent.InputTuple, GasPaymentEvent.OutputTuple, GasPaymentEvent.OutputObject>;
        GasPayment: TypedContractEvent<GasPaymentEvent.InputTuple, GasPaymentEvent.OutputTuple, GasPaymentEvent.OutputObject>;
        "Initialized(uint8)": TypedContractEvent<InitializedEvent.InputTuple, InitializedEvent.OutputTuple, InitializedEvent.OutputObject>;
        Initialized: TypedContractEvent<InitializedEvent.InputTuple, InitializedEvent.OutputTuple, InitializedEvent.OutputObject>;
        "OwnershipTransferred(address,address)": TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
        OwnershipTransferred: TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
    };
}
//# sourceMappingURL=InterchainGasPaymaster.d.ts.map