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:
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.
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).
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.
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
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."
Labels:
Stellar Wave,stellar,feature,drips,help-wantedTier: L (1–2 weeks)
Type: feature
Context
wraith-namesownership is currently tied to a single account. If a user loses access to that account (lost key, compromised wallet, custodian failure), their.wraithname 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:set_guardians(name, guardians: Vec<Address>, threshold: u32):thresholdofguardians.len()).propose_recovery(name, new_owner, new_meta_address):approve_recovery(name):new_ownerand meta-address updates.cancel_recovery(name):Design tensions
Open questions
.wraithnames rather than Stellar accounts? (Probably yes — adds composability but increases verification cost.)approve_recoverywhen threshold is high?Acceptance criteria
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
.wraithas a permanent identity primitive. Social recovery turns "lost name = lost identity" into "lost name = inconvenient five-day reset."