karask / python-bitcoin-utils

Library to interact with the Bitcoin network. Ideal for low-level learning and experimenting.
MIT License
271 stars 102 forks source link

Issue when parsing an unsigned segwit transaction with Transaction.from_raw() #101

Open hcleonis opened 3 months ago

hcleonis commented 3 months ago

Hi & thanks for your bitcoinutils package, very handy ! :+1: But I think I've spotted an issue.

Although Transaction.from_raw() is able to parse a signed or unsigned legacy tx, it is only able to correctly parse signed segwit txs because it assumes the presence of witnesses in the tx payload. But unsigned segwit tx payloads do not have any witness field.

This PR proposes to fix that by checking the number of remaining bytes between the end of the last output and the end of the tx payload and by skipping the witnesses parsing if that number is not greater than 4 (i.e. last tx field i.e. locktime length).

karask commented 3 months ago

I will try to review the PR asap but I am away right now.