ERC-20, ERC-721 & ERC-1155: Ethereum Token Standards
All news is rigorously fact-checked and reviewed by leading blockchain experts and seasoned industry insiders.

These Ethereum token standards were created to bring structure, compatibility, and predictable behavior to digital assets in a decentralized ecosystem, allowing wallets, exchanges, and smart contracts to interact seamlessly without custom integration for each token.

Fact Summary
Purpose of ERC Standards Provide universal rules for Ethereum tokens to ensure compatibility, reduce security risks, and simplify integration across wallets, dApps, and exchanges.
Meaning of ERC ERC stands for “Ethereum Request for Comment,” part of the Ethereum Improvement Proposal (EIP) process for introducing new technical specifications.
ERC-20 Token Type Defines fungible tokens where each unit is identical, divisible, transferable, and recognized by almost all Ethereum wallets and exchanges.
ERC-20 Use Cases Used for cryptocurrencies, DeFi governance tokens, and stablecoins like USDC, forming the backbone of most Ethereum-based assets.
ERC-721 Token Type Introduces non-fungible tokens (NFTs), where each token is unique, non-divisible, and can carry metadata such as images or attributes.
ERC-721 Applications Powers NFT marketplaces, digital art, collectibles, gaming assets, and unique digital property on Ethereum.
ERC-1155 Token Type A multi-token standard that supports both fungible and non-fungible tokens within the same contract, improving efficiency and flexibility.
ERC-1155 Advantages Allows batch transfers, reduces gas costs, and enables versatile use in games, marketplaces, and tokenized ecosystems.

Why Token Standards Were Necessary

In the early days of Ethereum, every project implementing its own token had to write unique smart contract code. This led to fragmentation, interoperability issues, and increased security risks due to inconsistent logic. By introducing formal standards like ERC-20, ERC-721, and ERC-1155, developers could rely on universal rules for token creation and interaction, dramatically simplifying integration across the ecosystem.

Understanding the ERC Naming Convention

The term ERC stands for “Ethereum Request for Comment,” a proposal system for introducing new features or technical specifications to the Ethereum network. Each ERC receives a unique identifying number once proposed. These standards are part of the Ethereum Improvement Proposal (EIP) process, ensuring community discussion and peer review before adoption.

Core Role of ERC Standards

  • Define functions and events that a token contract must implement.
  • Ensure compatibility across wallets, dApps, and exchanges.
  • Reduce security vulnerabilities by using well-tested logic.
  • Encourage ecosystem-wide innovation with predictable building blocks.

ERC-20: The Foundational Fungible Token Standard

ERC-20 defines the blueprint for fungible tokens — assets where each unit is interchangeable with another. This standard is the backbone for thousands of cryptocurrencies, stablecoins, and DeFi assets built on Ethereum.

Key Characteristics

  • Fungibility: Every token unit is identical in value and function.
  • Divisibility: Supports fractional ownership, usually up to 18 decimal places.
  • Transferability: Can be sent between addresses with a simple function call.
  • Compatibility: Recognized by virtually all Ethereum wallets and exchanges.

Mandatory Functions in ERC-20

Function Description
totalSupply() Returns the total number of tokens in existence.
balanceOf(address) Returns the balance of a given Ethereum address.
transfer(address, uint256) Sends a specified amount of tokens to another address.
approve(address, uint256) Authorizes another address to spend tokens on your behalf.
transferFrom(address, address, uint256) Transfers tokens between two addresses on behalf of the owner.
allowance(address, address) Checks remaining approved spending limit between two addresses.

Widespread Usage

Most well-known Ethereum-based tokens follow ERC-20, from DeFi governance tokens to stablecoins like USDC. The simplicity and universality of ERC-20 made it the default choice for token issuance, leading to mass adoption in ICOs and decentralized exchanges.

ERC-721: The Non-Fungible Token Standard

ERC-721 introduced the concept of non-fungible tokens (NFTs), where each token is unique and not interchangeable. While ERC-20 handles identical assets, ERC-721 allows tokenizing individuality — such as digital art, collectibles, or virtual land.

