From c71f00cc8ea495aa124f8909b790c15e5ddfafb5 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Tue, 5 Jul 2022 18:56:52 +0200 Subject: [PATCH] transaction.deserialize: only set self._inputs after parsing witness re multi-threaded sanity... (see lazy deserialization in Transaction.inputs) --- electrum/transaction.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/electrum/transaction.py b/electrum/transaction.py index 343c4c6d2..ec5bb86e4 100644 --- a/electrum/transaction.py +++ b/electrum/transaction.py @@ -675,14 +675,15 @@ class Transaction: n_vin = vds.read_compact_size() if n_vin < 1: raise SerializationError('tx needs to have at least 1 input') - self._inputs = [parse_input(vds) for i in range(n_vin)] + txins = [parse_input(vds) for i in range(n_vin)] n_vout = vds.read_compact_size() if n_vout < 1: raise SerializationError('tx needs to have at least 1 output') self._outputs = [parse_output(vds) for i in range(n_vout)] if is_segwit: - for txin in self._inputs: + for txin in txins: parse_witness(vds, txin) + self._inputs = txins # only expose field after witness is parsed, for sanity self._locktime = vds.read_uint32() if vds.can_read_more(): raise SerializationError('extra junk at the end')