Privacy, control, and safety
Spark's preimage-share consensus path enforces the wallet gate even for SSP and LNURL callers
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
What the evidence shows
Technical and product details
- Documented behavior
The preimage-share path intentionally lacks a normal caller/user session match because an SSP, LNURL provider, or other hosted actor may act for the user. It therefore applies the gate directly to the affected user's identity. 1
Supporting material shown on this page
preimage-share consensus handlerPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 176 // No session-identity check on the V2 path either: LNURL/hosted callers 177 // may store on behalf of the user. Apply the wallet kill switch on the 178 // affected user identity directly so an SSP (or any other caller) cannot 179 // store shares for a frozen wallet on this SO. Runs on every SO during 180 // the consensus Prepare phase, so a frozen identity aborts the run on all 181 // operators rather than just the coordinator. 182 if err := authz.EnforceWalletNotKillSwitched(ctx, userIdentityPubKey); err != nil { - Documented behavior
The code comment says the check runs on every SO during the consensus Prepare phase and aborts the run for the frozen identity. 1
Supporting material shown on this page
preimage-share consensus handlerPinned source code · github.com · checked 2026-07-14 Relevant lines from the pinned source · open raw file 176 // No session-identity check on the V2 path either: LNURL/hosted callers 177 // may store on behalf of the user. Apply the wallet kill switch on the 178 // affected user identity directly so an SSP (or any other caller) cannot 179 // store shares for a frozen wallet on this SO. Runs on every SO during 180 // the consensus Prepare phase, so a frozen identity aborts the run on all 181 // operators rather than just the coordinator. 182 if err := authz.EnforceWalletNotKillSwitched(ctx, userIdentityPubKey); err != nil {
Interpretation
Why this matters for Spark's trust model
Moving the call through a hosted intermediary does not evade the control. The check is deliberately placed inside the multi-operator Lightning settlement path. 1
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
- Each SO reads its own local knob. This proves enforcement in the reviewed V2 preimage-share consensus path, not every possible hosted Lightning operation; public code does not disclose production knob control or network-wide activation. 1
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.
preimage-share consensus handler
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
How sources, absence findings, and limitations were evaluated