///
import { Duplex } from "stream";
import { FileDAL } from "../../../../../lib/dal/fileDAL";
import { AbstractSynchronizer } from "../AbstractSynchronizer";
import { Watcher } from "../Watcher";
import { BlockDTO } from "../../../../../lib/dto/BlockDTO";
import { PromiseOfBlocksReading } from "../PromiseOfBlockReading";
export declare class DownloadStream extends Duplex {
private localNumber;
private to;
private toHash;
private syncStrategy;
private nocautious;
private watcher;
private fsDownloader;
private p2PDownloader;
private numberOfChunksToDownload;
private currentChunkNumber;
private chunks;
private milestones;
private dowloading;
private bestDownloaded;
private writeDAL;
constructor(localNumber: number, to: number, toHash: string, syncStrategy: AbstractSynchronizer, dal: FileDAL, nocautious: boolean, watcher: Watcher);
private downloadChunk;
_read(size: number): void;
_write(block: BlockDTO | undefined, encoding: any, callback: (err: any) => void): void;
}
export declare function chainsCorrectly(blocks: BlockDTO[], readNextChunk: PromiseOfBlocksReading, topNumber: number, topHash: string, chunkSize: number): Promise;