public static Transaction decode(final RLPInput input) {
    input.enterList();
    int versionId = 0;
    final Transaction.Builder builder = Transaction.builder();
    BlobTransactionDecoder.readTransactionPayloadInner(builder, input);

    boolean hasVersionId = !input.nextIsList();
    if (hasVersionId) {
      versionId = input.readIntScalar();
    }
    List<Blob> blobs = input.readList(Blob::readFrom);
    List<KZGCommitment> commitments = input.readList(KZGCommitment::readFrom);
    List<KZGProof> proofs = input.readList(KZGProof::readFrom);
    input.leaveList();

    return builder.kzgBlobs(BlobType.of(versionId), commitments, blobs, proofs).build();
  }
Decodes a blob transaction from the provided RLP input.

@param input the RLP input to decode
@return the decoded transaction
ethereum/core/src/main/java/org/hyperledger/besu/ethereum/core/encoding/BlobPooledTransactionDecoder.java