コード例 #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);
        }
コード例 #2
0
ファイル: MergePlugin.cs プロジェクト: SaNNNNNNNN/nethermind
 public Task Init(INethermindApi nethermindApi)
 {
     _api         = nethermindApi;
     _mergeConfig = nethermindApi.Config <IMergeConfig>();
     _logger      = _api.LogManager.GetClassLogger();
     return(Task.CompletedTask);
 }
コード例 #3
0
        public Context(
            IBlockTree?blockTree     = null,
            ISyncConfig?syncConfig   = null,
            IBeaconPivot?beaconPivot = null,
            IDb?metadataDb           = null,
            IMergeConfig?mergeConfig = null)
        {
            if (blockTree == null)
            {
                IDb   blockInfoDb = new MemDb();
                Block genesis     = Build.A.Block.Genesis.TestObject;
                BlockTree = new BlockTree(new MemDb(), new MemDb(), blockInfoDb, new ChainLevelInfoRepository(blockInfoDb), MainnetSpecProvider.Instance, NullBloomStorage.Instance, LimboLogs.Instance);
                BlockTree.SuggestBlock(genesis);
            }
            else
            {
                BlockTree = blockTree;
            }

            ISyncPeerPool    peerPool         = Substitute.For <ISyncPeerPool>();
            ISyncReport      report           = Substitute.For <ISyncReport>();
            MeasuredProgress measuredProgress = new MeasuredProgress();

            report.BeaconHeaders.Returns(measuredProgress);
            report.HeadersInQueue.Returns(measuredProgress);

            MemDb stateDb = new();

            _syncConfig  = syncConfig ?? new SyncConfig();
            _mergeConfig = mergeConfig ?? new MergeConfig();
            _metadataDb  = metadataDb ?? new MemDb();
            PoSSwitcher poSSwitcher = new(_mergeConfig, _syncConfig, _metadataDb, blockTree !,
                                          MainnetSpecProvider.Instance, LimboLogs.Instance);

            ProgressTracker progressTracker = new(BlockTree, stateDb, LimboLogs.Instance);

            SyncProgressResolver syncProgressResolver = new(
                BlockTree,
                NullReceiptStorage.Instance,
                stateDb,
                new TrieStore(stateDb, LimboLogs.Instance),
                progressTracker,
                _syncConfig,
                LimboLogs.Instance);
            TotalDifficultyBetterPeerStrategy bestPeerStrategy = new (LimboLogs.Instance);

            BeaconPivot = beaconPivot ?? new BeaconPivot(_syncConfig, _metadataDb, BlockTree, LimboLogs.Instance);
            BeaconSync  = new(BeaconPivot, BlockTree, _syncConfig, new BlockCacheService(), LimboLogs.Instance);
            ISyncModeSelector selector = new MultiSyncModeSelector(syncProgressResolver, peerPool, _syncConfig, BeaconSync, bestPeerStrategy, LimboLogs.Instance);

            Feed = new BeaconHeadersSyncFeed(poSSwitcher, selector, blockTree, peerPool, _syncConfig, report, BeaconPivot, _mergeConfig,
                                             new NoopInvalidChainTracker(), LimboLogs.Instance);
        }
コード例 #4
0
        public PoSSwitcher(
            IMergeConfig mergeConfig,
            ISyncConfig syncConfig,
            IDb metadataDb,
            IBlockTree blockTree,
            ISpecProvider specProvider,
            ILogManager logManager)
        {
            _mergeConfig  = mergeConfig;
            _syncConfig   = syncConfig;
            _metadataDb   = metadataDb;
            _blockTree    = blockTree;
            _specProvider = specProvider;
            _logger       = logManager.GetClassLogger();

            Initialize();
        }
コード例 #5
0
 public BeaconHeadersSyncFeed(
     IPoSSwitcher poSSwitcher,
     ISyncModeSelector syncModeSelector,
     IBlockTree?blockTree,
     ISyncPeerPool?syncPeerPool,
     ISyncConfig?syncConfig,
     ISyncReport?syncReport,
     IPivot?pivot,
     IMergeConfig?mergeConfig,
     IInvalidChainTracker invalidChainTracker,
     ILogManager logManager)
     : base(syncModeSelector, blockTree, syncPeerPool, syncConfig, syncReport, logManager,
            true) // alwaysStartHeaderSync = true => for the merge we're forcing header sync start. It doesn't matter if it is archive sync or fast sync
 {
     _poSSwitcher         = poSSwitcher ?? throw new ArgumentNullException(nameof(poSSwitcher));
     _pivot               = pivot ?? throw new ArgumentNullException(nameof(pivot));
     _mergeConfig         = mergeConfig ?? throw new ArgumentNullException(nameof(mergeConfig));
     _invalidChainTracker = invalidChainTracker;
     _logger              = logManager.GetClassLogger();
 }
コード例 #6
0
        public Task Init(INethermindApi nethermindApi)
        {
            _api         = nethermindApi;
            _mergeConfig = nethermindApi.Config <IMergeConfig>();
            _logger      = _api.LogManager.GetClassLogger();

            if (_mergeConfig.Enabled)
            {
                if (string.IsNullOrEmpty(_mergeConfig.BlockAuthorAccount))
                {
                    if (_logger.IsError)
                    {
                        _logger.Error($"{nameof(MergeConfig)}.{nameof(_mergeConfig.BlockAuthorAccount)} is not set up. Cannot create blocks. Stopping.");
                    }
                    Environment.Exit(13); // ERROR_INVALID_DATA
                }

                _api.EngineSigner           = new Eth2Signer(new Address(_mergeConfig.BlockAuthorAccount));
                _api.RewardCalculatorSource = NoBlockRewards.Instance;
            }

            return(Task.CompletedTask);
        }
コード例 #7
0
 public MergeSynchronizer(
     IDbProvider dbProvider,
     ISpecProvider specProvider,
     IBlockTree blockTree,
     IReceiptStorage receiptStorage,
     ISyncPeerPool peerPool,
     INodeStatsManager nodeStatsManager,
     ISyncModeSelector syncModeSelector,
     ISyncConfig syncConfig,
     ISnapProvider snapProvider,
     IBlockDownloaderFactory blockDownloaderFactory,
     IPivot pivot,
     IPoSSwitcher poSSwitcher,
     IMergeConfig mergeConfig,
     IInvalidChainTracker invalidChainTracker,
     ILogManager logManager,
     ISyncReport syncReport)
     : base(
         dbProvider,
         specProvider,
         blockTree,
         receiptStorage,
         peerPool,
         nodeStatsManager,
         syncModeSelector,
         syncConfig,
         snapProvider,
         blockDownloaderFactory,
         pivot,
         syncReport,
         logManager)
 {
     _invalidChainTracker = invalidChainTracker;
     _poSSwitcher         = poSSwitcher;
     _mergeConfig         = mergeConfig;
 }
コード例 #8
0
 protected virtual MergeTestBlockchain CreateBaseBlockChain(IMergeConfig mergeConfig = null, IPayloadPreparationService?mockedPayloadService = null) =>