From 863cf47b33e65bf88720ea78a04d0c1522980b30 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Mon, 22 Jul 2024 17:14:42 -0400 Subject: [PATCH] Update test_framework/psbt.py for PSBTv2 --- contrib/signet/miner | 4 +- test/functional/test_framework/psbt.py | 74 +++++++++++++++++++++----- 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/contrib/signet/miner b/contrib/signet/miner index f46d88b52e1..1d9f87203c1 100755 --- a/contrib/signet/miner +++ b/contrib/signet/miner @@ -66,8 +66,8 @@ def signet_txs(block, challenge): def decode_challenge_psbt(b64psbt): psbt = PSBT.from_base64(b64psbt) - assert len(psbt.tx.vin) == 1 - assert len(psbt.tx.vout) == 1 + assert len(psbt.i) == 1 + assert len(psbt.o) == 1 assert PSBT_SIGNET_BLOCK in psbt.g.map return psbt diff --git a/test/functional/test_framework/psbt.py b/test/functional/test_framework/psbt.py index 0a57be315da..b43669a50da 100644 --- a/test/functional/test_framework/psbt.py +++ b/test/functional/test_framework/psbt.py @@ -4,11 +4,15 @@ # file COPYING or http://www.opensource.org/licenses/mit-license.php. import base64 +import struct + +from io import BytesIO from .util import assert_equal from .messages import ( CTransaction, deser_string, + deser_compact_size, from_binary, ser_compact_size, ) @@ -108,37 +112,81 @@ class PSBT: self.g = g if g is not None else PSBTMap() self.i = i if i is not None else [] self.o = o if o is not None else [] - self.tx = None + self.version = None def deserialize(self, f): assert_equal(f.read(5), b"psbt\xff") self.g = from_binary(PSBTMap, f) - assert PSBT_GLOBAL_UNSIGNED_TX in self.g.map - self.tx = from_binary(CTransaction, self.g.map[PSBT_GLOBAL_UNSIGNED_TX]) - self.i = [from_binary(PSBTMap, f) for _ in self.tx.vin] - self.o = [from_binary(PSBTMap, f) for _ in self.tx.vout] + + self.version = 0 + if PSBT_GLOBAL_VERSION in self.g.map: + self.version = struct.unpack("