Unilateral-exit readiness
Breez 0.19.0 can silently produce an unbroadcastable renewed-leaf package
Breez 0.19.0's exit status walker omitted the SplitLocked state even though Spark renewal handlers create that intermediate parent. The resulting package can omit a required unbroadcast parent; the reviewed correcting pull request remained open. 123
What the evidence shows
Technical and product details
- Documented behavior
The shipped EXIT_CHAIN_STATUSES list includes Available, Splitted, and OnChain, but omits SplitLocked. 1
Supporting material shown on this page
Breez unilateral-exit sourcePinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 32const EXIT_CHAIN_STATUSES: [TreeNodeStatus; 3] = [ 33 TreeNodeStatus::Available, 34 TreeNodeStatus::Splitted, 35 TreeNodeStatus::OnChain, 36]; - Protocol fact
Spark's renewal handlers create a SplitLocked intermediate parent. 3
Supporting material shown on this page
Spark renewal statusPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 393 } 394 395 splitNode, err := db.TreeNode.Create(). 396 SetTreeID(tree.ID). 397 SetNetwork(tree.Network). 398 SetStatus(st.TreeNodeStatusSplitLocked). 399 SetOwnerIdentityPubkey(leaf.OwnerIdentityPubkey). - Failure
The exit walker can stop at that parent without reporting it, leaving the printed child dependent on a transaction that is neither on chain nor in the package. 123
Supporting material shown on this page
Breez unilateral-exit sourcePinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 32const EXIT_CHAIN_STATUSES: [TreeNodeStatus; 3] = [ 33 TreeNodeStatus::Available, 34 TreeNodeStatus::Splitted, 35 TreeNodeStatus::OnChain, 36];fix PR 935Repository record · github.com · checked 2026-07-14 Spark renewal statusPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 393 } 394 395 splitNode, err := db.TreeNode.Create(). 396 SetTreeID(tree.ID). 397 SetNetwork(tree.Network). 398 SetStatus(st.TreeNodeStatusSplitLocked). 399 SetOwnerIdentityPubkey(leaf.OwnerIdentityPubkey). - Snapshot
The fixing pull request 935 remained open after Breez 0.19.0, whose source still contained the omission. 12
Supporting material shown on this page
Breez unilateral-exit sourcePinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 32const EXIT_CHAIN_STATUSES: [TreeNodeStatus; 3] = [ 33 TreeNodeStatus::Available, 34 TreeNodeStatus::Splitted, 35 TreeNodeStatus::OnChain, 36];fix PR 935Repository record · github.com · checked 2026-07-14
Scope control
What this does not establish
Sources and excerpts
Primary sources
The relevant details and available source-code excerpts appear alongside the claims above. This list preserves the complete original-source trail for independent verification.
Breez unilateral-exit source
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
fix PR 935
Repository record · github.com · Live source · checked 2026-07-14
Spark renewal status
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
How sources, absence findings, and limitations were evaluated