{"id":"ERC-7401","name":"Parent-Governed NFT Nesting","status":"Final","chain":"both","category":{"id":"nft","name":"NFT Capabilities","description":"What NFTs can do beyond basic ownership"},"journeyStages":[{"id":"management","name":"Asset Management","description":"Managing assets over time"}],"uxImpact":"Improved NFT nesting standard (supersedes ERC-6059) — NFTs own NFTs with parent-governed control. Design implications: same as ERC-6059 plus cleaner interfaces — tree visualizations, child acceptance flows, bundle management, transfer-with-children behavior. Design decisions: whether to show full ancestry path, how to indicate pending vs accepted children, UX for transferring parent (children follow automatically), visual hierarchy depth limits.","hasDetailedContent":true,"content":{"id":"ERC-7401","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7401","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"Improved NFT nesting standard (supersedes ERC-6059) — NFTs own NFTs with parent-governed control.","designerTakeaways":["You can render expandable tree views showing parent NFTs and their nested children.","Your inbox can surface pending child proposals with Accept or Decline before they nest.","You can warn Transfer includes 3 nested items on every parent send confirmation."],"applicability":{"whenToUse":["NFTs bundle other NFTs as packs or containers.","Parent-governed control over nested inventory matters.","You implement ERC-7401 superseding ERC-6059."],"whenToAvoid":["Flat ERC-721 collections with no nesting.","Users never compose or unpack bundles.","Indexer lacks nested ownership graph support."]},"prototypeFirst":[{"screen":"Nested tree inventory","why":"Collectors browse bundles as filesystem-like trees.","covers":["Expanded parent","Collapsed children","Deep nest"],"include":["Tree expand/collapse","Child count badge","Nested inside label"]},{"screen":"Pending child acceptance","why":"Proposed children need explicit accept.","covers":["Pending","Accepted","Declined"],"include":["Parent preview","Child preview","Accept/Decline CTAs"]},{"screen":"Bundle transfer confirmation","why":"Sending parent must list all children moving.","covers":["Single child","Many children"],"include":["Child list in confirm modal","Total items count","Irreversible note"]},{"screen":"Unnest or extract child","why":"Owners remove children from parent when allowed.","covers":["Allowed unnest","Blocked by parent rules"],"include":["Extract action","Parent permission check","Result state"]}],"mentalModel":[{"label":"Parent NFT","description":"Container token that governs nested children."},{"label":"Child NFT","description":"Token nested under parent — may show Nested inside status."},{"label":"Propose-commit","description":"Child transfer proposed first; recipient accepts to complete nest."},{"label":"Bundle transfer","description":"Moving parent drags all accepted children with it."},{"label":"Root owner","description":"Who ultimately controls the top-level parent in a deep tree."}],"statesToDesign":[{"state":"Pending child proposal","trigger":"Someone proposed nesting a child.","userNeed":"Review before accepting into bundle.","designResponse":"Inbox item with Accept/Decline and parent context."},{"state":"Nested — child inside parent","trigger":"Child accepted.","userNeed":"Find child within parent tree.","designResponse":"Nested inside badge; child hidden from flat grid or indented."},{"state":"Parent transfer with children","trigger":"Owner sends parent.","userNeed":"Know entire bundle moves.","designResponse":"Confirmation lists all child previews."},{"state":"Empty parent container","trigger":"Parent has no children.","userNeed":"Still use as container.","designResponse":"Empty slot UI with Add child action if supported."},{"state":"Deep hierarchy limit","trigger":"Tree exceeds display depth.","userNeed":"Navigate without overwhelm.","designResponse":"Truncate with View full tree link."}],"designDecisions":[{"question":"Flat grid vs tree default?","recommendation":"Tree for nest-heavy collections; flat with Nested filter for mixed.","rationale":"Flat grids hide nested assets entirely."},{"question":"Show full ancestry path?","recommendation":"Breadcrumb on child detail: Root › Pack › Item.","rationale":"Deep nests need orientation."},{"question":"Drag-drop nesting?","recommendation":"Optional power feature; always confirm with propose-commit.","rationale":"Accidental drags nest wrong items."}],"problemsSolved":[{"problem":"NFT bundles invisible in wallet","oldWay":"Only top-level tokens shown","newWay":"Tree view exposes nested children","impact":"high"},{"problem":"Surprise bundle transfers","oldWay":"Parent send moves unknown children","newWay":"Confirmation lists all nested items","impact":"critical"},{"problem":"Unwanted nested gifts","oldWay":"Children land without consent","newWay":"Accept/Decline propose-commit inbox","impact":"high"}],"uxPatterns":[{"name":"NFT Tree Navigator","description":"Expandable hierarchy for parent-child tokens.","mockup":"concept/nft-gallery","components":["TreeView","NestBadge","ChildCount"],"userFlow":["Open collection","Expand parent","See children","Open child detail"]},{"name":"Bundle Transfer Preview","description":"List all children in parent send confirm.","mockup":"concept/verify-safety","components":["ChildList","BundleCount","ConfirmModal"],"userFlow":["User sends parent","Modal lists children","User confirms","Bundle moves"]}],"seenInTheWild":[{"app":"Nested NFT demos","url":"https://eips.ethereum.org/EIPS/eip-7401","note":"Spec examples inform tree visualization patterns."},{"app":"OpenSea","url":"https://opensea.io/","note":"Bundle display patterns for grouped listings."},{"app":"Rarible","url":"https://rarible.com/","note":"Collection hierarchy UX reference."}],"antiPatterns":[{"pattern":"Flat wallet hiding nested children","why":"Users think children disappeared","instead":"Tree view or Nested inside filter","severity":"critical"},{"pattern":"Parent transfer without child list","why":"Accidental loss of valuable nested items","instead":"Bundle preview on every parent send","severity":"critical"},{"pattern":"Auto-accept nested proposals","why":"Spam nesting attacks inventory","instead":"Explicit Accept/Decline inbox","severity":"high"}],"vocabulary":[{"use":"Inside this bundle","avoid":"Child token nested under parentId","why":"Bundle metaphor over graph terms."},{"use":"Accept into bundle","avoid":"Commit child nest","why":"Inbox action language."},{"use":"Moves with parent","avoid":"Inherits nesting on transfer","why":"Plain transfer consequence."}],"onMonad":[{"aspect":"Nest operations","ethereum":"Multi-step nest txs costly","monad":"Lower fees enable interactive tree management","designImplication":"Allow drag-drop nest experiments on Monad."},{"aspect":"Tree indexing","ethereum":"Deep graphs slow to load","monad":"Fast RPC enables snappy tree expand","designImplication":"Prefetch children on parent hover."}],"technicalNotes":"ERC-7401 supersedes ERC-6059; always preview children on parent transfer.","relatedStandards":[{"id":"ERC-6059","relationship":"Prior nesting standard superseded by 7401"},{"id":"ERC-721","relationship":"Base NFT with nesting extension"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7401","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7401","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7401","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7401","markdown":"https://www.eipsfordesigners.com/standards/ERC-7401/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7401/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7401","official":"https://eips.ethereum.org/EIPS/erc-7401","discussion":"https://ethereum-magicians.org/search?q=ERC-7401"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}