Privacy, control, and safety
Lightspark's default SSP binds payment destinations to the same wallet identity used with Operators
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. 123456789
What the evidence shows
Technical and product details
- Documented behavior
The wallet constructs its Operator services and SSP client from the same signer configuration. Both authentication flows present and sign with the wallet identity key. 123
Supporting material shown on this page
wallet constructs the SSP clientPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 296 this.config, 297 this.connectionManager, 298 this.signingService, 299 this.logging, 300 ); 301 this.sspClient = new SspClient(this.config, { logging: this.logging }); 302 this.swapService = new SwapService(Operator identity authenticationPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 461 }); 462 const protectedChallenge = challengeResp.protectedChallenge; 463 const challenge = protectedChallenge?.challenge; 464 465 if (!challenge) { 466 throw new SparkAuthenticationError( 467 "Invalid challenge response",SSP identity authenticationPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 686 const promise = (async (): Promise<void> => { 687 const MAX_ATTEMPTS = 3; 688 let lastErr: Error | undefined; 689 690 /* React Native can cause some outgoing requests to be paused which can result 691 in challenges expiring, so we'll retry any authentication failures: */ 692 for (let attempt = 0; attempt < MAX_ATTEMPTS; attempt++) { - Documented behavior
The public SSP schema connects a
SparkWalletUseridentity public key to paginated user-request history. Lightning-send records contain the complete BOLT11 invoice; cooperative-exit requests contain the exact Bitcoin withdrawal address and selected leaf IDs. 4567Supporting material shown on this page
SSP wallet identity and request historyPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 1202 """The identity public key of the user.""" 1203 identity_public_key: PublicKey! 1204 1205 """The user requests.""" 1206 user_requests(first: Int = null, after: String = null, types: [SparkUserRequestType!] = null, statuses: [SparkUserRequestStatus!] = null, networks: [BitcoinNetwork!] = null): SparkWalletUserToUserRequestsConnection! 1207}SSP Lightning-invoice recordPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 781 network: BitcoinNetwork! 782 783 """A computed version of the status of this user request.""" 784 request_status: SparkUserRequestStatus 785 786 """The lightning invoice user requested to pay.""" 787 encoded_invoice: String!SSP cooperative-exit recordPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 311 """The network the lightning send request is on.""" 312 network: BitcoinNetwork! 313 314 """A computed version of the status of this user request.""" 315 request_status: SparkUserRequestStatusSSP cooperative-exit inputPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 990input RequestCoopExitInput { 991 leaf_external_ids: [UUID!]! 992 withdrawal_address: String! 993 exit_speed: ExitSpeed! 994 withdraw_all: Boolean! = true - Documented behavior
The published mainnet default sends SSP requests to
api.lightspark.comand names Lightspark SO0 as the fixed coordinator. 89Supporting material shown on this page
default mainnet SSP endpointPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 11const SSP_IDENTITY_PUBLIC_KEYS = { 12 LOCAL: "028c094a432d46a0ac95349d792c2e3730bd60c29188db716f56a99e39b95338b4", 13 REGTEST: { 14 PROD: "022bf283544b16c0622daecb79422007d167eca6ce9f0c98c0c49833b1f7170bfe", 15 }, 16 MAINNET: { 17 PROD: "023e33e2920326f64ea31058d44777442d97d7d5cbfcf54e3060bc1695e5261c93",default mainnet SSP and coordinatorPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 324 baseUrl: getSspUrl("REGTEST"), 325 identityPublicKey: getSspIdentityPublicKey("REGTEST"), 326 }, 327}; 328 329const MAINNET_WALLET_CONFIG: Required<ConfigOptions> = { 330 ...BASE_CONFIG,
Interpretation
Why this matters for Spark's trust model
Lightspark does not need probabilistic blockchain analysis to associate a default wallet's SSP destinations with the Spark pseudonym it presents at the Operator interface. The same deterministic join key exists on both sides. 23456789
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.
wallet constructs the SSP client
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
Operator identity authentication
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
SSP identity authentication
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
SSP wallet identity and request history
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
SSP Lightning-invoice record
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
SSP cooperative-exit record
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
SSP cooperative-exit input
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
default mainnet SSP endpoint
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
default mainnet SSP and coordinator
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
How sources, absence findings, and limitations were evaluated