import { IConfigService } from "./iConfigService";
import { IContractWrapperBase, IContractWrapperFactory } from "./iContractWrapperBase";
import { Web3EventService } from "./web3EventService";
/**
 * Generic class factory for all of the contract wrapper classes.
 */
export declare class ContractWrapperFactory<TWrapper extends IContractWrapperBase> implements IContractWrapperFactory<TWrapper> {
    private solidityContractName;
    private wrapper;
    private web3EventService;
    static setConfigService(configService: IConfigService): void;
    /**
     * this is a Map keyed by contract name of a Map keyed by address to an `IContractWrapperBase`
     */
    private static contractCache;
    private static configService;
    private solidityContract;
    /**
     * Connstructor to create a contract wrapper factory for the given
     * Arc contract name and wrapper class.
     * @param solidityContract Name of the contract
     * @param wrapper - Class of the contract
     */
    constructor(solidityContractName: string, wrapper: new (solidityContract: any, web3EventService: Web3EventService) => TWrapper, web3EventService: Web3EventService);
    /**
     * Deploy a new instance of the contract and return a wrapper around it.
     * @param rest Optional arguments to the Arc contracts constructor.
     */
    new(...rest: Array<any>): Promise<TWrapper>;
    /**
     * Return a wrapper around the contract, hydrated from the given address.
     * Returns undefined if not found.
     * @param address
     */
    at(address: string): Promise<TWrapper>;
    /**
     * Return a wrapper around the contract as deployed by the current version of Arc.js.
     * Note this is usually not needed as the WrapperService provides these
     * wrappers already hydrated.
     * Returns undefined if not found.
     */
    deployed(): Promise<TWrapper>;
    private getHydratedWrapper(getWrapper, address?);
    private getCachedContract(name, at);
    private setCachedContract(name, wrapper);
    private ensureSolidityContract();
}
