{"id":"ERC-5489","name":"NFT Hyperlink Extension","status":"Final","chain":"both","category":{"id":"nft","name":"NFT Capabilities","description":"What NFTs can do beyond basic ownership"},"journeyStages":[{"id":"asset-display","name":"Asset Discovery & Display","description":"Seeing tokens, NFTs, and balances"},{"id":"specialized","name":"Specialized Interactions","description":"Physical items, AI, social, gaming"}],"uxImpact":"NFTs have authorized hyperlink slots — owners grant addresses permission to set links on their tokens. Design implications: show attached hyperlinks on NFT display, indicate slot authorization status, design slot management UI (authorize/revoke addresses), display link metadata (icon, description, target). Design decisions: how prominently to show attached links (ad-like), trust indicators for link destinations, multiple slots management complexity, authorization flow UX.","hasDetailedContent":true,"content":{"id":"ERC-5489","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-5489","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"NFTs have authorized hyperlink slots — owners grant addresses permission to set links on their tokens.","designerTakeaways":["You can show attached links as a curated Links section with icon and description, not raw URLs.","Your owner settings can authorize or revoke addresses per slot with clear permission scope.","You can warn on external link click with destination preview before opening new tab."],"applicability":{"whenToUse":["NFTs need official links — artist site, merch, license.","Multiple parties may update different slots.","On-chain link authorization is required."],"whenToAvoid":["Metadata JSON off-chain links suffice.","No slot management in product scope.","Cannot vet link destinations safely."]},"prototypeFirst":[{"screen":"NFT links section","why":"Visitors discover official related URLs from token page.","covers":["One link","Multiple slots","Empty slots"],"include":["Link cards with icon","Description","External link icon","Empty slot placeholder"]},{"screen":"Authorize slot setter","why":"Owner delegates who can set link without transferring NFT.","covers":["Authorize","Revoke"],"include":["Slot picker","Address field","Permission summary","Revoke list"]},{"screen":"Set link as authorized party","why":"Brand or collaborator updates their slot.","covers":["Edit link","Submit"],"include":["URL field","Icon upload","Description","Preview card"]},{"screen":"External link safety interstitial","why":"Phishing risk on any clickable URL.","covers":["Leaving site warning"],"include":["Destination domain","Continue button","Report link"]}],"mentalModel":[{"label":"Hyperlink slot","description":"Fixed position on NFT for one curated link."},{"label":"Authorized setter","description":"Only listed addresses can update that slot."},{"label":"Owner control","description":"Owner grants/revokes setter permissions per slot."},{"label":"Link metadata","description":"Icon and description make links trustworthy and scannable."},{"label":"Viewer trust","description":"Links appear official because setter was authorized."}],"statesToDesign":[{"state":"Links displayed","trigger":"Slots filled.","userNeed":"Scan official resources.","designResponse":"Curated link cards below art."},{"state":"Empty slot","trigger":"Authorized but unset.","userNeed":"Owner or setter knows to fill.","designResponse":"Empty slot dashed card for authorized users only."},{"state":"Unauthorized edit attempt","trigger":"Non-setter tries update.","userNeed":"Clear block.","designResponse":"You are not authorized for this slot."},{"state":"Revoked setter","trigger":"Owner revoked address.","userNeed":"Setter knows access ended.","designResponse":"Access removed; existing link may remain until cleared per rules."},{"state":"External click","trigger":"Viewer clicks link.","userNeed":"Safe navigation.","designResponse":"Interstitial with domain highlight."}],"designDecisions":[{"question":"How prominent are links?","recommendation":"Below fold Links section, not overlay on art.","rationale":"Ad-like overlays hurt aesthetic and trust."},{"question":"Show raw URL?","recommendation":"Description primary; URL on hover or expand.","rationale":"Raw URLs look like phishing."},{"question":"Multiple slots UI?","recommendation":"Max 3 visible plus Manage slots for owner.","rationale":"Slot sprawl looks spammy."}],"problemsSolved":[{"problem":"Official links buried in metadata","oldWay":"Users never find artist site","newWay":"Structured link slots on detail page","impact":"medium"},{"problem":"Anyone could claim fake links in description","oldWay":"Scam links in off-chain metadata","newWay":"Authorized setter per slot on-chain","impact":"high"},{"problem":"Collaborators need link update without ownership","oldWay":"Transfer NFT or share keys","newWay":"Grant slot authorization to brand address","impact":"medium"}],"uxPatterns":[{"name":"Curated Link Cards","description":"Icon, description, and safe external open.","mockup":"concept/nft-gallery","components":["LinkCard","DomainPreview","ExternalIcon"],"userFlow":["View NFT","See links section","Click card","Interstitial","Opens site"]},{"name":"Slot Authorization Panel","description":"Owner grants/revokes link setters per slot.","mockup":"concept/verify-safety","components":["SlotList","AuthorizeForm","RevokeButton"],"userFlow":["Owner opens settings","Picks slot","Authorizes address","Setter can edit link"]}],"seenInTheWild":[{"app":"OpenSea","url":"https://opensea.io/","note":"External links section on collection pages."},{"app":"Zora","url":"https://zora.co/","note":"Creator profile links on token pages."},{"app":"Foundation","url":"https://foundation.app/","note":"Artist attribution and link patterns."}],"antiPatterns":[{"pattern":"Banner ads overlaying NFT art","why":"Destroys aesthetic; feels scammy","instead":"Links section below art","severity":"high"},{"pattern":"Direct open with no domain preview","why":"Phishing via authorized compromised setter","instead":"Interstitial showing destination domain","severity":"critical"},{"pattern":"Ten link slots equally prominent","why":"Link farm appearance","instead":"Cap visible slots; manage overflow in settings","severity":"medium"}],"vocabulary":[{"use":"Official links","avoid":"Hyperlink slots","why":"Curatorial not technical."},{"use":"Allow [brand] to update link","avoid":"Authorize slot setter","why":"Permission plain language."},{"use":"You are leaving for [domain]","avoid":"External URI navigation","why":"Safety interstitial copy."}],"onMonad":[{"aspect":"Link updates","ethereum":"Slot edits cost gas","monad":"Cheap updates encourage fresh official links","designImplication":"Inline link edit for authorized setters on Monad."},{"aspect":"Click-through safety","ethereum":"Same interstitial need","monad":"Same — speed does not reduce phishing risk","designImplication":"Always show domain interstitial on Monad."}],"technicalNotes":"ERC-5489 slot authorization is per-address; use link interstitials for all external opens.","relatedStandards":[{"id":"ERC-721","relationship":"Hyperlink extension on NFTs"},{"id":"ERC-5521","relationship":"Reference graph complements outbound links"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-5489","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-5489","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-5489","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5489","markdown":"https://www.eipsfordesigners.com/standards/ERC-5489/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5489/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5489","official":"https://eips.ethereum.org/EIPS/erc-5489","discussion":"https://ethereum-magicians.org/search?q=ERC-5489"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}