import { Signer } from '@ethersproject/abstract-signer';
import { Contract, ContractInterface } from '@ethersproject/contracts';
import { Provider } from '@ethersproject/providers';
import { EthereumAddress } from '@streamr/utils';
import { StrictStreamrClientConfig } from './Config';
import { StreamrClientEventEmitter } from './events';
import { LoggerFactory } from './utils/LoggerFactory';
import { ObservableContract } from './utils/contract';
export declare class ContractFactory {
    private readonly config;
    private readonly eventEmitter;
    private readonly loggerFactory;
    constructor(config: Pick<StrictStreamrClientConfig, 'contracts'>, eventEmitter: StreamrClientEventEmitter, loggerFactory: LoggerFactory);
    createReadContract<T extends Contract>(address: EthereumAddress, contractInterface: ContractInterface, provider: Provider, name: string): ObservableContract<T>;
    createWriteContract<T extends Contract>(address: EthereumAddress, contractInterface: ContractInterface, signer: Signer, name: string): ObservableContract<T>;
}
