public SyncingContext(SynchronizerType synchronizerType)
            {
                _logger = _logManager.GetClassLogger();
                ISyncConfig syncConfig = new SyncConfig();

                syncConfig.FastSync = synchronizerType == SynchronizerType.Fast;
                ISnapshotableDb stateDb = new StateDb();
                ISnapshotableDb codeDb  = new StateDb();

                BlockTree = new BlockTree(new MemDb(), new MemDb(), new MemDb(), new SingleReleaseSpecProvider(Constantinople.Instance, 1), NullTxPool.Instance, _logManager);
                var stats = new NodeStatsManager(new StatsConfig(), _logManager);

                SyncPeerPool = new EthSyncPeerPool(BlockTree, stats, syncConfig, _logManager);

                NodeDataFeed       feed = new NodeDataFeed(codeDb, stateDb, _logManager);
                NodeDataDownloader nodeDataDownloader = new NodeDataDownloader(SyncPeerPool, feed, _logManager);

                Synchronizer = new Synchronizer(BlockTree,
                                                TestBlockValidator.AlwaysValid,
                                                TestSealValidator.AlwaysValid,
                                                SyncPeerPool, syncConfig, nodeDataDownloader, _logManager);

                SyncServer = new SyncServer(stateDb, codeDb, BlockTree, NullReceiptStorage.Instance, TestSealValidator.AlwaysValid, SyncPeerPool, Synchronizer, _logManager);
                SyncPeerPool.Start();

                Synchronizer.Start();
                Synchronizer.SyncEvent += SynchronizerOnSyncEvent;

                AllInstances.Add(this);
            }
 public void Setup()
 {
     _blockTree    = Substitute.For <IBlockTree>();
     _peerPool     = Substitute.For <IEthSyncPeerPool>();
     _synchronizer = Substitute.For <ISynchronizer>();
     _syncServer   = new SyncServer(new StateDb(), new StateDb(), _blockTree, NullReceiptStorage.Instance, TestSealValidator.AlwaysValid, _peerPool, _synchronizer, new SyncConfig(), LimboLogs.Instance);
 }
Exemple #3
0
        public void Can_write_report_update_with_allocations()
        {
            ISyncPeer        syncPeer     = Substitute.For <ISyncPeer>();
            IEthSyncPeerPool syncPeerPool = Substitute.For <IEthSyncPeerPool>();
            PeerInfo         peer1        = new PeerInfo(syncPeer);

            peer1.IsInitialized = false;

            PeerInfo peer2 = new PeerInfo(syncPeer);

            peer2.IsInitialized = true;

            PeerInfo[] peers = new PeerInfo[] { peer1, peer2 };
            syncPeerPool.PeerCount.Returns(peers.Length);

            syncPeerPool.AllPeers.Returns(peers);
            syncPeerPool.Allocations.Returns(peers.Select(p => new SyncPeerAllocation(p, "desc")));

            SyncPeersReport report = new SyncPeersReport(syncPeerPool, Substitute.For <INodeStatsManager>(), NoErrorLimboLogs.Instance);

            report.Write();

            peer1.IsInitialized = true;
            report.Write();
        }
