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; }
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)); }
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(); }
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))); }
public virtual void Destruct() { m_combat_factory = null; m_sync_server.Destruct(); m_sync_server = null; m_logic_world.Destruct(); m_logic_world = null; }
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)); }
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); }
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)); }
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); } }
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); }
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); }
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); } }
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; }
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; } }
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); } }
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(); }
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; } }
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); }
public SyncManager(ISyncClient client, ISyncServer server) { this.client = client; this.server = server; }
public static void PullAndPushChanges(ISyncClient client, ISyncServer server) { PullChanges(client, server); PushChanges(client, server); }