Centralization
Blitz automatically authenticates an ordinary Spark session to Flashnet with the same wallet identity
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. 1234
What the evidence shows
Technical and product details
- Wallet behavior
After connecting its native Spark wallet, Blitz creates a FlashnetClient around that same wallet with autoAuthenticate enabled and initializes it during the normal connection path. 12
Supporting material shown on this page
Blitz automatic Flashnet initializationPinned source code · github.com · checked 2026-08-24 Relevant lines from the pinned source · open raw file 290 return response.didWork; 291 } else { 292 const wallet = await getWallet(mnemonic); 293 const flashnetAPI = new FlashnetClient(wallet, { 294 autoAuthenticate: true, 295 });Blitz normal connection pathPinned source code · github.com · checked 2026-08-24 Relevant lines from the pinned source · open raw file 367 } else { 368 let alreadyRanConnection = false; 369 if (!sparkInfoRef.current.identityPubKey && shouldRunNormalConnection) { 370 await resetSparkState(true, false); 371 await connectToSparkWallet(); 372 await initializeFlashnet(currentMnemonicRef.current); 373 alreadyRanConnection = true; - Identity mechanism
Breez's Flashnet authentication asks the Spark wallet for its identity public key, signs the Flashnet challenge with that identity, and keys swap-history requests by the same value. 34
Supporting material shown on this page
Flashnet Spark-identity authenticationPinned source code · github.com · checked 2026-08-24 Relevant lines from the pinned source · open raw file 46 async fn authenticate(&self) -> Result<String, FlashnetError> { 47 debug!("Authenticating with flashnet"); 48 let identity_public_key = self.spark_wallet.get_identity_public_key().to_string(); 49 let challenge_request = ChallengeRequest { 50 public_key: identity_public_key.clone(),Flashnet identity-keyed historyPinned source code · github.com · checked 2026-08-24 Relevant lines from the pinned source · open raw file 134 pub async fn list_user_swaps( 135 &self, 136 request: ListUserSwapsRequest, 137 ) -> Result<ListUserSwapsResponse, FlashnetError> { 138 let request = request.decode_token_identifiers(self.config.network)?; 139 let identity_public_key = self.spark_wallet.get_identity_public_key(); 140 let endpoint = format!("v1/swaps/user/{identity_public_key}");
Interpretation
Why this matters for Spark's trust model
Under TM-1, Flashnet does not need a probabilistic timing match to connect Blitz's Flashnet and Operator records. It receives the exact Spark wallet pseudonym during ordinary wallet initialization, and a Lightspark–Flashnet data combination would join the records directly. 23
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.
Blitz automatic Flashnet initialization
Pinned source code · github.com · Pinned or archival · checked 2026-08-24
Blitz normal connection path
Pinned source code · github.com · Pinned or archival · checked 2026-08-24
Flashnet Spark-identity authentication
Pinned source code · github.com · Pinned or archival · checked 2026-08-24
Flashnet identity-keyed history
Pinned source code · github.com · Pinned or archival · checked 2026-08-24
How sources, absence findings, and limitations were evaluated