txscript: allow multiple push operations for OP_RETURN #2472
+80
−16
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR updates the
isNullDataScriptfunction to allow multiple data push operations afterOP_RETURN, matching Bitcoin Core's behavior as of v0.12.0 (2016) which removed the single push restriction.Changes:
MaxNullDataScriptSizeconstant (10000 bytes) for total script size limitMaxDataCarrierSizeat 80 bytes for backwards compatibility withNullDataScriptfunction callersisNullDataScriptto useIsPushOnlyScriptto validate that all opcodes afterOP_RETURNare valid data pushes (OP_0 through OP_16 and direct/PUSHDATA pushes)Technical Details:
Previously, btcd only accepted:
OP_RETURNaloneOP_RETURN+ single data push (up to 80 bytes)After this change, btcd accepts:
OP_RETURNaloneOP_RETURN+ any number of push-only opcodes (total script size <= 10000 bytes)This matches Bitcoin Core's
Solverfunction which checks:Use Cases:
This allows protocols like Metaprotocol, Counterparty, and others that use multiple data pushes in OP_RETURN outputs to be recognized as standard null data scripts.
Test plan
Fixes #2305
🤖 Generated with Claude Code