public void Can_accept_new_valid_blocks(bool sealOk, bool validationOk, bool accepted) { BlockTree remoteBlockTree = Build.A.BlockTree().OfChainLength(10).TestObject; BlockTree localBlockTree = Build.A.BlockTree().OfChainLength(9).TestObject; ISealValidator sealValidator = sealOk ? Always.Valid : Always.Invalid; IBlockValidator blockValidator = validationOk ? Always.Valid : Always.Invalid; _syncServer = new SyncServer(new StateDb(), new StateDb(), localBlockTree, NullReceiptStorage.Instance, blockValidator, sealValidator, _peerPool, StaticSelector.Full, new SyncConfig(), LimboLogs.Instance); Block block = remoteBlockTree.FindBlock(9, BlockTreeLookupOptions.None); if (!accepted) { Assert.Throws <EthSyncException>(() => _syncServer.AddNewBlock(block, _nodeWhoSentTheBlock)); } else { _syncServer.AddNewBlock(block, _nodeWhoSentTheBlock); } if (accepted) { Assert.AreEqual(localBlockTree.BestSuggestedHeader, block.Header); } else { Assert.AreNotEqual(localBlockTree.BestSuggestedHeader, block.Header); } }
public SyncingContext AfterNewBlockMessage(Block block, ISyncPeer peer) { _logger.Info($"NEW BLOCK MESSAGE {block.Number}"); block.Header.TotalDifficulty = block.Difficulty * (ulong)(block.Number + 1); SyncServer.AddNewBlock(block, peer); return(this); }
public SyncingContext AfterNewBlockMessage(Block block, ISyncPeer peer) { _logger.Info($"NEW BLOCK MESSAGE {block.Number}"); block.TotalDifficulty = (UInt256)(block.Difficulty * ((BigInteger)block.Number + 1)); SyncServer.AddNewBlock(block, peer.Node); return(this); }
public void Can_accept_blocks_that_are_fine() { BlockTree remoteBlockTree = Build.A.BlockTree().OfChainLength(10).TestObject; BlockTree localBlockTree = Build.A.BlockTree().OfChainLength(9).TestObject; _syncServer = new SyncServer(new StateDb(), new StateDb(), localBlockTree, NullReceiptStorage.Instance, Always.Valid, Always.Valid, _peerPool, StaticSelector.Full, new SyncConfig(), LimboLogs.Instance); Block block = remoteBlockTree.FindBlock(9, BlockTreeLookupOptions.None); _syncServer.AddNewBlock(block, _nodeWhoSentTheBlock); Assert.AreEqual(localBlockTree.BestSuggestedHeader, block.Header); }
public void Rejects_new_blocks_with_failing_seal() { BlockTree remoteBlockTree = Build.A.BlockTree().OfChainLength(10).TestObject; BlockTree localBlockTree = Build.A.BlockTree().OfChainLength(9).TestObject; _syncServer = new SyncServer(new StateDb(), new StateDb(), localBlockTree, NullReceiptStorage.Instance, TestBlockValidator.AlwaysValid, TestSealValidator.AlwaysValid, _peerPool, _synchronizer, new SyncConfig(), LimboLogs.Instance); Block block = remoteBlockTree.FindBlock(9, BlockTreeLookupOptions.None); _synchronizer.SyncMode.Returns(SyncMode.Full); _syncServer.AddNewBlock(block, _nodeWhoSentTheBlock); Assert.AreEqual(localBlockTree.BestSuggestedHeader, block.Header); }
public void Rejects_new_old_blocks() { BlockTree remoteBlockTree = Build.A.BlockTree().OfChainLength(10).TestObject; BlockTree localBlockTree = Build.A.BlockTree().OfChainLength(600).TestObject; ISealValidator sealValidator = Substitute.For <ISealValidator>(); _syncServer = new SyncServer(new StateDb(), new StateDb(), localBlockTree, NullReceiptStorage.Instance, Always.Valid, sealValidator, _peerPool, StaticSelector.Full, new SyncConfig(), LimboLogs.Instance); Block block = remoteBlockTree.FindBlock(9, BlockTreeLookupOptions.None); _syncServer.AddNewBlock(block, _nodeWhoSentTheBlock); sealValidator.DidNotReceive().ValidateSeal(Arg.Any <BlockHeader>(), Arg.Any <bool>()); }
public void Will_not_reject_block_with_bad_total_diff_but_will_reset_diff_to_null() { BlockTree remoteBlockTree = Build.A.BlockTree().OfChainLength(10).TestObject; BlockTree localBlockTree = Build.A.BlockTree().OfChainLength(9).TestObject; _syncServer = new SyncServer(new StateDb(), new StateDb(), localBlockTree, NullReceiptStorage.Instance, new BlockValidator(Always.Valid, new HeaderValidator(localBlockTree, Always.Valid, MainnetSpecProvider.Instance, LimboLogs.Instance), Always.Valid, MainnetSpecProvider.Instance, LimboLogs.Instance), Always.Valid, _peerPool, StaticSelector.Full, new SyncConfig(), LimboLogs.Instance); Block block = remoteBlockTree.FindBlock(9, BlockTreeLookupOptions.None); block.Header.TotalDifficulty *= 2; _syncServer.AddNewBlock(block, _nodeWhoSentTheBlock); Assert.AreEqual(localBlockTree.BestSuggestedHeader.Hash, block.Header.Hash); Block parentBlock = remoteBlockTree.FindBlock(8, BlockTreeLookupOptions.None); Assert.AreEqual(parentBlock.TotalDifficulty + block.Difficulty, localBlockTree.BestSuggestedHeader.TotalDifficulty); }
private void Handle(NewBlockMessage newBlockMessage) { Metrics.Eth62NewBlockReceived++; if (NetworkDiagTracer.IsEnabled) { NetworkDiagTracer.ReportIncomingMessage(Session.Node.Host, Name, $"{nameof(NewBlockMessage)}({newBlockMessage.Block.Number})"); } newBlockMessage.Block.Header.TotalDifficulty = newBlockMessage.TotalDifficulty; try { SyncServer.AddNewBlock(newBlockMessage.Block, this); } catch (Exception e) { Logger.Debug($"Adding new block {newBlockMessage.Block?.ToString(Block.Format.Short)} from {Node:c} failed: " + e.Message); throw; } }
private void Handle(NewBlockMessage newBlockMessage) { newBlockMessage.Block.TotalDifficulty = (UInt256)newBlockMessage.TotalDifficulty; SyncServer.AddNewBlock(newBlockMessage.Block, Session.Node); }