Exemple #4
0
        public void Can_keep_changing_in_fast_sync()
        {
            IEthSyncPeerPool syncPeerPool = Substitute.For <IEthSyncPeerPool>();
            ISyncPeer        syncPeer     = Substitute.For <ISyncPeer>();

            syncPeer.TotalDifficultyOnSessionStart.Returns((UInt256)(1024 * 1024));

            PeerInfo peerInfo1 = new PeerInfo(syncPeer)
            {
                HeadNumber = 0, IsInitialized = true
            };

            syncPeerPool.AllPeers.Returns(new[] { peerInfo1 });
            syncPeerPool.UsefulPeers.Returns(new[] { peerInfo1 });
            syncPeerPool.PeerCount.Returns(1);

            SyncConfig syncConfig = new SyncConfig();

            syncConfig.FastSync    = true;
            syncConfig.PivotNumber = null;
            syncConfig.PivotHash   = null;

            ISyncProgressResolver syncProgressResolver = Substitute.For <ISyncProgressResolver>();

            SyncModeSelector selector = new SyncModeSelector(syncProgressResolver, syncPeerPool, syncConfig, LimboLogs.Instance);

            Assert.AreEqual(SyncMode.NotStarted, selector.Current);

            (long BestRemote, long BestLocalHeader, long BestLocalFullBlock, long BestLocalState, SyncMode ExpectedState, string Description)[] states =
Exemple #5
0
        public Synchronizer(
            ISpecProvider specProvider,
            IBlockTree blockTree,
            IReceiptStorage receiptStorage,
            IBlockValidator blockValidator,
            ISealValidator sealValidator,
            IEthSyncPeerPool peerPool,
            ISyncConfig syncConfig,
            INodeDataDownloader nodeDataDownloader,
            ISyncReport syncReport,
            ILogManager logManager)
        {
            _logger             = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _specProvider       = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _blockTree          = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _receiptStorage     = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _syncConfig         = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _syncPeerPool       = peerPool ?? throw new ArgumentNullException(nameof(peerPool));
            _nodeDataDownloader = nodeDataDownloader ?? throw new ArgumentNullException(nameof(nodeDataDownloader));
            _syncReport         = syncReport ?? throw new ArgumentNullException(nameof(syncReport));

            SyncProgressResolver syncProgressResolver = new SyncProgressResolver(_blockTree, receiptStorage, _nodeDataDownloader, syncConfig, logManager);

            _syncMode = new SyncModeSelector(syncProgressResolver, _syncPeerPool, _syncConfig, logManager);

            _blockDownloader = new BlockDownloader(_blockTree, blockValidator, sealValidator, syncReport, receiptStorage, specProvider, logManager);

            if (syncConfig.FastBlocks)
            {
                FastBlocksFeed feed = new FastBlocksFeed(_specProvider, _blockTree, _receiptStorage, _syncPeerPool, syncConfig, _syncReport, logManager);
                _fastBlockDownloader = new FastBlocksDownloader(_syncPeerPool, feed, blockValidator, sealValidator, logManager);
            }
        }
        public Synchronizer(IBlockTree blockTree,
                            IBlockValidator blockValidator,
                            ISealValidator sealValidator,
                            IEthSyncPeerPool peerPool,
                            ISyncConfig syncConfig,
                            INodeDataDownloader nodeDataDownloader,
                            ILogManager logManager)
        {
            _logger             = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _syncConfig         = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _nodeDataDownloader = nodeDataDownloader ?? throw new ArgumentNullException(nameof(nodeDataDownloader));
            _syncPeerPool       = peerPool ?? throw new ArgumentNullException(nameof(peerPool));
            _blockTree          = blockTree ?? throw new ArgumentNullException(nameof(blockTree));

            _syncMode          = new SyncModeSelector(_syncPeerPool, _syncConfig, logManager);
            _syncMode.Changed += (s, e) => RequestSynchronization(SyncTriggerType.SyncModeChange);
            _syncMode.Changed += (s, e) =>
            {
                if (_blocksSyncAllocation == null && _syncMode.Current != SyncMode.StateNodes)
                {
                    AllocateBlocksSync();
                }

                if (_syncMode.Current == SyncMode.StateNodes)
                {
                    FreeBlocksSyncAllocation();
                }
            };

            // make ctor parameter?
            _blockDownloader = new BlockDownloader(_blockTree, blockValidator, sealValidator, logManager);
        }
Exemple #7
0
        public ProtocolsManager(
            IEthSyncPeerPool ethSyncPeerPool,
            ISyncServer syncServer,
            ITxPool txPool,
            IDiscoveryApp discoveryApp,
            IMessageSerializationService serializationService,
            IRlpxPeer localPeer,
            INodeStatsManager nodeStatsManager,
            IProtocolValidator protocolValidator,
            INetworkStorage peerStorage,
            IPerfService perfService,
            ILogManager logManager)
        {
            _syncPool          = ethSyncPeerPool ?? throw new ArgumentNullException(nameof(ethSyncPeerPool));
            _syncServer        = syncServer ?? throw new ArgumentNullException(nameof(syncServer));
            _txPool            = txPool ?? throw new ArgumentNullException(nameof(txPool));
            _discoveryApp      = discoveryApp ?? throw new ArgumentNullException(nameof(discoveryApp));
            _serializer        = serializationService ?? throw new ArgumentNullException(nameof(serializationService));
            _localPeer         = localPeer ?? throw new ArgumentNullException(nameof(localPeer));
            _stats             = nodeStatsManager ?? throw new ArgumentNullException(nameof(nodeStatsManager));
            _protocolValidator = protocolValidator ?? throw new ArgumentNullException(nameof(protocolValidator));
            _perfService       = perfService ?? throw new ArgumentNullException(nameof(perfService));
            _peerStorage       = peerStorage ?? throw new ArgumentNullException(nameof(peerStorage));
            _logManager        = logManager ?? throw new ArgumentNullException(nameof(logManager));
            _logger            = _logManager.GetClassLogger();

            _syncPool.SyncEvent      += OnSyncEvent;
            localPeer.SessionCreated += SessionCreated;
        }
Exemple #8
0
        public void Can_write_no_peers()
        {
            IEthSyncPeerPool syncPeerPool = Substitute.For <IEthSyncPeerPool>();
            SyncPeersReport  report       = new SyncPeersReport(syncPeerPool, Substitute.For <INodeStatsManager>(), NoErrorLimboLogs.Instance);

            report.Write();
            report.Write();
        }
Exemple #9
0
        public SyncModeSelector(IEthSyncPeerPool syncPeerPool, ISyncConfig syncConfig, ILogManager logManager)
        {
            _syncPeerPool = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
            _logger       = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _fastSyncEnabled = syncConfig?.FastSync ?? false;
            Current          = _fastSyncEnabled ? SyncMode.Headers : SyncMode.Full;
        }
Exemple #10
0
 public FastBlocksDownloader(IEthSyncPeerPool syncPeerPool, IFastBlocksFeed fastBlocksFeed, IBlockValidator blockValidator, ISealValidator sealValidator, ILogManager logManager)
 {
     _syncPeerPool   = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
     _fastBlocksFeed = fastBlocksFeed ?? throw new ArgumentNullException(nameof(fastBlocksFeed));
     _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
     _sealValidator  = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator));
     _logger         = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
