Operators, hosted services, and refusal controls
Centralization
How the published Operator set, coordinator, hosted SSP, wallet gate, and adjacent compliance systems shape default-path control.
5 evidence groups · 19 supporting records
Open topicSource-backed code review
This website examines Spark’s trust model through its published code, SDK configurations, wallet implementations and documented recovery procedures. It brings together findings on operator coordination, transaction refusal, privacy, Lightning service dependencies and unilateral exit, including a wallet-support audit and a mainnet recovery case study.
Each finding links to its sources and, where available, pinned code revisions. The review distinguishes observed results, implementation details and conditional scenarios, records the limits of each claim, and retains evidence that qualifies or challenges the conclusions. Findings apply to the versions and conditions reviewed; public code alone does not establish production settings or operator conduct.
The research
Sources, implementation reviews and measured results, with the limits of each finding.
Mainnet unilateral-exit case study
A sanitized real-world recovery record shows how ordinary wallet history expanded into more than 30 leaves and a full plan exceeding 900 Bitcoin transactions. The case study documents the required state, external fee funding, package ordering, economic triage, confirmation waits, and the recovery work outstanding at the original checkpoint. A September 11 update records the later recovery of the five selected leaves and the separate optimized experiment.
Published mainnet defaults
The roles an ordinary wallet is configured to use, according to the reviewed SDK defaults.
| Role | Entity | Reviewed default |
|---|---|---|
| Signing Operator 0 and coordinator | Lightspark | SO0 is fixed as coordinator without automatic failover |
| Signing Operator 1 | Breez | One member of the published two-of-three threshold |
| Signing Operator 2 | Flashnet | One member of the published two-of-three threshold |
| Default hosted Lightning service | Lightspark | Both reviewed SDKs expose the same hosted service by default |
Review the configuration, quorum, and relationship evidence
What malicious operators can do: the 1, 2 and 3 operator action grid
Source-backed protocol review
This publication examines Spark's published defaults, Operator code, hosted-service paths, metadata flows, and documented exit procedure. Ten principal claims summarize the case; 61 supporting records preserve the complete evidence and limits.
Research navigation
Each topic is organized into principal evidence groups. Direct protocol behavior remains separate from conditional analysis and adjacent ecosystem context.
Operators, hosted services, and refusal controls
How the published Operator set, coordinator, hosted SSP, wallet gate, and adjacent compliance systems shape default-path control.
5 evidence groups · 19 supporting records
Open topicIdentity, metadata, and public visibility
What Operators, the default SSP, public interfaces, and counterparties can learn from the reviewed transfer and payment paths.
3 evidence groups · 13 supporting records
Open topicRecovery requirements and wallet support
The documented operatorless-exit procedure, its state and fee prerequisites, and what twelve reviewed consumer-wallet surfaces exposed.
5 evidence groups · 25 supporting records
Open topicHosted routing, settlement order, and recovery
How the reviewed default SSP paths handle invoices, send ordering, receive validation, and conditional retained-key risk.
3 evidence groups · 4 supporting records
Open topicArgument summary
Each claim synthesizes several related evidence records where appropriate. The topic pages show the supporting facts and the boundary on the conclusion.
Principal claim · Centralization
Lightspark SO0 is the fixed default coordinator without automatic failover, and both reviewed SDKs expose the same single Lightspark SSP by default. Both choices are configurable rather than protocol-exclusive.
2 evidence records · 8 distinct sources
Review the evidence groupPrincipal claim · Centralization
TM-1 treats Lightspark and Flashnet as a hypothetical coordinating pair. Together they form the published quorum without Breez; Blitz also gives Flashnet the exact Spark wallet identity used on the Operator network. A conflicting historical spend also requires two matching retained operator shares, the matching former-owner key and a still-spendable output with viable ancestry.
3 evidence records · 17 distinct sources
Review the evidence groupPrincipal claim · Centralization
The reviewed gate is keyed by wallet identity, preserves reads, and is enforced across several protocol operations. Each Operator controls its own value, and production activation is not public.
4 evidence records · 19 distinct sources
Review the evidence groupPrincipal claim · Privacy
Reviewed paths replicate participant pseudonyms, transfer records, and full Lightning invoices to Operators while threshold cryptography divides the relevant secret shares.
3 evidence records · 18 distinct sources
Review the evidence groupPrincipal claim · Privacy
The same seed preserves the Operator pseudonym across compatible wallets; SSP, public-participant, cloud-sync, and diagnostic paths add deterministic joins or additional copies. Joinability does not by itself prove actual aggregation or misuse.
8 evidence records · 36 distinct sources
Review the evidence groupPrincipal claim · The exit
The documented path needs complete leaf and ancestor material acquired before an all-Operator outage, and that backup must track relevant wallet mutations.
5 evidence records · 13 distinct sources
Review the evidence groupPrincipal claim · The exit
It requires package construction, external fee funding, ordered submission, persisted progress, timelock handling, and any necessary final sweep—not merely one emergency broadcast.
5 evidence records · 11 distinct sources
Review the evidence groupPrincipal claim · The exit
A seed preserves signing authority, but the reviewed mobile products do not give an ordinary user the state, fee funding, package relay, monitoring, and sweep workflow needed when all Operators refuse or disappear. That leaves an independent-recovery gap in the reviewed product surfaces.
9 evidence records · 25 distinct sources
Review the evidence groupPrincipal claim · Lightning swaps
The send path locks selected leaves before requesting payment; the receive path validates the inbound transfer before preimage-share release. The reviewed checks and recovery branches bound the service risk.
2 evidence records · 4 distinct sources
Review the evidence groupPrincipal claim · Lightning swaps
The protocol contains deletion controls, but users cannot independently attest to server-side deletion. The public record does not show that those controls failed or that historical shares were retained.
1 evidence record · 5 distinct sources
Review the evidence groupRecovery assessment · 2026-09-11
The pessimistic case is practical: a user can lose ordinary access before having the data, economical leaves, Bitcoin fee funds and recovery software needed to leave independently. A valid exit mechanism does not establish that the wallet has delivered usable recovery.
Analysis of pinned public code and one custom mainnet experiment. The optimized exit was still pending at the recorded September 11 checkpoint. These measurements are not a benchmark for every wallet or proof of a production operator outage.
Code-path analysis
The reviewed consensus flows require every configured operator to prepare, even though signing uses a two-of-three threshold. Optimization relies on a cooperative SSP and on claiming replacement leaves through an all-operator flow. A user already facing refusal cannot assume they can consolidate or renew their way into a better exit.
Evidence boundary. This applies to fresh preparation in the reviewed flows, not every API version or a failure after the commit decision. Production outage behavior was not tested. A complete presigned exit needs zero operators.
All-operator selection · Prepare failure and rollback · Claim consensus · Swap and counter-transfer claim
Observed integration failure
After the live optimization, two of ten available leaves had incomplete ancestry in the stock SDK export, including the 65,536-sat leaf. Custom parent-ID queries repaired the backup while an operator was reachable. If missing data cannot be obtained during an outage, the seed alone does not supply that transaction history.
Evidence boundary. This is the pinned SDK result for this wallet. Other saved copies, willing data holders or confirmed ancestors may help; incomplete export does not establish permanent loss. The repaired JSON was about 459 KB, so this is not evidence that mobile storage is infeasible.
Sanitized mainnet observations and before/after quotes · Best-effort export · Pedigree fetch
Mainnet swap; subsequent planner quote
The live swap reduced 38 leaves to 10 without reducing the 89,569-sat balance. At 1 sat/vB, the native profitable selection still excluded eight leaves totaling 7,649 sats, about 8.5% of the balance. The selected principal improved from 65,536 to 81,920 sats, but selection is not receipt of spendable Bitcoin.
Evidence boundary. The excluded value is not proved lost. Different fees, ancestry or recovery methods can change the result. The selected optimized exit had not completed at the recorded checkpoint.
Sanitized mainnet observations and before/after quotes · Economic selection
Signed mainnet plan
The tested path requires an external Bitcoin fee reserve. The stock funding quote requested 5,228 sats against our 4,976-sat reserve. Custom allocation omitted optional sweep headroom and made the signed plan fit. Its planned fan-out and CPFP fees total 4,335 sats, excluding any later optional sweep. A consumer cannot assume the nominal Spark balance can pay these upfront costs.
Evidence boundary. These are planned fees at 1 sat/vB, not all confirmed expenditure. A sponsor could supply funding but creates an additional availability dependency. Other presigned exit variants have different economics.
Sanitized mainnet observations and before/after quotes · Funding construction and headroom
Observed transaction timelocks
The two selected paths retain 1,200 and 3,200 blocks of relative waiting: approximately 8.3 and 22.2 days at ten minutes per block, plus earlier confirmation dependencies. Optimization reduced fragmentation but did not turn the exit into an immediately spendable withdrawal.
Evidence boundary. Block-time estimates are not deadlines. One replacement shortened its prior 2,400-block wait to 1,200 blocks; this is favorable evidence, but the denomination optimizer does not guarantee favorable replacement history.
Sanitized mainnet observations and before/after quotes · Optimizer requests denominations
Mainnet observation and SDK failure handling
Available-balance samples were zero for roughly 23 seconds during the 23.7-second swap. The SDK can also defer claiming the counter-transfer after the original swap has begun. A phone losing connectivity must reconcile that pending operation before claiming the money is available or recovery preparation is complete.
Evidence boundary. Temporary reservation is not theft or loss. An offline smaller-batch simulation preserved 65,536 sats outside the swap; it was not a live concurrent-payment test. Cancellation between rounds does not reverse an already submitted swap.
Sanitized mainnet observations and before/after quotes · Reservations and cancellation · Deferred counter-transfer claim
Implementation requirement; dated wallet review
A usable phone flow must preserve current recovery state, fund fees, broadcast dependent packages, handle timelocks and conflicting variants, and resume across suspension, restarts and days of confirmations. Our optimized plan contains 29 Bitcoin transactions. The reviewed consumer-wallet surfaces did not demonstrate this complete flow, and our custom desktop tooling does not fill that product gap.
Evidence boundary. Mobile implementation is possible in principle. SDK primitives and durable storage are meaningful groundwork. The wallet finding is limited to the dated reviewed versions and public surfaces, not every present or future application.
Dated consumer-wallet review · SDK leaves orchestration to the application · Sanitized mainnet observations and before/after quotes
Conditional stress analysis
Our favorable optimization happened with a working SSP and operators. If refusal starts first, the user must work with existing leaves and whatever valid recovery material was already saved. Higher Bitcoin fees can make additional leaves uneconomical, and service loss may also prevent normal payments. Routine cooperative performance therefore does not measure the cost of recovery during a service failure.
Evidence boundary. No coordinated outage or mass exit was induced. This analysis does not quantify network-wide congestion, prove permanent loss, or show that operators can veto already valid Bitcoin transactions.
Economic leaf selection · All-operator preparation · Sanitized mainnet observations and before/after quotes
One operator refuses or is offline. Fresh all-operator preparation can fail despite two remaining signing shares. The reviewed end-to-end optimization cannot be assumed available.
Two operators refuse or are offline. Fresh all-operator flows fail and only one signing share remains, below the published threshold. Another SSP does not replace missing operator shares or state.
All three refuse or are offline. A user with complete valid presigned recovery material can still exit through Bitcoin with zero operators. A user missing required data cannot assume the seed can reconstruct it.
An outage does not force an immediate exit: users can wait for restoration. Preparation failures and long waits are not proof of custody or theft. The supported criticism is dependence on advance preparation and an unproven consumer recovery experience.
Evidence that limits this criticism. A real unilateral mechanism exists. Five selected leaves from the earlier mainnet attempt were subsequently found recovered as 72,370 sats; those funds were used in the new experiment. Who broadcast the earlier path is not established, and operator unavailability was not demonstrated on mainnet. The new optimization succeeded, while its subsequent exit remained pending at the recorded checkpoint.
Potential exculpatory factors · Download assessment and sources
Complete evidence index
Use this index to inspect individual claims and sources. The topic pages provide the grouped reading order.
Showing all records
Operators, hosted services, and refusal controls
How the published Operator set, coordinator, hosted SSP, wallet gate, and adjacent compliance systems shape default-path control. Open the topic overview.
Centralization
The reviewed Spark and Breez SDK snapshots each configure three Operators with a 2-of-3 threshold but select Lightspark SO0 by fixed identifier or index. No automatic coordinator rotation or failover was found in either snapshot; integrators can supply custom configurations. [3 sources]
Centralization
Spark permits multiple SSPs and Lightspark announced that Breez would operate one. The reviewed current Spark and Breez default configurations nevertheless identify the same single Lightspark SSP URL and identity. [5 sources]
Centralization
Two matching historical operator shares satisfy the operator side of the published threshold. Spending also requires the matching former-owner key and a still-spendable output with viable ancestry. One other operator deleting its share cannot invalidate those retained keys; retention is not observed. [4 sources]
Centralization
In Spark's reference inbound-Lightning flow, the SSP is the former owner of the leaf. Under the published two-of-three configuration, retained matching keys from the Lightspark SSP, Lightspark Operator, and Flashnet Operator would be sufficient to sign a fresh conflicting spend; no evidence shows retention or collusion. [9 sources]
Centralization
Blitz initializes an auto-authenticated Flashnet client around its ordinary Spark wallet, while Flashnet authentication uses that wallet's exact Spark identity. Under TM-1, Lightspark and Flashnet records are therefore directly joinable by pseudonym rather than only by timing inference. [6 sources]
Centralization
The wallet-identity gate can refuse relevant state-changing operations while preserving reads. Each operator controls its own setting. Separately, one required participant can block fresh all-operator preparation; two refusing operators can deny the two-share signing threshold. [4 sources]
Centralization
When the wallet gate fires, the affected client receives the same PermissionDenied response and message used for a session-identity mismatch. Tests enforce that external indistinguishability; internal logs, metrics, and error codes retain the actual reason. [3 sources]
Centralization
The receiver-side task applies the wallet gate before completing pending transfers, expressly including SSP-funded incoming transfers. The source covers a freeze set after transfer creation but before task pickup. This establishes code behavior, not a known production compliance block. [1 source]
Centralization
Spark's reviewed V2 preimage-share consensus path applies the wallet gate to the affected user even when an SSP, LNURL provider, or another hosted actor makes the call. The source says each Operator checks the identity during the Prepare phase. [1 source]
Centralization
Public Spark code applies the wallet gate to cooperative exits, ordinary and static deposit-address operations, deposit-tree creation, leaf renewal, transfer claims, and privileged token broadcasting. Privileged broadcaster authorization expressly does not bypass the target wallet's gate. [8 sources]
Centralization
When Spark's Kubernetes knob provider is enabled, Operators watch a ConfigMap for live changes. An integration test freezes one wallet while preserving reads, leaves a second wallet unaffected, and restores the first wallet when the value is cleared; public evidence does not establish production activation. [3 sources]
Centralization
Grid's common account schema permits the EMBEDDED_WALLET type and FROZEN status to appear together. EMBEDDED_WALLET is Spark-backed; FROZEN is defined as unable to send or receive and may follow compliance or fraud signals. The record is a schema capability, not an observed freeze. [4 sources]
Centralization
The pinned historical Operator policy defines a Lightspark-only SSP coordination surface. Nineteen operational methods use an anonymous application policy behind an internal IP restriction; newer SSP flows additionally require a session. This identifies a privileged network security boundary, not public access or misuse. [2 sources]
Centralization
Lightspark describes Grid Global Accounts as running on Spark wallets. In the same product presentation, it says Lightspark handles identity verification, sanctions screening, risk review, and corridor compliance for the regulated movement layer. [1 source]
Centralization
Lightspark's published Grid agreement template assigns Lightspark responsibility for end-user KYC, KYB, AML, and sanctions screening. It also assigns Lightspark control over its onboarding, verification, transaction-execution, suspension, and termination decisions. [1 source]
Centralization
Lightspark's published Grid agreement template permits it to refuse, delay, reverse, or freeze a Grid transaction because of law, suspected illegal activity, sanctions-screening results, or other identified risk. This is direct Grid evidence; it does not establish the enforcement path for ordinary non-Grid Spark users. [2 sources]
Centralization
Lightspark's sanctions explainer describes sender and receiver address checks when a transaction begins and immediate blocking when a match occurs. Its Grid description says compliance checks are integrated into transactions, including Bitcoin reward payments. [2 sources]
Centralization
The pinned Connect SDK exposes a configurable Lightning-node sanctions-screening operation and identifies Chainalysis as a provider. This is a Connect capability; it does not establish production screening or a call from the Spark SSP. [3 sources]
Centralization
Flashnet’s terms revised August 14, 2026 reserve refusal or restriction of its own services based on transaction activity and compliance review. They expressly distinguish those services from transactions submitted to Spark by other means. The earlier cited fund-freezing wording is not in the current text. [2 sources]
Identity, metadata, and public visibility
What Operators, the default SSP, public interfaces, and counterparties can learn from the reviewed transfer and payment paths. Open the topic overview.
Privacy
Spark's reviewed V3 transfer paths distribute participant identities and transfer records to every configured Operator. Operators outside a signing subset still persist the transfer rows, so threshold signing does not make transfer metadata Operator-blind. [4 sources]
Privacy
A normal wallet authenticates the same durable identity to every Operator and queries each for that identity's leaves. Operator code can associate that pseudonym with connection metadata; structured request logging, when enabled, can also record request bodies and client details. [8 sources]
Privacy
Spark distributes the complete Lightning invoice, payment hash, amount, fee, direction, and wallet identities to every Operator while dividing only the cryptographic shares. Each Operator stores the original invoice beside the affected Spark identity. [6 sources]
Privacy
The pinned historical policy defines an IP-restricted Lightspark SSP interface, and cited handlers bypass ordinary wallet privacy checks for SSP calls. This demonstrates privileged read paths in that version; it does not attest to the current production policy. [5 sources]
Privacy
Spark grants public transfer access when any sender or receiver is readable, and its test suite preserves full participant detail in that case. Because outgoing Lightning leaves go to one fixed, publicly indexed SSP identity, this is a concrete privacy limitation rather than a hypothetical two-wallet edge case. [8 sources]
Privacy
The default wallet authenticates Lightspark's SSP with the same identity signer used at the Operator layer. The SSP model attaches that identity to request history containing full Lightning invoices and exact cooperative-exit Bitcoin destinations, creating a deterministic join key. [9 sources]
Privacy
Spark describes static-address rotation as useful for privacy, but the implementation archives the old address and creates its replacement under the same immutable owner identity. That linkage is retained and distributed across the Operator set. [4 sources]
Privacy
Breez derives the Spark identity deterministically from the seed, network, and account. Restoring a compatible wallet with the same inputs preserves the Operator-side pseudonym, so changing apps or deposit addresses is not a privacy reset. [1 source]
Privacy
Breez sync encrypts values but uses deterministic identifiers for four metadata types. A party that knows a payment ID and can observe the corresponding server record IDs can test for a match. Knowing a payment ID alone does not provide sync access. Exit state needs a separate backup. [4 sources]
Privacy
Spark expressly excludes tokens from privacy mode, permits anonymous token queries with no wallet filter, and paginates the complete token-transaction table. Returned records expose owner public keys, exact amounts, outputs, status, and timestamps. [6 sources]
Privacy
For a publicly readable wallet, Spark's unauthenticated client can calculate its exact available balance and enumerate leaves. Returned records include ownership keys, tree relationships, exact values, timestamps, and multiple raw Bitcoin transaction fields. [6 sources]
Privacy
Breez emits complete Payment debug objects at INFO. Blink forwards SDK INFO and WARN lines to Crashlytics logging, while Cake appends SDK logs to a plaintext file, creating diagnostic copies with different retention and access paths. [3 sources]
Recovery requirements and wallet support
The documented operatorless-exit procedure, its state and fee prerequisites, and what twelve reviewed consumer-wallet surfaces exposed. Open the topic overview.
The exit
Blink's published case study states that a seed cannot rediscover current leaves after Operators are offline. Its documented procedure requires complete, current, validated leaf and ancestor state, represented by a recovery bundle saved while Operators are reachable; with that state, the seed still supplies signing authority. [2 sources]
The exit
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. [5 sources]
The exit
Spark exit state can change when leaves are created, transferred, split, renewed, claimed, or spent. Blink's proposed mobile design therefore refreshes its recovery state after balance-changing events; a mnemonic backup made once cannot encode later tree mutations. [1 source]
The exit
Blink's first documented mainnet recovery bundle omitted a legacy root required for offline construction. The tool initially failed without Operator access and was changed to fetch missing roots explicitly and reject open chains before producing a corrected bundle. [2 sources]
The exit
Breez 0.19.0's exit walker omitted the SplitLocked state used by renewed leaves and could leave out a required parent. Breez 0.23 includes SplitLocked and a regression test, so this is a historical affected-version finding rather than a current-SDK defect. [3 sources]
The exit
The reviewed reference CLI starts with live leaf discovery and external fee UTXO inputs. Its normal mainnet mode emits transactions and unsigned CPFP PSBTs with manual instructions; the reviewed command does not provide a complete durable broadcast, resume, timelock-monitoring and sweep workflow. [1 source]
The exit
Spark's FAQ says a user can exit at any time by broadcasting a pre-signed transaction. Its dedicated beta manual separately requires Bitcoin Core v29, external L1 UTXOs, economic leaf selection, exact package ordering, mainnet signing and timelock handling, and warns that the wallet is unusable until completion. [4 sources]
The exit
Blink's published 100,000-sat wallet contained 22 leaves and 253 root-to-leaf package steps. When all packages were first submitted together, 252 were rejected because the transaction graph could not enter the mempool in that form. [1 source]
The exit
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. [3 sources]
The exit
The documented independent exit requires external on-chain fee funding before the Spark value becomes spendable on chain. A third party could sponsor the UTXO, but doing so replaces the user's funding requirement with a service dependency. [4 sources]
The exit
Blink’s exit mechanics separate the amount eventually swept from the Spark wallet, leaf value excluded by economic triage, and independent on-chain bitcoin spent on CPFP and funding transactions. A destination amount is therefore not the same measure as net economic recovery. [3 sources]
The exit
In Blink's 100,000-sat case, 18 of 22 leaves holding 9,888 sats cost more to recover than their value at 1 sat/vB. Only four leaves holding 90,112 sats were selected for the documented attempt. [1 source]
The exit
Normal Spark use can split and re-split wallet state into multiple leaves, each with an independently sequenced exit chain. The workload of an emergency exit therefore depends on the wallet’s tree history as well as its displayed balance. [3 sources]
The exit
Blink's published method evaluates each leaf against the CPFP cost of its full exit chain plus final sweep. As fee rates rise, costs rise while leaf value does not, so additional leaves can fall below the economic threshold. This is an economic limit, not a cryptographic one. [3 sources]
The exit
Breez’s default leaf policy favors routine payments, and integrators can change the denomination target. Our later mainnet swap improved the quoted exit by reducing 38 leaves to 10, but required SSP/operator cooperation and still left small leaves outside the economical selection. [2 sources]
The exit
The September 11 review covers nine public-source products, Club Orange’s 4.3.7 APK surface, and public records for Wallet of Satoshi and Bringin. No complete in-app operatorless workflow was found. The two documentation-only findings do not prove absence inside their applications. [1 source]
The exit
The current Breez SDK builds signed recovery transactions including a sweep and checks confirmations and timelocks. The application must save the returned state, supply funding, broadcast transactions and packages, and resume over time. These helpers reduce implementation work but do not establish a shipped wallet recovery flow. [3 sources]
The exit
Cake v6.4.4 and the current source now pin Breez Flutter 0.23.0, so the old SDK-version objection is obsolete. The inspected Lightning adapter still contains no exit-state export or complete operatorless recovery flow. Cake’s article describes a protocol mechanism; it does not explicitly promise an exit button. [5 sources]
The exit
Club Orange's published 4.3.7 Android artifact bundled Breez Spark's lower-level unilateral-exit primitives, but its 46 exported BreezSdk method names contained no unilateral-exit or recovery operation and the targeted DEX search found no corresponding user-flow strings. [2 sources]
The exit
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. [5 sources]
The exit
The refreshed public review found no complete in-app recovery flow in Primal or Radar. Primal Android has upgraded its SDK and iOS its compiled shared dependency. Wallet of Satoshi’s newer guidance and Bringin’s public translations still do not supply a complete operator-outage procedure; their app internals remain unverified. [3 sources]
The exit
The pinned Blink UI calls the account non-custodial, says only the user can access funds, and presents the seed as recovery. The same source says unilateral-exit conflicts belong to flows the app never starts, leaving outage availability operationally dependent on external services. [5 sources]
The exit
The reviewed apps provide seed backup or control claims, but the September 11 audit found no complete in-app outage-recovery workflow. SDK upgrades and Blitz’s export improve prerequisites. A seed still does not contain the current transaction graph or execute its Bitcoin recovery path. [5 sources]
The exit
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. [4 sources]
The exit
Blink's Weekly Brief said the exit used only the seed with no Operators online and that 89,668 sats reached the destination. Its linked case study requires previously saved recovery state and records the selected exits as still awaiting refund maturity and final sweeping. [4 sources]
Hosted routing, settlement order, and recovery
How the reviewed default SSP paths handle invoices, send ordering, receive validation, and conditional retained-key risk. Open the topic overview.
Lightning swaps
Spark's public repository directs local SSP work to a separate Lightspark Sparkcore path that was not publicly accessible when checked. The public repository exposes the SSP schema, clients, and flow documents, but not the referenced Python handlers or full server-side decision logic. [10 sources]
Lightning swaps
In the pinned JavaScript SDK's regular Lightning-send path, selected leaves are prepared for the configured SSP and locked at the Operator layer before the wallet asks that SSP to pay the invoice. The ordering engages protocol recovery if the hosted request fails; it does not show loss, misconduct, or absence of recourse. [2 sources]
Lightning swaps
The pinned receive handler checks receiver identity, invoice data, refund destinations, transaction structure, duplicates, and signatures before an Operator releases its preimage share. Operators therefore enforce the inbound exchange, while the same checks protect the receiver and do not establish custodial control. [2 sources]
Lightning swaps
Spark's own research calls deletion of historical Operator shares an unverifiable operational promise. The implementation contains real ephemeral-storage and cleanup controls, but it permits brief version coexistence, best-effort deletion, and a documented legacy main-database fallback. [5 sources]