{"id":"ERC-1155","name":"Multi Token Standard","status":"Final","chain":"both","category":{"id":"nft","name":"NFT Capabilities","description":"What NFTs can do beyond basic ownership"},"journeyStages":[{"id":"asset-display","name":"Asset Discovery & Display","description":"Seeing tokens, NFTs, and balances"}],"uxImpact":"Single contract holds multiple token types (fungible and non-fungible) with batch operations. Design implications: design inventory views supporting both unique items and stackable quantities, show quantity selectors for semi-fungible tokens, enable multi-select batch transfers to save gas, display mixed collections (1/1s alongside editions) coherently. Design decisions: how to visually differentiate unique vs edition tokens, whether batch operations should be default or advanced feature, balancing simplified UI against power-user batch capabilities.","hasDetailedContent":true,"content":{"id":"ERC-1155","summary":"ERC-1155 is the \"multi-token\" standard. One contract can hold many different token types — both fungible (like gold coins, 1000 of them) and non-fungible (unique sword #47). Users can transfer multiple items in a single transaction. Perfect for games, where you have 50 health potions, 3 rare swords, and 1 legendary armor.","applicability":{"whenToUse":["One contract holds many item types with different balances per id.","Games or marketplaces need batch send, burn, or trade in one step.","You mix fungible stacks and unique items without separate ERC-20/721 contracts."],"whenToAvoid":["Every asset is a single unique NFT (ERC-721 is simpler).","Users only swap fungible tokens with no per-id inventory.","Wallets cannot render quantity balances per id clearly."]},"designerTakeaways":["You can show stacked quantities (x50 potions) plus unique items in one inventory.","You can batch-transfer multiple ids in one confirmation to cut gas and taps.","You can separate fungible stacks from one-of-one items in the same contract UI."],"problemsSolved":[{"problem":"Separate contracts for each item type","oldWay":"Deploy contract for swords, another for shields, another for potions...","newWay":"One contract holds all items with different IDs","impact":"critical"},{"problem":"Transferring multiple NFTs is expensive","oldWay":"Send 10 items = 10 transactions = 10x gas","newWay":"Batch transfer: send 10 items in one transaction","impact":"high"},{"problem":"Can't have \"semi-fungible\" items","oldWay":"Item is either unique (ERC-721) or identical (ERC-20)","newWay":"ID 1 = common sword (1000 exist), ID 2 = legendary (1 exists)","impact":"high"}],"uxPatterns":[{"name":"Game Inventory","description":"Display mixed item types in one view","mockup":"concept/nft-gallery","userFlow":["User opens inventory","App fetches all token IDs + balances","Groups by category/type","Shows quantity for each ID","Marks unique items specially"]},{"name":"Batch Transfer","description":"Send multiple items in one transaction","mockup":"concept/nft-gallery","userFlow":["User selects multiple items","Adjusts quantities for each","App shows batch preview","Displays gas savings","Single transaction sends all"]},{"name":"Collection Overview","description":"Show collection with supply info","mockup":"concept/nft-gallery","userFlow":["User views collection page","App lists all token IDs","Shows total supply per ID","Shows user balance per ID","Highlights rare/unique items"]}],"uiComponents":[{"name":"ItemCard","description":"Single item with quantity badge","states":["owned","not-owned","selected","transferring"],"props":["tokenId","metadata","balance","onSelect"]},{"name":"QuantitySelector","description":"Adjust quantity for transfer/use","states":["idle","editing","max-reached"],"props":["value","max","onChange"]},{"name":"BatchTransferForm","description":"Select multiple items + quantities","states":["selecting","ready","sending","complete"],"props":["items[]","recipient","onTransfer"]},{"name":"SupplyBadge","description":"Shows total supply and rarity","states":["unlimited","limited","unique"],"props":["supply","maxSupply"]}],"antiPatterns":[{"pattern":"Not showing quantities clearly","why":"User doesn't know they have 50 of something","instead":"Always show \"x50\" or quantity badge","severity":"high"},{"pattern":"Treating all 1155 tokens as unique","why":"Fungible items (potions) don't need individual cards","instead":"Stack same IDs, show quantity","severity":"medium"},{"pattern":"Only offering single-item transfers","why":"Wastes gas, poor UX for games","instead":"Always offer batch transfer option","severity":"high"},{"pattern":"Not indicating rarity/uniqueness","why":"User doesn't know Dragon Blade is 1-of-1","instead":"Show supply: \"1 of 1\" vs \"42 of 10,000\"","severity":"medium"}],"onMonad":[{"aspect":"Batch Gas Costs","ethereum":"Batch saves ~70% vs individual transfers","monad":"Same savings ratio, lower absolute costs","designImplication":"Still emphasize batching for UX convenience"},{"aspect":"Transfer Speed","ethereum":"Batch takes 12+ seconds to confirm","monad":"Sub-second confirmation","designImplication":"Inventory updates feel instant"}],"keyTakeaways":["ERC-1155 = multiple token types in one contract","Always show quantities (x50, x100)","Offer batch transfers by default","Indicate rarity: \"1 of 1\" vs \"1 of 10,000\"","Stack fungible items, don't show individual cards"],"technicalNotes":"ERC-1155 defines balanceOf(account, id), balanceOfBatch, safeTransferFrom, safeBatchTransferFrom, and approval via setApprovalForAll. URI can be dynamic with {id} placeholder. Events: TransferSingle, TransferBatch, ApprovalForAll, URI. Receiver contracts must implement onERC1155Received and onERC1155BatchReceived."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-1155","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-1155","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-1155","markdown":"https://www.eipsfordesigners.com/standards/ERC-1155/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-1155/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-1155","official":"https://eips.ethereum.org/EIPS/eip-1155","discussion":"https://ethereum-magicians.org/search?q=ERC-1155"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}