{"id":"ERC-5216","name":"ERC-1155 Allowance Extension","status":"Last Call","chain":"both","category":{"id":"transaction-friction","name":"Transaction Friction","description":"Reducing clicks, signatures, and mental overhead"},"journeyStages":[{"id":"approving","name":"Approving & Permissioning","description":"Granting permissions for actions"}],"uxImpact":"ERC-5216 adds per-token-ID ERC-1155 allowances. Approved amounts are consumed by the extension's safeTransferFrom and safeBatchTransferFrom paths; feature-detect the extension and show each operator's remaining scope.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-5216","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","hasDetailedContent":true,"content":{"id":"ERC-5216","summary":"ERC-5216 brings granular allowances to ERC-1155 multi-tokens. Instead of \"approve all or nothing,\" users can approve specific amounts per token ID. Want to let a game use 5 of your health potions but not your legendary sword? Now you can. This prevents the dangerous \"setApprovalForAll\" pattern and gives users fine-grained control over their multi-token collections.","applicability":{"whenToUse":["Your product addresses: eRC-1155 only offers all-or-nothing approval.","Your product addresses: no way to limit how many tokens can be spent.","The flow should deliver: approve exactly 10 health potions, nothing else.","You are designing a granular approval selector experience with visible states and recovery paths."],"whenToAvoid":["The collection does not implement the ERC-5216 allowance extension.","The operation needs ERC-20 transferFrom semantics; ERC-1155 uses safeTransferFrom or safeBatchTransferFrom.","The product cannot show per-token remaining allowance or a fallback to setApprovalForAll."]},"designerTakeaways":["You can design UI that delivers approve exactly 10 health potions, nothing else, using the extension's per-token allowance.","You can design UI that delivers set allowance to specific amount (e.g., max 50 tokens).","You can design UI that delivers approve only the tokens you intend to trade.","Default to exact amount needed, let user increase if wanted.","Always use granular allowances if ERC-5216 is supported.","Show \"8/10 potions remaining\" after 2 are used."],"problemsSolved":[{"problem":"ERC-1155 only offers all-or-nothing approval","oldWay":"setApprovalForAll gives access to EVERY token in the collection","newWay":"Approve an exact quantity for a token ID, then consume it through safeTransferFrom or safeBatchTransferFrom","impact":"critical"},{"problem":"No way to limit how many tokens can be spent","oldWay":"Operator can transfer unlimited quantity once approved","newWay":"Set allowance to specific amount (e.g., max 50 tokens)","impact":"critical"},{"problem":"Users must trust platforms with entire collection","oldWay":"Marketplace approval = access to all game items","newWay":"Approve only the tokens you intend to trade","impact":"high"},{"problem":"Revoking requires removing all access","oldWay":"Can only toggle full collection access on/off","newWay":"Reduce allowance for specific token IDs independently","impact":"medium"},{"problem":"No transparency on what's actually approved","oldWay":"\"This site has access to your collection\" - but which tokens?","newWay":"Clear list: \"5 potions, 2 scrolls approved\"","impact":"medium"}],"uxPatterns":[{"name":"Granular Approval Selector","description":"Let users choose exactly how many of each token to approve","mockup":"concept/permit-approval","userFlow":["dApp requests token approval","UI shows all tokens user owns","User sets specific amounts per token","Summary shows total approved","Single transaction sets all allowances"]},{"name":"Approval Dashboard","description":"View and manage all active allowances","mockup":"concept/permit-approval","userFlow":["User opens approval dashboard","Sees all operators with allowances","Expands to see per-token breakdown","Can edit amounts or revoke per operator","Changes reflected immediately"]},{"name":"Trade Flow with Exact Approval","description":"Approve only what's needed for this trade","mockup":"concept/permit-approval","userFlow":["User selects items to sell","UI calculates exact approvals needed","Shows clear list of what will be approved","Single click approves exact amounts","Listing created with precise allowances"]},{"name":"Allowance Increase Request","description":"Handle when more allowance is needed mid-action","mockup":"concept/permit-approval","userFlow":["User attempts action requiring more allowance","UI shows current vs required","Offers sensible preset amounts","User picks or enters custom amount","Allowance increased, action proceeds"]}],"uiComponents":[{"name":"TokenAllowanceInput","description":"Input for setting allowance per token ID","states":["empty","valid","exceeds-balance","max"],"props":["tokenId","balance","currentAllowance","onChange"]},{"name":"AllowanceProgressBar","description":"Shows used vs remaining allowance","states":["full","partial","depleted"],"props":["used","total","tokenSymbol"]},{"name":"BatchAllowanceEditor","description":"Edit multiple token allowances at once","states":["viewing","editing","saving","saved"],"props":["operator","allowances[]","onSave","onCancel"]},{"name":"ApprovalComparisonCard","description":"Compare old (all-or-nothing) vs new (granular) approach","states":["showing-old","showing-new","comparing"],"props":["collection","requestedTokens"]}],"antiPatterns":[{"pattern":"Defaulting to max allowance for convenience","why":"Defeats the security purpose of granular allowances","instead":"Default to exact amount needed, let user increase if wanted","severity":"critical"},{"pattern":"Falling back to setApprovalForAll when available","why":"Users expect granular control when they see the UI","instead":"Always use granular allowances if ERC-5216 is supported","severity":"critical"},{"pattern":"Not showing remaining allowance after partial use","why":"Users don't know how much the operator can still spend","instead":"Show \"8/10 potions remaining\" after 2 are used","severity":"high"},{"pattern":"Bundling all tokens into one approval prompt","why":"Users can't see or control individual token allowances","instead":"Itemized list with per-token amount controls","severity":"high"},{"pattern":"No indication when contract doesn't support 5216","why":"User may think they have granular control when they don't","instead":"Clear warning: \"This collection only supports all-or-nothing approval\"","severity":"medium"}],"keyTakeaways":["ERC-5216 = ERC-20 style allowances for ERC-1155","Default to exact amounts needed, not max","Show remaining allowance after partial use","Clearly indicate when collection doesn't support granular approvals"],"technicalNotes":"ERC-5216 adds allowance(owner, operator, tokenId) and approve(operator, tokenId, amount) to ERC-1155. The approved amount is consumed by safeTransferFrom and safeBatchTransferFrom according to the extension; it does not add ERC-20 transferFrom. Operators must be approved for each token ID they transfer.","lastUpdated":"2026-09-18","sources":[{"label":"ERC-5216 official specification","url":"https://ercs.ethereum.org/ERCS/erc-5216","type":"official-spec"}],"lastReviewed":"2026-09-18"},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-5216","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-5216","type":"discussion"},{"label":"ERC-5216 official specification","url":"https://ercs.ethereum.org/ERCS/erc-5216","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5216","markdown":"https://www.eipsfordesigners.com/standards/ERC-5216/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5216/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5216","official":"https://ercs.ethereum.org/ERCS/erc-5216","discussion":"https://ethereum-magicians.org/search?q=ERC-5216"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}