public virtual Task Init(INethermindApi nethermindApi) { _api = nethermindApi; _mergeConfig = nethermindApi.Config <IMergeConfig>(); _syncConfig = nethermindApi.Config <ISyncConfig>(); _logger = _api.LogManager.GetClassLogger(); if (MergeEnabled) { if (_api.DbProvider == null) { throw new ArgumentException(nameof(_api.DbProvider)); } if (_api.BlockTree == null) { throw new ArgumentException(nameof(_api.BlockTree)); } if (_api.SpecProvider == null) { throw new ArgumentException(nameof(_api.SpecProvider)); } if (_api.ChainSpec == null) { throw new ArgumentException(nameof(_api.ChainSpec)); } if (_api.SealValidator == null) { throw new ArgumentException(nameof(_api.SealValidator)); } EnsureJsonRpcUrl(); EnsureReceiptAvailable(); _blockCacheService = new BlockCacheService(); _poSSwitcher = new PoSSwitcher( _mergeConfig, _syncConfig, _api.DbProvider.GetDb <IDb>(DbNames.Metadata), _api.BlockTree, _api.SpecProvider, _api.LogManager); _invalidChainTracker = new InvalidChainTracker.InvalidChainTracker( _poSSwitcher, _api.BlockTree, _blockCacheService, _api.LogManager); _api.DisposeStack.Push(_invalidChainTracker); _blockFinalizationManager = new ManualBlockFinalizationManager(); _api.RewardCalculatorSource = new MergeRewardCalculatorSource( _api.RewardCalculatorSource ?? NoBlockRewards.Instance, _poSSwitcher); _api.SealValidator = new MergeSealValidator(_poSSwitcher, _api.SealValidator); _api.GossipPolicy = new MergeGossipPolicy(_api.GossipPolicy, _poSSwitcher, _blockCacheService); _api.BlockPreprocessor.AddFirst(new MergeProcessingRecoveryStep(_poSSwitcher)); } return(Task.CompletedTask); }
public Task InitNetworkProtocol() { if (_mergeConfig.Enabled) { ISyncConfig syncConfig = _api.Config <ISyncConfig>(); syncConfig.SynchronizationEnabled = false; syncConfig.BlockGossipEnabled = false; _blockFinalizationManager = new ManualBlockFinalizationManager(); _api.FinalizationManager = _blockFinalizationManager; } return(Task.CompletedTask); }