Skip to content

Commit fe85a31

Browse files
committed
psbt: Use static member field numbers for serialization
Instead of serializing the field number explicitly as bytes, use the named members for the field numbers. Also serializes them with ser_compact_size in accordance with BIP 174
1 parent 6b59c75 commit fe85a31

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

hwilib/psbt.py

+14-14
Original file line numberDiff line numberDiff line change
@@ -213,40 +213,40 @@ def serialize(self) -> bytes:
213213
r = b""
214214

215215
if self.non_witness_utxo:
216-
r += ser_string(b"\x00")
216+
r += ser_string(ser_compact_size(PartiallySignedInput.PSBT_IN_NON_WITNESS_UTXO))
217217
tx = self.non_witness_utxo.serialize_with_witness()
218218
r += ser_string(tx)
219219

220220
if self.witness_utxo:
221-
r += ser_string(b"\x01")
221+
r += ser_string(ser_compact_size(PartiallySignedInput.PSBT_IN_WITNESS_UTXO))
222222
tx = self.witness_utxo.serialize()
223223
r += ser_string(tx)
224224

225225
if len(self.final_script_sig) == 0 and self.final_script_witness.is_null():
226226
for pubkey, sig in sorted(self.partial_sigs.items()):
227-
r += ser_string(b"\x02" + pubkey)
227+
r += ser_string(ser_compact_size(PartiallySignedInput.PSBT_IN_PARTIAL_SIG) + pubkey)
228228
r += ser_string(sig)
229229

230230
if self.sighash is not None:
231-
r += ser_string(b"\x03")
231+
r += ser_string(ser_compact_size(PartiallySignedInput.PSBT_IN_SIGHASH_TYPE))
232232
r += ser_string(struct.pack("<I", self.sighash))
233233

234234
if len(self.redeem_script) != 0:
235-
r += ser_string(b"\x04")
235+
r += ser_string(ser_compact_size(PartiallySignedInput.PSBT_IN_REDEEM_SCRIPT))
236236
r += ser_string(self.redeem_script)
237237

238238
if len(self.witness_script) != 0:
239-
r += ser_string(b"\x05")
239+
r += ser_string(ser_compact_size(PartiallySignedInput.PSBT_IN_WITNESS_SCRIPT))
240240
r += ser_string(self.witness_script)
241241

242-
r += SerializeHDKeypath(self.hd_keypaths, b"\x06")
242+
r += SerializeHDKeypath(self.hd_keypaths, ser_compact_size(PartiallySignedInput.PSBT_IN_BIP32_DERIVATION))
243243

244244
if len(self.final_script_sig) != 0:
245-
r += ser_string(b"\x07")
245+
r += ser_string(ser_compact_size(PartiallySignedInput.PSBT_IN_FINAL_SCRIPTSIG))
246246
r += ser_string(self.final_script_sig)
247247

248248
if not self.final_script_witness.is_null():
249-
r += ser_string(b"\x08")
249+
r += ser_string(ser_compact_size(PartiallySignedInput.PSBT_IN_FINAL_SCRIPTWITNESS))
250250
witstack = self.final_script_witness.serialize()
251251
r += ser_string(witstack)
252252

@@ -334,14 +334,14 @@ def serialize(self) -> bytes:
334334
"""
335335
r = b""
336336
if len(self.redeem_script) != 0:
337-
r += ser_string(b"\x00")
337+
r += ser_string(ser_compact_size(PartiallySignedOutput.PSBT_OUT_REDEEM_SCRIPT))
338338
r += ser_string(self.redeem_script)
339339

340340
if len(self.witness_script) != 0:
341-
r += ser_string(b"\x01")
341+
r += ser_string(ser_compact_size(PartiallySignedOutput.PSBT_OUT_WITNESS_SCRIPT))
342342
r += ser_string(self.witness_script)
343343

344-
r += SerializeHDKeypath(self.hd_keypaths, b"\x02")
344+
r += SerializeHDKeypath(self.hd_keypaths, ser_compact_size(PartiallySignedOutput.PSBT_OUT_BIP32_DERIVATION))
345345

346346
for key, value in sorted(self.unknown.items()):
347347
r += ser_string(key)
@@ -473,15 +473,15 @@ def serialize(self) -> str:
473473
r += b"psbt\xff"
474474

475475
# unsigned tx flag
476-
r += b"\x01\x00"
476+
r += ser_string(ser_compact_size(PSBT.PSBT_GLOBAL_UNSIGNED_TX))
477477

478478
# write serialized tx
479479
tx = self.tx.serialize_with_witness()
480480
r += ser_compact_size(len(tx))
481481
r += tx
482482

483483
# write xpubs
484-
r += SerializeHDKeypath(self.xpub, b"\x01")
484+
r += SerializeHDKeypath(self.xpub, ser_compact_size(PSBT.PSBT_GLOBAL_XPUB))
485485

486486
# unknowns
487487
for key, value in sorted(self.unknown.items()):

0 commit comments

Comments
 (0)