private void traceTestSpecs(final String test, final BlockchainReferenceTestCaseSpec spec) {
    if (testName != null && !testName.equals(test)) {
      parentCommand.out.println("Skipping test: " + test);
      return;
    }
    parentCommand.out.println("Considering " + test);

    final BlockHeader genesisBlockHeader = spec.getGenesisBlockHeader();
    final MutableWorldState worldState =
        spec.getWorldStateArchive()
            .getWorldState(
                WorldStateQueryParams.withStateRootAndBlockHashAndUpdateNodeHead(
                    genesisBlockHeader.getStateRoot(), genesisBlockHeader.getHash()))
            .orElseThrow();

    final ProtocolSchedule schedule =
        ReferenceTestProtocolSchedules.getInstance().getByName(spec.getNetwork());

    final MutableBlockchain blockchain = spec.getBlockchain();
    final ProtocolContext context = spec.getProtocolContext();

    for (final BlockchainReferenceTestCaseSpec.CandidateBlock candidateBlock :
        spec.getCandidateBlocks()) {
      if (!candidateBlock.isExecutable()) {
        return;
      }

      try {
        final Block block = candidateBlock.getBlock();

        final ProtocolSpec protocolSpec = schedule.getByBlockHeader(block.getHeader());
        final BlockImporter blockImporter = protocolSpec.getBlockImporter();

        verifyJournaledEVMAccountCompatability(worldState, protocolSpec);

        final HeaderValidationMode validationMode =
            "NoProof".equalsIgnoreCase(spec.getSealEngine())
                ? HeaderValidationMode.LIGHT
                : HeaderValidationMode.FULL;
        final BlockImportResult importResult =
            blockImporter.importBlock(context, block, validationMode, validationMode);

        if (importResult.isImported() != candidateBlock.isValid()) {
          parentCommand.out.printf(
              "Block %d (%s) %s%n",
              block.getHeader().getNumber(),
              block.getHash(),
              importResult.isImported() ? "Failed to be rejected" : "Failed to import");
        } else {
          parentCommand.out.printf(
              "Block %d (%s) %s%n",
              block.getHeader().getNumber(),
              block.getHash(),
              importResult.isImported() ? "Imported" : "Rejected (correctly)");
        }
      } catch (final RLPException e) {
        if (candidateBlock.isValid()) {
          parentCommand.out.printf(
              "Block %d (%s) should have imported but had an RLP exception %s%n",
              candidateBlock.getBlock().getHeader().getNumber(),
              candidateBlock.getBlock().getHash(),
              e.getMessage());
        }
      }
    }
    if (!blockchain.getChainHeadHash().equals(spec.getLastBlockHash())) {
      parentCommand.out.printf(
          "Chain header mismatch, have %s want %s - %s%n",
          blockchain.getChainHeadHash(), spec.getLastBlockHash(), test);
    } else {
      parentCommand.out.println("Chain import successful - " + test);
    }
  }
Default constructor for the BlockchainTestSubCommand class. This constructor doesn't take any
arguments and initializes the parentCommand to null. PicoCLI requires this constructor.
ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/BlockchainTestSubCommand.java