Esempio n. 1
0
        public void _When_finding_hash_it_does_not_load_headers()
        {
            _blockTree.FindHash(123).Returns(TestItem.KeccakA);
            Keccak result = _syncServer.FindHash(123);

            _blockTree.DidNotReceive().FindHeader(Arg.Any <long>(), Arg.Any <BlockTreeLookupOptions>());
            _blockTree.DidNotReceive().FindHeader(Arg.Any <Keccak>(), Arg.Any <BlockTreeLookupOptions>());
            _blockTree.DidNotReceive().FindBlock(Arg.Any <Keccak>(), Arg.Any <BlockTreeLookupOptions>());
            Assert.AreEqual(TestItem.KeccakA, result);
        }
Esempio n. 2
0
        public byte[] GetBlockRlp(long number)
        {
            Keccak hash = _blockTree.FindHash(number);

            if (hash == null)
            {
                return(null);
            }

            return(_dbMappings[DbNames.Blocks].Get(hash));
        }
Esempio n. 3
0
        private void PrepareHeadersResponse(HeadersSyncBatch headersSyncBatch, LatencySyncPeerMock syncPeer, IBlockTree tree)
        {
            if (headersSyncBatch != null)
            {
                long startNumber = headersSyncBatch.StartNumber;
                if (_maliciousByShiftedOneBack.Contains(syncPeer))
                {
                    startNumber++;
                    TestContext.WriteLine($"{_time,6} | SYNC PEER {syncPeer.Node:s} WILL SEND SHIFTED MESSAGES ({startNumber} INSTEAD OF {headersSyncBatch.StartNumber})");
                }
                else if (_maliciousByShiftedOneForward.Contains(syncPeer))
                {
                    startNumber = Math.Max(0, startNumber - 1);
                    TestContext.WriteLine($"{_time,6} | SYNC PEER {syncPeer.Node:s} WILL SEND SHIFTED MESSAGES ({startNumber} INSTEAD OF {headersSyncBatch.StartNumber})");
                }

                Keccak hash = tree.FindHash(startNumber);

                if (hash == null)
                {
                    TestContext.WriteLine($"{_time,6} | SYNC PEER {syncPeer.Node:s} CANNOT FIND {headersSyncBatch.StartNumber}");
                    return;
                }

                int requestSize = headersSyncBatch.RequestSize;
                if (_incorrectByTooLongMessages.Contains(syncPeer))
                {
                    requestSize *= 2;
                    TestContext.WriteLine($"{_time,6} | SYNC PEER {syncPeer.Node:s} WILL SEND TOO LONG MESSAGE ({requestSize} INSTEAD OF {headersSyncBatch.RequestSize})");
                }
                else if (_incorrectByTooShortMessages.Contains(syncPeer))
                {
                    requestSize = Math.Max(1, requestSize / 2);
                    TestContext.WriteLine($"{_time,6} | SYNC PEER {syncPeer.Node:s} WILL SEND TOO SHORT MESSAGE ({requestSize} INSTEAD OF {headersSyncBatch.RequestSize})");
                }

                BlockHeader[] headers = tree.FindHeaders(hash, requestSize, 0, false);
                if (_invalidBlocks.ContainsKey(syncPeer))
                {
                    for (int i = 0; i < headers.Length; i++)
                    {
                        if (_invalidBlocks[syncPeer].Contains(headers[i].Number))
                        {
                            TestContext.WriteLine($"{_time,6} | SYNC PEER {syncPeer.Node:s} WILL SEND AN INVALID BLOCK AT {headers[i].Number}");
                            headers[i] = Build.A.Block.WithDifficulty(1).TestObject.Header;
                        }
                    }
                }

                if (headers.Length > 3 && _maliciousByRepetition.Contains(syncPeer))
                {
                    headers[^ 1] = headers[^ 3];
Esempio n. 4
0
        public Keccak FindHash(long number)
        {
            try
            {
                Keccak hash = _blockTree.FindHash(number);
                return(hash);
            }
            catch (Exception)
            {
                _logger.Debug("Could not handle a request for block by number since multiple blocks are available at the level and none is marked as canonical. (a fix is coming)");
            }

            return(null);
        }
Esempio n. 5
0
 public Keccak FindHash(long blockNumber)
 {
     return(_blockTree.FindHash(blockNumber));
 }
Esempio n. 6
0
 public Keccak FindHash(long blockNumber) => _wrapped.FindHash(blockNumber);
Esempio n. 7
0
 public Keccak FindHash(long blockNumber)
 {
     return(_wrapped.FindHash(blockNumber));
 }