import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
import type { FunctionFragment, Result, EventFragment } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common";
export type CallStruct = {
    target: string;
    value: BigNumberish;
    callData: BytesLike;
    allowFailure: boolean;
    isDelegateCall: boolean;
};
export type CallStructOutput = [string, BigNumber, string, boolean, boolean] & {
    target: string;
    value: BigNumber;
    callData: string;
    allowFailure: boolean;
    isDelegateCall: boolean;
};
export interface CoWShedInterface extends utils.Interface {
    functions: {
        "claimWithResolver(address)": FunctionFragment;
        "domainSeparator()": FunctionFragment;
        "executeHooks((address,uint256,bytes,bool,bool)[],bytes32,uint256,bytes)": FunctionFragment;
        "initialize(address,bool)": FunctionFragment;
        "nonces(bytes32)": FunctionFragment;
        "revokeNonce(bytes32)": FunctionFragment;
        "trustedExecuteHooks((address,uint256,bytes,bool,bool)[])": FunctionFragment;
        "trustedExecutor()": FunctionFragment;
        "updateImplementation(address)": FunctionFragment;
        "updateTrustedExecutor(address)": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "claimWithResolver" | "domainSeparator" | "executeHooks" | "initialize" | "nonces" | "revokeNonce" | "trustedExecuteHooks" | "trustedExecutor" | "updateImplementation" | "updateTrustedExecutor"): FunctionFragment;
    encodeFunctionData(functionFragment: "claimWithResolver", values: [string]): string;
    encodeFunctionData(functionFragment: "domainSeparator", values?: undefined): string;
    encodeFunctionData(functionFragment: "executeHooks", values: [CallStruct[], BytesLike, BigNumberish, BytesLike]): string;
    encodeFunctionData(functionFragment: "initialize", values: [string, boolean]): string;
    encodeFunctionData(functionFragment: "nonces", values: [BytesLike]): string;
    encodeFunctionData(functionFragment: "revokeNonce", values: [BytesLike]): string;
    encodeFunctionData(functionFragment: "trustedExecuteHooks", values: [CallStruct[]]): string;
    encodeFunctionData(functionFragment: "trustedExecutor", values?: undefined): string;
    encodeFunctionData(functionFragment: "updateImplementation", values: [string]): string;
    encodeFunctionData(functionFragment: "updateTrustedExecutor", values: [string]): string;
    decodeFunctionResult(functionFragment: "claimWithResolver", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "domainSeparator", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "executeHooks", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "nonces", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "revokeNonce", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "trustedExecuteHooks", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "trustedExecutor", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "updateImplementation", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "updateTrustedExecutor", data: BytesLike): Result;
    events: {
        "RSV(bytes32,bytes32,uint8)": EventFragment;
        "TrustedExecutorChanged(address,address)": EventFragment;
        "Upgraded(address)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "RSV"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "TrustedExecutorChanged"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "Upgraded"): EventFragment;
}
export interface RSVEventObject {
    r: string;
    s: string;
    v: number;
}
export type RSVEvent = TypedEvent<[string, string, number], RSVEventObject>;
export type RSVEventFilter = TypedEventFilter<RSVEvent>;
export interface TrustedExecutorChangedEventObject {
    previousExecutor: string;
    newExecutor: string;
}
export type TrustedExecutorChangedEvent = TypedEvent<[
    string,
    string
], TrustedExecutorChangedEventObject>;
export type TrustedExecutorChangedEventFilter = TypedEventFilter<TrustedExecutorChangedEvent>;
export interface UpgradedEventObject {
    implementation: string;
}
export type UpgradedEvent = TypedEvent<[string], UpgradedEventObject>;
export type UpgradedEventFilter = TypedEventFilter<UpgradedEvent>;
export interface CoWShed extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: CoWShedInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        claimWithResolver(resolver: string, overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        domainSeparator(overrides?: CallOverrides): Promise<[string]>;
        executeHooks(calls: CallStruct[], nonce: BytesLike, deadline: BigNumberish, signature: BytesLike, overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        initialize(factory: string, claimResolver: boolean, overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        nonces(nonce: BytesLike, overrides?: CallOverrides): Promise<[boolean]>;
        revokeNonce(nonce: BytesLike, overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        trustedExecuteHooks(calls: CallStruct[], overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        trustedExecutor(overrides?: CallOverrides): Promise<[string]>;
        updateImplementation(newImplementation: string, overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
        updateTrustedExecutor(who: string, overrides?: Overrides & {
            from?: string;
        }): Promise<ContractTransaction>;
    };
    claimWithResolver(resolver: string, overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    domainSeparator(overrides?: CallOverrides): Promise<string>;
    executeHooks(calls: CallStruct[], nonce: BytesLike, deadline: BigNumberish, signature: BytesLike, overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    initialize(factory: string, claimResolver: boolean, overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    nonces(nonce: BytesLike, overrides?: CallOverrides): Promise<boolean>;
    revokeNonce(nonce: BytesLike, overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    trustedExecuteHooks(calls: CallStruct[], overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    trustedExecutor(overrides?: CallOverrides): Promise<string>;
    updateImplementation(newImplementation: string, overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    updateTrustedExecutor(who: string, overrides?: Overrides & {
        from?: string;
    }): Promise<ContractTransaction>;
    callStatic: {
        claimWithResolver(resolver: string, overrides?: CallOverrides): Promise<void>;
        domainSeparator(overrides?: CallOverrides): Promise<string>;
        executeHooks(calls: CallStruct[], nonce: BytesLike, deadline: BigNumberish, signature: BytesLike, overrides?: CallOverrides): Promise<void>;
        initialize(factory: string, claimResolver: boolean, overrides?: CallOverrides): Promise<void>;
        nonces(nonce: BytesLike, overrides?: CallOverrides): Promise<boolean>;
        revokeNonce(nonce: BytesLike, overrides?: CallOverrides): Promise<void>;
        trustedExecuteHooks(calls: CallStruct[], overrides?: CallOverrides): Promise<void>;
        trustedExecutor(overrides?: CallOverrides): Promise<string>;
        updateImplementation(newImplementation: string, overrides?: CallOverrides): Promise<void>;
        updateTrustedExecutor(who: string, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        "RSV(bytes32,bytes32,uint8)"(r?: null, s?: null, v?: null): RSVEventFilter;
        RSV(r?: null, s?: null, v?: null): RSVEventFilter;
        "TrustedExecutorChanged(address,address)"(previousExecutor?: null, newExecutor?: null): TrustedExecutorChangedEventFilter;
        TrustedExecutorChanged(previousExecutor?: null, newExecutor?: null): TrustedExecutorChangedEventFilter;
        "Upgraded(address)"(implementation?: string | null): UpgradedEventFilter;
        Upgraded(implementation?: string | null): UpgradedEventFilter;
    };
    estimateGas: {
        claimWithResolver(resolver: string, overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        domainSeparator(overrides?: CallOverrides): Promise<BigNumber>;
        executeHooks(calls: CallStruct[], nonce: BytesLike, deadline: BigNumberish, signature: BytesLike, overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        initialize(factory: string, claimResolver: boolean, overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        nonces(nonce: BytesLike, overrides?: CallOverrides): Promise<BigNumber>;
        revokeNonce(nonce: BytesLike, overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        trustedExecuteHooks(calls: CallStruct[], overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        trustedExecutor(overrides?: CallOverrides): Promise<BigNumber>;
        updateImplementation(newImplementation: string, overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
        updateTrustedExecutor(who: string, overrides?: Overrides & {
            from?: string;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        claimWithResolver(resolver: string, overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        domainSeparator(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        executeHooks(calls: CallStruct[], nonce: BytesLike, deadline: BigNumberish, signature: BytesLike, overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        initialize(factory: string, claimResolver: boolean, overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        nonces(nonce: BytesLike, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        revokeNonce(nonce: BytesLike, overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        trustedExecuteHooks(calls: CallStruct[], overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        trustedExecutor(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        updateImplementation(newImplementation: string, overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
        updateTrustedExecutor(who: string, overrides?: Overrides & {
            from?: string;
        }): Promise<PopulatedTransaction>;
    };
}
