import { BigNumber } from '@ethersproject/bignumber';
import type { Overrides } from '@ethersproject/contracts';
import { ContractTransaction } from 'ethers';
import StreamrClient, { Stream } from 'streamr-client';
import { StrictLogStoreClientConfig } from '../Config';
import { LogStoreClientEventEmitter, LogStoreClientEvents } from '../events';
import { Authentication } from '../streamr/Authentication';
import { StrictStreamrClientConfig } from '../streamr/Config';
import { ContractFactory } from '../streamr/ContractFactory';
import { LoggerFactory } from '../streamr/LoggerFactory';
import { StreamIDBuilder } from '../streamr/StreamIDBuilder';
import { SynchronizedGraphQLClient } from '../utils/SynchronizedGraphQLClient';
export interface LogStoreAssignmentEvent {
    readonly store: string;
    readonly isNew: boolean;
    readonly amount: BigNumber;
    readonly blockNumber: number;
}
/**
 * Stores storage node assignments (mapping of streamIds <-> storage nodes addresses)
 */
export declare class LogStoreRegistry {
    private contractFactory;
    private streamrClient;
    private streamIdBuilder;
    private graphQLClient;
    private readonly eventEmitter;
    private authentication;
    private logStoreClientConfig;
    private streamrClientConfig;
    private logStoreManagerContract?;
    private readonly logStoreManagerContractsReadonly;
    private readonly logger;
    constructor(contractFactory: ContractFactory, streamrClient: StreamrClient, streamIdBuilder: StreamIDBuilder, graphQLClient: SynchronizedGraphQLClient, eventEmitter: LogStoreClientEventEmitter, authentication: Authentication, loggerFactory: LoggerFactory, logStoreClientConfig: Pick<StrictLogStoreClientConfig, 'contracts'>, streamrClientConfig: Pick<StrictStreamrClientConfig, 'contracts'>);
    private initStreamAssignmentEventListener;
    private connectToContract;
    stakeOrCreateStore(streamIdOrPath: string, amount: bigint, overrides?: Overrides): Promise<ContractTransaction>;
    getStreamBalance(streamIdOrPath: string): Promise<bigint>;
    getStoreBalanceOf(address: string): Promise<bigint>;
    getStoreBalance(): Promise<bigint>;
    isLogStoreStream(streamIdOrPath: string): Promise<boolean>;
    getStoredStreams(): Promise<{
        streams: Stream[];
        blockNumber: number;
    }>;
    /**
     * Adds an event listener to the client.
     * @param eventName - event name, see {@link LogStoreClientEvents} for options
     * @param listener - the callback function
     */
    on<T extends keyof LogStoreClientEvents>(eventName: T, listener: LogStoreClientEvents[T]): void;
    /**
     * Adds an event listener to the client that is invoked only once.
     * @param eventName - event name, see {@link LogStoreClientEvents} for options
     * @param listener - the callback function
     */
    once<T extends keyof LogStoreClientEvents>(eventName: T, listener: LogStoreClientEvents[T]): void;
    /**
     * Removes an event listener from the client.
     * @param eventName - event name, see {@link LogStoreClientEvents} for options
     * @param listener - the callback function to remove
     */
    off<T extends keyof LogStoreClientEvents>(eventName: T, listener: LogStoreClientEvents[T]): void;
}
