Privacy, control, and safety
Lightspark is the fixed default coordinator and the reviewed SDKs do not fail over automatically
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. 123
What the evidence shows
Technical and product details
- Documented behavior
The public/default topology has three Operators and a 2-of-3 signing threshold, but selects Lightspark SO0 as one fixed coordinator. 1
Supporting material shown on this page
default topology and coordinatorPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 191 readonly network?: NetworkType; 192 readonly signingOperators?: Readonly<Record<string, SigningOperator>>; 193 readonly tls?: TlsOptions; 194 readonly coordinatorIdentifier?: string; 195 readonly frostSignerAddress?: string; 196 readonly threshold?: number; 197 readonly tokenSignatures?: "ECDSA" | "SCHNORR"; - Documented behavior
Numerous JavaScript flows call that configured coordinator; Breez's independent implementation likewise stores one coordinator index. Neither reviewed SDK contains automatic coordinator rotation or failover to SO1/SO2 when SO0 refuses or is unavailable. 123
Supporting material shown on this page
default topology and coordinatorPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 191 readonly network?: NetworkType; 192 readonly signingOperators?: Readonly<Record<string, SigningOperator>>; 193 readonly tls?: TlsOptions; 194 readonly coordinatorIdentifier?: string; 195 readonly frostSignerAddress?: string; 196 readonly threshold?: number; 197 readonly tokenSignatures?: "ECDSA" | "SCHNORR";JavaScript coordinator lookupPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 207 public getCoordinatorAddress(): string { 208 const coordinator = 209 this.config.signingOperators[this.config.coordinatorIdentifier]; 210 if (!coordinator) { 211 throw new SparkError("coordinator not found in signing operators"); 212 }Breez coordinator poolPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 17#[derive(Clone, Debug, Deserialize, Serialize)] 18pub struct OperatorPoolConfig { 19 coordinator_index: usize, 20 operators: Vec<OperatorConfig>, 21}
Interpretation
Why this matters for Spark's trust model
The threshold should not be mistaken for equivalent front-end liveness. Lightspark remains a practical coordination dependency for many ordinary operations even when two cryptographic signatures would suffice. 123
This section states the trust-model consequence of the cited evidence. Conditional or inferred claims remain bounded by the next section.
Scope control
What this does not establish
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.
default topology and coordinator
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
JavaScript coordinator lookup
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Breez coordinator pool
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
How sources, absence findings, and limitations were evaluated