Skip to content

Commit 649a0a7

Browse files
OttoAllmendingerllm-git
andcommitted
feat(wasm-utxo): improve handling of OP_RETURN outputs in PSBT parser
Add special handling for OP_RETURN outputs, which have zero value and no address. Update tests to properly check these conditions and fix spend amount calculations accordingly. Co-authored-by: llm-git <llm-git@ttll.de>
1 parent c953971 commit 649a0a7

File tree

49 files changed

+354
-370
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+354
-370
lines changed

packages/wasm-utxo/test/fixedScript/parseTransactionWithWalletKeys.ts

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,17 @@ describe("parseTransactionWithWalletKeys", function () {
161161
parsed.outputs.forEach((output, i) => {
162162
assert.ok(output.script instanceof Uint8Array, `Output ${i} script should be Uint8Array`);
163163
assert.ok(typeof output.value === "bigint", `Output ${i} value should be bigint`);
164-
assert.ok(output.value > 0n, `Output ${i} value should be > 0`);
165-
// Address is optional for non-standard scripts
164+
if (output.address === null) {
165+
// OP_RETURN outputs have no address and value should be 0
166+
assert.ok(output.script[0] === 0x6a, `Output ${i} script should start with OP_RETURN`);
167+
assert.ok(output.value === 0n, `Output ${i} value should be 0 if address is undefined`);
168+
} else {
169+
assert.ok(output.value > 0n, `Output ${i} value should be > 0`);
170+
}
166171
});
167172

168173
// Verify spend amount (should be > 0 since there are external outputs)
169-
assert.strictEqual(parsed.spendAmount, 900n * 3n);
174+
assert.strictEqual(parsed.spendAmount, 900n * 2n);
170175

171176
// Verify miner fee calculation
172177
const totalInputValue = parsed.inputs.reduce((sum, i) => sum + i.value, 0n);
@@ -256,27 +261,6 @@ describe("parseTransactionWithWalletKeys", function () {
256261

257262
// Should return an array of parsed outputs
258263
assert.ok(Array.isArray(parsedOutputs), "Should return an array");
259-
assert.ok(parsedOutputs.length > 0, "Should have at least one output");
260-
261-
// Verify all outputs have proper structure
262-
parsedOutputs.forEach((output, i) => {
263-
assert.ok(output.script instanceof Uint8Array, `Output ${i} script should be Uint8Array`);
264-
assert.ok(typeof output.value === "bigint", `Output ${i} value should be bigint`);
265-
assert.ok(output.value > 0n, `Output ${i} value should be > 0`);
266-
// Address can be null for non-standard scripts
267-
assert.ok(
268-
typeof output.address === "string" || output.address === null,
269-
`Output ${i} address should be string or null`,
270-
);
271-
// scriptId can be null for external outputs
272-
assert.ok(
273-
output.scriptId === null ||
274-
(typeof output.scriptId === "object" &&
275-
typeof output.scriptId.chain === "number" &&
276-
typeof output.scriptId.index === "number"),
277-
`Output ${i} scriptId should be null or an object with chain and index`,
278-
);
279-
});
280264

281265
// Compare with the original wallet keys to verify we get different results
282266
const originalParsedOutputs = bitgoPsbt.parseOutputsWithWalletKeys(rootWalletKeys);

packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.fullsigned.json

Lines changed: 30 additions & 30 deletions
Large diffs are not rendered by default.

packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.halfsigned.json

Lines changed: 14 additions & 14 deletions
Large diffs are not rendered by default.

packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.unsigned.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g",
55
"xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv"
66
],
7-
"psbtBase64": "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",
7+
"psbtBase64": "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",
88
"psbtBase64Finalized": null,
99
"inputs": [
1010
{
@@ -276,7 +276,7 @@
276276
},
277277
{
278278
"script": "6a0f736574656320617374726f6e6f6d79",
279-
"value": "900"
279+
"value": "0"
280280
}
281281
],
282282
"psbtOutputs": [

0 commit comments

Comments
 (0)