Exemple #11
0
        public NodeDataDownloader(IEthSyncPeerPool syncPeerPool, INodeDataFeed nodeDataFeed, INodeDataConsumer additionalConsumer, ILogManager logManager)
        {
            _syncPeerPool       = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
            _feed               = nodeDataFeed ?? throw new ArgumentNullException(nameof(nodeDataFeed));
            _additionalConsumer = additionalConsumer ?? throw new ArgumentNullException(nameof(additionalConsumer));
            _logger             = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _additionalConsumer.NeedMoreData += AdditionalConsumerOnNeedMoreData;
        }
Exemple #12
0
        public SyncModeSelector(ISyncProgressResolver syncProgressResolver, IEthSyncPeerPool syncPeerPool, ISyncConfig syncConfig, ILogManager logManager)
        {
            _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver));
            _syncPeerPool         = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
            _syncConfig           = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _logger = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            Current = SyncMode.NotStarted;
        }
Exemple #13
0
        public SyncServer(ISnapshotableDb stateDb, ISnapshotableDb codeDb, IBlockTree blockTree, IReceiptStorage receiptStorage, ISealValidator sealValidator, IEthSyncPeerPool pool, ISynchronizer synchronizer, ILogManager logManager)
        {
            _synchronizer   = synchronizer ?? throw new ArgumentNullException(nameof(synchronizer));
            _pool           = pool ?? throw new ArgumentNullException(nameof(pool));
            _sealValidator  = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator));
            _stateDb        = stateDb ?? throw new ArgumentNullException(nameof(stateDb));
            _codeDb         = codeDb ?? throw new ArgumentNullException(nameof(codeDb));
            _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _logger         = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _blockTree.NewHeadBlock += OnNewHeadBlock;
        }
        private NodeDataDownloader PrepareDownloader(ISyncPeer syncPeer)
        {
            DbContext dbContext = new DbContext(_logger);
            BlockTree blockTree = Build.A.BlockTree().OfChainLength((int)BlockTree.BestSuggestedHeader.Number).TestObject;

            _pool = new EthSyncPeerPool(blockTree, new NodeStatsManager(new StatsConfig(), LimboLogs.Instance), 25, LimboLogs.Instance);
            _pool.Start();
            _pool.AddPeer(syncPeer);

            NodeDataFeed       feed       = new NodeDataFeed(dbContext.LocalCodeDb, dbContext.LocalStateDb, _logManager);
            NodeDataDownloader downloader = new NodeDataDownloader(_pool, feed, NullDataConsumer.Instance, _logManager);

            return(downloader);
        }
