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();
 }
        private void OnSubFeedStateChanged(object sender, EventArgs e)
        {
            ISyncFeed <StateSyncBatch> child = (ISyncFeed <StateSyncBatch>)sender;

            if (child.CurrentState == SyncFeedState.Active)
            {
                Activate();
                return;
            }

            bool areAllFinished = true;

            foreach (ISyncFeed <T> subFeed in _subFeeds)
            {
                if (subFeed.CurrentState != SyncFeedState.Finished)
                {
                    areAllFinished = false;
                    break;
                }
            }

            if (areAllFinished)
            {
                Finish();
            }
        }
        private void StartBeamSyncComponents()
        {
            // so bad
            BeamSyncDbProvider         beamSyncDbProvider = _dbProvider as BeamSyncDbProvider;
            ISyncFeed <StateSyncBatch> beamSyncFeed       = beamSyncDbProvider.BeamSyncFeed;
            StateSyncDispatcher        dispatcher         = new StateSyncDispatcher(beamSyncFeed, _syncPeerPool, new StateSyncAllocationStrategyFactory(), _logManager);

            dispatcher.Start(_syncCancellation.Token).ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    if (_logger.IsError)
                    {
                        _logger.Error("Beam sync failed", t.Exception);
                    }
                }
                else
                {
                    if (_logger.IsInfo)
                    {
                        _logger.Info("Beam sync completed.");
                    }
                }
            });
        }
Beispiel #4
0
        private void OnSubFeedStateChanged(object?sender, EventArgs e)
        {
            ISyncFeed <StateSyncBatch>?child = (ISyncFeed <StateSyncBatch>?)sender;

            if (child == null)
            {
                if (_logger.IsDebug)
                {
                    _logger.Debug("Sub-feed state changed from a null feed");
                }
                return;
            }

            if (child.CurrentState == SyncFeedState.Active)
            {
                Activate();
                return;
            }

            bool areAllFinished = true;

            foreach (ISyncFeed <T> subFeed in _subFeeds)
            {
                if (subFeed.CurrentState != SyncFeedState.Finished)
                {
                    areAllFinished = false;
                    break;
                }
            }

            if (areAllFinished)
            {
                Finish();
            }
        }
Beispiel #5
0
 public HeadersSyncDispatcher(
     ISyncFeed <HeadersSyncBatch> syncFeed,
     ISyncPeerPool syncPeerPool,
     IPeerAllocationStrategyFactory <FastBlocksBatch> peerAllocationStrategy,
     ILogManager logManager)
     : base(syncFeed, syncPeerPool, peerAllocationStrategy, logManager)
 {
 }
Beispiel #6
0
 public ReceiptsSyncDispatcher(
     ISyncFeed <ReceiptsSyncBatch> syncFeed,
     ISyncPeerPool syncPeerPool,
     IPeerAllocationStrategyFactory <ReceiptsSyncBatch> peerAllocationStrategy,
     ILogManager logManager)
     : base(syncFeed, syncPeerPool, peerAllocationStrategy, logManager)
 {
 }