Key Differences from ERC-20

  • Uniqueness: Each token has a distinct identifier.
  • Non-divisible: Cannot be broken into smaller units.
  • Metadata Support: Can link to images, files, or data describing the asset.
  • Ownership Tracking: Each token is individually owned and tracked on-chain.

Core Functions in ERC-721

Function Description
ownerOf(uint256) Returns the owner of a specific token ID.
safeTransferFrom(address, address, uint256) Safely transfers a token, ensuring the recipient can handle it.
transferFrom(address, address, uint256) Transfers a token without safety checks.
approve(address, uint256) Approves another address to transfer a specific token ID.
getApproved(uint256) Returns the approved address for a given token ID.
setApprovalForAll(address, bool) Enables or disables an operator to manage all of the caller’s tokens.
isApprovedForAll(address, address) Checks if an operator is approved to manage all of an owner’s tokens.

Popular Applications

ERC-721 underpins marketplaces for NFTs such as digital art platforms, gaming assets, and collectibles. The standard allows integration with marketplaces, wallets, and decentralized applications without reinventing the core ownership logic.

For example, a piece of digital artwork stored on Ethereum as an ERC-721 token can be bought, sold, or transferred without creating a custom smart contract from scratch. This modular approach enables rapid deployment of NFT-based platforms.

Metadata in ERC-721

ERC-721 tokens typically store metadata off-chain due to Ethereum’s gas costs, with the token linking to a URI containing structured data. This metadata may include:

  • Name: Asset’s display name.
  • Description: Summary of the asset.
  • Image URL: Pointer to the artwork or file.
  • Attributes: Properties for rarity and categorization.

The metadata standard is flexible, allowing projects to integrate additional properties for gaming, identity, or provenance tracking.

ERC-1155: The Multi-Token Standard

ERC-1155 was designed to unify the benefits of ERC-20 and ERC-721 into a single, more efficient framework. It supports both fungible and non-fungible tokens within the same smart contract.

Why ERC-1155 Exists

Before ERC-1155, developers had to deploy separate contracts for fungible and non-fungible assets, which was costly in gas fees and contract complexity. ERC-1155 streamlines this process by allowing multiple token types — each with unique IDs — to coexist in one contract, enabling faster transfers and reduced storage requirements.

Core Features

  • Batch Transfers: Move multiple token types in a single transaction.
  • Unified Interface: One contract can manage ERC-20-like and ERC-721-like tokens.
  • Reduced Gas Costs: Efficient storage and processing for large-scale token ecosystems.
  • Versatile Applications: Ideal for games, marketplaces, and tokenized ecosystems.

Core Functions in ERC-1155

Function Description
balanceOf(address, uint256) Returns the balance of a specific token ID for a given address.
balanceOfBatch(address[], uint256[]) Returns balances for multiple addresses and token IDs in a single call.
setApprovalForAll(address, bool) Grants or revokes permission for an operator to manage all tokens.
isApprovedForAll(address, address) Checks whether an operator has permission to manage all of an owner’s tokens.
safeTransferFrom(address, address, uint256, uint256, bytes) Safely transfers a specific amount of a given token ID.
safeBatchTransferFrom(address, address, uint256[], uint256[], bytes) Transfers multiple token types and amounts in one transaction.

Metadata Flexibility

ERC-1155 tokens can point to a metadata URI with placeholders that are replaced dynamically based on the token ID. This dynamic metadata model reduces redundant data storage and supports large-scale token collections. For example, a game with thousands of items can store one metadata template and populate it with different values for each token.

Practical Use Cases Across Standards

While each ERC standard has distinct characteristics, real-world projects often combine them. Understanding their functional differences is key for any trader, investor, or builder in the Ethereum ecosystem.

Gaming Ecosystems

  • ERC-20: In-game currencies.
  • ERC-721: Unique characters, weapons, or skins.
  • ERC-1155: Hybrid model — same contract holds both currency and items.

