Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 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);
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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>());
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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;
            }
        }
Beispiel #9
0
 private void Handle(NewBlockMessage newBlockMessage)
 {
     newBlockMessage.Block.TotalDifficulty = (UInt256)newBlockMessage.TotalDifficulty;
     SyncServer.AddNewBlock(newBlockMessage.Block, Session.Node);
 }