Beispiel #1
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;
        }
Beispiel #2
0
        public ProtocolsManager(
            ISyncPeerPool syncPeerPool,
            ISyncServer syncServer,
            ITxPool txPool,
            IPooledTxsRequestor pooledTxsRequestor,
            IDiscoveryApp discoveryApp,
            IMessageSerializationService serializationService,
            IRlpxPeer localPeer,
            INodeStatsManager nodeStatsManager,
            IProtocolValidator protocolValidator,
            INetworkStorage peerStorage,
            ISpecProvider specProvider,
            ILogManager logManager)
        {
            _syncPool           = syncPeerPool ?? throw new ArgumentNullException(nameof(syncPeerPool));
            _syncServer         = syncServer ?? throw new ArgumentNullException(nameof(syncServer));
            _txPool             = txPool ?? throw new ArgumentNullException(nameof(txPool));
            _pooledTxsRequestor = pooledTxsRequestor ?? throw new ArgumentNullException(nameof(pooledTxsRequestor));
            _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));
            _peerStorage       = peerStorage ?? throw new ArgumentNullException(nameof(peerStorage));
            _specProvider      = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _logManager        = logManager ?? throw new ArgumentNullException(nameof(logManager));
            _logger            = _logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));

            _protocolFactories        = GetProtocolFactories();
            localPeer.SessionCreated += SessionCreated;
        }
 public void Destruct()
 {
     m_sync_server.Destruct();
     m_sync_server = null;
     m_logic_world.Destruct();
     m_logic_world = null;
 }
        public void Will_not_serve_receipts_requests_above_512()
        {
            StatusMessageSerializer   statusMessageSerializer = new StatusMessageSerializer();
            ReceiptsMessageSerializer receiptMessageSerializer
                = new ReceiptsMessageSerializer(MainnetSpecProvider.Instance);
            GetReceiptsMessageSerializer getReceiptMessageSerializer
                = new GetReceiptsMessageSerializer();
            MessageSerializationService serializationService = new MessageSerializationService();

            serializationService.Register(statusMessageSerializer);
            serializationService.Register(receiptMessageSerializer);
            serializationService.Register(getReceiptMessageSerializer);

            ISyncServer          syncServer      = Substitute.For <ISyncServer>();
            Eth63ProtocolHandler protocolHandler = new Eth63ProtocolHandler(
                _session,
                serializationService,
                Substitute.For <INodeStatsManager>(),
                syncServer,
                Substitute.For <ITxPool>(),
                LimboLogs.Instance);

            StatusMessage statusMessage = new StatusMessage();
            Packet        statusPacket  =
                new Packet("eth", Eth62MessageCode.Status, statusMessageSerializer.Serialize(statusMessage));

            GetReceiptsMessage getReceiptsMessage = new GetReceiptsMessage(
                Enumerable.Repeat(Keccak.Zero, 513).ToArray());
            Packet getReceiptsPacket =
                new Packet("eth", Eth63MessageCode.GetReceipts, getReceiptMessageSerializer.Serialize(getReceiptsMessage));

            protocolHandler.HandleMessage(statusPacket);
            Assert.Throws <EthSyncException>(() => protocolHandler.HandleMessage(getReceiptsPacket));
        }
