libsv / go-bt

The go-to Bitcoin Transaction (BT) Go library.
https://pkg.go.dev/mod/github.com/libsv/go-bt
ISC License
67 stars 27 forks source link

Fix/valid tx execute #173

Closed sirdeggen closed 10 months ago

sirdeggen commented 10 months ago

When subScript is reconstructed it Unparses the parsed script code. The workaround for unformatted data was to stop parsing when we hit the last OpReturn in the script - unfortunately that lead to an incorrect subScript when creating the sighash preimage which means all locking script with checksigs and opreturns at the end would be failing.

The fix is somewhat of a hack - it ensures we parse the unparsable script into a fake op code which contains the buffer of the remainder of the script without checking it for formatting rules otherwise. This allows us to then unparse it into the correct subScript.

One of the tests had to be updated because the expected outcome has changed - we should add a new opcode to the set of parsed opcodes which is "Unformatted Data" - this expectation is now written into the test to reflect the new behavior.