public static BlockBody readFrom(
      final RLPInput input, final BlockHeaderFunctions blockHeaderFunctions) {
    return new BlockBody(
        input.readList(Transaction::readFrom),
        input.readList(rlp -> BlockHeader.readFrom(rlp, blockHeaderFunctions)),
        input.isEndOfCurrentList()
            ? Optional.empty()
            : Optional.of(input.readList(Withdrawal::readFrom)));
  }
Read all fields from the block body expecting no list wrapping them. An example of a valid body
would be: [txs],[ommers],[withdrawals],[requests] this method is called directly when importing
a single block

@param input The RLP-encoded input
@param blockHeaderFunctions The block header functions used for parsing block headers
@return the BlockBody decoded from the RLP
ethereum/core/src/main/java/org/hyperledger/besu/ethereum/core/BlockBody.java