Ejemplo n.º 1
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 = 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));
        }
Ejemplo n.º 2
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] = SyncManager.Find(hashes[i]);
            }

            Send(new BlockBodiesMessage(blocks));
        }