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
What the evidence shows
Technical and product details
- Documented behavior
Spark's policy classifies node and balance queries as unauthenticated. The official read-only SDK exposes a
createPublicclient with authentication modenone. 12Supporting 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 ]); - Documented behavior
Given a Spark address,
getAvailableBalanceresolves its identity key, enumerates the wallet's readable leaves, and sums their exact satoshi values. 23Supporting 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 } - 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
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.
unauthenticated read policy
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
public read-only client and balance query
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
privacy-filtered node enumeration
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
returned node fields
Pinned source code · github.com · Pinned or archival · checked 2026-07-14
How sources, absence findings, and limitations were evaluated