spark.exposed

The exit

Breez 0.23 fixes durable exit-state storage, but wallets pinned to older releases do not inherit that fix

Breez 0.23 now durably stores the exit tree and supports state export, correcting the earlier default-persistence gap. Reviewed wallets pinned to 0.22 or earlier do not inherit that capability until they upgrade, collect and protect the state, and integrate a recovery workflow. 1234

4 sourcesEvidence reviewed through August 24, 2026

What the evidence shows

Technical and product details

  1. Version transition

    Breez's earlier default SQLite backend supplied no persistent tree store. Breez 0.23.0 now creates a SqliteTreeStore and exposes export and import operations for operator-outage state. 12

    Supporting material shown on this page

    Breez 0.23 SQLite tree storePinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    39            .ok_or_else(|| SdkError::Generic("storage path is not valid UTF-8".to_string()))?;
    40        let tree_store = Arc::new(
    41            spark_sqlite::SqliteTreeStore::new(db_path)
    42                .map_err(|e| SdkError::Generic(e.to_string()))?,
    43        );
    44        Ok(Arc::new(ResolvedStores {
    45            storage,
    Breez 0.23 state exportPinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    120    /// Serializes everything needed to unilaterally exit this wallet's funds
    121    /// while the Spark operators are unreachable, so it can be kept somewhere
    122    /// the wallet's own storage cannot take with it.
    123    pub async fn export_unilateral_exit_state(
    124        &self,
    125    ) -> Result<ExportUnilateralExitStateResponse, SdkError> {
    126        self.inner.export_unilateral_exit_state().await
  2. Current wallet lag

    The current reviewed Blink source pins Breez 0.22.0; Primal, Radar, and Cake pin still earlier integrations. Updating the SDK is a wallet release and product-integration task, not an automatic property of an already shipped seed backup. 34

    Supporting material shown on this page

    Blink Breez 0.22 dependencyPinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    61  "dependencies": {
    62    "@apollo/client": "^3.9.11",
    63    "@bitcoinerlab/secp256k1": "^1.1.1",
    64    "@blinkbitcoin/blink-client": "1.1.0",
    65    "@blinkbitcoin/react-native-geetest-module": "0.1.2",
    66    "@breeztech/breez-sdk-spark-react-native": "0.22.0",
    67    "@expo/react-native-action-sheet": "^4.0.1",
    Blink unstarted exit flowsPinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    33  [SdkErrorTags.StorageError]: SelfCustodialErrorCode.Generic,
    34  [SdkErrorTags.Signer]: SelfCustodialErrorCode.Generic,
    35  [SdkErrorTags.SparkError]: SelfCustodialErrorCode.Generic,
    36  /** Optimization / unilateral-exit state conflicts (0.22): flows the app never starts,
    37   *  so no user-facing refinement exists for them. */
    38  [SdkErrorTags.OptimizationAlreadyRunning]: SelfCustodialErrorCode.Generic,
    39  [SdkErrorTags.OptimizationCancelled]: SelfCustodialErrorCode.Generic,
  3. Product consequence

    Breez has fixed the lower-level persistence gap, but consumers only benefit after their wallet upgrades, collects complete state, protects an export against device loss, and exposes a usable recovery flow. 13

    Supporting material shown on this page

    Breez 0.23 SQLite tree storePinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    39            .ok_or_else(|| SdkError::Generic("storage path is not valid UTF-8".to_string()))?;
    40        let tree_store = Arc::new(
    41            spark_sqlite::SqliteTreeStore::new(db_path)
    42                .map_err(|e| SdkError::Generic(e.to_string()))?,
    43        );
    44        Ok(Arc::new(ResolvedStores {
    45            storage,
    Blink Breez 0.22 dependencyPinned source code · github.com · checked 2026-08-24
    Relevant lines from the pinned source · open raw file
    61  "dependencies": {
    62    "@apollo/client": "^3.9.11",
    63    "@bitcoinerlab/secp256k1": "^1.1.1",
    64    "@blinkbitcoin/blink-client": "1.1.0",
    65    "@blinkbitcoin/react-native-geetest-module": "0.1.2",
    66    "@breeztech/breez-sdk-spark-react-native": "0.22.0",
    67    "@expo/react-native-action-sheet": "^4.0.1",

Scope control

What this does not establish

  • This is a correction to the earlier blanket statement about Breez default persistence. Version 0.23.0 does durably retain a tree; the remaining finding concerns older wallet-pinned versions and missing wallet integration, not an SDK impossibility. 12

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 SQLite tree store

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

Open original source
2

Breez 0.23 state export

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

Open original source
3

Blink Breez 0.22 dependency

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

Open original source
4

Blink unstarted exit flows

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

Open original source

How sources, absence findings, and limitations were evaluated