Skip to main content

What Is ERC-1155? The Multi-Token Standard Explained

ERC-1155 is Ethereum's multi-token standard: one contract manages fungible, non-fungible, and semi-fungible tokens. How it works, gas savings, use cases.

Written by Eco

ERC-1155 is Ethereum's multi-token standard, introduced in 2018 by Witek Radomski and the Enjin team. A single ERC-1155 contract manages any combination of fungible tokens, non-fungible tokens (NFTs), and semi-fungible tokens under one address, assigning each type its own numeric ID. Before ERC-1155, developers deploying a game with 50 item types needed 50 separate contracts.

The standard was formalized as EIP-1155 and reached final status on the Ethereum network in June 2019. Its defining capability is safeBatchTransferFrom, a single transaction that moves multiple token types simultaneously. That batch mechanism cuts gas costs substantially compared to dispatching one ERC-20 or ERC-721 transfer per token type. Understanding ERC-1155 builds on knowledge of the earlier Ethereum Request for Comment (ERC) process and the ERC-20 fungible token standard that preceded it.

What Is ERC-1155?

ERC-1155 is a token standard on Ethereum that allows a single smart contract to issue and manage multiple distinct token types simultaneously. Each type is identified by a unique integer ID, and balances are tracked per holder per ID. The standard supports fungible tokens, non-fungible tokens, and semi-fungible tokens within the same deployment, reducing contract overhead and enabling batch operations.

Before ERC-1155, building a blockchain game required a separate ERC-20 contract for each in-game currency and a separate ERC-721 contract for each class of unique item. A game with 10 currencies and 40 item categories required 50 deployed contracts. Each contract consumed ETH for deployment and added complexity for any wallet or marketplace tracking ownership across the game's economy.

The Enjin engineering team published the original EIP-1155 proposal in June 2018 after building Enjin Platform, a toolkit for blockchain game developers. Their production experience exposed the cost and coordination overhead of single-purpose token contracts at scale. The resulting standard formalizes a contract interface that groups all token types under one address while preserving the ability to treat each ID as fungible or unique depending on its total supply.

ERC-1155 is defined in EIP-1155 on the Ethereum Improvement Proposal registry. The standard reached "Final" EIP status in June 2019, meaning it cleared the Ethereum community's formal review and is considered stable for production use. OpenZeppelin's reference implementation, available at OpenZeppelin Contracts, is the most widely audited starting point for developers today.

How Does ERC-1155 Work Technically?

ERC-1155 tracks token ownership through a nested mapping: mapping(uint256 id => mapping(address account => uint256)). Every token type gets an integer ID; every holder gets a balance entry for that ID. The contract exposes a small set of required functions including balanceOf, balanceOfBatch, safeTransferFrom, safeBatchTransferFrom, and a uri function for metadata retrieval.

The EIP-1155 specification mandates that any transfer call the recipient's onERC1155Received callback when the recipient is a contract. This safety check prevents tokens from being locked in contracts that have no mechanism to handle them, solving a bug class that affected early ERC-20 deployments.

safeBatchTransferFrom

The core performance advantage lives in safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data). A single call moves an arbitrary list of token IDs from one address to another. The EVM processes one transaction, pays one base fee, and emits one TransferBatch event rather than N separate Transfer events. For a game distributing a reward chest with 10 item types, that means one transaction instead of ten.

The URI function and metadata

ERC-1155 requires a uri(uint256 id) function that returns a URI string pointing to a JSON metadata file. The standard allows a single URI template with {id} as a placeholder, so https://example.com/metadata/{id}.json can serve metadata for every token ID without onchain storage of each name or image URL. This is more flexible than ERC-721's per-token URI pattern, but it shifts metadata management responsibility to the URI endpoint. If that endpoint goes offline, all token metadata becomes unreachable.

Approval model

ERC-1155 uses a simplified approval model: setApprovalForAll(address operator, bool approved) grants or revokes permission for an operator to manage all token IDs in the contract on a holder's behalf. There is no per-ID approval mechanism equivalent to ERC-721's approve. Developers building marketplaces or DeFi integrations must account for this broader approval scope when designing their user-facing permissions flow. For context on how permission models work more broadly in Ethereum, the ERC process behind ERC-7715 introduced session-scoped permissions that take a different approach.