Exemple #15
0
        public void Setup()
        {
            _nodeWhoSentTheBlock = new Node(TestItem.PublicKeyA, "127.0.0.1", 30303);
            _peerPool            = Substitute.For <IEthSyncPeerPool>();
            _peerPool.TryFind(_nodeWhoSentTheBlock.Id, out PeerInfo peerInfo).Returns(x =>
            {
                ISyncPeer peer = Substitute.For <ISyncPeer>();
                x[1]           = new PeerInfo(peer);
                return(true);
            });

            _blockTree    = Substitute.For <IBlockTree>();
            _synchronizer = Substitute.For <ISynchronizer>();
            _syncServer   = new SyncServer(new StateDb(), new StateDb(), _blockTree, NullReceiptStorage.Instance, TestBlockValidator.AlwaysValid, TestSealValidator.AlwaysValid, _peerPool, _synchronizer, new SyncConfig(), LimboLogs.Instance);
        }
Exemple #16
0
        public void Can_write_one_uninitialized()
        {
            ISyncPeer        syncPeer     = Substitute.For <ISyncPeer>();
            IEthSyncPeerPool syncPeerPool = Substitute.For <IEthSyncPeerPool>();
            PeerInfo         peer1        = new PeerInfo(syncPeer);

            peer1.IsInitialized = false;

            PeerInfo[] peers = new PeerInfo[] { peer1 };
            syncPeerPool.PeerCount.Returns(peers.Length);

            SyncPeersReport report = new SyncPeersReport(syncPeerPool, Substitute.For <INodeStatsManager>(), NoErrorLimboLogs.Instance);

            report.Write();
            report.Write();
        }
Exemple #17
0
        public SyncServer(ISnapshotableDb stateDb, ISnapshotableDb codeDb, IBlockTree blockTree, IReceiptStorage receiptStorage, IBlockValidator blockValidator, ISealValidator sealValidator, IEthSyncPeerPool pool, ISynchronizer synchronizer, ISyncConfig syncConfig, ILogManager logManager)
        {
            _synchronizer   = synchronizer ?? throw new ArgumentNullException(nameof(synchronizer));
            _syncConfig     = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _pool           = pool ?? throw new ArgumentNullException(nameof(pool));
            _sealValidator  = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator));
            _stateDb        = stateDb ?? throw new ArgumentNullException(nameof(stateDb));
            _codeDb         = codeDb ?? throw new ArgumentNullException(nameof(codeDb));
            _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
            _logger         = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _pivotNumber    = _syncConfig.PivotNumberParsed;

            _blockTree.NewHeadBlock += OnNewHeadBlock;
            _pivotHash = new Keccak(_syncConfig.PivotHash ?? Keccak.Zero.ToString());
        }
        public SyncModeSelector(ISyncProgressResolver syncProgressResolver, IEthSyncPeerPool syncPeerPool, ISyncConfig syncConfig, ILogManager logManager)
        {
            _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver));
            _syncPeerPool         = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
            _syncConfig           = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _logger = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            if (syncConfig.FastSyncCatchUpHeightDelta <= FullSyncThreshold)
            {
                if (_logger.IsWarn)
                {
                    _logger.Warn($"'FastSyncCatchUpHeightDelta' parameter is less or equal to {FullSyncThreshold}, which is a threshold of blocks always downloaded in full sync. 'FastSyncCatchUpHeightDelta' will have no effect.");
                }
            }

            Current = SyncMode.NotStarted;
        }
