{"id":"ERC-7820","name":"Access Control Registry","status":"Draft","chain":"both","category":{"id":"security","name":"Security & Trust","description":"Helping users verify, control, and protect their assets"},"journeyStages":[{"id":"approving","name":"Approving & Permissioning","description":"Granting permissions for actions"}],"uxImpact":"Centralized registry manages roles across multiple contracts — admins grant/revoke permissions from single dashboard. Design implications: build unified permission management UI, show role assignments across contracts, display audit trail of permission changes. Design decisions: how granular to make role visibility — show all roles or just relevant ones, balance admin power with principle of least privilege.","hasDetailedContent":true,"content":{"id":"ERC-7820","summary":"ERC-7820 adds role-based access control to NFTs. Instead of just \"owner\" and \"approved\", tokens can have multiple roles like admin, operator, minter, and burner. Each role has specific permissions, and users can delegate specific abilities without giving full control. Think file permissions but for NFTs.","applicability":{"whenToUse":["Your product addresses: nFT permissions are all-or-nothing.","Your product addresses: dAOs can't manage NFTs with nuanced permissions.","The flow should deliver: grant specific roles: \"can transfer\" but not \"can burn\".","You are designing a role management dashboard experience with visible states and recovery paths."],"whenToAvoid":["Show friendly names: \"🎨 Can Create New NFTs\".","List specific permissions for each role.","Show all role holders prominently.","Wrong-address or approval mistakes are not recoverable in your product context."]},"designerTakeaways":["You can design UI that delivers grant specific roles: \"can transfer\" but not \"can burn\".","You can design UI that delivers treasury manager can transfer, but only admin can burn.","You can design UI that delivers platform gets \"lend\" permission only, can't sell."],"problemsSolved":[{"problem":"NFT permissions are all-or-nothing","oldWay":"Approve = full control over the NFT, can't limit","newWay":"Grant specific roles: \"can transfer\" but not \"can burn\"","impact":"critical"},{"problem":"DAOs can't manage NFTs with nuanced permissions","oldWay":"One multisig owns everything, bottleneck","newWay":"Treasury manager can transfer, but only admin can burn","impact":"high"},{"problem":"Rental/lending permissions too broad","oldWay":"Give rental platform full approval","newWay":"Platform gets \"lend\" permission only, can't sell","impact":"high"},{"problem":"No audit trail of who can do what","oldWay":"Check approvals manually, no clear role structure","newWay":"Query roles directly: \"who has minter role?\"","impact":"medium"}],"uxPatterns":[{"name":"Role Management Dashboard","description":"View and manage roles for an NFT or collection","mockup":"concept/nft-gallery","userFlow":["View all roles for NFT/collection","See who has which permissions","Revoke roles with one click","Add new role assignments","View role capabilities"]},{"name":"Grant Role Flow","description":"Assign specific permission to an address","mockup":"concept/nft-gallery","userFlow":["Select role type to grant","See what permissions it includes","Enter recipient address","Confirm what they CAN'T do","Sign transaction to grant"]},{"name":"Role-Gated Actions","description":"Show available actions based on user's role","mockup":"concept/nft-gallery","userFlow":["User views NFT they have role for","Show their specific role","List what they CAN do","Show what they CANNOT do and why","Only enabled buttons for permitted actions"]},{"name":"Collection Role Admin","description":"Manage roles at collection level","mockup":"concept/nft-gallery","userFlow":["Admin views collection roles","See all role holders grouped by role","Add new role holders","Bulk revoke if needed","Audit complete permission structure"]}],"uiComponents":[{"name":"RoleBadge","description":"Visual indicator of a role type","states":["active","pending","revoked"],"props":["roleType","icon","color"]},{"name":"PermissionMatrix","description":"Grid showing what each role can do","states":["viewing","editing"],"props":["roles[]","permissions[]","assignments{}"]},{"name":"RoleAssignmentForm","description":"Form for granting roles to addresses","states":["selecting-role","entering-address","confirming","granting"],"props":["availableRoles[]","onGrant"]},{"name":"RoleAuditLog","description":"History of role changes","states":["loading","loaded"],"props":["events[]","filters"]}],"antiPatterns":[{"pattern":"Using technical role names","why":"\"MINTER_ROLE\" means nothing to most users","instead":"Show friendly names: \"🎨 Can Create New NFTs\"","severity":"critical"},{"pattern":"Not explaining what each role allows","why":"Users grant roles without understanding implications","instead":"List specific permissions for each role","severity":"high"},{"pattern":"Hiding roles granted to others","why":"Owners don't know who has access to their NFTs","instead":"Show all role holders prominently","severity":"high"},{"pattern":"No revocation UI","why":"Users can't easily remove permissions","instead":"One-click revoke with confirmation","severity":"medium"}],"onMonad":[{"aspect":"Role Queries","ethereum":"Checking roles costs gas","monad":"Cheap reads for real-time role checks","designImplication":"Can show live role status without caching"},{"aspect":"Granting Speed","ethereum":"Role grants take 15+ seconds","monad":"Sub-second role assignment","designImplication":"Role changes feel instant, can enable quick permission adjustments"},{"aspect":"Bulk Operations","ethereum":"Granting multiple roles very expensive","monad":"Bulk role management affordable","designImplication":"Can offer \"Grant roles to multiple addresses\" features"},{"aspect":"Audit Trail","ethereum":"Fetching role history expensive","monad":"Fast event queries for audit logs","designImplication":"Can show complete role change history"}],"keyTakeaways":["Roles = granular permissions beyond just \"approved\"","Show what each role CAN and CANNOT do clearly","Make role holders visible to NFT owners","Provide easy revocation UI","On Monad: fast/cheap enables real-time role management"],"technicalNotes":"ERC-7820 defines standard roles (admin, operator, minter, burner) and allows custom roles. The contract stores role→address mappings with methods to grant, revoke, and check roles. Roles can be per-token or collection-wide. The standard integrates with ERC-721's approval system, with roles taking precedence for finer control."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-7820","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7820","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7820","markdown":"https://www.eipsfordesigners.com/standards/ERC-7820/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7820/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7820","official":"https://eips.ethereum.org/EIPS/eip-7820","discussion":"https://ethereum-magicians.org/search?q=ERC-7820"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}