What Are Semi-Fungible Tokens in ERC-1155?

A semi-fungible token starts its lifecycle as a fungible unit, interchangeable with others sharing the same ID, and transitions to a non-fungible state after being used or redeemed. Event tickets are the canonical example: before the concert, every general admission ticket is identical in value; after, each stub becomes a unique record of attendance. ERC-1155 handles this transition in a single contract.

The transition mechanism is straightforward in implementation. A ticket issuer mints 1,000 tokens with ID 42, each with the same metadata URI and equal transfer value. When a holder redeems the ticket, the issuer burns the fungible token and mints a new token with a unique ID, or updates the URI mapping so the ID now resolves to individualized metadata. The same contract handles both phases.

Semi-fungible tokens appear frequently in gaming economies. A bundle of 100 identical health potions is fungible until a player modifies one potion by combining it with a rare ingredient. At that point the modified item becomes unique. DeFi protocols use the same pattern for range-based liquidity positions, where two positions in the same fee tier and pool are fungible if and only if their price ranges match exactly. Once ranges diverge, the positions are non-fungible even though they share a contract.

The concept overlaps with newer standards. ERC-7715 explores permission grants that also follow a use-then-specialize lifecycle, where a general permission narrows into a specific scoped grant after invocation. The semi-fungible model in ERC-1155 demonstrated that this lifecycle transition was achievable without dedicated specialized infrastructure.

What Is the Difference Between ERC-1155 and ERC-721?

ERC-721 issues one contract per collection and tracks individual token ownership with per-token approvals. ERC-1155 issues one contract for many types, tracks balances per holder per ID, and uses operator-level approvals with native batch transfers. ERC-721 suits unique collectibles; ERC-1155 suits mixed-type systems or high-volume identical-item deployments.

The table below compares ERC-20, ERC-721, and ERC-1155 across five dimensions relevant to developers choosing between the standards.

Dimension

ERC-20

ERC-721

ERC-1155

Token type

Fungible only

Non-fungible only

Fungible, non-fungible, semi-fungible

Batch transfer

Not natively supported

Not natively supported

Native via safeBatchTransferFrom

Gas cost per token type

1 contract deployment per currency

1 contract deployment per collection

1 contract deployment for all types

Primary use case

Currencies, governance tokens, stablecoins

Unique collectibles, profile picture NFTs, real-world asset certificates

Game items, reward systems, multi-asset bundles

Transferability granularity

Any quantity from any holder

Per-token ownership transfer

Any quantity of any ID in one call

ERC-721's per-token approval model gives collectors control over individual assets. A holder can approve one token for sale on OpenSea without exposing the rest of the collection. ERC-1155's setApprovalForAll grants operator control over the full contract, which is more efficient but requires users to trust the operator with every token ID in the contract. Some marketplaces address this by deploying per-collection ERC-1155 contracts, recovering much of ERC-721's isolation at a slight deployment cost.

From a gas perspective, minting 100 distinct ERC-721 tokens requires 100 transactions. Minting 100 ERC-1155 tokens with the same ID requires one mintBatch call. Ethereum transaction data from Q1 2024 onward shows NFT platforms using ERC-1155 batch mints as a standard cost-reduction technique for large drops, according to Ethereum.org's ERC-1155 documentation.

Gas Savings with ERC-1155 Batch Transfers

ERC-1155's batch transfer reduces gas costs by amortizing fixed transaction overhead across multiple token movements. A single Ethereum transaction pays one base fee regardless of how many token IDs are included in the payload. Sending 10 different token types in one safeBatchTransferFrom call costs roughly 20-40% of what 10 sequential ERC-721 transfers would cost.

Benchmarks from the OpenZeppelin team confirm the magnitude of savings across common batch sizes. The savings compound for applications that distribute multiple token types simultaneously. A blockchain game server distributing daily rewards containing 3 currencies and 2 item types would issue one transaction per player under ERC-1155 versus 5 transactions per player under a multi-contract ERC-20 / ERC-721 setup. For a game with 10,000 active daily players, that difference is 40,000 fewer transactions per day, directly reducing both infrastructure costs and network congestion.

