Review of Spark's trust model

Privacy, control, and safety

Spark gives the Lightspark-only SSP interface cross-wallet privacy bypasses

Spark defines an IP-restricted, Lightspark-only SSP interface for cross-wallet node, transfer, static-address, and tree queries. Reviewed handlers and a pinned commit explicitly bypass ordinary wallet-privacy checks for SSP calls. 1234

4 sourcesEvidence reviewed through July 14, 2026

What the evidence shows

Technical and product details

  1. Documented behavior

    The current Operator repository defines a build-tagged SparkSspInternalService as a “Lightspark-only SSP coordination surface.” Its IP-restricted methods include cross-wallet node, transfer, static-address, tree-snapshot, and node-detail queries. 1

    Supporting material shown on this page

    Lightspark-only SSP interfacePinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    6	pbssp "github.com/lightsparkdev/spark/proto/spark_ssp_internal"
    7)
    8
    9// SparkSspInternalService is the Lightspark-only SSP coordination surface.
    10// Every method is IP-protected; subsets either accept anonymous callers (legacy "ops" RPCs) or require a session token
    11// (newer flows that go through the same sspcore client used by external partners).
    12func init() {
  2. Documented behavior

    Transfer and node-query handlers skip ordinary wallet- privacy checks when invoked with the SSP flag. A pinned Spark commit says the static-address endpoint likewise passes isSSP=true so the SSP can keep reading addresses across wallets after the public privacy filter is enabled. 234

    Supporting material shown on this page

    SSP transfer privacy bypassPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    2208		hasReadAccess, err := NewWalletSettingHandler(h.config).HasReadAccessToWallet(ctx, *walletIdentityPubkey)
    2209		if err != nil {
    2210			return nil, fmt.Errorf("failed to check if viewer has read access to wallet %s: %w", walletIdentityPubkey, err)
    2211		}
    2212		if !hasReadAccess {
    2213			return &pb.QueryTransfersResponse{
    2214				Offset: -1,
    SSP node-query privacy bypassPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    74			return nil, errors.InvalidArgumentMalformedKey(fmt.Errorf("failed to parse owner identity public key: %w", err))
    75		}
    76		if !isSSP {
    77			hasReadAccess, err := NewWalletSettingHandler(h.config).HasReadAccessToWallet(ctx, ownerIdentityPubKey)
    78			if err != nil {
    79				return nil, fmt.Errorf("failed to check if privacy is enabled for owner: %w", err)
    80			}

Interpretation

Why this matters for Spark's trust model

Spark privacy mode is not provider-blind. The Lightspark-only SSP interface has explicit, purpose-built routes around the privacy filters applied to ordinary public callers. 1234

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

  • This is an internal, IP-restricted service, not a public authentication vulnerability. The code proves privileged read paths, not that every listed method returns every private record, how data is retained, or who inside Lightspark can access it. 1234

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.

1

Lightspark-only SSP interface

Pinned source code · github.com · Pinned or archival · checked 2026-07-14

Open original source
2

SSP transfer privacy bypass

Pinned source code · github.com · Pinned or archival · checked 2026-07-14

Open original source
3

SSP node-query privacy bypass

Pinned source code · github.com · Pinned or archival · checked 2026-07-14

Open original source
4

static-address bypass commit

Code commit · github.com · Pinned or archival · checked 2026-07-14

Open original source

How sources, absence findings, and limitations were evaluated