Beispiel #5
0
        public void Setup()
        {
            _svc = Build.A.SerializationService().WithEth().TestObject;

            NetworkDiagTracer.IsEnabled = true;

            _session = Substitute.For <ISession>();
            Node node = new(TestItem.PublicKeyA, new IPEndPoint(IPAddress.Broadcast, 30303));

            _session.Node.Returns(node);
            _syncManager     = Substitute.For <ISyncServer>();
            _transactionPool = Substitute.For <ITxPool>();
            _genesisBlock    = Build.A.Block.Genesis.TestObject;
            _syncManager.Head.Returns(_genesisBlock.Header);
            _syncManager.Genesis.Returns(_genesisBlock.Header);
            ITimerFactory timerFactory = Substitute.For <ITimerFactory>();

            _gossipPolicy = Substitute.For <IGossipPolicy>();
            _gossipPolicy.CanGossipBlocks.Returns(true);
            _gossipPolicy.ShouldGossipBlock(Arg.Any <BlockHeader>()).Returns(true);
            _gossipPolicy.ShouldDisconnectGossipingNodes.Returns(false);
            _handler = new Eth62ProtocolHandler(
                _session,
                _svc,
                new NodeStatsManager(timerFactory, LimboLogs.Instance),
                _syncManager,
                _transactionPool,
                _gossipPolicy,
                LimboLogs.Instance);
            _handler.Init();
        }
        public void Setup()
        {
            _svc = Build.A.SerializationService().WithEth65().TestObject;

            NetworkDiagTracer.IsEnabled = true;

            _session = Substitute.For <ISession>();
            Node node = new(TestItem.PublicKeyA, new IPEndPoint(IPAddress.Broadcast, 30303));

            _session.Node.Returns(node);
            _syncManager        = Substitute.For <ISyncServer>();
            _transactionPool    = Substitute.For <ITxPool>();
            _pooledTxsRequestor = Substitute.For <IPooledTxsRequestor>();
            _specProvider       = Substitute.For <ISpecProvider>();
            _genesisBlock       = Build.A.Block.Genesis.TestObject;
            _syncManager.Head.Returns(_genesisBlock.Header);
            _syncManager.Genesis.Returns(_genesisBlock.Header);
            ITimerFactory timerFactory = Substitute.For <ITimerFactory>();

            _handler = new Eth65ProtocolHandler(
                _session,
                _svc,
                new NodeStatsManager(timerFactory, LimboLogs.Instance),
                _syncManager,
                _transactionPool,
                _pooledTxsRequestor,
                Policy.FullGossip,
                _specProvider,
                LimboLogs.Instance);
            _handler.Init();
        }
Beispiel #7
0
        public SyncPeerMock(IBlockTree remoteTree, PublicKey localPublicKey = null, string localClientId = "", ISyncServer remoteSyncServer = null, PublicKey remotePublicKey = null, string remoteClientId = "")
        {
            string localHost = "127.0.0.1";

            if (int.TryParse(localClientId.Replace("PEER", string.Empty), out int localIndex))
            {
                localHost = $"127.0.0.{localIndex}";
            }

            string remoteHost = "127.0.0.1";

            if (int.TryParse(remoteClientId.Replace("PEER", string.Empty), out int remoteIndex))
            {
                remoteHost = $"127.0.0.{remoteIndex}";
            }

            _remoteTree       = remoteTree;
            _localPublicKey   = localPublicKey;
            _remoteSyncServer = remoteSyncServer;
            Node               = new Node(remotePublicKey ?? TestItem.PublicKeyA, remoteHost, 1234);
            LocalNode          = new Node(localPublicKey ?? TestItem.PublicKeyB, localHost, 1235);
            Node.ClientId      = remoteClientId;
            LocalNode.ClientId = localClientId;

            Task.Factory.StartNew(RunQueue, TaskCreationOptions.LongRunning);
        }
        public void CheckHealth_returns_expected_results([ValueSource(nameof(CheckHealthTestCases))] CheckHealthTest test)
        {
            IBlockFinder         blockFinder         = Substitute.For <IBlockFinder>();
            ISyncServer          syncServer          = Substitute.For <ISyncServer>();
            IBlockchainProcessor blockchainProcessor = Substitute.For <IBlockchainProcessor>();
            IBlockProducer       blockProducer       = Substitute.For <IBlockProducer>();
            IHealthHintService   healthHintService   = Substitute.For <IHealthHintService>();

            blockchainProcessor.IsProcessingBlocks(Arg.Any <ulong?>()).Returns(test.IsProcessingBlocks);
            blockProducer.IsProducingBlocks(Arg.Any <ulong?>()).Returns(test.IsProducingBlocks);
            syncServer.GetPeerCount().Returns(test.PeerCount);

            BlockHeaderBuilder GetBlockHeader(int blockNumber) => Build.A.BlockHeader.WithNumber(blockNumber);

            blockFinder.Head.Returns(new Block(GetBlockHeader(4).TestObject));
            if (test.IsSyncing)
            {
                blockFinder.FindBestSuggestedHeader().Returns(GetBlockHeader(15).TestObject);
            }
            else
            {
                blockFinder.FindBestSuggestedHeader().Returns(GetBlockHeader(2).TestObject);
            }

            IEthSyncingInfo   ethSyncingInfo    = new EthSyncingInfo(blockFinder);
            NodeHealthService nodeHealthService =
                new(syncServer, blockFinder, blockchainProcessor, blockProducer, new HealthChecksConfig(), healthHintService, ethSyncingInfo, test.IsMining);
            CheckHealthResult result = nodeHealthService.CheckHealth();

            Assert.AreEqual(test.ExpectedHealthy, result.Healthy);
            Assert.AreEqual(test.ExpectedMessage, FormatMessages(result.Messages.Select(x => x.Message)));
            Assert.AreEqual(test.ExpectedLongMessage, FormatMessages(result.Messages.Select(x => x.LongMessage)));
        }