Minting efficiency follows the same pattern. NFT projects using ERC-1155 batch mints can issue an entire drop in a small number of transactions. A 10,000-item drop batched at 100 tokens per transaction requires 100 onchain calls versus 10,000 for one-at-a-time ERC-721 mints. The tradeoff is that standard ERC-1155 does not track individual token provenance within a batch; all tokens sharing an ID are identical. Projects that need per-unit histories (serial numbers, mint order) still prefer ERC-721.

For DeFi protocols and stablecoin payment systems, gas efficiency at scale matters considerably. Automated systems moving value across multiple token types benefit from batch primitives similar in spirit to those ERC-1155 offers at the contract layer. The stablecoin automation platforms that process high-volume onchain settlements often depend on contract-level batching to keep per-transfer costs predictable.

Real-World ERC-1155 Use Cases

ERC-1155 sees production use across three main domains: blockchain gaming, DeFi protocol design, and creator royalty systems. Each domain exploits a different aspect of the standard, from batch minting efficiency in gaming to the semi-fungible lifecycle in DeFi to the royalties hook in creator platforms.

Blockchain gaming

The Enjin Platform, the environment where ERC-1155 originated, ships games with mixed economies: gold coins (fungible), magic swords (non-fungible), and consumable potions (semi-fungible). The Enjin SDK issued over 2.1 billion ERC-1155 tokens by mid-2023, according to the Enjin Platform 2.0 launch post. Gods Unchained, a blockchain card game, uses ERC-1155 for its full card library, where common cards of the same type share one ID and unique foil editions receive individual IDs.

DeFi protocols

Uniswap V3 did not adopt ERC-1155 for its liquidity positions, but subsequent protocols have. ERC-1155 fits DeFi systems that need to represent multiple position types, vault shares with different risk profiles, or tranched debt instruments in a single contract. Protocols tracking multiple reward token streams in one position NFT also use ERC-1155 to avoid deploying a separate contract per reward type. The intent-based DEX and bridge protocols that route liquidity onchain increasingly encode fill conditions and settlement tokens under unified contract interfaces, a pattern ERC-1155's multi-type model makes practical.

Creator royalties

ERC-1155 supports the EIP-2981 royalty standard, which allows contract-level royalty configurations that marketplaces query at transfer time. A creator issuing a music album as an ERC-1155 collection can set a royalty rate on each track ID independently. Limited edition tracks can carry higher rates than standard ones, all within a single contract. OpenSea, Rarible, and other major marketplaces read EIP-2981 royalty data from ERC-1155 contracts. The OpenZeppelin ERC1155 Royalties extension wires EIP-2981 into the base contract in roughly 20 lines of Solidity.

Tokenized real-world assets

Fractional real-world asset (RWA) platforms use ERC-1155 to represent multiple property classes under one contract. A platform tokenizing commercial real estate might issue ID 1 for senior debt positions (fungible, with many holders each owning fractional shares), ID 2 for mezzanine positions (semi-fungible, redeemable at maturity), and ID 3 for equity positions (non-fungible, each representing a distinct ownership certificate). The contract consolidates what would otherwise require three separate deployments with three separate audits. For readers interested in how onchain asset movement is framed around trustless settlement, RWA tokenization under ERC-1155 demonstrates how trust assumptions shift when ownership records move onchain.

Limitations and Tradeoffs of ERC-1155

ERC-1155 introduces meaningful implementation complexity and metadata risks that developers should weigh against its gas advantages. The operator-level approval model, URI centralization risk, and weaker tooling compared to ERC-721 are the three most cited limitations. None are insurmountable, but each requires deliberate design decisions before deployment.

The setApprovalForAll approval scope is the most operationally significant limitation. When a holder approves an operator, that operator can move every token ID in the contract on the holder's behalf. A compromised marketplace contract or a malicious operator approval can drain every token type a holder owns in one transaction, whereas ERC-721's per-token approval limits blast radius. Security-focused projects sometimes deploy separate ERC-1155 contracts per token category to restore isolation, partially defeating the contract-consolidation advantage.

Metadata centralization is a structural vulnerability. The uri function returns a URL, and URLs can go offline. If a game studio shuts down its metadata server, every token in the contract loses its name, image, and attributes. ERC-721 projects face the same risk, but the ERC-1155 URI template pattern makes it easy to point an entire collection at one server inadvertently. Projects using IPFS content-addressed URIs or Arweave permanent storage mitigate this, but onchain metadata storage remains expensive. The Ethereum.org documentation on ERC-1155 covers both the template pattern and its persistence tradeoffs.

Tooling and indexer support is narrower than for ERC-20 and ERC-721. Most portfolio trackers, tax software, and onchain analytics tools have full ERC-20 and ERC-721 support. ERC-1155 support varies: balance queries require the token ID as a parameter alongside the holder address, which some older tools do not handle. The TransferBatch event, while efficient onchain, requires indexers to unpack arrays on every event rather than processing scalar values, adding parsing complexity. Major indexing platforms including The Graph support ERC-1155 as of their V2 subgraph specification, but custom subgraphs require explicit handling.

ERC-1155 also does not natively enumerate token IDs the way ERC-721 Enumerable extension does. A contract holding 500 token IDs cannot return a list of all IDs without storing that list explicitly or relying on an offchain indexer. Developers building explorers or inventory UIs must either maintain a minting registry onchain or query an external indexing service like The Graph or Alchemy's Token API.

Despite these tradeoffs, ERC-1155 remains the standard of choice for any application requiring mixed token types in production. Understanding how Ethereum standards evolve around specific use cases connects to broader patterns in how the ERC process formalizes developer conventions into shared interfaces that wallets, marketplaces, and protocols can rely on.

FAQ

What is ERC-1155 used for?

ERC-1155 is used for applications that need multiple token types in one contract: blockchain games with currencies and items, DeFi protocols with varied position types, NFT drops with both fungible editions and unique pieces, and real-world asset platforms tokenizing multiple asset classes. Its batch transfer feature reduces gas costs for high-frequency multi-token operations.

What is the difference between ERC-1155 and ERC-721?

ERC-721 manages one token collection per contract with per-token approvals, making it well-suited for unique collectibles. ERC-1155 manages multiple token types in one contract with operator-level approvals and native batch transfers. ERC-721 is simpler to audit and offers finer approval granularity; ERC-1155 is more gas-efficient for mixed or high-volume token systems. See the ERC-20 explainer for comparison with fungible-only standards.

What is a semi-fungible token in ERC-1155?

A semi-fungible token is interchangeable with others of the same ID before use or redemption, then becomes unique afterward. Event tickets are the standard example: before the concert all section-200 tickets are identical in value; after redemption each becomes a unique record. ERC-1155 enables this lifecycle by allowing the same contract to reassign metadata or burn and re-mint as conditions change.

Is ERC-1155 cheaper than ERC-721?

ERC-1155 is cheaper for batch operations and multi-type deployments. Minting 100 identical tokens costs one transaction instead of 100. Sending 10 token types simultaneously costs one transaction instead of 10. Per-transfer overhead for a single unique token is comparable between the two standards. The savings are most significant for systems handling large volumes of mixed token types simultaneously.

Does ERC-1155 support royalties?

ERC-1155 contracts can implement EIP-2981, the NFT royalty standard, which marketplaces query at transfer time to calculate and distribute creator royalties. OpenZeppelin's ERC-1155 royalty extension integrates EIP-2981 directly. Per-ID royalty rates are supported, meaning different token types within the same contract can carry different royalty percentages as configured at deployment or mint time.

Related reading

Sources and methodology. Token standard specifications verified against EIP-1155 on eips.ethereum.org. Implementation patterns cross-referenced with OpenZeppelin Contracts v5 documentation. Enjin issuance figure sourced from the Enjin Platform 2.0 launch post (2023). Gas benchmarks sourced from OpenZeppelin published comparisons. Figures are illustrative of order-of-magnitude savings; exact gas costs vary by network conditions.

Did this answer your question?