ERC-1155 is an Ethereum multi-token standard (formalised as EIP-1155) that enables a single smart contract to manage an arbitrary number of token types — fungible, non-fungible, and semi-fungible — each identified by a uint256 token ID with per-address per-ID balance tracking. Pioneered by Witek Radomski of Enjin in 2018, it introduced safeBatchTransferFrom for atomic multi-token transfers in a single transaction, significantly reducing gas costs relative to deploying separate ERC-20 or ERC-721 contracts for each asset type. The standard’s onERC1155Received and onERC1155BatchReceived hooks enforce safe-transfer guarantees on receiver contracts, preventing tokens from being permanently locked. It is widely adopted across blockchain gaming, NFT marketplaces, and on-chain economies requiring a mixture of consumable items and unique collectibles.

Overview

  • ERC-1155 emerged from the Blockchain Gaming sector in 2018 and was formally finalised as a standard in 2019. Before its introduction, games deploying hundreds of item types on Ethereum had to maintain hundreds of independent contracts, each requiring separate deployment costs and separate approval transactions per user. A single ERC-1155 contract replaces this entire fleet.
  • The standard operates on a two-dimensional balance ledger: each (owner, tokenId) pair maps to a quantity. Token IDs in the uint256 space are partitioned by convention — some implementations use the upper 128 bits for a “type ID” and the lower 128 bits for an “instance ID”, creating a natural hierarchy of fungible-to-non-fungible transitions known as Semi-Fungible Token patterns.
  • Because the Ethereum Virtual Machine executes one transaction atomically, safeBatchTransferFrom provides a trustless atomic swap primitive without a separate escrow contract: both sides of a multi-item trade settle or both revert. This is foundational to complex in-game economies and decentralised loot-box mechanics.

Key Mechanisms

  • Batch Transfers — safeBatchTransferFrom(from, to, ids[], amounts[], data) transfers multiple token IDs atomically, calling onERC1155BatchReceived on the recipient if it is a contract. Single-transfer variant safeTransferFrom calls onERC1155Received.
  • Balance Query — balanceOf(account, id) returns the quantity of a specific token ID held by an address. balanceOfBatch(accounts[], ids[]) returns multiple balances in one read, reducing RPC round-trips.
  • Operator Approvals — setApprovalForAll(operator, approved) grants an operator permission over all token IDs in the contract, a single approval covering the entire collection rather than per-token approvals as in ERC-721.
  • URI Templating — uri(id) returns a string where the literal substring {id} is replaced client-side with the hex-padded token ID, enabling a single URI template to serve metadata for millions of tokens. Metadata is typically hosted on IPFS or centralised CDNs in a JSON schema compatible with OpenSea and other Digital Asset Marketplace platforms.
  • Safe Receiver Interface — IERC1155Receiver must be implemented by contracts that accept token transfers. This mirrors the safety pattern of ERC721TokenReceiver and prevents accidental burning of tokens.
  • Introspection — Implements ERC-165 supportsInterface, allowing callers to verify support for the ERC-1155 interface (0xd9b67a26) and the receiver interface (0x4e2312e0) at runtime.

Semi-Fungible Tokens

  • A key innovation enabled by ERC-1155 is the semi-fungible token lifecycle. A token ID can initially be issued with a supply greater than one (fungible phase — e.g., 10,000 identical concert tickets), and after redemption or use each instance can be split into unique IDs carrying individual metadata (non-fungible phase — e.g., used ticket with seat number). This mirrors real-world asset transitions and is exploited by event-ticketing projects, in-game item crafting systems, and on-chain voucher schemes. The concept bridges to Digital Twin representations of physical assets, where a batch of manufactured items transitions from interchangeable units to individually serialised instances.

Applications and Use Cases

  • Blockchain Gaming — Games such as Gods Unchained, The Sandbox, and Axie Infinity deploy ERC-1155 contracts to represent swords, potions, land parcels, and characters in a unified contract. Enjin maintains a widely used SDK built around this standard.
  • NFT Collections — Large NFT collections where items share many traits (generative art, profile pictures) use ERC-1155 to allow editions of each design rather than forcing every token to be strictly unique, reducing minting costs.
  • Digital Asset Marketplaces — OpenSea, Rarible, and Foundation natively index ERC-1155 tokens, displaying both fungible quantities and unique items in the same storefront.
  • DeFi Vouchers and Receipts — Some Decentralised Finance protocols issue ERC-1155 tokens as composable receipts representing positions (e.g., liquidity-provider shares in a specific pool), because one contract can track thousands of pool IDs.
  • Supply Chain Provenance — Enterprises tokenise batches of physical goods (pharmaceutical lots, luxury goods) on Ethereum-compatible chains. When individual items leave the batch they transition from fungible to non-fungible, providing Supply Chain Provenance without deploying separate contracts per SKU.
  • Event Ticketing — Semi-Fungible Token ticketing systems use ERC-1155 to distribute fungible pre-event tickets that become individualised upon redemption, creating an on-chain audit trail.
  • Layer 2 and Cross-Chain — ERC-1155 is supported natively on Polygon, Arbitrum, Optimism, and Base, benefiting from lower Gas Fee environments that make batch operations even more economical.

Standards and Context

  • ERC-1155 was submitted as EIP-1155 on 17 June 2018 and moved to Final status in 2019 after community review and reference implementation by the Enjin team. It sits within the broader Ethereum Improvement Proposal process governed by Ethereum Foundation core developers and EIP editors.
  • The reference implementation is provided by OpenZeppelin in their Contracts library (ERC1155.sol, ERC1155URIStorage.sol, ERC1155Supply.sol), which is the de facto standard for audited, production-grade deployments.
  • ERC-165 introspection is mandatory: interface ID 0xd9b67a26 for the token itself and 0x4e2312e0 for the receiver. Wallets and marketplaces use these to distinguish ERC-1155 from ERC-721 and ERC-20 at runtime.
  • The specification does not prescribe metadata schema beyond the uri(id) function signature; however, OpenSea Metadata Standards have become the de facto off-chain schema, defining name, description, image, properties, and attributes JSON fields consumed by marketplaces and wallets.
  • On Layer 2 networks, ERC-1155’s batch functions provide proportionally greater savings because base-layer gas costs are amortised further, making micro-economy transactions economically viable.
  • vs ERC-20 — ERC-20 is strictly fungible, one contract per token type. ERC-1155 subsumes ERC-20 by making token IDs with supply > 1 behave identically to fungible tokens, while eliminating the need for multiple contracts.
  • vs ERC-721 — ERC-721 mandates uniqueness (supply of exactly one per ID). ERC-1155 allows supply > 1 per ID, making it a strict superset. ERC-721 retains stronger per-token metadata coupling via tokenURI(tokenId) returning a distinct URI per ID, whereas ERC-1155 uses a shared URI template.
  • vs ERC-4626 — ERC-4626 is a vault standard for yield-bearing fungible tokens, orthogonal to ERC-1155 but sometimes composed with it in DeFi protocols issuing multi-type vault receipts.
  • The combination of ERC-1155 with Account Abstraction (ERC-4337) is an active area of exploration, as account-abstracted wallets can bundle batch approvals and transfers into sponsored gasless transactions, improving UX for gaming and NFT use cases.

Provenance