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 = SyncManager.Find(getBlockHeadersMessage.StartingBlockNumber)?.Hash; } Block[] blocks = startingHash == null ? new Block[0] : SyncManager.Find(startingHash, (int)getBlockHeadersMessage.MaxHeaders, (int)getBlockHeadersMessage.Skip, getBlockHeadersMessage.Reverse == 1); BlockHeader[] headers = new BlockHeader[blocks.Length]; for (int i = 0; i < blocks.Length; i++) { headers[i] = blocks[i]?.Header; } 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] = SyncManager.Find(hashes[i]); } Send(new BlockBodiesMessage(blocks)); }