# Agent instructions

You are advising on UX and product design for **ERC-1155: Multi Token Standard**.
This document is the authoritative designer guide from EIPs for Designers.

- Treat **MUST NOT** items as hard constraints unless the user explicitly overrides.
- Use the **Vocabulary** section for UI copy; do not use avoided terms.
- Cite the canonical source URL when giving recommendations.
- Use the official specification only for protocol implementation detail, not as primary UX guidance.

---

# ERC-1155: Multi Token Standard

Source: https://www.eipsfordesigners.com/standards/ERC-1155
Agent brief: https://www.eipsfordesigners.com/standards/ERC-1155/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/ERC-1155
Last reviewed: 2026-04-05
Last updated: 2026-04-05

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | NFT Capabilities |
| Journey stages | Asset Discovery & Display |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-1155 |
| Discussion search | https://ethereum-magicians.org/search?q=ERC-1155 |

## UX Impact

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.

## 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.

## For Designers

- 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.

## Applicability

### When to Use

- 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.

### When to Avoid

- 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.

## Problems It Solves

### Separate contracts for each item type

Impact: critical

Old way: Deploy contract for swords, another for shields, another for potions...

New way: One contract holds all items with different IDs

### Transferring multiple NFTs is expensive

Impact: high

Old way: Send 10 items = 10 transactions = 10x gas

New way: Batch transfer: send 10 items in one transaction

### Can't have "semi-fungible" items

Impact: high

Old way: Item is either unique (ERC-721) or identical (ERC-20)

New way: ID 1 = common sword (1000 exist), ID 2 = legendary (1 exists)

## MUST NOT (Anti-Patterns)

- **Not showing quantities clearly** (high)
  - Why: User doesn't know they have 50 of something
  - Instead: Always show "x50" or quantity badge

- **Only offering single-item transfers** (high)
  - Why: Wastes gas, poor UX for games
  - Instead: Always offer batch transfer option

- **Treating all 1155 tokens as unique** (medium)
  - Why: Fungible items (potions) don't need individual cards
  - Instead: Stack same IDs, show quantity

- **Not indicating rarity/uniqueness** (medium)
  - Why: User doesn't know Dragon Blade is 1-of-1
  - Instead: Show supply: "1 of 1" vs "42 of 10,000"

## UX Patterns

### Game Inventory

Display mixed item types in one view

User flow:

- User opens inventory
- App fetches all token IDs + balances
- Groups by category/type
- Shows quantity for each ID
- Marks unique items specially

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Batch Transfer

Send multiple items in one transaction

User flow:

- User selects multiple items
- Adjusts quantities for each
- App shows batch preview
- Displays gas savings
- Single transaction sends all

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Collection Overview

Show collection with supply info

User flow:

- User views collection page
- App lists all token IDs
- Shows total supply per ID
- Shows user balance per ID
- Highlights rare/unique items

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

## UI Components

### ItemCard

Single item with quantity badge
States: owned, not-owned, selected, transferring
Props: tokenId, metadata, balance, onSelect

### QuantitySelector

Adjust quantity for transfer/use
States: idle, editing, max-reached
Props: value, max, onChange

### BatchTransferForm

Select multiple items + quantities
States: selecting, ready, sending, complete
Props: items[], recipient, onTransfer

### SupplyBadge

Shows total supply and rarity
States: unlimited, limited, unique
Props: supply, maxSupply

## On Monad

### Batch Gas Costs

Ethereum: Batch saves ~70% vs individual transfers

Monad: Same savings ratio, lower absolute costs

Design implication: Still emphasize batching for UX convenience

### Transfer Speed

Ethereum: Batch takes 12+ seconds to confirm

Monad: Sub-second confirmation

Design implication: Inventory updates feel instant

## Key Takeaways

- 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

## Technical Notes

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.

## Official specification (reference only)

https://eips.ethereum.org/EIPS/eip-1155
