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, PromiseOrValue } from './common';
export declare namespace BadgerRegistry {
    type VaultDataStruct = {
        version: PromiseOrValue<string>;
        status: PromiseOrValue<BigNumberish>;
        list: PromiseOrValue<string>[];
    };
    type VaultDataStructOutput = [string, number, string[]] & {
        version: string;
        status: number;
        list: string[];
    };
}
export interface BadgerRegistryInterface extends utils.Interface {
    functions: {
        'add(string,address)': FunctionFragment;
        'addVersions(string)': FunctionFragment;
        'addresses(string)': FunctionFragment;
        'demote(string,address,uint8)': FunctionFragment;
        'devGovernance()': FunctionFragment;
        'get(string)': FunctionFragment;
        'getFilteredProductionVaults(string,uint8)': FunctionFragment;
        'getProductionVaults()': FunctionFragment;
        'getVaults(string,address)': FunctionFragment;
        'governance()': FunctionFragment;
        'initialize(address)': FunctionFragment;
        'keys(uint256)': FunctionFragment;
        'promote(string,address,uint8)': FunctionFragment;
        'remove(string,address)': FunctionFragment;
        'set(string,address)': FunctionFragment;
        'setDev(address)': FunctionFragment;
        'setGovernance(address)': FunctionFragment;
        'versions(uint256)': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'add' | 'addVersions' | 'addresses' | 'demote' | 'devGovernance' | 'get' | 'getFilteredProductionVaults' | 'getProductionVaults' | 'getVaults' | 'governance' | 'initialize' | 'keys' | 'promote' | 'remove' | 'set' | 'setDev' | 'setGovernance' | 'versions'): FunctionFragment;
    encodeFunctionData(functionFragment: 'add', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'addVersions', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'addresses', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'demote', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'devGovernance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'get', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'getFilteredProductionVaults', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'getProductionVaults', values?: undefined): string;
    encodeFunctionData(functionFragment: 'getVaults', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'governance', values?: undefined): string;
    encodeFunctionData(functionFragment: 'initialize', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'keys', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'promote', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'remove', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'set', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'setDev', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'setGovernance', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'versions', values: [PromiseOrValue<BigNumberish>]): string;
    decodeFunctionResult(functionFragment: 'add', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'addVersions', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'addresses', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'demote', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'devGovernance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'get', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getFilteredProductionVaults', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getProductionVaults', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getVaults', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'governance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'keys', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'promote', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'remove', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'set', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setDev', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setGovernance', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'versions', data: BytesLike): Result;
    events: {
        'AddKey(string)': EventFragment;
        'AddVersion(string)': EventFragment;
        'DemoteVault(address,string,address,uint8)': EventFragment;
        'NewVault(address,string,address)': EventFragment;
        'PromoteVault(address,string,address,uint8)': EventFragment;
        'RemoveVault(address,string,address)': EventFragment;
        'Set(string,address)': EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: 'AddKey'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'AddVersion'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'DemoteVault'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'NewVault'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'PromoteVault'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'RemoveVault'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'Set'): EventFragment;
}
export interface AddKeyEventObject {
    key: string;
}
export declare type AddKeyEvent = TypedEvent<[string], AddKeyEventObject>;
export declare type AddKeyEventFilter = TypedEventFilter<AddKeyEvent>;
export interface AddVersionEventObject {
    version: string;
}
export declare type AddVersionEvent = TypedEvent<[string], AddVersionEventObject>;
export declare type AddVersionEventFilter = TypedEventFilter<AddVersionEvent>;
export interface DemoteVaultEventObject {
    author: string;
    version: string;
    vault: string;
    status: number;
}
export declare type DemoteVaultEvent = TypedEvent<[string, string, string, number], DemoteVaultEventObject>;
export declare type DemoteVaultEventFilter = TypedEventFilter<DemoteVaultEvent>;
export interface NewVaultEventObject {
    author: string;
    version: string;
    vault: string;
}
export declare type NewVaultEvent = TypedEvent<[string, string, string], NewVaultEventObject>;
export declare type NewVaultEventFilter = TypedEventFilter<NewVaultEvent>;
export interface PromoteVaultEventObject {
    author: string;
    version: string;
    vault: string;
    status: number;
}
export declare type PromoteVaultEvent = TypedEvent<[string, string, string, number], PromoteVaultEventObject>;
export declare type PromoteVaultEventFilter = TypedEventFilter<PromoteVaultEvent>;
export interface RemoveVaultEventObject {
    author: string;
    version: string;
    vault: string;
}
export declare type RemoveVaultEvent = TypedEvent<[string, string, string], RemoveVaultEventObject>;
export declare type RemoveVaultEventFilter = TypedEventFilter<RemoveVaultEvent>;
export interface SetEventObject {
    key: string;
    at: string;
}
export declare type SetEvent = TypedEvent<[string, string], SetEventObject>;
export declare type SetEventFilter = TypedEventFilter<SetEvent>;
export interface BadgerRegistry extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: BadgerRegistryInterface;
    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: {
        add(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        addVersions(version: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        addresses(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[string]>;
        demote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        devGovernance(overrides?: CallOverrides): Promise<[string]>;
        get(key: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[string]>;
        getFilteredProductionVaults(version: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[string[]]>;
        getProductionVaults(overrides?: CallOverrides): Promise<[BadgerRegistry.VaultDataStructOutput[]]>;
        getVaults(version: PromiseOrValue<string>, author: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[string[]]>;
        governance(overrides?: CallOverrides): Promise<[string]>;
        initialize(newGovernance: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        keys(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[string]>;
        promote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        remove(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        set(key: PromiseOrValue<string>, at: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setDev(newDev: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setGovernance(_newGov: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        versions(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[string]>;
    };
    add(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    addVersions(version: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    addresses(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
    demote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    devGovernance(overrides?: CallOverrides): Promise<string>;
    get(key: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
    getFilteredProductionVaults(version: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string[]>;
    getProductionVaults(overrides?: CallOverrides): Promise<BadgerRegistry.VaultDataStructOutput[]>;
    getVaults(version: PromiseOrValue<string>, author: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string[]>;
    governance(overrides?: CallOverrides): Promise<string>;
    initialize(newGovernance: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    keys(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
    promote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    remove(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    set(key: PromiseOrValue<string>, at: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setDev(newDev: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setGovernance(_newGov: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    versions(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
    callStatic: {
        add(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        addVersions(version: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        addresses(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
        demote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        devGovernance(overrides?: CallOverrides): Promise<string>;
        get(key: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
        getFilteredProductionVaults(version: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string[]>;
        getProductionVaults(overrides?: CallOverrides): Promise<BadgerRegistry.VaultDataStructOutput[]>;
        getVaults(version: PromiseOrValue<string>, author: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string[]>;
        governance(overrides?: CallOverrides): Promise<string>;
        initialize(newGovernance: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        keys(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
        promote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        remove(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        set(key: PromiseOrValue<string>, at: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setDev(newDev: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setGovernance(_newGov: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        versions(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<string>;
    };
    filters: {
        'AddKey(string)'(key?: null): AddKeyEventFilter;
        AddKey(key?: null): AddKeyEventFilter;
        'AddVersion(string)'(version?: null): AddVersionEventFilter;
        AddVersion(version?: null): AddVersionEventFilter;
        'DemoteVault(address,string,address,uint8)'(author?: null, version?: null, vault?: null, status?: null): DemoteVaultEventFilter;
        DemoteVault(author?: null, version?: null, vault?: null, status?: null): DemoteVaultEventFilter;
        'NewVault(address,string,address)'(author?: null, version?: null, vault?: null): NewVaultEventFilter;
        NewVault(author?: null, version?: null, vault?: null): NewVaultEventFilter;
        'PromoteVault(address,string,address,uint8)'(author?: null, version?: null, vault?: null, status?: null): PromoteVaultEventFilter;
        PromoteVault(author?: null, version?: null, vault?: null, status?: null): PromoteVaultEventFilter;
        'RemoveVault(address,string,address)'(author?: null, version?: null, vault?: null): RemoveVaultEventFilter;
        RemoveVault(author?: null, version?: null, vault?: null): RemoveVaultEventFilter;
        'Set(string,address)'(key?: null, at?: null): SetEventFilter;
        Set(key?: null, at?: null): SetEventFilter;
    };
    estimateGas: {
        add(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        addVersions(version: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        addresses(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        demote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        devGovernance(overrides?: CallOverrides): Promise<BigNumber>;
        get(key: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        getFilteredProductionVaults(version: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getProductionVaults(overrides?: CallOverrides): Promise<BigNumber>;
        getVaults(version: PromiseOrValue<string>, author: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        governance(overrides?: CallOverrides): Promise<BigNumber>;
        initialize(newGovernance: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        keys(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        promote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        remove(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        set(key: PromiseOrValue<string>, at: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setDev(newDev: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setGovernance(_newGov: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        versions(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    };
    populateTransaction: {
        add(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        addVersions(version: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        addresses(arg0: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        demote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        devGovernance(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        get(key: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getFilteredProductionVaults(version: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getProductionVaults(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVaults(version: PromiseOrValue<string>, author: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        governance(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        initialize(newGovernance: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        keys(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        promote(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, status: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        remove(version: PromiseOrValue<string>, vault: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        set(key: PromiseOrValue<string>, at: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setDev(newDev: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setGovernance(_newGov: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        versions(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
    };
}
