The exit
Blitz's “no third parties” recovery tool performs a cooperative withdrawal
Blitz's separate recovery site describes recovery without third parties, but its implementation restores a Spark wallet through live services and calls cooperative withdrawal. It does not construct or broadcast unilateral-exit packages. 145
Historical observation checked for source support on September 11. The complete original experiment or product runtime was not reproduced; its reported status must not be read as current status.
What the evidence shows
Technical and product details
- First-party claim
Blitz's separate Spark Wallet Recovery Tool advertises “Self-custodial. Stateless. Trustless. No third parties involved.” 145
Supporting material shown on this page
Blitz recovery toolRepository record · github.com · checked 2026-07-14 Recovery tool withdrawal callPinned source code · github.com · checked 2026-09-11 Relevant lines from the pinned source · open raw file 323 amountSats, 324 feeQuote, 325 deductFeeFromWithdrawalAmount = false, 326}) => { 327 try { 328 if (!sparkWallet) throw new Error("sparkWallet not initialized"); 329 const response = await sparkWallet.withdraw({Recovery tool cooperative transaction resultPinned source code · github.com · checked 2026-09-11 Relevant lines from the pinned source · open raw file 127 amount: amountSats, 128 address: address, 129 time: new Date(data.updatedAt).getTime(), 130 direction: "OUTGOING", 131 description: memo || "", 132 onChainTxid: data.coopExitTxid, 133 }, - Source behavior
It initializes a live mainnet SparkWallet, reads balance through getBalance(), requests getWithdrawalFeeQuote(), calls withdraw(), and records a coopExitTxid/COOPERATIVE_EXIT. 145
Supporting material shown on this page
Blitz recovery toolRepository record · github.com · checked 2026-07-14 Recovery tool withdrawal callPinned source code · github.com · checked 2026-09-11 Relevant lines from the pinned source · open raw file 323 amountSats, 324 feeQuote, 325 deductFeeFromWithdrawalAmount = false, 326}) => { 327 try { 328 if (!sparkWallet) throw new Error("sparkWallet not initialized"); 329 const response = await sparkWallet.withdraw({Recovery tool cooperative transaction resultPinned source code · github.com · checked 2026-09-11 Relevant lines from the pinned source · open raw file 127 amount: amountSats, 128 address: address, 129 time: new Date(data.updatedAt).getTime(), 130 direction: "OUTGOING", 131 description: memo || "", 132 onChainTxid: data.coopExitTxid, 133 }, - Absent behavior
It contains no recovery-bundle ingestion, offline tree state, CPFP construction, ordered broadcast, timelock monitor, or sweep. 145
Supporting material shown on this page
Blitz recovery toolRepository record · github.com · checked 2026-07-14 Recovery tool withdrawal callPinned source code · github.com · checked 2026-09-11 Relevant lines from the pinned source · open raw file 323 amountSats, 324 feeQuote, 325 deductFeeFromWithdrawalAmount = false, 326}) => { 327 try { 328 if (!sparkWallet) throw new Error("sparkWallet not initialized"); 329 const response = await sparkWallet.withdraw({Recovery tool cooperative transaction resultPinned source code · github.com · checked 2026-09-11 Relevant lines from the pinned source · open raw file 127 amount: amountSats, 128 address: address, 129 time: new Date(data.updatedAt).getTime(), 130 direction: "OUTGOING", 131 description: memo || "", 132 onChainTxid: data.coopExitTxid, 133 }, - Related pre-release
Blitz's wallet can now export a bundle, but sends the user to the external Blink developer repository for the actual exit. 2345
Supporting material shown on this page
Blitz PR 999Repository record · github.com · checked 2026-07-14 Android 0.7.13-pre6Repository record · github.com · checked 2026-07-14 Recovery tool withdrawal callPinned source code · github.com · checked 2026-09-11 Relevant lines from the pinned source · open raw file 323 amountSats, 324 feeQuote, 325 deductFeeFromWithdrawalAmount = false, 326}) => { 327 try { 328 if (!sparkWallet) throw new Error("sparkWallet not initialized"); 329 const response = await sparkWallet.withdraw({Recovery tool cooperative transaction resultPinned source code · github.com · checked 2026-09-11 Relevant lines from the pinned source · open raw file 127 amount: amountSats, 128 address: address, 129 time: new Date(data.updatedAt).getTime(), 130 direction: "OUTGOING", 131 description: memo || "", 132 onChainTxid: data.coopExitTxid, 133 },
Product-level detail
What Blitz implemented—and what remains external
The conclusions below are reproduced here so the reader does not need to open the separate implementation review. Each result remains limited to the named source snapshot, published binary, or public product surface.
Blitz Wallet
Surface reviewed: public mobile source
Stable Android v0.7.15 contains the recovery-bundle exporter previously described as pre-release. It refreshes available state and can export cached leaves and ancestors when the live fetch fails. Its export excludes every leaf below 16,348 sats and records the omitted total. The recovery link opens external Blink tooling; no complete in-app broadcast-and-resume executor was found.
Capabilities that were present: incremental local leaf and ancestor caching with retryable pending state; best-effort online refresh before export, with cached-state fallback when the leaf fetch fails; spark.unilateral-exit-bundle.v1 export through the device share sheet; separate totals for leaves excluded below the application’s 16,348-sat threshold; external Blink recovery tooling and Spark documentation links.
Export is a useful implemented prerequisite. It does not by itself execute an exit or prove the cached graph is complete and current.
See versions, search method, artifact hashes, and full review limits.
Scope control
What this does not establish
- This finding concerns the cited Blitz recovery tool and reviewed pre-release. It does not say that cooperative recovery is useless or that Blitz cannot add an in-wallet unilateral path later. This preserves a dated reported observation or reviewed source snapshot; it is not a fresh execution of the complete workflow or a statement that the same runtime status persists today. 123
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.
Blitz recovery tool
Repository record · github.com · Pinned or archival · checked 2026-07-14
Blitz PR 999
Repository record · github.com · Live source · checked 2026-07-14
Android 0.7.13-pre6
Repository record · github.com · Live source · checked 2026-07-14
Recovery tool withdrawal call
Pinned source code · github.com · Pinned or archival · checked 2026-09-11
Recovery tool cooperative transaction result
Pinned source code · github.com · Pinned or archival · checked 2026-09-11
How sources, absence findings, and limitations were evaluated