spark.exposed

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

5 sourcesEvidence reviewed through September 11, 2026

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

  1. 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

    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        },
  2. 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

    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        },
  3. 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

    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        },
  4. 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
    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.

1

Blitz recovery tool

Repository record · github.com · Pinned or archival · checked 2026-07-14

Open original source
2

Blitz PR 999

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

Open original source
3

Android 0.7.13-pre6

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

Open original source
4

Recovery tool withdrawal call

Pinned source code · github.com · Pinned or archival · checked 2026-09-11

Open original source
5

Recovery tool cooperative transaction result

Pinned source code · github.com · Pinned or archival · checked 2026-09-11

Open original source

How sources, absence findings, and limitations were evaluated