Review of Spark's trust model

Privacy, control, and safety

Public-mode Spark exposes exact balances, leaf ownership, and raw Bitcoin transaction material

For a publicly readable wallet, Spark's unauthenticated client can calculate its exact available balance and enumerate leaves. Returned records include ownership keys, tree relationships, exact values, timestamps, and multiple raw Bitcoin transaction fields. 1234

4 sourcesEvidence reviewed through July 14, 2026

What the evidence shows

Technical and product details

  1. Documented behavior

    Spark's policy classifies node and balance queries as unauthenticated. The official read-only SDK exposes a createPublic client with authentication mode none. 12

    Supporting material shown on this page

    unauthenticated read policyPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    151		pbspark.SparkService_QueryUserSignedRefunds_FullMethodName:              {AuthMode: AuthSession},
    152		pbspark.SparkService_QueryUnusedDepositAddresses_FullMethodName:         {AuthMode: AuthUnauthenticated},
    153		pbspark.SparkService_QueryStaticDepositAddresses_FullMethodName:         {AuthMode: AuthUnauthenticated},
    154		pbspark.SparkService_SubscribeToEvents_FullMethodName:                   {AuthMode: AuthSession},
    155		pbspark.SparkService_InitiateStaticDepositUtxoRefund_FullMethodName:     {AuthMode: AuthSession},
    156		pbspark.SparkService_ExitSingleNodeTrees_FullMethodName:                 {AuthMode: AuthSession},
    157		pbspark.SparkService_CooperativeExitV2_FullMethodName:                   {AuthMode: AuthSession},
    public read-only client and balance queryPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    160      this.config.getCoordinatorAddress(),
    161    );
    162
    163    try {
    164      return await this.queryNodeBalance(sparkClient, identityPublicKey, [
    165        TreeNodeStatus.TREE_NODE_STATUS_AVAILABLE,
    166      ]);
  2. Documented behavior

    Given a Spark address, getAvailableBalance resolves its identity key, enumerates the wallet's readable leaves, and sums their exact satoshi values. 23

    Supporting material shown on this page

    public read-only client and balance queryPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    160      this.config.getCoordinatorAddress(),
    161    );
    162
    163    try {
    164      return await this.queryNodeBalance(sparkClient, identityPublicKey, [
    165        TreeNodeStatus.TREE_NODE_STATUS_AVAILABLE,
    166      ]);
    privacy-filtered node enumerationPinned 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			}
  3. Documented behavior

    Returned node records include exact value, owner identity and signing keys, tree and parent relationships, status and timestamps, plus raw node, refund, direct, direct-refund, and direct-from-CPFP-refund transactions. 4

    Supporting material shown on this page

    returned node fieldsPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    46	}
    47	return &pbspark.TreeNode{
    48		Id:                     tn.ID.String(),
    49		TreeId:                 treeIDStr,
    50		Value:                  tn.Value,
    51		ParentNodeId:           tn.getParentNodeID(ctx),
    52		NodeTx:                 tn.RawTx,

Interpretation

Why this matters for Spark's trust model

Once a public-mode Spark identity is learned, an unauthenticated observer can retrieve far more than a payment address: it can reconstruct current holdings and detailed Bitcoin transaction material around the wallet's leaves. 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

  • The observer must first know the Spark address, identity key, or node IDs. Enforced privacy mode can suppress covered queries. Raw transactions are not private keys and do not themselves confer spending authority. 234

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

unauthenticated read policy

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

Open original source
2

public read-only client and balance query

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

Open original source
3

privacy-filtered node enumeration

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

Open original source
4

returned node fields

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

Open original source

How sources, absence findings, and limitations were evaluated