Beispiel #9
0
 public virtual void Destruct()
 {
     m_combat_factory = null;
     m_sync_server.Destruct();
     m_sync_server = null;
     m_logic_world.Destruct();
     m_logic_world = null;
 }
Beispiel #10
0
 public Eth63ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ILogManager logManager,
                             ITxPool txPool) : base(session, serializer, nodeStatsManager, syncServer, logManager, txPool)
 {
 }
 public LesProtocolHandler(
     ISession session,
     IMessageSerializationService serializer,
     INodeStatsManager statsManager,
     ISyncServer syncServer,
     ILogManager logManager) : base(session, serializer, statsManager, syncServer, logManager)
 {
     _lastSentBlock = SyncServer.Head;
 }
 public WitProtocolHandler(ISession session,
                           IMessageSerializationService serializer,
                           INodeStatsManager nodeStats,
                           ISyncServer syncServer,
                           ILogManager logManager) : base(session, nodeStats, serializer, logManager)
 {
     _syncServer      = syncServer ?? throw new ArgumentNullException(nameof(syncServer));
     _witnessRequests = new MessageQueue <GetBlockWitnessHashesMessage, Keccak[]>(Send);
 }
 public Eth64ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ITxPool txPool,
                             ISpecProvider specProvider,
                             ILogManager logManager) : base(session, serializer, nodeStatsManager, syncServer, txPool, logManager)
 {
     _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
 }
Beispiel #14
0
 public Eth62ProtocolHandler(
     ISession session,
     IMessageSerializationService serializer,
     INodeStatsManager statsManager,
     ISyncServer syncServer,
     ITxPool txPool,
     ILogManager logManager) : base(session, serializer, statsManager, syncServer, txPool, logManager)
 {
     _floodController = new TxFloodController(this, Logger);
 }
 public Eth63ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ITxPool txPool,
                             ILogManager logManager) : base(session, serializer, nodeStatsManager, syncServer, txPool, logManager)
 {
     _nodeDataRequests = new MessageQueue <GetNodeDataMessage, byte[][]>(Send);
     _receiptsRequests = new MessageQueue <GetReceiptsMessage, TxReceipt[][]>(Send);
 }
Beispiel #16
0
 public Eth62ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager statsManager,
                             ISyncServer syncServer,
                             ITxPool txPool,
                             ILogManager logManager) : base(session, serializer, statsManager, syncServer, txPool, logManager)
 {
     _txFloodCheckTimer          = new Timer(_txFloodCheckInterval.TotalMilliseconds);
     _txFloodCheckTimer.Elapsed += CheckTxFlooding;
     _txFloodCheckTimer.Start();
 }
 public Eth62ProtocolHandler(
     ISession session,
     IMessageSerializationService serializer,
     INodeStatsManager statsManager,
     ISyncServer syncServer,
     ITxPool txPool,
     ILogManager logManager) : base(session, serializer, statsManager, syncServer, logManager)
 {
     _floodController = new TxFloodController(this, Timestamper.Default, Logger);
     _txPool          = txPool ?? throw new ArgumentNullException(nameof(txPool));
 }
Beispiel #18
0
        public static void ContectServer(string address)
        {
            if (Server == null)
            {
                var channnel = new TcpChannel();
                ////该信道使用ChannelServices 注册,使之可用于远程对象,并禁用安全性;
                ChannelServices.RegisterChannel(channnel, false);

                Server = (ISyncServer)Activator.GetObject(typeof(ISyncServer), address);
            }
        }
