Review of Spark's trust model

Unilateral-exit readiness

Breez still lacks a public mobile exit API, and even its proposed API prepares by contacting a live operator

Breez still does not expose a public mobile unilateral-exit API. Its open draft implementation begins by listing live leaves and reaching the coordinator-backed service; neither the shipped path nor the proposal starts from an offline recovery bundle. 1234

4 sourcesEvidence reviewed through July 14, 2026

What the evidence shows

Technical and product details

  1. Released interface

    Breez labeled issue 374 High priority for milestone 0.14.0, but its public API remained unshipped through 0.19.0. 13

    Supporting material shown on this page

    issue 374Repository record · github.com · checked 2026-07-14
  2. Development record

    Pull request 795 remained open, Draft, and non-mergeable/dirty after releases 0.14.0, 0.15.0, 0.18.0, and 0.19.0. 23

    Supporting material shown on this page

  3. Operator dependency

    The shipped lower-level service unconditionally fetches leaves and parents from the coordinator. The proposed public API first lists live leaves and then reaches the same service. 24

    Supporting material shown on this page

    current unilateral-exit servicePinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    156    }
    157
    158    async fn fetch_leaves_parents(
    159        &self,
    160        leaf_ids: &[TreeNodeId],
    161    ) -> Result<Vec<TreeNode>, ServiceError> {
    162        if leaf_ids.is_empty() {
  4. Missing interface

    Neither path accepts a pre-saved offline recovery bundle as its starting input. 24

    Supporting material shown on this page

    current unilateral-exit servicePinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    156    }
    157
    158    async fn fetch_leaves_parents(
    159        &self,
    160        leaf_ids: &[TreeNodeId],
    161    ) -> Result<Vec<TreeNode>, ServiceError> {
    162        if leaf_ids.is_empty() {
  5. Product consequence

    The documented mobile surface has no exit call, and the unmerged design still cannot begin preparation after all operators have disappeared. 1234

    Supporting material shown on this page

    issue 374Repository record · github.com · checked 2026-07-14
    current unilateral-exit servicePinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    156    }
    157
    158    async fn fetch_leaves_parents(
    159        &self,
    160        leaf_ids: &[TreeNodeId],
    161    ) -> Result<Vec<TreeNode>, ServiceError> {
    162        if leaf_ids.is_empty() {

Scope control

What this does not establish

  • This finding is limited to Breez 0.19.0, the cited open issue, the unmerged draft, and the reviewed lower-level service. It does not rule out a later API or a separate wallet-owned recovery implementation. 1234

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.

2

pull request 795

Repository record · github.com · Live source · checked 2026-07-14

Open original source
3

Breez releases

Repository record · github.com · Live source · checked 2026-07-14

Open original source
4

current unilateral-exit service

Pinned source code · github.com · Pinned or archival · checked 2026-07-14

Open original source

How sources, absence findings, and limitations were evaluated