{"id":"ERC-6220","name":"Composable NFTs with Equippable Parts","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":"NFTs can equip other NFTs into defined slots using a Catalog system — true on-chain composability. Design implications: show equippable slots on NFTs (e.g., 'Weapon Slot: Empty'), design drag-drop equip interfaces, display composed NFT preview combining base + equipped assets, catalog browsing for compatible equipment. Design decisions: real-time vs on-save composition rendering, how to show slot compatibility constraints, inventory vs equipped views, handling unequip gas costs.","hasDetailedContent":true,"content":{"id":"ERC-6220","summary":"ERC-6220 enables NFTs with slots where other NFTs can be equipped. Think of an avatar with a \"weapon slot\" where you can equip different sword NFTs, each changing the visual appearance. Parts can be fixed (built into the base) or equippable (swappable NFTs). When equipped, child NFTs visually compose with the parent, creating dynamic, customizable digital assets.","applicability":{"whenToUse":["Your product addresses: nFTs are static, can't customize appearance.","Your product addresses: gaming items can't attach to characters.","The flow should deliver: equip different items to change appearance dynamically.","You are designing a equipment slot interface experience with visible states and recovery paths."],"whenToAvoid":["Show compatibility before purchase, filter by what user owns.","Always show preview of composed appearance before confirming.","Clear \"Equipped to X\" label on items, confirm before listing.","Assets are fungible tokens only with no unique-item semantics."]},"designerTakeaways":["You can design UI that delivers equip different items to change appearance dynamically.","You can design UI that delivers equip sword to character.","You can standard slots and equip interface across all platforms."],"problemsSolved":[{"problem":"NFTs are static, can't customize appearance","oldWay":"Buy different NFT for each look, no customization","newWay":"Equip different items to change appearance dynamically","impact":"critical"},{"problem":"Gaming items can't attach to characters","oldWay":"Character NFT shows default look, inventory separate","newWay":"Equip sword to character, sword appears on character image","impact":"critical"},{"problem":"Wearables have no standard equipment system","oldWay":"Each game invents custom equip mechanics","newWay":"Standard slots and equip interface across all platforms","impact":"high"},{"problem":"Can't prove what's equipped to an NFT","oldWay":"Off-chain metadata claims equipment, not verifiable","newWay":"Equipment is on-chain, queryable by anyone","impact":"medium"}],"uxPatterns":[{"name":"Equipment Slot Interface","description":"Visual slots showing equipped items","mockup":"concept/nft-gallery","userFlow":["User views character NFT","See slots for different body parts","Some slots filled, some empty","Tap empty slot to see compatible items","Tap filled slot to unequip or swap","Changes reflect in character appearance"]},{"name":"Equip Item Flow","description":"Drag-and-drop or select to equip","mockup":"generic/list-selector","userFlow":["User taps empty or filled slot","See compatible items from inventory","Browse and select item","Preview how it looks equipped","Confirm equip","On-chain state updated"]},{"name":"Composed View","description":"Show NFT with all equipment rendered","mockup":"concept/nft-gallery","userFlow":["View NFT on marketplace or gallery","See composed image with all equipment","Equipment list shows what's attached","Click items to see individual NFT details","Owner can edit equipment","Image updates when equipment changes"]},{"name":"Slot Compatibility Guide","description":"Help users understand what fits where","mockup":"concept/nft-gallery","userFlow":["User wants to know what they can equip","View slot compatibility guide","See each slot and what it accepts","See which collections are compatible","Browse to find equipment to buy","Purchase compatible items"]}],"uiComponents":[{"name":"EquipmentSlotGrid","description":"Visual grid of equipment slots","states":["viewing","editing","equipping"],"props":["slots","equipped","onSlotClick"]},{"name":"EquipModal","description":"Select and preview equipment","states":["browsing","previewing","confirming","equipping"],"props":["slot","compatibleItems","onEquip","onCancel"]},{"name":"ComposedNFTView","description":"Renders base + all equipment as one image","states":["loading","rendered","error"],"props":["baseNFT","equipment","renderMode"]},{"name":"CompatibilityChecker","description":"Shows if item fits slot","states":["compatible","incompatible","checking"],"props":["item","slot","baseNFT"]}],"antiPatterns":[{"pattern":"Not previewing equipment before equipping","why":"User equips, doesn't like look, has to unequip (costs gas)","instead":"Always show preview of composed appearance before confirming","severity":"high"},{"pattern":"Unclear slot compatibility","why":"User buys item, discovers it doesn't fit their NFT","instead":"Show compatibility before purchase, filter by what user owns","severity":"critical"},{"pattern":"No indication of equipped vs unequipped items","why":"User sells item, didn't realize it was equipped to their character","instead":"Clear \"Equipped to X\" label on items, confirm before listing","severity":"high"},{"pattern":"Hiding that equipment is on-chain","why":"Users don't realize equipping costs gas","instead":"Show \"Equipping requires transaction\" before action","severity":"medium"},{"pattern":"Not showing composed image on marketplaces","why":"Buyer sees only base NFT, misses equipped value","instead":"Always show composed view with option to see base","severity":"medium"}],"onMonad":[{"aspect":"Equip/Unequip Speed","ethereum":"Each equip action takes 15+ seconds","monad":"Sub-second equipment changes","designImplication":"Can rapidly try different combinations"},{"aspect":"Gas Costs","ethereum":"Changing equipment costs $5-20 per action","monad":"Negligible costs for all equipment changes","designImplication":"Encourage experimentation, frequent changes"},{"aspect":"Batch Equipment","ethereum":"Equipping full loadout = many slow transactions","monad":"Equip all slots in one fast transaction","designImplication":"Can have \"Apply Loadout\" for preset combinations"},{"aspect":"Real-time Preview","ethereum":"Checking equipment state is slow","monad":"Instant equipment state queries","designImplication":"Live updating character preview as you browse"}],"keyTakeaways":["ERC-6220 = NFTs with slots for equipping other NFTs","Equipped items change the visual appearance","Always preview composed look before equipping","Show compatibility clearly before item purchase","On Monad: rapid equipment experimentation is cheap"],"technicalNotes":"ERC-6220 defines slots as (slotId, partType, z-index, assetCatalog). Assets can be fixed (built-in) or equippable (swappable NFTs). equip(tokenId, slotId, childId) attaches child NFT to slot. The standard includes asset catalogs that define which collections are compatible with which slots. Rendering combines base + all equipped parts by z-index."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-6220","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-6220","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-6220","markdown":"https://www.eipsfordesigners.com/standards/ERC-6220/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-6220/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-6220","official":"https://eips.ethereum.org/EIPS/eip-6220","discussion":"https://ethereum-magicians.org/search?q=ERC-6220"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}