Beispiel #19
0
 protected SyncPeerProtocolHandlerBase(ISession session,
                                       IMessageSerializationService serializer,
                                       INodeStatsManager statsManager,
                                       ISyncServer syncServer,
                                       ITxPool txPool,
                                       ILogManager logManager) : base(session, statsManager, serializer, logManager)
 {
     SyncServer   = syncServer ?? throw new ArgumentNullException(nameof(syncServer));
     _txPool      = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _timestamper = Timestamper.Default;
 }
 protected SyncPeerProtocolHandlerBase(ISession session,
                                       IMessageSerializationService serializer,
                                       INodeStatsManager statsManager,
                                       ISyncServer syncServer,
                                       ILogManager logManager) : base(session, statsManager, serializer, logManager)
 {
     SyncServer       = syncServer ?? throw new ArgumentNullException(nameof(syncServer));
     _timestamper     = Timestamper.Default;
     _headersRequests = new MessageQueue <GetBlockHeadersMessage, BlockHeader[]>(Send);
     _bodiesRequests  = new MessageQueue <GetBlockBodiesMessage, BlockBody[]>(Send);
 }
Beispiel #21
0
        public virtual void Initializa(CombatStartInfo combat_start_info)
        {
            AttributeSystem.Instance.InitializeAllDefinition(m_combat_factory.GetConfigProvider());
            m_level_data  = GetConfigProvider().GetLevelData(combat_start_info.m_level_id);
            m_logic_world = m_combat_factory.CreateLogicWorld();
            m_logic_world.Initialize(this, combat_start_info.m_world_seed, false);
            m_sync_server = m_combat_factory.CreateSyncServer();
            m_sync_server.Init(m_logic_world);
            WorldCreationContext world_context = m_combat_factory.CreateWorldCreationContext(combat_start_info);

            m_logic_world.BuildLogicWorld(world_context);
        }
Beispiel #22
0
        public static void PushChanges(ISyncClient client, ISyncServer server)
        {
            while(true)
            {
                var entity = client.GetChangedOnClient();
                if (entity == null)
                    break;

                var server_sync_date = server.SendChangedToServer(entity);
                client.SetClientEntitySynced(entity, server_sync_date);
            }
        }
Beispiel #23
0
 public Eth65ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ITxPool txPool,
                             IPooledTxsRequestor pooledTxsRequestor,
                             ISpecProvider specProvider,
                             ILogManager logManager)
     : base(session, serializer, nodeStatsManager, syncServer, txPool, specProvider, logManager)
 {
     _pooledTxsRequestor = pooledTxsRequestor;
 }
Beispiel #24
0
        private static void PullChanges(ISyncClient client, ISyncServer server)
        {
            var date = client.GetMaxServerSyncDate();
            while(true)
            {
                var proxy = server.GetChangedFromServer(date);
                if (proxy == null)
                    break;

                client.ApplyChangeFromServer(proxy);
                date = proxy.ServerSyncDate;
            }
        }
Beispiel #25
0
        public static void PushChanges(ISyncClient client, ISyncServer server)
        {
            while (true)
            {
                var entity = client.GetChangedOnClient();
                if (entity == null)
                {
                    break;
                }

                var server_sync_date = server.SendChangedToServer(entity);
                client.SetClientEntitySynced(entity, server_sync_date);
            }
        }
