From 7d3102166351a5a7f27b9934e75e1e4efe689d67 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Thu, 13 Apr 2023 11:11:03 +0200 Subject: [PATCH] Transaction: remove the input and output re-reading We needed this to correctly determine the message length, but that requirement is gone. --- .../main/java/org/bitcoinj/core/Transaction.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/bitcoinj/core/Transaction.java b/core/src/main/java/org/bitcoinj/core/Transaction.java index 10f8d7eea..cb1d4e5c1 100644 --- a/core/src/main/java/org/bitcoinj/core/Transaction.java +++ b/core/src/main/java/org/bitcoinj/core/Transaction.java @@ -642,13 +642,7 @@ public class Transaction extends BaseMessage { int numInputs = numInputsVarInt.intValue(); inputs = new ArrayList<>(Math.min((int) numInputs, Utils.MAX_INITIAL_ARRAY_LENGTH)); for (long i = 0; i < numInputs; i++) { - TransactionInput input = TransactionInput.read(payload.slice(), this); - inputs.add(input); - // intentionally read again, due to the slice above - Buffers.skipBytes(payload, TransactionOutPoint.BYTES); - VarInt scriptLenVarInt = VarInt.read(payload); - int scriptLen = scriptLenVarInt.intValue(); - Buffers.skipBytes(payload, scriptLen + 4); + inputs.add(TransactionInput.read(payload, this)); } } @@ -658,13 +652,7 @@ public class Transaction extends BaseMessage { int numOutputs = numOutputsVarInt.intValue(); outputs = new ArrayList<>(Math.min((int) numOutputs, Utils.MAX_INITIAL_ARRAY_LENGTH)); for (long i = 0; i < numOutputs; i++) { - TransactionOutput output = TransactionOutput.read(payload.slice(), this); - outputs.add(output); - // intentionally read again, due to the slice above - Buffers.skipBytes(payload, 8); // value - VarInt scriptLenVarInt = VarInt.read(payload); - int scriptLen = scriptLenVarInt.intValue(); - Buffers.skipBytes(payload, scriptLen); + outputs.add(TransactionOutput.read(payload, this)); } }