Skip to content

Multi-sig / social recovery for wraith-names ownership #20

@truthixify

Description

@truthixify

Labels: Stellar Wave, stellar, feature, drips, help-wanted
Tier: L (1–2 weeks)
Type: feature

Context

wraith-names ownership is currently tied to a single account. If a user loses access to that account (lost key, compromised wallet, custodian failure), their .wraith name is permanently lost — and a third party could potentially register a similar name and impersonate them.

We need a recovery path that doesn't compromise the unlinkability of stealth payments.

Scope

Add to wraith-names:

  1. set_guardians(name, guardians: Vec<Address>, threshold: u32):
    • The current owner specifies up to N guardian accounts (recommend N ≤ 7) and a recovery threshold (threshold of guardians.len()).
    • The guardians and threshold are stored alongside the name's meta-address.
  2. propose_recovery(name, new_owner, new_meta_address):
    • Any guardian may propose.
    • Stores a recovery proposal with a delay window (e.g., 100,000 ledgers ≈ 5 days).
  3. approve_recovery(name):
    • Each guardian signs.
    • Once threshold reached AND delay window elapsed, the name's ownership flips to new_owner and meta-address updates.
  4. cancel_recovery(name):
    • The current owner (if still in control) can veto any pending recovery within the delay window.

Design tensions

  • The delay window protects against a malicious guardian quorum.
  • The guardians' identities are public (on-chain), but this is acceptable for the name (which is already public) — it's the stealth payments that need privacy.
  • A user can use a Wraith TEE agent as one guardian, providing high-availability recovery without a single human dependency.

Open questions

  • Can guardians be other .wraith names rather than Stellar accounts? (Probably yes — adds composability but increases verification cost.)
  • What's the gas cost ceiling for approve_recovery when threshold is high?

Acceptance criteria

  • Recovery primitives implemented with full tests.
  • Adversarial tests: insufficient threshold, expired delay, post-cancel approval, double-recovery, recovery after voluntary release.
  • Audit report following the recovery-flow design — coordinate with the wraith-names full audit.
  • Docs follow-up issue filed for the user-facing recovery UX.

Why this matters

Losing a name forever is the kind of UX failure that gets posted to Crypto Twitter with screenshots. Even one such event is enough to chill adoption of .wraith as a permanent identity primitive. Social recovery turns "lost name = lost identity" into "lost name = inconvenient five-day reset."

Metadata

Metadata

Labels

Stellar WaveIssues in the Stellar wave programdripsFunded via Drips NetworkfeatureNew feature workhelp wantedExtra attention is neededstellarTouches Stellar / Soroban code

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions