Design: optional wallet profile pictures (beyond address-seeded blockies) #230
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#230
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Today every wallet / contract identity in the dapp is shown with a deterministic ethereum-blockies identicon seeded only by the address (
WalletBlockie→AddressInline). Explore letting connected users choose a custom profile image for their wallet while everyone else still gets the existing blockie (or a sensible fallback).This is a design / product idea issue — no implementation commitment yet. Goal is to align on UX, storage, trust, and how custom avatars compose with the canonical address row from GitLab #98.
Current behavior
WalletBlockie(frontend/src/components/WalletBlockie.tsx) renders an 8×8 pixelated identicon fromethereum-blockies, cached per address inwalletBlockieCanvas.ts.AddressInline(frontend/src/components/AddressInline.tsx) pairs blockie + truncated label + optional MegaETH Etherscan link — used across TimeCurve (live buys, podium, arena), referrals leaderboard, scanner links, etc.image-rendering: pixelatedon canvases).Implication: There is no per-user avatar layer today; two different humans sharing no onchain link look identical except for address text.
Problem / opportunity
Design questions (decide before build)
Who can set an avatar?
msg.sender/ active connector address?Source of image
Storage & authority
address(indexer/API) vs onchain mapping vs hybrid signature-bound JSON?Trust & safety
aria-hiddenstrategy for decorative vs meaningful avatars.0x…tails — keep full address on hover / explorer link unchanged.UX details
Proposed direction (strawman — revise in comments)
avatar_urloptional per address;AddressInline/WalletBlockiewrapper tries custom URL then blockie.personal_signmessage binding address + image hash or URL).Touchpoints in codebase (grep after design lock)
Likely extend rather than fork: one
WalletAvatarcomponent that delegates to blockie or custom<img>with sharedsize/classNamecontract.Acceptance criteria (for a future implementation issue)
docs/frontend/design.mdanchor) describing source of truth, moderation, and fallback rules.AddressInlineis used (or scoped list e.g. leaderboard + live buys only).Out of scope (this idea)
Related
frontend/src/lib/walletBlockieCanvas.ts,frontend/src/components/WalletBlockie.tsxmentioned in issue #234
Verification report (GitLab #230)
Issue type: Design / product idea — optional wallet profile pictures beyond address-seeded blockies. No implementation commitment on this issue; acceptance checklist in the issue body is explicitly scoped to a future implementation issue.
What was verified
WalletBlockie→ethereum-blockies8×8 identicon, cached inwalletBlockieCanvas.tsfrontend/src/components/WalletBlockie.tsx,frontend/src/lib/walletBlockieCanvas.ts(WALLET_BLOCKIE_GRID = 8,getWalletBlockieSourceCanvas).AddressInlinepairs blockie + truncated label + optional explorer / profile (#98, #258)frontend/src/components/AddressInline.tsx; grep usage across arena live buys, podium, referrals, WarBow sections,WalletProfileModal.avatar_url,WalletAvatar, upload UI)rg avatarinfrontend/srcandindexer/— no product avatar fields; only marketing art prompts.rg 'WalletBlockie|AddressInline' frontend/src -g '*.tsx')cd frontend && npm test -- --run src/lib/walletBlockieCss.test.ts src/lib/walletBlockieCanvas.test.ts— 7/7 tests passed (no radial gradient tint on live-buy blockie; globalimage-rendering: pixelatedon canvases).cd frontend && npm run typecheck— clean.Manual / QA steps from issue body
Conclusion
Current codebase matches the “Current behavior” and “Implication” sections of #230. Custom wallet avatars are not implemented; blockies remain the sole wallet identity art in product UI. This issue can be closed as a captured design brief; open a separate implementation issue when product signs off on source of truth, moderation, and fallback rules.
Follow-ups (optional)
AddressInlinecontract), and #258 (WalletProfileModal) for “Edit profile picture” placement.docs/frontend/design.mdanchor (source of truth, moderation, fallback) as part of that implementation issue’s first deliverable.