You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 signer
dither.Transfer(handle, address): initiates transfer, locks handle until resolved
dither.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) and display_handle columns; backfill current users with NULL
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, Accept memos 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_handle across profile header, feed bylines, mentions, notifications with address fallback
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 clearsAcceptance Criteria
username(normalized, unique, ≤30 chars) anddisplay_handlecolumns; backfill current users withNULL/profile,/feed,/followers,/following,/search, wallet lookup)Register,Transfer,Acceptmemos with normalization, reserved-word, uniqueness, and expiry checks@display_handleacross profile header, feed bylines, mentions, notifications with address fallback