Beispiel #7
0
 public BeamSyncDbProvider(ISyncModeSelector syncModeSelector, IDbProvider otherProvider, ISyncConfig syncConfig, ILogManager logManager)
 {
     _otherProvider = otherProvider ?? throw new ArgumentNullException(nameof(otherProvider));
     _codeDb        = new BeamSyncDb(otherProvider.CodeDb.Innermost, otherProvider.BeamStateDb, syncModeSelector, logManager, syncConfig.BeamSyncContextTimeout, syncConfig.BeamSyncPreProcessorTimeout);
     _stateDb       = new BeamSyncDb(otherProvider.StateDb.Innermost, otherProvider.BeamStateDb, syncModeSelector, logManager, syncConfig.BeamSyncContextTimeout, syncConfig.BeamSyncPreProcessorTimeout);
     BeamSyncFeed   = new CompositeStateSyncFeed <StateSyncBatch?>(logManager, _codeDb, _stateDb);
     StateDb        = new StateDb(_stateDb);
     CodeDb         = new StateDb(_codeDb);
 }
        protected SyncDispatcher(ISyncFeed <T> syncFeed, ISyncPeerPool syncPeerPool, IPeerAllocationStrategyFactory <T> peerAllocationStrategy, ILogManager logManager)
        {
            Logger                 = logManager?.GetClassLogger <SyncDispatcher <T> >() ?? throw new ArgumentNullException(nameof(logManager));
            Feed                   = syncFeed ?? throw new ArgumentNullException(nameof(syncFeed));
            SyncPeerPool           = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
            PeerAllocationStrategy = peerAllocationStrategy ?? throw new ArgumentNullException(nameof(peerAllocationStrategy));

            syncFeed.StateChanged += SyncFeedOnStateChanged;
        }
        public BeamSyncDbProvider(ISyncModeSelector syncModeSelector, IDbProvider otherProvider, ILogManager logManager)
        {
            _otherProvider = otherProvider ?? throw new ArgumentNullException(nameof(otherProvider));
            BeamSyncDb codeDb  = new BeamSyncDb(otherProvider.CodeDb.Innermost, otherProvider.BeamStateDb, syncModeSelector, logManager);
            BeamSyncDb stateDb = new BeamSyncDb(otherProvider.StateDb.Innermost, otherProvider.BeamStateDb, syncModeSelector, logManager);

            BeamSyncFeed = new CompositeStateSyncFeed <StateSyncBatch>(logManager, codeDb, stateDb);
            StateDb      = new StateDb(stateDb);
            CodeDb       = new StateDb(codeDb);
        }
Beispiel #10
0
        public override SyncResponseHandlingResult HandleResponse(T batch)
        {
            for (int subFeedIndex = 0; subFeedIndex < _subFeeds.Length; subFeedIndex++)
            {
                ISyncFeed <T> subFeed = _subFeeds[subFeedIndex];
                if (subFeed.FeedId == batch?.ConsumerId)
                {
                    subFeed.HandleResponse(batch);
                }
            }

            return(SyncResponseHandlingResult.OK);
        }
        public override Task <T> PrepareRequest()
        {
            for (int subFeedIndex = 0; subFeedIndex < _subFeeds.Length; subFeedIndex++)
            {
                ISyncFeed <T> subFeed = _subFeeds[subFeedIndex];
                if (subFeed.CurrentState == SyncFeedState.Active)
                {
                    T batch = subFeed.PrepareRequest().Result;
                    if (batch != null)
                    {
                        return(Task.FromResult(batch));
                    }
                }
            }

            return(null);
        }
Beispiel #12
0
        public override async Task <T> PrepareRequest()
        {
            for (int subFeedIndex = 0; subFeedIndex < _subFeeds.Length; subFeedIndex++)
            {
                ISyncFeed <T> subFeed = _subFeeds[subFeedIndex];
                if (subFeed.CurrentState == SyncFeedState.Active)
                {
                    T batch = await subFeed.PrepareRequest();

                    if (batch != null)
                    {
                        return(batch);
                    }
                }
            }

            return(null !);
        }