Exemple #19
0
            public Context()
            {
                _channel = Substitute.For <IChannel>();
                _channelHandlerContext = Substitute.For <IChannelHandlerContext>();
                _pipeline = Substitute.For <IChannelPipeline>();
                _channelHandlerContext.Channel.Returns(_channel);
                _channel.Pipeline.Returns(_pipeline);
                _pipeline.Get <ZeroPacketSplitter>().Returns(new ZeroPacketSplitter(LimboLogs.Instance));
                _packetSender = Substitute.For <IPacketSender>();
                _syncServer   = Substitute.For <ISyncServer>();
                _syncServer   = Substitute.For <ISyncServer>();
                _syncServer.Genesis.Returns(Build.A.Block.Genesis.TestObject.Header);
                _syncServer.Head.Returns(Build.A.BlockHeader.TestObject);
                _txPool       = Substitute.For <ITxPool>();
                _discoveryApp = Substitute.For <IDiscoveryApp>();
                _serializer   = new MessageSerializationService();
                _localPeer    = Substitute.For <IRlpxPeer>();
                _localPeer.LocalPort.Returns(_localPort);
                _localPeer.LocalNodeId.Returns(TestItem.PublicKeyA);
                _nodeStatsManager = new NodeStatsManager(new StatsConfig(), LimboLogs.Instance);
                _blockTree        = Substitute.For <IBlockTree>();
                _blockTree.ChainId.Returns(1);
                _blockTree.Genesis.Returns(Build.A.Block.Genesis.TestObject.Header);
                _protocolValidator = new ProtocolValidator(_nodeStatsManager, _blockTree, LimboLogs.Instance);
                _peerStorage       = Substitute.For <INetworkStorage>();
                _perfService       = new PerfService(LimboLogs.Instance);
                _syncPeerPool      = Substitute.For <IEthSyncPeerPool>();
                _manager           = new ProtocolsManager(
                    _syncPeerPool,
                    _syncServer,
                    _txPool,
                    _discoveryApp,
                    _serializer,
                    _localPeer,
                    _nodeStatsManager,
                    _protocolValidator,
                    _peerStorage,
                    _perfService,
                    LimboLogs.Instance);

                _serializer.Register(new HelloMessageSerializer());
                _serializer.Register(new StatusMessageSerializer());
                _serializer.Register(new DisconnectMessageSerializer());
            }
