import { ContractInterface } from '@ethersproject/contracts';
import { AzraelVersion, Network, RenftContractType, RenftContractVersion, ResolverVersion, SylvesterVersion, WhoopiVersion } from '../core';
import { AzraelInterfaceVersions, ResolverInterfaceVersions, SylvesterInterfaceVersions, WhoopiInterfaceVersions } from './contracts';
declare type AbstractVersionedAbis<Version extends RenftContractVersion> = {
    readonly [key in Version]: ContractInterface;
};
export declare type AzraelAbiVersions = AbstractVersionedAbis<AzraelVersion>;
export declare type SylvesterAbiVersions = AbstractVersionedAbis<SylvesterVersion>;
export declare type WhoopiAbiVersions = AbstractVersionedAbis<WhoopiVersion>;
export declare type ResolverAbiVersions = AbstractVersionedAbis<ResolverVersion>;
export declare type ContractAbiVersions = {
    readonly [RenftContractType.AZRAEL]: AzraelAbiVersions;
    readonly [RenftContractType.SYLVESTER]: SylvesterAbiVersions;
    readonly [RenftContractType.WHOOPI]: WhoopiAbiVersions;
    readonly [RenftContractType.RESOLVER]: ResolverAbiVersions;
};
export declare type CreateVersionedContractInterfaceResult = {
    readonly [RenftContractType.AZRAEL]: AzraelInterfaceVersions;
    readonly [RenftContractType.SYLVESTER]: SylvesterInterfaceVersions;
    readonly [RenftContractType.WHOOPI]: WhoopiInterfaceVersions;
    readonly [RenftContractType.RESOLVER]: ResolverInterfaceVersions;
};
export declare type AbstractRenftContractDeployment<ContractType extends keyof CreateVersionedContractInterfaceResult, Version extends keyof CreateVersionedContractInterfaceResult[ContractType]> = {
    readonly contractType: ContractType;
    readonly version: Version;
    readonly contractAddress: string;
    readonly network: Network;
    readonly startBlock: number;
};
export {};