Beispiel #26
0
        public void SetUp()
        {
            Console.WriteLine("AAA");
            Session session = new Session(8545, Substitute.For <IChannel>(), Substitute.For <IDisconnectsAnalyzer>(), LimboLogs.Instance);

            session.RemoteNodeId = TestItem.PublicKeyA;
            session.RemoteHost   = "127.0.0.1";
            session.RemotePort   = 30303;
            _ser = new MessageSerializationService();
            _ser.Register(new TransactionsMessageSerializer());
            _ser.Register(new StatusMessageSerializer());
            NodeStatsManager stats = new NodeStatsManager(TimerFactory.Default, LimboLogs.Instance);
            var ecdsa         = new EthereumEcdsa(ChainId.Mainnet, LimboLogs.Instance);
            var tree          = Build.A.BlockTree().TestObject;
            var stateProvider = new StateProvider(new TrieStore(new MemDb(), LimboLogs.Instance), new MemDb(), LimboLogs.Instance);
            var specProvider  = MainnetSpecProvider.Instance;

            TxPool.TxPool txPool = new TxPool.TxPool(
                ecdsa,
                new ChainHeadInfoProvider(new FixedBlockChainHeadSpecProvider(MainnetSpecProvider.Instance), tree, stateProvider),
                new TxPoolConfig(),
                new TxValidator(ChainId.Mainnet),
                LimboLogs.Instance,
                new TransactionComparerProvider(specProvider, tree).GetDefaultComparer());
            ISyncServer syncSrv = Substitute.For <ISyncServer>();
            BlockHeader head    = Build.A.BlockHeader.WithNumber(1).TestObject;

            syncSrv.Head.Returns(head);
            _handler = new Eth62ProtocolHandler(session, _ser, stats, syncSrv, txPool, ShouldGossip.Instance, LimboLogs.Instance);
            _handler.DisableTxFiltering();

            StatusMessage statusMessage = new StatusMessage();

            statusMessage.ProtocolVersion = 63;
            statusMessage.BestHash        = Keccak.Compute("1");
            statusMessage.GenesisHash     = Keccak.Compute("0");
            statusMessage.TotalDifficulty = 131200;
            statusMessage.ChainId         = 1;
            IByteBuffer bufStatus = _ser.ZeroSerialize(statusMessage);

            _zeroPacket            = new ZeroPacket(bufStatus);
            _zeroPacket.PacketType = bufStatus.ReadByte();

            _handler.HandleMessage(_zeroPacket);

            Transaction tx = Build.A.Transaction.SignedAndResolved(ecdsa, TestItem.PrivateKeyA).TestObject;

            _txMsg = new TransactionsMessage(new[] { tx });
        }
            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>();
                _pooledTxsRequestor = Substitute.For <IPooledTxsRequestor>();
                _discoveryApp       = Substitute.For <IDiscoveryApp>();
                _serializer         = new MessageSerializationService();
                _rlpxHost           = Substitute.For <IRlpxHost>();
                _rlpxHost.LocalPort.Returns(_localPort);
                _rlpxHost.LocalNodeId.Returns(TestItem.PublicKeyA);
                ITimerFactory timerFactory = Substitute.For <ITimerFactory>();

                _nodeStatsManager = new NodeStatsManager(timerFactory, LimboLogs.Instance);
                _blockTree        = Substitute.For <IBlockTree>();
                _blockTree.ChainId.Returns(1ul);
                _blockTree.Genesis.Returns(Build.A.Block.Genesis.TestObject.Header);
                _protocolValidator = new ProtocolValidator(_nodeStatsManager, _blockTree, LimboLogs.Instance);
                _peerStorage       = Substitute.For <INetworkStorage>();
                _syncPeerPool      = Substitute.For <ISyncPeerPool>();
                _gossipPolicy      = Substitute.For <IGossipPolicy>();
                _manager           = new ProtocolsManager(
                    _syncPeerPool,
                    _syncServer,
                    _txPool,
                    _pooledTxsRequestor,
                    _discoveryApp,
                    _serializer,
                    _rlpxHost,
                    _nodeStatsManager,
                    _protocolValidator,
                    _peerStorage,
                    MainnetSpecProvider.Instance,
                    _gossipPolicy,
                    LimboLogs.Instance);

                _serializer.Register(new HelloMessageSerializer());
                _serializer.Register(new StatusMessageSerializer());
                _serializer.Register(new DisconnectMessageSerializer());
            }
 public Eth66ProtocolHandler(ISession session,
                             IMessageSerializationService serializer,
                             INodeStatsManager nodeStatsManager,
                             ISyncServer syncServer,
                             ITxPool txPool,
                             IPooledTxsRequestor pooledTxsRequestor,
                             ISpecProvider specProvider,
                             ILogManager logManager)
     : base(session, serializer, nodeStatsManager, syncServer, txPool, pooledTxsRequestor, specProvider, logManager)
 {
     _headersRequests66  = new MessageQueue <GetBlockHeadersMessage, BlockHeader[]>(Send);
     _bodiesRequests66   = new MessageQueue <GetBlockBodiesMessage, BlockBody[]>(Send);
     _nodeDataRequests66 = new MessageQueue <GetNodeDataMessage, byte[][]>(Send);
     _receiptsRequests66 = new MessageQueue <GetReceiptsMessage, TxReceipt[][]>(Send);
     _pooledTxsRequestor = pooledTxsRequestor;
 }
        // private BlockHeadersMessage _eth1920000HeaderMessage;

        public Eth62ProtocolHandler(
            ISession session,
            IMessageSerializationService serializer,
            INodeStatsManager statsManager,
            ISyncServer syncServer,
            ILogManager logManager,
            ITxPool txPool) : base(session, statsManager, serializer, logManager)
        {
            SyncServer   = syncServer ?? throw new ArgumentNullException(nameof(syncServer));
            _txPool      = txPool ?? throw new ArgumentNullException(nameof(txPool));
            _timestamper = Timestamper.Default;

            _txFloodCheckTimer          = new System.Timers.Timer(_txFloodCheckInterval.TotalMilliseconds);
            _txFloodCheckTimer.Elapsed += CheckTxFlooding;
            _txFloodCheckTimer.Start();
        }
