private void handleNewBlockFromNetwork(final EthMessage message) {
    final Blockchain blockchain = protocolContext.getBlockchain();
    final NewBlockMessage newBlockMessage = NewBlockMessage.readFrom(message.getData());
    try {
      final Block block = newBlockMessage.block(protocolSchedule);
      LOG.atTrace()
          .setMessage("New block from network {} from peer {}. Current status {}")
          .addArgument(block::toLogString)
          .addArgument(message::getPeer)
          .addArgument(this)
          .log();

      final Difficulty totalDifficulty = newBlockMessage.totalDifficulty(protocolSchedule);

      message.getPeer().chainState().updateForAnnouncedBlock(block.getHeader(), totalDifficulty);

      // Return early if we don't care about this block
      final long localChainHeight = protocolContext.getBlockchain().getChainHeadBlockNumber();
      final long bestChainHeight = syncState.bestChainHeight(localChainHeight);
      if (!shouldImportBlockAtHeight(
          block.getHeader().getNumber(), localChainHeight, bestChainHeight)) {
        LOG.atTrace()
            .setMessage(
                "Do not import new block from network {}, current chain heights are: local {}, best {}")
            .addArgument(block::toLogString)
            .addArgument(localChainHeight)
            .addArgument(bestChainHeight)
            .log();
        return;
      }
      if (pendingBlocksManager.contains(block.getHash())) {
        LOG.atTrace()
            .setMessage("New block from network {} is already pending")
            .addArgument(block::toLogString)
            .log();
        return;
      }
      if (blockchain.contains(block.getHash())) {
        LOG.atTrace()
            .setMessage("New block from network {} is already present")
            .addArgument(block::toLogString)
            .log();
        return;
      }

      importOrSavePendingBlock(block, message.getPeer().nodeId());
    } catch (final RLPException e) {
      LOG.debug(
          "Malformed NEW_BLOCK message received from peer (BREACH_OF_PROTOCOL), disconnecting: {}",
          message.getPeer(),
          e);
      message.getPeer().disconnect(DisconnectReason.BREACH_OF_PROTOCOL_MALFORMED_MESSAGE_RECEIVED);
    }
  }
Process pending Children if any

@param block the block to process the children
@return true if block has any pending child
ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/BlockPropagationManager.java