spark.exposed

The exit

Breez 0.19.0 omitted renewed-leaf ancestry; Breez 0.23 includes the missing state

Breez 0.19.0's exit walker omitted the SplitLocked state used by renewed leaves and could leave out a required parent. Breez 0.23 includes SplitLocked and a regression test, so this is a historical affected-version finding rather than a current-SDK defect. 123

3 sourcesEvidence reviewed through August 24, 2026

What the evidence shows

Technical and product details

  1. Documented behavior

    The shipped EXIT_CHAIN_STATUSES list includes Available, Splitted, and OnChain, but omits SplitLocked. 1

    Supporting material shown on this page

    Breez 0.19 exit statusesPinned source code · github.com · checked 2026-08-24
    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];
  2. Protocol fact

    Spark's renewal handlers create a SplitLocked intermediate parent. 2

    Supporting material shown on this page

    Spark renewal statusPinned source code · github.com · checked 2026-08-24
    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).
  3. 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. 12

    Supporting material shown on this page

    Breez 0.19 exit statusesPinned source code · github.com · checked 2026-08-24
    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];
    Spark renewal statusPinned source code · github.com · checked 2026-08-24
    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).
  4. Correction

    Breez 0.23.0 includes SplitLocked in the exit-chain statuses and adds a regression test that walks through a SplitLocked parent. 3

    Supporting material shown on this page

    Breez 0.23 SplitLocked fixPinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    18/// Statuses where a node still belongs to an exit chain. `OnChain` is kept
    19/// (the SO marks a node `ON_CHAIN` once its tx confirms, still mid-exit);
    20/// `SplitLocked` is kept because a timelock renewal leaves a permanent
    21/// `SplitLocked` node above the renewed leaf that the walk must cross.
    22const EXIT_CHAIN_STATUSES: [TreeNodeStatus; 4] = [

Scope control

What this does not establish

  • The failure is a historical finding about 0.19.0 and wallets pinned to affected code. It should not be attributed to Breez 0.23.0. 13

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.

1

Breez 0.19 exit statuses

Pinned source code · github.com · Pinned or archival · checked 2026-08-24

Open original source
2

Spark renewal status

Pinned source code · github.com · Pinned or archival · checked 2026-08-24

Open original source
3

Breez 0.23 SplitLocked fix

Pinned source code · github.com · Pinned or archival · checked 2026-08-24

Open original source

How sources, absence findings, and limitations were evaluated