{"id":"ERC-6672","name":"Multi-redeemable NFTs","status":"Final","chain":"both","category":{"id":"physical","name":"Physical & Real World","description":"Connecting NFTs to physical items"},"journeyStages":[{"id":"specialized","name":"Specialized Interactions","description":"Physical items, AI, social, gaming"}],"uxImpact":"Users can redeem the same NFT for multiple different perks across different campaigns — a concert ticket NFT might be redeemable for entry, merchandise, and a meet-and-greet separately. Design implications: show list of available redemptions per NFT with status (available/redeemed/shipping), display operator-specific redemption flows, design redemption history view, show which campaigns/operators have active redemptions. Design decisions: how to organize multiple redemptions visually, whether to show redemption status progression (redeemed → paid → shipping), handling operator-specific metadata display, UX for discovering new redemption opportunities.","hasDetailedContent":true,"content":{"id":"ERC-6672","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-6672","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"Users can redeem the same NFT for multiple different perks across different campaigns — a concert ticket NFT might be redeemable for entry, merchandise, and a meet-and-greet separately.","designerTakeaways":["You can list Available redemptions as cards with operator name and status per perk.","Your history view can group by campaign with Redeemed → Shipped progression.","You can notify when new redemption opportunities attach to owned tokens."],"applicability":{"whenToUse":["Event or membership NFTs unlock multiple perks over time.","Different operators run separate redemption campaigns.","ERC-6672 tracks per-redemption state."],"whenToAvoid":["Single redeem-then-burn only.","One operator one perk.","Off-chain redemption only with no on-chain status."]},"prototypeFirst":[{"screen":"Multi-redemption dashboard","why":"Holder sees all perks at once.","covers":["3 available","Mixed status","All redeemed"],"include":["Perk cards","Status pills","Operator label","Redeem CTA each"]},{"screen":"Single perk redeem flow","why":"Each operator flow may differ.","covers":["Digital perk","Physical ship"],"include":["Operator branding","Form fields","Confirm redeem"]},{"screen":"Redemption history timeline","why":"Audit past claims across campaigns.","covers":["History list"],"include":["Date","Perk name","Status progression"]},{"screen":"New perk discovery","why":"Campaigns add redemptions post-mint.","covers":["New badge on perk"],"include":["New redemption available toast","Highlight in list"]}],"mentalModel":[{"label":"One NFT","description":"Single token holds multiple redemption rights."},{"label":"Redemption slot","description":"Independent perk with own status."},{"label":"Operator","description":"Party fulfilling specific redemption."},{"label":"Status progression","description":"Available → Redeemed → Shipped per perk."},{"label":"Exhaustion","description":"Each perk redeem once unless multi-use defined."}],"statesToDesign":[{"state":"Perk available","trigger":"Not yet redeemed.","userNeed":"Claim clearly.","designResponse":"Green Available with Redeem CTA."},{"state":"Redeemed — processing","trigger":"On-chain redeem done; fulfillment pending.","userNeed":"Track fulfillment.","designResponse":"Redeemed — preparing shipment."},{"state":"Shipped / fulfilled","trigger":"Operator completed.","userNeed":"See done.","designResponse":"Fulfilled checkmark; no CTA."},{"state":"New perk added","trigger":"Campaign update.","userNeed":"Discover new value.","designResponse":"New badge and notification."},{"state":"All perks exhausted","trigger":"Every slot used.","userNeed":"See memento value.","designResponse":"All rewards claimed summary."}],"designDecisions":[{"question":"Organize by operator or perk type?","recommendation":"Group by operator with perk subtitles.","rationale":"Support routes to operator."},{"question":"Show shipping progression?","recommendation":"Yes for physical; instant for digital.","rationale":"Different expectations per perk type."},{"question":"Discovery of new redemptions?","recommendation":"Push plus in-app New on token card.","rationale":"Post-mint campaigns add value."}],"problemsSolved":[{"problem":"One redeem burns all perks","oldWay":"Single consume destroys other rights","newWay":"Independent redemption slots per perk","impact":"high"},{"problem":"Confusion which vendor fulfills what","oldWay":"Single support email","newWay":"Operator label on each redemption card","impact":"medium"},{"problem":"Lost track of claimed perks","oldWay":"No history","newWay":"Redemption timeline per NFT","impact":"medium"}],"uxPatterns":[{"name":"Multi-Redemption List","description":"Per-perk cards with status and operator.","mockup":"concept/physical-link","components":["PerkCard","StatusPill","OperatorLabel"],"userFlow":["Open NFT","See perks","Redeem one","Status updates independently"]},{"name":"Redemption History","description":"Timeline of claims across campaigns.","mockup":"concept/reactions","components":["HistoryTimeline","StatusProgress"],"userFlow":["Open history","See past redeems","Track shipping"]}],"seenInTheWild":[{"app":"VeeFriends","url":"https://veefriends.com/","note":"Multi-benefit token experiences."},{"app":"Courtyard","url":"https://courtyard.io/","note":"Physical redemption status tracking."},{"app":"Ticketmaster NFT","url":"https://www.ticketmaster.com/","note":"Event perk redemption patterns."}],"antiPatterns":[{"pattern":"Single Redeem button for all perks","why":"Claims wrong perk or all at once","instead":"Separate CTA per perk card","severity":"critical"},{"pattern":"No operator label","why":"Support chaos","instead":"Operator name on every perk row","severity":"high"},{"pattern":"Hiding fulfilled perks","why":"User cannot prove attendance","instead":"History tab with fulfilled state","severity":"medium"}],"vocabulary":[{"use":"Available reward","avoid":"Redemption slot 2","why":"Perk language."},{"use":"Claimed","avoid":"Redemption executed","why":"User past tense."},{"use":"Fulfilled by [operator]","avoid":"Operator callback complete","why":"Plain fulfillment copy."}],"onMonad":[{"aspect":"Multiple redeem txs","ethereum":"Gas discourages claiming all perks","monad":"Low fees enable claiming every perk","designImplication":"Batch redeem optional on Monad."},{"aspect":"Status updates","ethereum":"Shipping status lag","monad":"Fast on-chain redeem confirmation","designImplication":"Instant Redeemed state after claim on Monad."}],"technicalNotes":"ERC-6672 tracks independent redemption states; never use one button for all perks.","relatedStandards":[{"id":"ERC-7578","relationship":"Physical asset backing complement"},{"id":"ERC-2135","relationship":"Single consumable redeem pattern"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-6672","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-6672","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-6672","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-6672","markdown":"https://www.eipsfordesigners.com/standards/ERC-6672/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-6672/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-6672","official":"https://eips.ethereum.org/EIPS/erc-6672","discussion":"https://ethereum-magicians.org/search?q=ERC-6672"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}