void dump(final Bytes tx) {
    try {
      var transaction = TransactionDecoder.decodeOpaqueBytes(tx, EncodingContext.BLOCK_BODY);

      // https://github.com/hyperledger/besu/blob/5fe49c60b30fe2954c7967e8475c3b3e9afecf35/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetTransactionValidator.java#L252
      if (transaction.getChainId().isPresent() && !transaction.getChainId().get().equals(chainId)) {
        throw new Exception("wrong chain id");
      }

      // https://github.com/hyperledger/besu/blob/5fe49c60b30fe2954c7967e8475c3b3e9afecf35/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetTransactionValidator.java#L270
      if (transaction.getS().compareTo(halfCurveOrder) > 0) {
        throw new Exception("signature s out of range");
      }
      out.println(transaction.getSender());

    } catch (Exception ex) {
      err(ex.getMessage());
    }
  }
Instantiates a new TxParse sub command.

@param out the PrintWriter where validation results will be reported.
app/src/main/java/org/hyperledger/besu/cli/subcommands/TxParseSubCommand.java