public void Can_keep_changing_in_fast_sync() { IEthSyncPeerPool syncPeerPool = Substitute.For <IEthSyncPeerPool>(); ISyncPeer syncPeer = Substitute.For <ISyncPeer>(); syncPeer.TotalDifficultyOnSessionStart.Returns((UInt256)(1024 * 1024)); PeerInfo peerInfo1 = new PeerInfo(syncPeer) { HeadNumber = 0, IsInitialized = true }; syncPeerPool.AllPeers.Returns(new[] { peerInfo1 }); syncPeerPool.UsefulPeers.Returns(new[] { peerInfo1 }); syncPeerPool.PeerCount.Returns(1); SyncConfig syncConfig = new SyncConfig(); syncConfig.FastSync = true; syncConfig.PivotNumber = null; syncConfig.PivotHash = null; ISyncProgressResolver syncProgressResolver = Substitute.For <ISyncProgressResolver>(); SyncModeSelector selector = new SyncModeSelector(syncProgressResolver, syncPeerPool, syncConfig, LimboLogs.Instance); Assert.AreEqual(SyncMode.NotStarted, selector.Current); (long BestRemote, long BestLocalHeader, long BestLocalFullBlock, long BestLocalState, SyncMode ExpectedState, string Description)[] states =
public MultiSyncModeSelector( ISyncProgressResolver syncProgressResolver, ISyncPeerPool syncPeerPool, ISyncConfig syncConfig, ILogManager logManager, bool needToWaitForHeaders = false) { _logger = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _syncConfig = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig)); _syncPeerPool = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool)); _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver)); _needToWaitForHeaders = needToWaitForHeaders; if (syncConfig.FastSyncCatchUpHeightDelta <= FastSyncLag) { if (_logger.IsWarn) { _logger.Warn($"'FastSyncCatchUpHeightDelta' parameter is less or equal to {FastSyncLag}, which is a threshold of blocks always downloaded in full sync. 'FastSyncCatchUpHeightDelta' will have no effect."); } } PivotNumber = _syncConfig.PivotNumberParsed; _timer = StartUpdateTimer(); }
public MergeBlockDownloaderFactory(IPoSSwitcher poSSwitcher, IBeaconPivot beaconPivot, ISpecProvider specProvider, IBlockTree blockTree, IBlockCacheService blockCacheService, IReceiptStorage receiptStorage, IBlockValidator blockValidator, ISealValidator sealValidator, ISyncPeerPool peerPool, ISyncConfig syncConfig, IBetterPeerStrategy betterPeerStrategy, ISyncReport syncReport, ISyncProgressResolver syncProgressResolver, ILogManager logManager) { _poSSwitcher = poSSwitcher ?? throw new ArgumentNullException(nameof(poSSwitcher)); _beaconPivot = beaconPivot ?? throw new ArgumentNullException(nameof(beaconPivot)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _sealValidator = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator)); _syncPeerPool = peerPool ?? throw new ArgumentNullException(nameof(peerPool)); _betterPeerStrategy = betterPeerStrategy ?? throw new ArgumentNullException(nameof(betterPeerStrategy)); _logManager = logManager ?? throw new ArgumentNullException(nameof(logManager)); _syncReport = syncReport ?? throw new ArgumentNullException(nameof(syncReport)); _chainLevelHelper = new ChainLevelHelper(_blockTree, _beaconPivot, syncConfig, _logManager); _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver));; }
public MergeBlockDownloader( IPoSSwitcher posSwitcher, IBeaconPivot beaconPivot, ISyncFeed <BlocksRequest?>?feed, ISyncPeerPool?syncPeerPool, IBlockTree?blockTree, IBlockValidator?blockValidator, ISealValidator?sealValidator, ISyncReport?syncReport, IReceiptStorage?receiptStorage, ISpecProvider specProvider, IBetterPeerStrategy betterPeerStrategy, IChainLevelHelper chainLevelHelper, ISyncProgressResolver syncProgressResolver, ILogManager logManager) : base(feed, syncPeerPool, blockTree, blockValidator, sealValidator, syncReport, receiptStorage, specProvider, new MergeBlocksSyncPeerAllocationStrategyFactory(posSwitcher, beaconPivot, logManager), betterPeerStrategy, logManager) { _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _chainLevelHelper = chainLevelHelper ?? throw new ArgumentNullException(nameof(chainLevelHelper)); _poSSwitcher = posSwitcher ?? throw new ArgumentNullException(nameof(posSwitcher)); _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _syncReport = syncReport ?? throw new ArgumentNullException(nameof(syncReport)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _beaconPivot = beaconPivot; _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(specProvider.ChainId, logManager), specProvider); _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver)); _logger = logManager.GetClassLogger(); }
public SyncModeSelector(ISyncProgressResolver syncProgressResolver, IEthSyncPeerPool syncPeerPool, ISyncConfig syncConfig, ILogManager logManager) { _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver)); _syncPeerPool = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool)); _syncConfig = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig)); _logger = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); Current = SyncMode.NotStarted; }
public SyncModeSelector(ISyncProgressResolver syncProgressResolver, IEthSyncPeerPool syncPeerPool, ISyncConfig syncConfig, ILogManager logManager) { _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver)); _syncPeerPool = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool)); _logger = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _fastSyncEnabled = syncConfig?.FastSync ?? false; Current = _fastSyncEnabled ? SyncMode.Headers : SyncMode.Full; }
public void Switch_correctly_from_full_sync_to_state_nodes_catch_up() { ISyncProgressResolver syncProgressResolver = Substitute.For <ISyncProgressResolver>(); syncProgressResolver.FindBestHeader().Returns(Scenario.ChainHead.Number); syncProgressResolver.FindBestFullBlock().Returns(Scenario.ChainHead.Number); syncProgressResolver.FindBestFullState().Returns(Scenario.ChainHead.Number - MultiSyncModeSelector.FastSyncLag); syncProgressResolver.FindBestProcessedBlock().Returns(0); syncProgressResolver.IsFastBlocksFinished().Returns(FastBlocksState.FinishedReceipts); syncProgressResolver.ChainDifficulty.Returns(UInt256.Zero); List <ISyncPeer> syncPeers = new(); BlockHeader header = Scenario.ChainHead; ISyncPeer syncPeer = Substitute.For <ISyncPeer>(); syncPeer.HeadHash.Returns(header.Hash); syncPeer.HeadNumber.Returns(header.Number); syncPeer.TotalDifficulty.Returns(header.TotalDifficulty ?? 0); syncPeer.IsInitialized.Returns(true); syncPeer.ClientId.Returns("nethermind"); syncPeers.Add(syncPeer); ISyncPeerPool syncPeerPool = Substitute.For <ISyncPeerPool>(); IEnumerable <PeerInfo> peerInfos = syncPeers.Select(p => new PeerInfo(p)); syncPeerPool.InitializedPeers.Returns(peerInfos); syncPeerPool.AllPeers.Returns(peerInfos); ISyncConfig syncConfig = new SyncConfig() { FastSyncCatchUpHeightDelta = 2 }; syncConfig.FastSync = true; TotalDifficultyBetterPeerStrategy bestPeerStrategy = new(LimboLogs.Instance); MultiSyncModeSelector selector = new(syncProgressResolver, syncPeerPool, syncConfig, No.BeaconSync, bestPeerStrategy, LimboLogs.Instance); selector.Stop(); syncProgressResolver.FindBestProcessedBlock().Returns(Scenario.ChainHead.Number); selector.Update(); selector.Current.Should().Be(SyncMode.Full); for (uint i = 0; i < syncConfig.FastSyncCatchUpHeightDelta + 1; i++) { long number = header.Number + i; syncPeer.HeadNumber.Returns(number); syncPeer.TotalDifficulty.Returns(header.TotalDifficulty.Value + i); syncProgressResolver.FindBestHeader().Returns(number); syncProgressResolver.FindBestFullBlock().Returns(number); selector.Update(); } selector.Current.Should().Be(SyncMode.StateNodes); }
public SyncModeSelector(ISyncProgressResolver syncProgressResolver, IEthSyncPeerPool syncPeerPool, ISyncConfig syncConfig, ILogManager logManager) { _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver)); _syncPeerPool = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool)); _syncConfig = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig)); _logger = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); if (syncConfig.FastSyncCatchUpHeightDelta <= FullSyncThreshold) { if (_logger.IsWarn) { _logger.Warn($"'FastSyncCatchUpHeightDelta' parameter is less or equal to {FullSyncThreshold}, which is a threshold of blocks always downloaded in full sync. 'FastSyncCatchUpHeightDelta' will have no effect."); } } Current = SyncMode.NotStarted; }
public FastBlocksFinishedState(ISyncProgressResolver syncProgressResolver) { _syncProgressResolver = syncProgressResolver; }
public static FastBlocksFinishedState IsFastBlocksFinished(this ISyncProgressResolver syncProgressResolver) { return(new FastBlocksFinishedState(syncProgressResolver)); }
public AuRaMultiSyncModeSelector(ISyncProgressResolver syncProgressResolver, ISyncPeerPool syncPeerPool, ISyncConfig syncConfig, ILogManager logManager) : base(syncProgressResolver, syncPeerPool, syncConfig, logManager) { }