///
import { Blockchain } from './blockchain';
import { VerificationResultReason } from './consensus';
import { Logger } from './logger';
import { Meter, MetricsMonitor } from './metrics';
import { RollingAverage } from './metrics/rollingAverage';
import { Identity, Peer, PeerNetwork } from './network';
import { PeerState } from './network/peers/peer';
import { Block } from './primitives/block';
import { Telemetry } from './telemetry';
import { SetTimeoutToken } from './utils';
export type SyncerState = 'stopped' | 'idle' | 'stopping' | 'syncing' | 'measuring';
export declare class Syncer {
readonly peerNetwork: PeerNetwork;
readonly chain: Blockchain;
readonly metrics: MetricsMonitor;
readonly telemetry: Telemetry;
readonly logger: Logger;
readonly speed: Meter;
readonly downloadSpeed: RollingAverage;
state: SyncerState;
stopping: Promise | null;
eventLoopTimeout: SetTimeoutToken | null;
loader: Peer | null;
blocksPerMessage: number;
nextMeasureTime: number;
numberOfMeasurements: number;
lastLoaderIdentity: Identity | null;
constructor(options: {
peerNetwork: PeerNetwork;
chain: Blockchain;
telemetry: Telemetry;
metrics?: MetricsMonitor;
logger?: Logger;
blocksPerMessage?: number;
});
start(): Promise;
stop(): Promise;
eventLoop(): Promise;
/**
* Chooses a peer to sync from based on measuring the connection of a random
* sampling of connected peers and begins syncing
*/
findPeer(currentPeerIdentity: Identity | null): Promise;
startSyncIfIdle(peer: Peer): void;
protected startSync(peer: Peer): void;
stopSync(peer: Peer): void;
wait(): Promise;
syncFrom(peer: Peer): Promise;
/**
* Find the sequence of the ancestor block between you and peer
*/
findAncestor(peer: Peer): Promise<{
sequence: number;
ancestor: Buffer;
requests: number;
}>;
private getBlocks;
syncBlocks(peer: Peer, head: Buffer, sequence: number): Promise;
addBlock(peer: Peer, block: Block): Promise<{
added: boolean;
block: Block;
reason: VerificationResultReason | null;
}>;
/**
* Returns the amount of time to wait until the next sync candidate
* measurement in milliseconds
*/
protected getNextMeasurementDelta(): number;
/**
* Throws AbortSyncingError which safely stops the syncing
* with a peer if we should no longer sync from this peer
*/
protected abort(peer: Peer): void;
/**
* When the peer disconnects we use this to stop syncing from them
*/
protected onPeerStateChanged: ({ peer, state }: {
peer: Peer;
state: PeerState;
}) => void;
}
//# sourceMappingURL=syncer.d.ts.map