import { EthereumAddress } from '@streamr/utils';
import { AbstractProvider, BaseContract, Contract, InterfaceAbi, Provider, Signer } from 'ethers';
import { StrictStreamrClientConfig } from '../Config';
import { StreamrClientEventEmitter } from '../events';
import { LoggerFactory } from '../utils/LoggerFactory';
import { ObservableContract } from './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 BaseContract>(address: EthereumAddress, contractInterface: InterfaceAbi, provider: Provider, name: string): ObservableContract<T>;
    createWriteContract<T extends BaseContract>(address: EthereumAddress, contractInterface: InterfaceAbi, signer: Signer, name: string): ObservableContract<T>;
    createEventContract(address: EthereumAddress, contractInterface: InterfaceAbi, provider: AbstractProvider): Contract;
}
