v0.15.7 — OP_RETURN spend wedge fix (recommended upgrade) #1344
oskarszoon
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
v0.15.7 — OP_RETURN spend wedge fix (recommended upgrade for testnet, safe on mainnet)
Released: 2026-07-25
GitHub: https://github.com/bsv-blockchain/teranode/releases/tag/v0.15.7
Container:
ghcr.io/bsv-blockchain/teranode:v0.15.7Upgrade priority
Recommended for all v0.15.x testnet / teratestnet operators — a mined block spending a bare
OP_RETURNoutput wedges the node's validation pipeline on v0.15.6 and earlier. Mainnet is not currently affected (no such spends observed on chain), but the fix is safe to deploy there too as a hardening step.Symptom to watch for
Node stops advancing on a specific block. Subtree/block validation cannot resolve one of the inputs because the parent's bare
OP_RETURNoutput is missing from the UTXO set. The node retries the block indefinitely.Root cause
ShouldStoreOutputAsUTXOwas applying pre-Genesis unspendable rules to every output regardless of era. BareOP_RETURNwas dropped from the UTXO set at store time — but post-Genesis, bareOP_RETURNis spendable and MUST be retained. Any later block spending such an output cannot resolve the outpoint and the node stalls.What changed
The rule now mirrors SV Node's era-aware
CScript::IsUnspendable, keyed to the output's creation (mining) height:blockHeight >= genesisActivationHeight): onlyOP_FALSE OP_RETURNis provably unspendable. BareOP_RETURNis retained.OP_RETURN,OP_FALSE OP_RETURN, and locking scripts longer than 10000 bytes are provably unspendable.The rule is value-agnostic — an output's satoshi value plays no role, matching SV Node exactly. A value-bearing but provably-unspendable output (e.g. an
OP_FALSE OP_RETURNcarrying satoshis) is burned and excluded from the set.External-outpoint reconstruction applies the same filter, keyed to the parent transaction's creation-height era, so reconstructed sets match what create stored.
Backport of #1116 to
release/v0.15(aerospike + utxopersister paths only; v0.15's SQL store has no store-time OP_RETURN filter so no SQL change is required).Note on already-stuck nodes
Upgrading to v0.15.7 prevents the wedge on new occurrences, but does not automatically heal a node that is already stuck on a block that triggered this bug — the missing UTXO row is not re-created retroactively. A follow-up v0.15.8 will ship the recovery path for existing stuck testnet nodes. If your node is currently wedged, hold off on any manual intervention and wait for v0.15.8.
Known issues
None new.
Full changelog
All reactions