Beispiel #13
0
        private void StartBeamSyncComponents()
        {
            // so bad
            BeamSyncDbProvider?         beamSyncDbProvider = _dbProvider as BeamSyncDbProvider;
            ISyncFeed <StateSyncBatch?>?beamSyncFeed       = beamSyncDbProvider?.BeamSyncFeed;

            if (beamSyncDbProvider == null || beamSyncFeed == null)
            {
                throw new InvalidOperationException("Corrupted types when initializing beam sync components " +
                                                    $"received {_dbProvider.GetType().FullName}");
            }

            if (_syncConfig.BeamSyncVerifiedMode)
            {
                beamSyncDbProvider.EnableVerifiedMode();
            }

            StateSyncDispatcher dispatcher = new StateSyncDispatcher(
                beamSyncFeed !, _syncPeerPool, new StateSyncAllocationStrategyFactory(), _logManager);

            dispatcher.Start(_syncCancellation.Token).ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    if (_logger.IsError)
                    {
                        _logger.Error("Beam sync failed", t.Exception);
                    }
                }
                else
                {
                    if (_logger.IsInfo)
                    {
                        _logger.Info("Beam sync completed.");
                    }
                }
            });
        }
        public BlockDownloader(
            ISyncFeed <BlocksRequest> feed,
            ISyncPeerPool syncPeerPool,
            IBlockTree blockTree,
            IBlockValidator blockValidator,
            ISealValidator sealValidator,
            ISyncReport syncReport,
            IReceiptStorage receiptStorage,
            ISpecProvider specProvider,
            ILogManager logManager)
            : base(feed, syncPeerPool, new BlocksSyncPeerAllocationStrategyFactory(), logManager)
        {
            _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
            _sealValidator  = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator));
            _syncReport     = syncReport ?? throw new ArgumentNullException(nameof(syncReport));
            _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _specProvider   = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _logger         = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _syncBatchSize           = new SyncBatchSize(logManager);
            _blockTree.NewHeadBlock += BlockTreeOnNewHeadBlock;
        }
Beispiel #15
0
        public BlockDownloader(
            ISyncFeed <BlocksRequest?>?feed,
            ISyncPeerPool?syncPeerPool,
            IBlockTree?blockTree,
            IBlockValidator?blockValidator,
            ISealValidator?sealValidator,
            ISyncReport?syncReport,
            IReceiptStorage?receiptStorage,
            ISpecProvider?specProvider,
            ILogManager?logManager)
            : base(feed, syncPeerPool, new BlocksSyncPeerAllocationStrategyFactory(), logManager)
        {
            _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
            _sealValidator  = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator));
            _syncReport     = syncReport ?? throw new ArgumentNullException(nameof(syncReport));
            _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _specProvider   = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _logger         = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _receiptsRecovery        = new ReceiptsRecovery(new EthereumEcdsa(_specProvider.ChainId, logManager), _specProvider);
            _syncBatchSize           = new SyncBatchSize(logManager);
            _blockTree.NewHeadBlock += BlockTreeOnNewHeadBlock;
        }
 public BlockDownloader Create(ISyncFeed <BlocksRequest?> syncFeed)
 {
     return(new MergeBlockDownloader(_poSSwitcher, _beaconPivot, syncFeed, _syncPeerPool, _blockTree, _blockValidator,
                                     _sealValidator, _syncReport, _receiptStorage, _specProvider, _betterPeerStrategy, _chainLevelHelper,
                                     _syncProgressResolver, _logManager));
 }
 public SnapSyncDispatcher(ISyncFeed <SnapSyncBatch>?syncFeed, ISyncPeerPool?syncPeerPool, IPeerAllocationStrategyFactory <SnapSyncBatch>?peerAllocationStrategy, ILogManager?logManager)
     : base(syncFeed, syncPeerPool, peerAllocationStrategy, logManager)
 {
 }
Beispiel #18
0
 public BlockDownloader Create(ISyncFeed <BlocksRequest?> syncFeed)
 {
     return(new(syncFeed, _syncPeerPool, _blockTree, _blockValidator, _sealValidator, _syncReport,
                _receiptStorage, _specProvider, new BlocksSyncPeerAllocationStrategyFactory(), _betterPeerStrategy, _logManager));
 }
 public TestDispatcher(ISyncFeed <TestBatch> syncFeed, ISyncPeerPool syncPeerPool, IPeerAllocationStrategyFactory <TestBatch> peerAllocationStrategy)
     : base(syncFeed, syncPeerPool, peerAllocationStrategy, LimboLogs.Instance)
 {
 }
 public WitnessBlockSyncDispatcher(ISyncFeed <WitnessBlockSyncBatch> syncFeed, ISyncPeerPool syncPeerPool, IPeerAllocationStrategyFactory <WitnessBlockSyncBatch> peerAllocationStrategy, ILogManager logManager)
     : base(syncFeed, syncPeerPool, peerAllocationStrategy, logManager)
 {
 }