public ForkchoiceUpdatedV1Handler( IBlockTree blockTree, IManualBlockFinalizationManager manualBlockFinalizationManager, IPoSSwitcher poSSwitcher, IPayloadPreparationService payloadPreparationService, IBlockProcessingQueue processingQueue, IBlockCacheService blockCacheService, IInvalidChainTracker invalidChainTracker, IMergeSyncController mergeSyncController, IBeaconPivot beaconPivot, IPeerRefresher peerRefresher, ILogManager logManager) { _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _manualBlockFinalizationManager = manualBlockFinalizationManager ?? throw new ArgumentNullException(nameof(manualBlockFinalizationManager)); _poSSwitcher = poSSwitcher ?? throw new ArgumentNullException(nameof(poSSwitcher)); _payloadPreparationService = payloadPreparationService; _processingQueue = processingQueue; _blockCacheService = blockCacheService; _invalidChainTracker = invalidChainTracker; _mergeSyncController = mergeSyncController; _beaconPivot = beaconPivot; _peerRefresher = peerRefresher; _logger = logManager.GetClassLogger(); }
public void Beacon_pivot_defaults_to_sync_config_values_when_there_is_no_pivot() { IPeerRefresher peerRefresher = Substitute.For <IPeerRefresher>(); IBeaconPivot pivot = new BeaconPivot(_syncConfig, new MemDb(), Substitute.For <IBlockTree>(), LimboLogs.Instance); pivot.PivotHash.Should().Be(_syncConfig.PivotHashParsed); pivot.PivotNumber.Should().Be(_syncConfig.PivotNumberParsed); pivot.PivotDestinationNumber.Should().Be(0); }
public Task InitSynchronization() { if (MergeEnabled) { if (_api.SpecProvider is null) { throw new ArgumentNullException(nameof(_api.SpecProvider)); } if (_api.SyncPeerPool is null) { throw new ArgumentNullException(nameof(_api.SyncPeerPool)); } if (_api.BlockTree is null) { throw new ArgumentNullException(nameof(_api.BlockTree)); } if (_api.DbProvider is null) { throw new ArgumentNullException(nameof(_api.DbProvider)); } if (_api.SyncProgressResolver is null) { throw new ArgumentNullException(nameof(_api.SyncProgressResolver)); } if (_api.BlockProcessingQueue is null) { throw new ArgumentNullException(nameof(_api.BlockProcessingQueue)); } if (_blockCacheService is null) { throw new ArgumentNullException(nameof(_blockCacheService)); } if (_api.BetterPeerStrategy is null) { throw new ArgumentNullException(nameof(_api.BetterPeerStrategy)); } if (_api.SealValidator is null) { throw new ArgumentNullException(nameof(_api.SealValidator)); } if (_api.UnclesValidator is null) { throw new ArgumentNullException(nameof(_api.UnclesValidator)); } if (_api.NodeStatsManager is null) { throw new ArgumentNullException(nameof(_api.NodeStatsManager)); } if (_api.HeaderValidator is null) { throw new ArgumentNullException(nameof(_api.HeaderValidator)); } if (_api.PeerDifficultyRefreshPool is null) { throw new ArgumentNullException(nameof(_api.PeerDifficultyRefreshPool)); } // ToDo strange place for validators initialization PeerRefresher peerRefresher = new(_api.PeerDifficultyRefreshPool, _api.TimerFactory, _api.LogManager); _peerRefresher = peerRefresher; _api.DisposeStack.Push(peerRefresher); _beaconPivot = new BeaconPivot(_syncConfig, _api.DbProvider.MetadataDb, _api.BlockTree, _api.LogManager); MergeHeaderValidator headerValidator = new( _poSSwitcher, _api.HeaderValidator, _api.BlockTree, _api.SpecProvider, _api.SealValidator, _api.LogManager); _api.HeaderValidator = new InvalidHeaderInterceptor( headerValidator, _invalidChainTracker, _api.LogManager); _api.UnclesValidator = new MergeUnclesValidator(_poSSwitcher, _api.UnclesValidator); _api.BlockValidator = new InvalidBlockInterceptor( new BlockValidator( _api.TxValidator, _api.HeaderValidator, _api.UnclesValidator, _api.SpecProvider, _api.LogManager), _invalidChainTracker, _api.LogManager); _beaconSync = new BeaconSync(_beaconPivot, _api.BlockTree, _syncConfig, _blockCacheService, _api.LogManager); _api.BetterPeerStrategy = new MergeBetterPeerStrategy(_api.BetterPeerStrategy, _poSSwitcher, _beaconPivot, _api.LogManager); _api.SyncModeSelector = new MultiSyncModeSelector( _api.SyncProgressResolver, _api.SyncPeerPool, _syncConfig, _beaconSync, _api.BetterPeerStrategy !, _api.LogManager); _api.Pivot = _beaconPivot; SyncReport syncReport = new(_api.SyncPeerPool, _api.NodeStatsManager, _api.SyncModeSelector, _syncConfig, _beaconPivot, _api.LogManager); _api.BlockDownloaderFactory = new MergeBlockDownloaderFactory( _poSSwitcher, _beaconPivot, _api.SpecProvider, _api.BlockTree, _blockCacheService, _api.ReceiptStorage !, _api.BlockValidator !, _api.SealValidator !, _api.SyncPeerPool, _syncConfig, _api.BetterPeerStrategy !, syncReport, _api.SyncProgressResolver, _api.LogManager); _api.Synchronizer = new MergeSynchronizer( _api.DbProvider, _api.SpecProvider !, _api.BlockTree !, _api.ReceiptStorage !, _api.SyncPeerPool, _api.NodeStatsManager !, _api.SyncModeSelector, _syncConfig, _api.SnapProvider, _api.BlockDownloaderFactory, _api.Pivot, _poSSwitcher, _mergeConfig, _invalidChainTracker, _api.LogManager, syncReport); } return(Task.CompletedTask); }