Esempio n. 1
0
        private void Handle(GetBlockBodiesMessage request)
        {
            if (Logger.IsTrace)
            {
                Logger.Trace($"Received bodies request of length {request.BlockHashes.Count} from {Session.Node:c}:");
            }

            Stopwatch      stopwatch = Stopwatch.StartNew();
            IList <Keccak> hashes    = request.BlockHashes;

            Block[] blocks = new Block[hashes.Count];

            for (int i = 0; i < hashes.Count; i++)
            {
                blocks[i] = SyncServer.Find(hashes[i]);
            }

            Interlocked.Increment(ref Counter);
            Send(new BlockBodiesMessage(blocks));
            stopwatch.Stop();
            if (Logger.IsTrace)
            {
                Logger.Trace($"OUT {Counter:D5} BlockBodies to {Node:c} in {stopwatch.Elapsed.TotalMilliseconds}ms");
            }
        }
Esempio n. 2
0
        private void Handle(GetBlockHeadersMessage getBlockHeadersMessage)
        {
            if (Logger.IsTrace)
            {
                Logger.Trace($"GetBlockHeaders.MaxHeaders: {getBlockHeadersMessage.MaxHeaders}");
                Logger.Trace($"GetBlockHeaders.Reverse: {getBlockHeadersMessage.Reverse}");
                Logger.Trace($"GetBlockHeaders.Skip: {getBlockHeadersMessage.Skip}");
                Logger.Trace($"GetBlockHeaders.StartingBlockhash: {getBlockHeadersMessage.StartingBlockHash}");
                Logger.Trace($"GetBlockHeaders.StartingBlockNumber: {getBlockHeadersMessage.StartingBlockNumber}");
            }

            Keccak startingHash = getBlockHeadersMessage.StartingBlockHash;

            if (startingHash == null)
            {
                startingHash = SyncServer.Find(getBlockHeadersMessage.StartingBlockNumber)?.Hash;
            }

            BlockHeader[] headers =
                startingHash == null
                    ? new BlockHeader[0]
                    : SyncServer.FindHeaders(startingHash, (int)getBlockHeadersMessage.MaxHeaders, (int)getBlockHeadersMessage.Skip, getBlockHeadersMessage.Reverse == 1);

            Send(new BlockHeadersMessage(headers));
        }
Esempio n. 3
0
        private void Handle(GetBlockBodiesMessage request)
        {
            Keccak[] hashes = request.BlockHashes;
            Block[]  blocks = new Block[hashes.Length];

            for (int i = 0; i < hashes.Length; i++)
            {
                blocks[i] = SyncServer.Find(hashes[i]);
            }

            Send(new BlockBodiesMessage(blocks));
        }
Esempio n. 4
0
        private void Handle(GetBlockBodiesMessage request)
        {
            Keccak[] hashes = request.BlockHashes;
            Block[]  blocks = new Block[hashes.Length];

            for (int i = 0; i < hashes.Length; i++)
            {
                blocks[i] = SyncServer.Find(hashes[i]);
            }

            Interlocked.Increment(ref _counter);
            if (Logger.IsTrace)
            {
                Logger.Trace($"OUT {_counter:D5} BlockBodies to {Node:s}");
            }
            Send(new BlockBodiesMessage(blocks));
        }
        protected BlockBodiesMessage FulfillBlockBodiesRequest(GetBlockBodiesMessage getBlockBodiesMessage)
        {
            IReadOnlyList <Keccak> hashes = getBlockBodiesMessage.BlockHashes;

            Block[] blocks = new Block[hashes.Count];

            ulong sizeEstimate = 0;

            for (int i = 0; i < hashes.Count; i++)
            {
                blocks[i]     = SyncServer.Find(hashes[i]);
                sizeEstimate += MessageSizeEstimator.EstimateSize(blocks[i]);

                if (sizeEstimate > SoftOutgoingMessageSizeLimit)
                {
                    break;
                }
            }

            return(new BlockBodiesMessage(blocks));
        }
Esempio n. 6
0
 public void When_finding_by_hash_block_info_is_not_loaded()
 {
     _syncServer.Find(TestItem.KeccakA);
     _blockTree.Received().FindBlock(Arg.Any <Keccak>(), BlockTreeLookupOptions.TotalDifficultyNotNeeded);
 }