spark.exposed

The exit

Breez 0.23 exposes mobile exit construction but deliberately leaves execution to the integrator

Breez 0.23 exposes mobile-facing prepare, construct, export, and import operations, correcting the earlier API gap. Its own guide says the SDK never broadcasts, leaving the wallet to provide fee funding, package relay, durable multi-day monitoring, retries, timelocks, and sweeping. 123

3 sourcesEvidence reviewed through August 24, 2026

What the evidence shows

Technical and product details

  1. New SDK capability

    Breez 0.23.0 exposes prepare, construct, export, and import operations through its Flutter-facing SDK. 1

    Supporting material shown on this page

    Breez 0.23 Flutter exit APIPinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    95        let signer = breez_sdk_spark::signer::SingleKeySigner::new(signer_secret_key)
    96            .map_err(|e| SdkError::Generic(format!("Invalid signer key: {e}")))?;
    97        self.inner.unilateral_exit(request, Arc::new(signer)).await
    98    }
    99
    100    /// Builds and signs the unilateral exit with a caller-provided signer. The
    101    /// `sign_psbt` callback receives the serialized CPFP PSBT, signs the inputs
  2. Execution fact

    Breez's own guide says the SDK never broadcasts. The integrator must persist the returned plan, submit zero-fee parents with CPFP children to a package-relay-capable node, wait for confirmations and CSV timelocks, resume over several days, and broadcast the final sweep. 3

    Supporting material shown on this page

    Breez 0.23 broadcast procedurePinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    110The **fan-out** and the **sweep** are the exceptions: each pays its own fee and has no CPFP child ({{#name cpfp_tx_hex}} is unset), so you broadcast it **alone**, as an ordinary transaction, anywhere — including a public endpoint such as `POST https://mempool.space/api/tx`. Most public broadcast API
    111
    112### Wait for each step to confirm
    113
    114Within a branch you broadcast one package, wait for it to confirm, then broadcast the next. This is a mempool relay limit, not a Bitcoin consensus rule: nodes relay an unconfirmed parent with at most one unconfirmed child (the "one-parent-one-child", or 1P1C, package), so a second still-unconfirmed 
  3. Mobile consequence

    These are important recovery primitives, but they are not a consumer recovery workflow. A wallet must still supply external fee UTXOs, signing, package relay, durable monitoring, retries, and usable failure handling. 23

    Supporting material shown on this page

    Breez 0.23 exit prerequisitesPinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    11Three things are important to know before you build an exit:
    12
    13- **The exit data has to already be on the device.** Quoting and building an exit read each leaf's pre-signed transactions from local storage, so both work with the operators unreachable. What they cannot do is obtain that data: a leaf can be exited this way only once it has been synced at least onc
    14- **You pay the fees from your own UTXO.** The pre-signed transactions carry no fee, so each is fee-bumped with a child transaction (CPFP) funded by a Bitcoin UTXO you provide. That UTXO must be **native SegWit** (a witness-program script). P2WPKH and P2TR are handled by the built-in signer; any oth
    15- **You broadcast the transactions yourself.** The SDK builds and signs the full set but never broadcasts. You send them to the network over time, in order, as their timelocks mature. See [Broadcasting the transactions](#broadcast-the-transactions).
    Breez 0.23 broadcast procedurePinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    110The **fan-out** and the **sweep** are the exceptions: each pays its own fee and has no CPFP child ({{#name cpfp_tx_hex}} is unset), so you broadcast it **alone**, as an ordinary transaction, anywhere — including a public endpoint such as `POST https://mempool.space/api/tx`. Most public broadcast API
    111
    112### Wait for each step to confirm
    113
    114Within a branch you broadcast one package, wait for it to confirm, then broadcast the next. This is a mempool relay limit, not a Bitcoin consensus rule: nodes relay an unconfirmed parent with at most one unconfirmed child (the "one-parent-one-child", or 1P1C, package), so a second still-unconfirmed 

Scope control

What this does not establish

  • This corrects the earlier finding that Breez exposed no public mobile exit API. It does not diminish the new API: a prepared integrator can build a real operatorless exit. The narrower finding is that the SDK explicitly does not complete or operate that exit for a mobile user. 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.23 Flutter exit API

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

Open original source
2

Breez 0.23 exit prerequisites

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

Open original source
3

Breez 0.23 broadcast procedure

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

Open original source

How sources, absence findings, and limitations were evaluated