Review of Spark's trust model

Privacy, control, and safety

Rotating a static deposit address does not rotate its Operator-side identity

Spark describes static-address rotation as useful for privacy, but the implementation archives the old address and creates its replacement under the same immutable owner identity. That linkage is retained and distributed across the Operator set. 1234

4 sourcesEvidence reviewed through July 14, 2026

What the evidence shows

Technical and product details

  1. Documented behavior

    Spark's implementation describes static-address rotation as useful for privacy, but archives the old address and creates its replacement under the same authenticated owner identity key. 1

    Supporting material shown on this page

    static-address rotation and identityPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    799	if err != nil {
    800		return nil, fmt.Errorf("failed to create archive statement: %w", err)
    801	}
    802	signature := ecdsa.Sign(config.IdentityPrivateKey.ToBTCEC(), messageHash)
    803
    804	// Send gossip message to archive the address on all other SOs
    805	selection := helper.OperatorSelection{Option: helper.OperatorSelectionOptionExcludeSelf}
  2. Documented behavior

    Deposit-address rows bind each immutable address to an immutable owner identity. The address query groups records by that identity without excluding archived addresses. 23

    Supporting material shown on this page

    immutable address-to-identity recordsPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    51		field.Enum("network").GoType(btcnetwork.Unspecified).
    52			Immutable().
    53			Comment("Network on which the deposit address is valid.").
    54			Optional().
    55			Annotations(entexample.Default(btcnetwork.Regtest)),
    56		field.Bytes("owner_identity_pubkey").
    57			Immutable().
    identity-grouped static-address queryPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    428	if err != nil {
    429		return nil, errors.InvalidArgumentMalformedField(fmt.Errorf("failed to convert proto network to common network: %w", err))
    430	}
    431	query := db.DepositAddress.Query().
    432		Where(depositaddress.OwnerIdentityPubkey(idPubKey)).
    433		Where(depositaddress.IsStatic(true)).
    434		Order(ent.Desc(depositaddress.FieldID)).
  3. Documented behavior

    Rotation gossips the owner identity and old address to every other Operator so that all Operators archive the same record. 14

    Supporting material shown on this page

    static-address rotation and identityPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    799	if err != nil {
    800		return nil, fmt.Errorf("failed to create archive statement: %w", err)
    801	}
    802	signature := ecdsa.Sign(config.IdentityPrivateKey.ToBTCEC(), messageHash)
    803
    804	// Send gossip message to archive the address on all other SOs
    805	selection := helper.OperatorSelection{Option: helper.OperatorSelectionOptionExcludeSelf}
    archive gossip fieldsPinned source code · github.com · checked 2026-07-14
    Relevant lines from the pinned source · open raw file
    182// This marks the old address as archived (is_default=false) on all SOs.
    183// Archived addresses are still queryable and able to accept deposits.
    184// The coordinator signs this operation to prevent unauthorized archiving by rogue SOs.
    185message GossipMessageArchiveStaticDepositAddress {
    186    bytes owner_identity_public_key = 1;
    187    spark.Network network = 2;
    188    string address = 3;  // Specific address to archive

Interpretation

Why this matters for Spark's trust model

Rotation does not break the link between old and new deposit addresses for any Spark Operator. It is address hygiene against outside observers, not an Operator-unlinkability mechanism. 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

  • Rotation can still reduce address reuse and improve privacy against external Bitcoin-chain observers. The precise finding is the retained Operator-side cluster; public queryability remains subject to privacy enforcement. 13

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

static-address rotation and identity

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

Open original source
2

immutable address-to-identity records

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

Open original source
3

identity-grouped static-address query

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

Open original source
4

archive gossip fields

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

Open original source

How sources, absence findings, and limitations were evaluated