Beispiel #30
0
        private static void PullChanges(ISyncClient client, ISyncServer server)
        {
            var date = client.GetMaxServerSyncDate();

            while (true)
            {
                var proxy = server.GetChangedFromServer(date);
                if (proxy == null)
                {
                    break;
                }

                client.ApplyChangeFromServer(proxy);
                date = proxy.ServerSyncDate;
            }
        }
Beispiel #31
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());
            }
        public async Task Broadcast_NewBlock_on_arrival_to_sqrt_of_peers([Values(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 50, 100)] int peerCount)
        {
            int expectedPeers = (int)Math.Ceiling(Math.Sqrt(peerCount - 1)); // -1 because of ignoring sender

            Context   ctx             = new();
            BlockTree remoteBlockTree = Build.A.BlockTree().OfChainLength(10).TestObject;
            BlockTree localBlockTree  = Build.A.BlockTree().OfChainLength(9).TestObject;

            ctx.SyncServer = new SyncServer(
                new MemDb(),
                new MemDb(),
                localBlockTree,
                NullReceiptStorage.Instance,
                Always.Valid,
                Always.Valid,
                ctx.PeerPool,
                StaticSelector.Full,
                new SyncConfig(),
                NullWitnessCollector.Instance,
                Policy.FullGossip,
                MainnetSpecProvider.Instance,
                LimboLogs.Instance);

            ISyncServer remoteServer = Substitute.For <ISyncServer>();
            int         count        = 0;

            remoteServer
            .When(r => r.AddNewBlock(Arg.Is <Block>(b => b.Hash == remoteBlockTree.Head !.Hash), Arg.Any <ISyncPeer>()))
            .Do(_ => count++);
            PeerInfo[] peers = Enumerable.Range(0, peerCount).Take(peerCount)
                               .Select(k => new PeerInfo(new SyncPeerMock(remoteBlockTree, remoteSyncServer: remoteServer)))
                               .ToArray();
            ctx.PeerPool.AllPeers.Returns(peers);
            ctx.PeerPool.PeerCount.Returns(peers.Length);
            ctx.SyncServer.AddNewBlock(remoteBlockTree.Head !, peers[0].SyncPeer);
            await Task.Delay(100); // notifications fire on separate task

            await Task.WhenAll(peers.Select(p => ((SyncPeerMock)p.SyncPeer).Close()).ToArray());

            count.Should().Be(expectedPeers);
        }
Beispiel #33
0
 public SyncManager(ISyncClient client, ISyncServer server)
 {
     this.client = client;
     this.server = server;
 }
Beispiel #34
0
 public static void PullAndPushChanges(ISyncClient client, ISyncServer server)
 {
     PullChanges(client, server);
     PushChanges(client, server);
 }