{"id":"ERC-4400","name":"Consumable NFT Extension","status":"Final","chain":"both","category":{"id":"gaming","name":"Gaming & Composability","description":"Building complex interactive NFT systems"},"journeyStages":[{"id":"specialized","name":"Specialized Interactions","description":"Physical items, AI, social, gaming"}],"uxImpact":"Users can assign a 'consumer' to their NFT who can use it without owning it — like lending your metaverse land to a builder while keeping ownership. Design implications: show separate 'owner' and 'consumer' roles on NFT detail pages, design 'Assign Consumer' action distinct from transfer, display consumer address/ENS with clear role label, show 'You are consumer' vs 'You are owner' states. Design decisions: whether to show consumer history, how to handle consumer permissions expiration (if implemented), UX for revoking consumer access, visualizing the owner-consumer relationship in collection views.","hasDetailedContent":true,"content":{"id":"ERC-4400","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-4400","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"Users can assign a 'consumer' to their NFT who can use it without owning it — like lending your metaverse land to a builder while keeping ownership.","designerTakeaways":["You can show dual badges Owner: you and Consumer: builder.eth on detail pages.","Your Assign consumer flow stays distinct from Transfer — different copy and confirmation.","You can list active consumers on owner settings with one-tap Revoke access."],"applicability":{"whenToUse":["Metaverse land, game items, or equipment need use-without-transfer.","Owner-consumer split is on-chain via ERC-4400.","Both parties use same dApp."],"whenToAvoid":["ERC-4907 rental with expiry suffices.","No consumer utilities implemented.","Simple ownership-only NFTs."]},"prototypeFirst":[{"screen":"Dual role detail header","why":"Instant clarity on owner vs consumer.","covers":["You are owner","You are consumer","Third party viewing"],"include":["Role banners","Owner row","Consumer row","Role-specific CTAs"]},{"screen":"Assign consumer sheet","why":"Delegation must not feel like sale.","covers":["Assign","Replace consumer"],"include":["Consumer address","Not a transfer callout","Confirm assign"]},{"screen":"Consumer action view","why":"Consumer sees permitted in-app actions only.","covers":["Allowed build","Blocked transfer"],"include":["You can use","Owner-only actions grayed"]},{"screen":"Revoke consumer access","why":"Owner ends delegation.","covers":["Revoke confirm"],"include":["Consumer name","Revoke warning","Immediate effect note"]}],"mentalModel":[{"label":"Owner","description":"Legal/on-chain holder — can transfer and assign consumer."},{"label":"Consumer","description":"Granted user rights without ownership."},{"label":"Assign vs transfer","description":"Assign keeps owner; transfer changes owner."},{"label":"Revoke","description":"Owner removes consumer — access ends on-chain."},{"label":"Viewer context","description":"UI adapts to You are owner / You are consumer."}],"statesToDesign":[{"state":"Owner, no consumer","trigger":"Default holding.","userNeed":"Assign or use as owner.","designResponse":"Assign consumer optional CTA."},{"state":"Owner with active consumer","trigger":"Consumer set.","userNeed":"Monitor and revoke.","designResponse":"Consumer row in settings with Revoke."},{"state":"You are consumer","trigger":"Connected as consumer.","userNeed":"Use without transfer options.","designResponse":"Consumer banner; owner actions hidden."},{"state":"Revoked consumer","trigger":"Owner revoked.","userNeed":"Consumer knows access ended.","designResponse":"Access ended notice on next load."},{"state":"Third party viewer","trigger":"Neither owner nor consumer.","userNeed":"See both roles.","designResponse":"Owner and Consumer rows read-only."}],"designDecisions":[{"question":"Show consumer history?","recommendation":"Last 3 consumers in owner settings.","rationale":"Audit without full explorer."},{"question":"Consumer can transfer?","recommendation":"Never — hide transfer for consumer role.","rationale":"Prevents confusion and exploits."},{"question":"Assign vs rent (4907)?","recommendation":"4400 for indefinite use grant; 4907 for time rental.","rationale":"Pick standard matching product semantics."}],"problemsSolved":[{"problem":"Full transfer to lend utility","oldWay":"Temporary transfer risks not getting back","newWay":"Consumer role without ownership change","impact":"high"},{"problem":"Consumer thinks they own NFT","oldWay":"Same UI for all connected wallets","newWay":"You are consumer banner","impact":"high"},{"problem":"Forgotten open delegations","oldWay":"Consumer retains access silently","newWay":"Active consumer row with revoke","impact":"medium"}],"uxPatterns":[{"name":"Owner Consumer Dual Badge","description":"Parallel role display on NFT detail.","mockup":"eip-7702/session-permissions","components":["OwnerBadge","ConsumerBadge","RoleBanner"],"userFlow":["Open NFT","See roles","Actions gated by role"]},{"name":"Assign Consumer Flow","description":"Delegate use without transfer.","mockup":"concept/permit-approval","components":["AssignSheet","NotTransferCallout","RevokeButton"],"userFlow":["Owner taps Assign","Enters address","Confirms","Consumer can use"]}],"seenInTheWild":[{"app":"Decentraland","url":"https://decentraland.org/","note":"Land operator patterns without ownership transfer."},{"app":"ReNFT","url":"https://renft.io/","note":"Rental vs use delegation UX reference."},{"app":"Sandbox","url":"https://www.sandbox.game/","note":"Game asset usage without sale."}],"antiPatterns":[{"pattern":"Assign consumer copy says Transfer","why":"Owner accidentally sells","instead":"Assign use access — you keep ownership","severity":"critical"},{"pattern":"Consumer sees Transfer button","why":"Failed txs and confusion","instead":"Hide owner-only actions for consumer role","severity":"high"},{"pattern":"No active consumer indicator for owner","why":"Forgotten delegations","instead":"Consumer row in owner settings always visible","severity":"medium"}],"vocabulary":[{"use":"Assign someone to use","avoid":"Set consumer address","why":"Delegation language."},{"use":"You are using this","avoid":"Consumer role active","why":"Second-person clarity."},{"use":"Revoke access","avoid":"Clear consumer","why":"Permission language."}],"onMonad":[{"aspect":"Assign/revoke cost","ethereum":"Owners skip revoke due to gas","monad":"Cheap revoke encourages hygiene","designImplication":"Prominent revoke in owner settings on Monad."},{"aspect":"In-game sync","ethereum":"Role lag after assign","monad":"Fast finality updates consumer permissions quickly","designImplication":"Refresh role banner immediately post-tx on Monad."}],"technicalNotes":"ERC-4400 consumer is not owner; never show transfer to consumer role.","relatedStandards":[{"id":"ERC-4907","relationship":"Time-bound rental alternative"},{"id":"ERC-2135","relationship":"Consumer may trigger consumable use"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-4400","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-4400","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-4400","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-4400","markdown":"https://www.eipsfordesigners.com/standards/ERC-4400/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-4400/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-4400","official":"https://eips.ethereum.org/EIPS/erc-4400","discussion":"https://ethereum-magicians.org/search?q=ERC-4400"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}