Review of Spark's trust model

Unilateral-exit readiness

A Spark unilateral exit is a staged recovery procedure, not a single emergency broadcast

Blink's documented workflow advances packages confirmation by confirmation, pauses for CSV refund timelocks, and later requires separate sweeps. Under the documented standard-mempool relay path, automation can resume and parallelize independent leaf chains, but it cannot remove within-chain confirmation ordering or the CSV timelock. 123

3 sourcesEvidence reviewed through July 14, 2026

What the evidence shows

Technical and product details

  1. Confirm-and-continue

    Blink's recovery loop reconstructs package state, signs a CPFP bump, submits one package per leaf chain, waits for confirmation, and repeats. 1

    Supporting material shown on this page

    Blink confirm-and-continue loopPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    138```
    139
    140Each round it rebuilds packages from live chain state, signs the CPFP bump
    141with the seed, submits **one package per leaf chain**, waits for confirmation,
    142and repeats. Already-confirmed transactions are skipped on reconstruction, so
    143the loop is stateless: rate limits, crashes, and reboots cost nothing — re-run
    144and it resumes. Esplora hiccups are retried with exponential backoff instead
  2. Durable progress

    Confirmed transactions are skipped when the tool is rerun, allowing recovery after rate limits, crashes, or reboots. 1

    Supporting material shown on this page

    Blink confirm-and-continue loopPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    138```
    139
    140Each round it rebuilds packages from live chain state, signs the CPFP bump
    141with the seed, submits **one package per leaf chain**, waits for confirmation,
    142and repeats. Already-confirmed transactions are skipped on reconstruction, so
    143the loop is stateless: rate limits, crashes, and reboots cost nothing — re-run
    144and it resumes. Esplora hiccups are retried with exponential backoff instead
  3. Timelock stage

    The refund that hands each leaf to the user's key is deferred until its CSV lock matures; the recovery command must be rerun afterward to broadcast it. 3

    Supporting material shown on this page

    Blink timelock and sweep stagesPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    189After the loop finishes, each economical leaf's refund waits out its CSV
    190timelock. Re-running the same `make recover` after maturity broadcasts the
    191refunds; once they confirm, `make sweep` builds and signs one-input Taproot
    192key-path spends from the refund outputs to any destination address, and
    193`broadcast-sweep` pushes them as ordinary transactions. At the time of
    194writing, this wallet's four economical exits are through their chains and
    195waiting on refund maturity.
  4. Finalization stage

    After refunds confirm, separate sweep construction, signing, and broadcasting move the outputs to the chosen destination. 3

    Supporting material shown on this page

    Blink timelock and sweep stagesPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    189After the loop finishes, each economical leaf's refund waits out its CSV
    190timelock. Re-running the same `make recover` after maturity broadcasts the
    191refunds; once they confirm, `make sweep` builds and signs one-input Taproot
    192key-path spends from the refund outputs to any destination address, and
    193`broadcast-sweep` pushes them as ordinary transactions. At the time of
    194writing, this wallet's four economical exits are through their chains and
    195waiting on refund maturity.
  5. Parallelism limit

    Under Blink's documented standard-mempool relay path, funding fan-out can advance independent leaf chains concurrently, but it does not remove within-chain confirmation ordering or the refund timelock. 23

    Supporting material shown on this page

    Blink parallelism mechanicsPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    161### What fan-out would have changed here
    162
    163We ran this recovery sequentially (the default). With `FAN_OUT=1` the loop
    164would first have broadcast **one extra transaction with 4 outputs** — the
    165single 9,388-sat funding UTXO split into one UTXO per economical leaf, each
    166sized to that leaf's remaining CPFP fees plus a 1,000-sat buffer, the last
    Blink timelock and sweep stagesPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    189After the loop finishes, each economical leaf's refund waits out its CSV
    190timelock. Re-running the same `make recover` after maturity broadcasts the
    191refunds; once they confirm, `make sweep` builds and signs one-input Taproot
    192key-path spends from the refund outputs to any destination address, and
    193`broadcast-sweep` pushes them as ordinary transactions. At the time of
    194writing, this wallet's four economical exits are through their chains and
    195waiting on refund maturity.

Documented operational sequence

A durable recovery state machine—not one transaction

  1. Refresh and encrypt current leaves and ancestors while Operators are online
  2. Preserve the bundle separately from the mnemonic
  3. Load the matching seed and bundle during an outage
  4. Provide an external on-chain fee UTXO
  5. Construct and sign parent + CPFP-child packages
  6. Submit packages in valid root-to-leaf order
  7. Persist confirmations and resume after interruptions
  8. Wait through relative timelocks
  9. Construct and broadcast final sweeps
  10. Verify destination confirmations

No reviewed consumer wallet demonstrates this complete sequence in its mobile UI. This establishes an implementation and usability gap, not mobile impossibility.

Scope control

What this does not establish

  • Blink's tooling automates and resumes this operatorless process once the required bundle and fee funds exist. The staged workflow demonstrates operational burden; it does not establish technical impossibility or that a mobile implementation can never be built. 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

Blink confirm-and-continue loop

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

Open original source
2

Blink parallelism mechanics

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

Open original source
3

Blink timelock and sweep stages

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

Open original source

How sources, absence findings, and limitations were evaluated