-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Context:
Canonical usernames with case-preserving handles so the product can retire raw wallet addresses.
Memo Actions
dither.Register(handle): registers a new handle or updates display casing if already owned by signerdither.Transfer(handle, address): initiates transfer, locks handle until resolveddither.Accept(handle): confirms transfer before expiry; ownership updates and lock clears- ADR-36 session wallet/AuthZ signs the memos; no new on-chain module needed
Acceptance Criteria
- Add
username(normalized, unique, ≤30 chars) anddisplay_handlecolumns; backfill current users withNULL - Return both fields on all user payloads (
/profile,/feed,/followers,/following,/search, wallet lookup) - Endpoints issue handle memos via reader; enforce ≤2 successful claims per rolling 7-day window
- Reject reserved names or malformed input with structured errors surfaced in the wizard
- Log every register/update/transfer (actor, previous value, new value, timestamp)
- Reader consumes
Register,Transfer,Acceptmemos with normalization, reserved-word, uniqueness, and expiry checks - Reader publishes handle state (owner, display handle, pending transfer metadata) via API/WebSocket; backend job hydrates existing users once data is live
- Wizard copy shows “Handle appears available” with pending state; surface success/failure when confirmation arrives (poll or WebSocket)
- Render
@display_handleacross profile header, feed bylines, mentions, notifications with address fallback - Tests cover normalization collisions, reserved names, transfers (accept + expiry), rate limits, wizard flow; telemetry emits counters and alerts
Sub-issues
Metadata
Metadata
Assignees
Type
Projects
Status
Building