{"id":"ERC-7231","name":"Identity-aggregated NFT","status":"Final","chain":"both","category":{"id":"identity","name":"Identity & Privacy","description":"Who you are on-chain, and what you choose to reveal"},"journeyStages":[{"id":"authentication","name":"Authentication & Identity","description":"Proving who you are and logging in"}],"uxImpact":"NFTs aggregate multiple verified identities (Twitter, Discord, wallet addresses) into single on-chain profile — portable reputation. Design implications: show connected identities with verification status, add 'Link Identity' flow, display identity proofs. Design decisions: privacy controls for which identities visible — selective disclosure UI, granular sharing permissions, balance transparency with privacy.","hasDetailedContent":true,"content":{"id":"ERC-7231","summary":"ERC-7231 creates identity-aggregated NFTs that bind multiple social accounts (Twitter, Discord, GitHub, etc.) to a single on-chain identity. Users can prove ownership of all their accounts with one NFT, enabling unified social proof without repeatedly re-verifying across dApps.","applicability":{"whenToUse":["Your users must verify social accounts repeatedly on each dApp.","Your product addresses: no portable proof of social reputation.","The flow should deliver: verify once, mint identity NFT, show proof anywhere.","You are designing a identity aggregation flow experience with visible states and recovery paths."],"whenToAvoid":["Allow minting with any verified accounts, add more later.","Provide clear update flow to modify connected accounts.","Display friendly account names with verified badges.","The product has no sign-in, attestation, or identity verification step."]},"designerTakeaways":["You can design UI that delivers verify once, mint identity NFT, show proof anywhere.","You can design UI that delivers single NFT proves all your verified social connections.","You can design UI that delivers aggregated identity shows real human with real accounts."],"problemsSolved":[{"problem":"Users must verify social accounts repeatedly on each dApp","oldWay":"Connect Twitter to App A, connect again to App B, connect again to App C...","newWay":"Verify once, mint identity NFT, show proof anywhere","impact":"critical"},{"problem":"No portable proof of social reputation","oldWay":"Each platform has isolated identity, reputation doesn't travel","newWay":"Single NFT proves all your verified social connections","impact":"high"},{"problem":"Sybil attacks with fake accounts","oldWay":"Create unlimited wallets, no way to verify uniqueness","newWay":"Aggregated identity shows real human with real accounts","impact":"high"},{"problem":"Complex identity verification flows","oldWay":"OAuth redirects, popup hell, different flows per platform","newWay":"Mint once with all verifications, use NFT as proof","impact":"medium"}],"uxPatterns":[{"name":"Identity Aggregation Flow","description":"Guide users through connecting multiple social accounts to mint unified identity NFT","mockup":"concept/nft-gallery","userFlow":["User starts identity creation","Select first social platform to connect","OAuth flow verifies ownership","Repeat for additional platforms","Preview aggregated identity","Sign and mint identity NFT","NFT shows all verified accounts"]},{"name":"Identity Verification Display","description":"Show verified social accounts from identity NFT","mockup":"concept/nft-gallery","userFlow":["dApp reads user's identity NFT","Display verified social accounts","Show verification badges","Allow identity updates if owned"]},{"name":"Quick Identity Check","description":"Verify user identity for gated access","mockup":"concept/verify-safety","userFlow":["User attempts to access gated content","System reads their identity NFT","Compare against requirements","Grant or deny access with clear feedback"]}],"uiComponents":[{"name":"AccountConnector","description":"OAuth-style button for connecting social accounts","states":["disconnected","connecting","connected","error"],"props":["platform","username","onConnect","onDisconnect"]},{"name":"IdentityCard","description":"Display aggregated identity with all verified accounts","states":["loading","verified","partial","expired"],"props":["nftId","accounts[]","lastUpdated","owner"]},{"name":"VerificationBadge","description":"Small badge showing verified status for an account","states":["verified","pending","expired","unverified"],"props":["platform","username","verifiedAt"]},{"name":"IdentityRequirements","description":"List of required verifications for access","states":["checking","met","unmet","partial"],"props":["requirements[]","userIdentity","onMeetRequirements"]}],"antiPatterns":[{"pattern":"Requiring all platforms before minting","why":"Users may not have accounts on every platform, blocks adoption","instead":"Allow minting with any verified accounts, add more later","severity":"critical"},{"pattern":"No way to update identity after minting","why":"Users change usernames, create new accounts, need to add platforms","instead":"Provide clear update flow to modify connected accounts","severity":"high"},{"pattern":"Showing raw verification data","why":"Users don't understand technical proofs","instead":"Display friendly account names with verified badges","severity":"high"},{"pattern":"Forcing public display of all accounts","why":"Privacy concerns - users may want some accounts private","instead":"Allow selective disclosure of which accounts to show","severity":"medium"}],"onMonad":[{"aspect":"Verification Speed","ethereum":"Identity mint takes 15-30 seconds to confirm","monad":"Sub-second finality means instant identity creation","designImplication":"Can show live verification status, no \"waiting\" screens"},{"aspect":"Update Frequency","ethereum":"Expensive to update identity, users hesitate","monad":"Cheap updates enable frequent identity refreshes","designImplication":"Show \"Refresh Identity\" button prominently, encourage updates"},{"aspect":"Gas for Verification","ethereum":"Each account addition costs significant gas","monad":"Negligible cost for adding accounts","designImplication":"Can prompt users to add more accounts without cost concerns"}],"keyTakeaways":["Identity aggregation = one NFT proves all your social accounts","Allow incremental building - start with one account, add more","Make verification status instantly clear with badges","Provide update mechanisms for changing accounts","On Monad: leverage cheap updates for dynamic identities"],"technicalNotes":"ERC-7231 extends ERC-721 to include identity aggregation. Each NFT stores an array of bound identities with platform identifiers and verification proofs. The standard defines methods for adding, removing, and querying bound identities. Verification typically happens off-chain via signed messages from each platform, with proofs stored on-chain."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-7231","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7231","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7231","markdown":"https://www.eipsfordesigners.com/standards/ERC-7231/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7231/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7231","official":"https://eips.ethereum.org/EIPS/eip-7231","discussion":"https://ethereum-magicians.org/search?q=ERC-7231"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}