Exemple #20
0
        public Synchronizer(IBlockTree blockTree,
                            IBlockValidator blockValidator,
                            ISealValidator sealValidator,
                            IEthSyncPeerPool peerPool,
                            ISyncConfig syncConfig,
                            INodeDataDownloader nodeDataDownloader,
                            ILogManager logManager)
        {
            _logger             = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _syncConfig         = syncConfig ?? throw new ArgumentNullException(nameof(syncConfig));
            _nodeDataDownloader = nodeDataDownloader ?? throw new ArgumentNullException(nameof(nodeDataDownloader));
            _syncPeerPool       = peerPool ?? throw new ArgumentNullException(nameof(peerPool));
            _blockTree          = blockTree ?? throw new ArgumentNullException(nameof(blockTree));

            SyncProgressResolver syncProgressResolver = new SyncProgressResolver(_blockTree, _nodeDataDownloader, logManager);

            _syncMode = new SyncModeSelector(syncProgressResolver, _syncPeerPool, _syncConfig, logManager);

            // make ctor parameter?
            _blockDownloader = new BlockDownloader(_blockTree, blockValidator, sealValidator, logManager);
        }
        public void Setup()
        {
            _localReceiptStorage          = new InMemoryReceiptStorage();
            _syncPeers                    = new List <LatencySyncPeerMock>();
            _peerTrees                    = new Dictionary <LatencySyncPeerMock, IBlockTree>();
            _peerMaxResponseSizes         = new Dictionary <LatencySyncPeerMock, int>();
            _pendingResponses             = new Dictionary <LatencySyncPeerMock, FastBlocksBatch>();
            _invalidBlocks                = new Dictionary <LatencySyncPeerMock, HashSet <long> >();
            _maliciousByRepetition        = new HashSet <LatencySyncPeerMock>();
            _maliciousByInvalidTxs        = new HashSet <LatencySyncPeerMock>();
            _maliciousByInvalidOmmers     = new HashSet <LatencySyncPeerMock>();
            _maliciousByShiftedOneForward = new HashSet <LatencySyncPeerMock>();
            _maliciousByShiftedOneBack    = new HashSet <LatencySyncPeerMock>();
            _maliciousByShortAtStart      = new HashSet <LatencySyncPeerMock>();
            _maliciousByInvalidReceipts   = new HashSet <LatencySyncPeerMock>();
            _incorrectByTooShortMessages  = new HashSet <LatencySyncPeerMock>();
            _incorrectByTooLongMessages   = new HashSet <LatencySyncPeerMock>();
            _timingOut                    = new HashSet <LatencySyncPeerMock>();
            _scheduledActions             = new Dictionary <long, Action>();

            LatencySyncPeerMock.RemoteIndex = 1;
            _time         = 0;
            _syncPeerPool = Substitute.For <IEthSyncPeerPool>();
            _syncPeerPool.WhenForAnyArgs(p => p.ReportNoSyncProgress(Arg.Any <SyncPeerAllocation>()))
            .Do(ci =>
            {
                LatencySyncPeerMock mock = ((LatencySyncPeerMock)ci.Arg <SyncPeerAllocation>().Current.SyncPeer);
                mock.BusyUntil           = _time + 5000;
                mock.IsReported          = true;
            });

            _syncPeerPool.WhenForAnyArgs(p => p.ReportNoSyncProgress(Arg.Any <PeerInfo>()))
            .Do(ci =>
            {
                LatencySyncPeerMock mock = ((LatencySyncPeerMock)ci.Arg <PeerInfo>().SyncPeer);
                mock.BusyUntil           = _time + 5000;
                mock.IsReported          = true;
            });

            _syncPeerPool.WhenForAnyArgs(p => p.ReportInvalid(Arg.Any <SyncPeerAllocation>()))
            .Do(ci =>
            {
                LatencySyncPeerMock mock = ((LatencySyncPeerMock)ci.Arg <SyncPeerAllocation>().Current.SyncPeer);
                mock.BusyUntil           = _time + 30000;
                mock.IsReported          = true;
            });

            _syncPeerPool.WhenForAnyArgs(p => p.ReportInvalid(Arg.Any <PeerInfo>()))
            .Do(ci =>
            {
                LatencySyncPeerMock mock = ((LatencySyncPeerMock)ci.Arg <PeerInfo>().SyncPeer);
                mock.BusyUntil           = _time + 30000;
                mock.IsReported          = true;
            });

            _syncPeerPool.AllPeers.Returns((ci) => _syncPeers.Select(sp => new PeerInfo(sp)
            {
                HeadNumber = sp.Tree.Head.Number
            }));

            _syncConfig                      = new SyncConfig();
            _syncConfig.PivotHash            = _validTree2048.Head.Hash.ToString();
            _syncConfig.PivotNumber          = _validTree2048.Head.Number.ToString();
            _syncConfig.PivotTotalDifficulty = _validTree2048.Head.TotalDifficulty.ToString();

            SetupLocalTree();
            SetupFeed();
        }
