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 BLS {
    type PointG2Struct = {
        x: [BigNumberish, BigNumberish];
        y: [BigNumberish, BigNumberish];
    };
    type PointG2StructOutput = [
        x: [bigint, bigint],
        y: [bigint, bigint]
    ] & {
        x: [bigint, bigint];
        y: [bigint, bigint];
    };
}
export declare namespace TypesLib {
    type CiphertextStruct = {
        u: BLS.PointG2Struct;
        v: BytesLike;
        w: BytesLike;
    };
    type CiphertextStructOutput = [
        u: BLS.PointG2StructOutput,
        v: string,
        w: string
    ] & {
        u: BLS.PointG2StructOutput;
        v: string;
        w: string;
    };
}
export interface MockBlocklockRevertingReceiverInterface extends Interface {
    getFunction(nameOrSignature: "acceptOwnership" | "blocklock" | "createSubscriptionAndFundNative" | "createTimelockRequestWithDirectFunding" | "createTimelockRequestWithSubscription" | "encryptedValue" | "fundContractNative" | "getBalance" | "owner" | "plainTextValue" | "receiveBlocklock" | "requestId" | "setBlocklock" | "setSubId" | "subscriptionId" | "topUpSubscriptionNative" | "transferOwnership" | "updateSubscription" | "withdrawNative"): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: "Funded" | "NewSubscriptionId" | "OwnershipTransferRequested" | "OwnershipTransferred" | "Received" | "Withdrawn"): EventFragment;
    encodeFunctionData(functionFragment: "acceptOwnership", values?: undefined): string;
    encodeFunctionData(functionFragment: "blocklock", values?: undefined): string;
    encodeFunctionData(functionFragment: "createSubscriptionAndFundNative", values?: undefined): string;
    encodeFunctionData(functionFragment: "createTimelockRequestWithDirectFunding", values: [BigNumberish, BytesLike, TypesLib.CiphertextStruct]): string;
    encodeFunctionData(functionFragment: "createTimelockRequestWithSubscription", values: [BigNumberish, BytesLike, TypesLib.CiphertextStruct]): string;
    encodeFunctionData(functionFragment: "encryptedValue", values?: undefined): string;
    encodeFunctionData(functionFragment: "fundContractNative", values?: undefined): string;
    encodeFunctionData(functionFragment: "getBalance", values?: undefined): string;
    encodeFunctionData(functionFragment: "owner", values?: undefined): string;
    encodeFunctionData(functionFragment: "plainTextValue", values?: undefined): string;
    encodeFunctionData(functionFragment: "receiveBlocklock", values: [BigNumberish, BytesLike]): string;
    encodeFunctionData(functionFragment: "requestId", values?: undefined): string;
    encodeFunctionData(functionFragment: "setBlocklock", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "setSubId", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "subscriptionId", values?: undefined): string;
    encodeFunctionData(functionFragment: "topUpSubscriptionNative", values?: undefined): string;
    encodeFunctionData(functionFragment: "transferOwnership", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "updateSubscription", values: [AddressLike[]]): string;
    encodeFunctionData(functionFragment: "withdrawNative", values: [BigNumberish, AddressLike]): string;
    decodeFunctionResult(functionFragment: "acceptOwnership", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "blocklock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "createSubscriptionAndFundNative", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "createTimelockRequestWithDirectFunding", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "createTimelockRequestWithSubscription", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "encryptedValue", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "fundContractNative", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getBalance", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "plainTextValue", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "receiveBlocklock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "requestId", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setBlocklock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setSubId", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "subscriptionId", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "topUpSubscriptionNative", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "transferOwnership", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "updateSubscription", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "withdrawNative", data: BytesLike): Result;
}
export declare namespace FundedEvent {
    type InputTuple = [sender: AddressLike, amount: BigNumberish];
    type OutputTuple = [sender: string, amount: bigint];
    interface OutputObject {
        sender: string;
        amount: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace NewSubscriptionIdEvent {
    type InputTuple = [subscriptionId: BigNumberish];
    type OutputTuple = [subscriptionId: bigint];
    interface OutputObject {
        subscriptionId: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace OwnershipTransferRequestedEvent {
    type InputTuple = [from: AddressLike, to: AddressLike];
    type OutputTuple = [from: string, to: string];
    interface OutputObject {
        from: string;
        to: 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 = [from: AddressLike, to: AddressLike];
    type OutputTuple = [from: string, to: string];
    interface OutputObject {
        from: string;
        to: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace ReceivedEvent {
    type InputTuple = [arg0: AddressLike, arg1: BigNumberish];
    type OutputTuple = [arg0: string, arg1: bigint];
    interface OutputObject {
        arg0: string;
        arg1: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace WithdrawnEvent {
    type InputTuple = [recipient: AddressLike, amount: BigNumberish];
    type OutputTuple = [recipient: string, amount: bigint];
    interface OutputObject {
        recipient: string;
        amount: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface MockBlocklockRevertingReceiver extends BaseContract {
    connect(runner?: ContractRunner | null): MockBlocklockRevertingReceiver;
    waitForDeployment(): Promise<this>;
    interface: MockBlocklockRevertingReceiverInterface;
    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">;
    blocklock: TypedContractMethod<[], [string], "view">;
    createSubscriptionAndFundNative: TypedContractMethod<[], [void], "payable">;
    createTimelockRequestWithDirectFunding: TypedContractMethod<[
        callbackGasLimit: BigNumberish,
        condition: BytesLike,
        encryptedData: TypesLib.CiphertextStruct
    ], [
        [bigint, bigint]
    ], "nonpayable">;
    createTimelockRequestWithSubscription: TypedContractMethod<[
        callbackGasLimit: BigNumberish,
        condition: BytesLike,
        encryptedData: TypesLib.CiphertextStruct
    ], [
        bigint
    ], "payable">;
    encryptedValue: TypedContractMethod<[
    ], [
        [
            BLS.PointG2StructOutput,
            string,
            string
        ] & {
            u: BLS.PointG2StructOutput;
            v: string;
            w: string;
        }
    ], "view">;
    fundContractNative: TypedContractMethod<[], [void], "payable">;
    getBalance: TypedContractMethod<[], [bigint], "view">;
    owner: TypedContractMethod<[], [string], "view">;
    plainTextValue: TypedContractMethod<[], [bigint], "view">;
    receiveBlocklock: TypedContractMethod<[
        requestID: BigNumberish,
        decryptionKey: BytesLike
    ], [
        void
    ], "nonpayable">;
    requestId: TypedContractMethod<[], [bigint], "view">;
    setBlocklock: TypedContractMethod<[
        _blocklock: AddressLike
    ], [
        void
    ], "nonpayable">;
    setSubId: TypedContractMethod<[subId: BigNumberish], [void], "nonpayable">;
    subscriptionId: TypedContractMethod<[], [bigint], "view">;
    topUpSubscriptionNative: TypedContractMethod<[], [void], "payable">;
    transferOwnership: TypedContractMethod<[
        to: AddressLike
    ], [
        void
    ], "nonpayable">;
    updateSubscription: TypedContractMethod<[
        consumers: AddressLike[]
    ], [
        void
    ], "nonpayable">;
    withdrawNative: TypedContractMethod<[
        amount: BigNumberish,
        recipient: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "acceptOwnership"): TypedContractMethod<[], [void], "nonpayable">;
    getFunction(nameOrSignature: "blocklock"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "createSubscriptionAndFundNative"): TypedContractMethod<[], [void], "payable">;
    getFunction(nameOrSignature: "createTimelockRequestWithDirectFunding"): TypedContractMethod<[
        callbackGasLimit: BigNumberish,
        condition: BytesLike,
        encryptedData: TypesLib.CiphertextStruct
    ], [
        [bigint, bigint]
    ], "nonpayable">;
    getFunction(nameOrSignature: "createTimelockRequestWithSubscription"): TypedContractMethod<[
        callbackGasLimit: BigNumberish,
        condition: BytesLike,
        encryptedData: TypesLib.CiphertextStruct
    ], [
        bigint
    ], "payable">;
    getFunction(nameOrSignature: "encryptedValue"): TypedContractMethod<[
    ], [
        [
            BLS.PointG2StructOutput,
            string,
            string
        ] & {
            u: BLS.PointG2StructOutput;
            v: string;
            w: string;
        }
    ], "view">;
    getFunction(nameOrSignature: "fundContractNative"): TypedContractMethod<[], [void], "payable">;
    getFunction(nameOrSignature: "getBalance"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "owner"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "plainTextValue"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "receiveBlocklock"): TypedContractMethod<[
        requestID: BigNumberish,
        decryptionKey: BytesLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "requestId"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "setBlocklock"): TypedContractMethod<[_blocklock: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "setSubId"): TypedContractMethod<[subId: BigNumberish], [void], "nonpayable">;
    getFunction(nameOrSignature: "subscriptionId"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "topUpSubscriptionNative"): TypedContractMethod<[], [void], "payable">;
    getFunction(nameOrSignature: "transferOwnership"): TypedContractMethod<[to: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "updateSubscription"): TypedContractMethod<[consumers: AddressLike[]], [void], "nonpayable">;
    getFunction(nameOrSignature: "withdrawNative"): TypedContractMethod<[
        amount: BigNumberish,
        recipient: AddressLike
    ], [
        void
    ], "nonpayable">;
    getEvent(key: "Funded"): TypedContractEvent<FundedEvent.InputTuple, FundedEvent.OutputTuple, FundedEvent.OutputObject>;
    getEvent(key: "NewSubscriptionId"): TypedContractEvent<NewSubscriptionIdEvent.InputTuple, NewSubscriptionIdEvent.OutputTuple, NewSubscriptionIdEvent.OutputObject>;
    getEvent(key: "OwnershipTransferRequested"): TypedContractEvent<OwnershipTransferRequestedEvent.InputTuple, OwnershipTransferRequestedEvent.OutputTuple, OwnershipTransferRequestedEvent.OutputObject>;
    getEvent(key: "OwnershipTransferred"): TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
    getEvent(key: "Received"): TypedContractEvent<ReceivedEvent.InputTuple, ReceivedEvent.OutputTuple, ReceivedEvent.OutputObject>;
    getEvent(key: "Withdrawn"): TypedContractEvent<WithdrawnEvent.InputTuple, WithdrawnEvent.OutputTuple, WithdrawnEvent.OutputObject>;
    filters: {
        "Funded(address,uint256)": TypedContractEvent<FundedEvent.InputTuple, FundedEvent.OutputTuple, FundedEvent.OutputObject>;
        Funded: TypedContractEvent<FundedEvent.InputTuple, FundedEvent.OutputTuple, FundedEvent.OutputObject>;
        "NewSubscriptionId(uint256)": TypedContractEvent<NewSubscriptionIdEvent.InputTuple, NewSubscriptionIdEvent.OutputTuple, NewSubscriptionIdEvent.OutputObject>;
        NewSubscriptionId: TypedContractEvent<NewSubscriptionIdEvent.InputTuple, NewSubscriptionIdEvent.OutputTuple, NewSubscriptionIdEvent.OutputObject>;
        "OwnershipTransferRequested(address,address)": TypedContractEvent<OwnershipTransferRequestedEvent.InputTuple, OwnershipTransferRequestedEvent.OutputTuple, OwnershipTransferRequestedEvent.OutputObject>;
        OwnershipTransferRequested: TypedContractEvent<OwnershipTransferRequestedEvent.InputTuple, OwnershipTransferRequestedEvent.OutputTuple, OwnershipTransferRequestedEvent.OutputObject>;
        "OwnershipTransferred(address,address)": TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
        OwnershipTransferred: TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
        "Received(address,uint256)": TypedContractEvent<ReceivedEvent.InputTuple, ReceivedEvent.OutputTuple, ReceivedEvent.OutputObject>;
        Received: TypedContractEvent<ReceivedEvent.InputTuple, ReceivedEvent.OutputTuple, ReceivedEvent.OutputObject>;
        "Withdrawn(address,uint256)": TypedContractEvent<WithdrawnEvent.InputTuple, WithdrawnEvent.OutputTuple, WithdrawnEvent.OutputObject>;
        Withdrawn: TypedContractEvent<WithdrawnEvent.InputTuple, WithdrawnEvent.OutputTuple, WithdrawnEvent.OutputObject>;
    };
}
