Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }