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"); } }
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)); }
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)); }
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)); }
public void When_finding_by_hash_block_info_is_not_loaded() { _syncServer.Find(TestItem.KeccakA); _blockTree.Received().FindBlock(Arg.Any <Keccak>(), BlockTreeLookupOptions.TotalDifficultyNotNeeded); }