Digital Art and Collectibles

  • ERC-721: High-value individual artworks or rare collectibles.
  • ERC-1155: Limited edition series where each edition shares the same ID.

DeFi Protocols

  • ERC-20: Governance tokens and liquidity pool shares.
  • ERC-721: Unique loan agreements or insurance contracts.

Technical Interoperability

The Ethereum ecosystem benefits from cross-standard compatibility. Wallets like MetaMask, exchanges, and dApps implement standard interfaces to handle these tokens without custom logic for each project.

Standard Interface Implementation

The Ethereum community ensures that ERC-20, ERC-721, and ERC-1155 adhere to API interface principles that make them predictable. This predictability underpins features such as:

  • Displaying token balances.
  • Enabling transfer options directly from the wallet interface.
  • Integrating with marketplaces without requiring custom code.

Event Logging and Indexing

All three ERC standards define events that smart contracts must emit during transactions. These events are critical for blockchain explorers and dApps to track movements and state changes in real time.

Common Events

Standard Event Purpose
ERC-20 Transfer(address, address, uint256) Logs token transfers.
ERC-20 Approval(address, address, uint256) Logs approved allowances.
ERC-721 Transfer(address, address, uint256) Logs transfer of unique token IDs.
ERC-721 Approval(address, address, uint256) Logs approval for specific token IDs.
ERC-721 / ERC-1155 ApprovalForAll(address, address, bool) Logs global operator approvals.
ERC-1155 TransferSingle(address, address, address, uint256, uint256) Logs single token transfers with ID and amount.
ERC-1155 TransferBatch(address, address, address, uint256[], uint256[]) Logs multiple token transfers in one event.

Gas Efficiency Considerations

Gas usage varies significantly between standards depending on the type of asset and the volume of transfers. ERC-20

FAQ: Understanding ERC-20, ERC-721, and ERC-1155