Exemple #22
0
 public static void ReportInvalid(this IEthSyncPeerPool syncPeerPool, SyncPeerAllocation allocation, string details)
 {
     syncPeerPool.ReportInvalid(allocation?.Current, details);
 }
 public NodeDataDownloader(IEthSyncPeerPool syncPeerPool, INodeDataFeed nodeDataFeed, ILogManager logManager)
 {
     _syncPeerPool = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
     _nodeDataFeed = nodeDataFeed ?? throw new ArgumentNullException(nameof(nodeDataFeed));
     _logger       = logManager.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
Exemple #24
0
 public SyncPeersReport(IEthSyncPeerPool peerPool, INodeStatsManager statsManager, ILogManager logManager)
 {
     _peerPool = peerPool ?? throw new ArgumentNullException(nameof(peerPool));
     _stats    = statsManager ?? throw new ArgumentNullException(nameof(statsManager));
     _logger   = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
Exemple #25
0
 public static void ReportNoSyncProgress(this IEthSyncPeerPool syncPeerPool, SyncPeerAllocation allocation, bool isSevere = true)
 {
     syncPeerPool.ReportNoSyncProgress(allocation?.Current, isSevere);
 }
 public void SetUp()
 {
     _blockTree = Substitute.For <IBlockTree>();
     _stats     = Substitute.For <INodeStatsManager>();
     _pool      = new EthSyncPeerPool(_blockTree, _stats, new SyncConfig(), 25, LimboLogs.Instance);
 }
Exemple #27
0
        private async Task InitializeNetwork(
            IReceiptStorage receiptStorage,
            ISealValidator sealValidator,
            TxValidator txValidator)
        {
            ISyncConfig syncConfig = _configProvider.GetConfig <ISyncConfig>();

            _syncPeerPool = new EthSyncPeerPool(_blockTree, _nodeStatsManager, syncConfig, _logManager);
            NodeDataFeed       feed = new NodeDataFeed(_dbProvider.CodeDb, _dbProvider.StateDb, _logManager);
            NodeDataDownloader nodeDataDownloader = new NodeDataDownloader(_syncPeerPool, feed, _logManager);

            _synchronizer = new Synchronizer(_blockTree, _blockValidator, _sealValidator, _syncPeerPool, syncConfig, nodeDataDownloader, _logManager);

            _syncServer = new SyncServer(
                _dbProvider.StateDb,
                _dbProvider.CodeDb,
                _blockTree,
                _receiptStorage,
                sealValidator,
                _syncPeerPool,
                _synchronizer,
                _logManager);

            InitDiscovery();
            await InitPeer().ContinueWith(initPeerTask =>
            {
                if (initPeerTask.IsFaulted)
                {
                    _logger.Error("Unable to init the peer manager.", initPeerTask.Exception);
                }
            });

            ;

            await StartSync().ContinueWith(initNetTask =>
            {
                if (initNetTask.IsFaulted)
                {
                    _logger.Error("Unable to start the synchronizer.", initNetTask.Exception);
                }
            });

            await StartDiscovery().ContinueWith(initDiscoveryTask =>
            {
                if (initDiscoveryTask.IsFaulted)
                {
                    _logger.Error("Unable to start the discovery protocol.", initDiscoveryTask.Exception);
                }
            });

            try
            {
                StartPeer();
            }
            catch (Exception e)
            {
                _logger.Error("Unable to start the peer manager.", e);
            }

            ;

            if (_logger.IsInfo)
            {
                _logger.Info($"Ethereum     : tcp://{_enode.IpAddress}:{_enode.P2PPort}");
            }
            if (_logger.IsInfo)
            {
                _logger.Info($"Version      : {ClientVersion.Description}");
            }
            if (_logger.IsInfo)
            {
                _logger.Info($"This node    : {_enode.Info}");
            }
            if (_logger.IsInfo)
            {
                _logger.Info($"Node address : {_enode.Address} (do not use as an account)");
            }
        }