How do wallets and dashboards display ERC-20 vs ERC-721 vs ERC-1155?
Wallets treat each standard differently to keep balances readable. ERC-20 appears as a single balance with a symbol and decimals (e.g., 18). ERC-721 shows a collection of unique items, each with its own image and metadata. ERC-1155 combines both views: fungible counts (e.g., 250 “Gold”) and non-fungible collectibles (e.g., Sword #1024). Good UIs use standard interfaces to query names, symbols, and URIs, then render per-ID data for 721/1155 while preserving the classic balance view for 20.
What does “decimals” mean in ERC-20, and how does it affect transfers?
In ERC-20, the decimals field defines display precision, often 18, meaning the smallest unit equals 10^-18 of one token. Contracts store integers; wallets format human-readable amounts using decimals. A transfer of “1 token” is actually a transfer of 1 × 10^decimals base units. Projects may choose 6, 8, or 18 decimals depending on use case (e.g., payments vs. governance). Always normalize units in scripts and spreadsheets to avoid rounding errors during swaps, airdrops, or accounting.
How do approvals differ across ERC-20, ERC-721, and ERC-1155?
Approvals govern who can move your tokens programmatically. ERC-20 uses approve(spender, amount) and checks allowance. ERC-721 supports per-token approval with approve(to, tokenId) and global operator rights via setApprovalForAll. ERC-1155 streamlines this with setApprovalForAll across many IDs.

Standard Per-Item Global Operator
ERC-20 No Not native (uses allowance)
ERC-721 Yes Yes
ERC-1155 N/A (IDs + amounts) Yes
What is ERC-165 and why does it matter for ERC-721 and ERC-1155?
ERC-165 is a standard for interface detection. Contracts advertise which interfaces they implement by returning true for specific identifiers (interface IDs). Marketplaces and wallets call supportsInterface(bytes4) to confirm whether a contract behaves like ERC-721 or ERC-1155. This prevents misclassification, enables safer safeTransfer flows, and lets dApps feature-gate actions (e.g., batch listing only when 1155 is supported). For integrators, ERC-165 is a lightweight, on-chain capability check.
How is metadata handled: tokenURI (721) vs. URI templates (1155)?
ERC-721 typically exposes tokenURI(tokenId), returning a JSON document with name, description, image, and attributes. ERC-1155 often uses a single uri(id) template, substituting {id} at fetch time for many tokens. Common hosting patterns include IPFS, Arweave, or on-chain data for permanence. Projects may also define a baseURI and per-token overrides. Curators should verify that metadata endpoints are stable and that image links resolve consistently across marketplaces.
What are “semi-fungible” tokens and where do they fit?
“Semi-fungible” assets start life as interchangeable units (e.g., Edition of 1,000) but can become unique over time (e.g., after redemption). ERC-1155 is well-suited here: a single ID can represent a limited edition with a supply count, enabling batch minting, sales, and transfers. For art drops, each edition shares identical metadata and price, while 1/1s remain non-fungible. Semi-fungibility reduces contract sprawl and gas overhead compared with deploying many separate ERC-721 contracts.
How do safe transfers protect tokens when sending to smart contracts?
Safe transfers prevent tokens from being sent to contracts that cannot handle them. ERC-721 uses safeTransferFrom, requiring the recipient to implement ERC721Receiver. ERC-1155 uses safeTransferFrom/safeBatchTransferFrom with ERC1155Receiver. If the recipient lacks the proper interface, the transaction reverts, safeguarding assets.

Standard Receiver Hook
ERC-721 onERC721Received
ERC-1155 onERC1155Received / onERC1155BatchReceived
How are IDs assigned in ERC-721 vs. ERC-1155, and why does it matter?
In ERC-721, each tokenId typically maps to a unique item (e.g., #1, #2, #3). In ERC-1155, an id maps to a class of items with a supply count (e.g., ID 7 with 10,000 copies). This affects minting, royalties, and marketplace listings. With 1155, creators can batch mint many copies efficiently; with 721, they mint one by one. Indexers and analytics tools use ID schemes to aggregate volume and floor prices accurately.
What should integrators log and index for analytics across standards?
Indexers rely on events. For ERC-20, Transfer and Approval reveal flows and allowances. ERC-721 emits Transfer, plus per-token approvals; ERC-1155 emits TransferSingle and TransferBatch with IDs and amounts. Indexing tips: capture operator fields, normalize addresses, and store token standard alongside events for clean dashboards. For collections, aggregate by contract + tokenId (721) or contract + id (1155) to compute ownership counts and turnover.
How do bridges and wrappers maintain compatibility with these standards?
Bridges often lock a source asset and mint a wrapped version on the destination chain following the same user-facing standard: ERC-20 for fungible, ERC-721 for unique, or ERC-1155 for mixed items. The wrapped token exposes familiar interfaces so wallets and marketplaces work unchanged. Good bridges preserve IDs, metadata URIs, and supply semantics, and include burn-and-release mechanisms for redemptions. Always verify destination contracts implement ERC-165 (where applicable) to ensure smooth transfers and listings.
What testing checks help ensure correct behavior before launch?
Comprehensive tests reduce deployment surprises. Recommended checks include: interface support (ERC-165), approval flows (per-item and operator), safe transfers to EOAs and contracts, metadata resolution for varied IDs, and event emissions for all state changes. Add fuzz tests for batch operations (1155), boundary tests for decimals (20), and URI template substitutions. Finally, simulate marketplace actions—list, buy, transfer, batch transfer—to confirm that off-chain indexers reconstruct ownership and balances correctly.

Share.
i

This article is for informational purposes only and does not constitute investment advice. The content does not represent a recommendation to buy, sell, or hold any securities or financial instruments. Readers should conduct their own research and consult a qualified financial advisor before making investment decisions. The information provided may not be current and could become outdated. While AI was used in the creation process, every article is meticulously edited, independently fact-checked, and ultimately approved and published by a human editor. Read full disclaimer

Christopher Omang is a Web3 content writer and blockchain expert with over six years of personal experience investing in cryptocurrency. His hands-on journey fuels his passion for creating clear and accessible content that helps others understand the exciting world of decentralized technologies.
Full Profile