ERC-20 vs ERC-721 vs ERC-1155: Token Standards Explained (2025)

Complete guide to Ethereum token standards. Understand when to use ERC-20 for fungible tokens, ERC-721 for NFTs, and ERC-1155 for multi-token contracts. Includes real-world examples and comparisons.

Technical Guide • Updated January 2025

Ethereum token standards define how tokens work on the Ethereum blockchain and compatible networks (Polygon, Base, Arbitrum, etc.). Understanding these standards is crucial before creating your token, as each serves different purposes and has distinct characteristics.

In this comprehensive guide, we'll dive deep into the three most important Ethereum token standards: ERC-20 (fungible tokens), ERC-721 (NFTs), and ERC-1155 (multi-token standard). We'll explain what each does, when to use them, and provide real-world examples.

What is a Token Standard?

A token standard is a set of rules and functions that all tokens of that type must follow. Think of it like a blueprint that ensures all tokens work consistently across different applications, wallets, and exchanges.

Benefits of token standards:

  • Interoperability: Tokens work across all compatible wallets and DEXs
  • Predictability: Developers know exactly how tokens will behave
  • Security: Standards are audited and tested by the community
  • Compatibility: Easy integration with existing infrastructure

ERC-20: The Fungible Token Standard

What is ERC-20?

ERC-20 is the most widely used Ethereum token standard, designed for fungible tokens. "Fungible" means each token is identical and interchangeable—like dollars or Bitcoin. One ERC-20 token is equal to any other ERC-20 token of the same type.

Key Characteristics of ERC-20

  • Fungible: All tokens are identical and interchangeable
  • Divisible: Can be divided into smaller units (usually 18 decimals)
  • Transferable: Can be sent between addresses
  • Balance-based: Wallets show total token balance
  • Uniform: No unique properties per token

Required Functions & Events

Every ERC-20 token must implement these functions according to EIP-20:

  • totalSupply() → uint256 - Returns total number of tokens in existence
  • balanceOf(address account) → uint256 - Returns token balance of specific address
  • transfer(address to, uint256 amount) → bool - Sends tokens to another address, emits Transfer event
  • approve(address spender, uint256 amount) → bool - Allows another address to spend your tokens up to amount, emits Approval event
  • transferFrom(address from, address to, uint256 amount) → bool - Transfers tokens on behalf of approved address, emits Transfer event
  • allowance(address owner, address spender) → uint256 - Returns remaining approved spending limit

Required Events

  • Transfer(address indexed from, address indexed to, uint256 value) - Emitted on token transfers
  • Approval(address indexed owner, address indexed spender, uint256 value) - Emitted on approvals

Optional Functions (Common Extensions)

  • name() → string - Token name (e.g., "MyToken")
  • symbol() → string - Token symbol (e.g., "MTK")
  • decimals() → uint8 - Number of decimals (typically 18)
  • increaseAllowance(address spender, uint256 addedValue) → bool - Safer approval mechanism (prevents front-running)
  • decreaseAllowance(address spender, uint256 subtractedValue) → bool - Decrease approval amount

ERC-20 Implementation Details

Gas Optimization Considerations:

  • Storage vs Memory: Use storage slots efficiently (pack structs when possible)
  • Event Optimization: Indexed parameters cost more gas but enable efficient filtering
  • SafeMath: Solidity 0.8+ has built-in overflow protection, older versions need SafeMath library
  • Transfer Hooks: Some tokens (like USDT) don't return bool, causing compatibility issues

Known ERC-20 Vulnerabilities

  • Reentrancy: Ensure state changes before external calls (checks-effects-interactions pattern)
  • Integer Overflow: Use Solidity 0.8+ or SafeMath library
  • Front-Running: Approval front-running can be mitigated with increaseAllowance/decreaseAllowance
  • Missing Return Values: Some tokens (USDT, OMG) don't return bool, breaking some integrations
  • Centralization Risks: Mint/burn functions with owner control can be abused

Real-World ERC-20 Examples

🪙 USDC (USD Coin)

Stablecoin pegged to US Dollar. Most trusted ERC-20 stablecoin with billions in market cap. Used for trading, payments, and DeFi.

🦄 UNI (Uniswap)

Governance token for Uniswap DEX. Holders vote on protocol changes. One of the most successful DeFi tokens.

🔗 LINK (Chainlink)

Oracle network token. Powers decentralized price feeds and data. Essential infrastructure token.

🐕 SHIB (Shiba Inu)

Popular memecoin token. Demonstrates ERC-20 can be used for community-driven projects, not just utility tokens.

When to Use ERC-20

Use ERC-20 for:

  • Currency/Coin replacement: Creating a cryptocurrency-like token
  • Utility tokens: Tokens with specific use cases (governance, payments, rewards)
  • Stablecoins: Tokens pegged to assets (USDC, USDT, DAI)
  • Governance tokens: Voting rights in DAOs
  • Memecoins: Community-driven tokens
  • Most token creation projects: 90%+ of tokens use ERC-20

ERC-721: The NFT (Non-Fungible Token) Standard

What is ERC-721?

ERC-721 is the standard for Non-Fungible Tokens (NFTs). Unlike ERC-20, each ERC-721 token is unique and cannot be replaced by another token. This makes it perfect for digital collectibles, art, gaming items, and unique assets.

Key Characteristics of ERC-721

  • Non-fungible: Each token is unique and has its own ID
  • Metadata: Each token can have unique properties (images, attributes, etc.)
  • Ownership: Tracks who owns each specific token ID
  • Not divisible: You own the whole token or nothing (can't split it)
  • Unique value: Each token can have different value based on rarity/attributes

Required Functions

  • balanceOf(owner) - Returns number of NFTs owned by address
  • ownerOf(tokenId) - Returns owner of specific token ID
  • transferFrom(from, to, tokenId) - Transfers specific NFT
  • approve(to, tokenId) - Approves transfer of specific NFT
  • tokenURI(tokenId) - Returns metadata URI for token

Real-World ERC-721 Examples

🦍 Bored Ape Yacht Club

Famous NFT collection. Each ape is unique with different traits. Some sold for millions. Perfect example of ERC-721 collectibles.

🎮 CryptoKitties

Early NFT game where each cat is unique and can be bred. One of the first major ERC-721 use cases.

🎨 Art Blocks

Generative art platform. Each artwork is unique ERC-721 token. Artists create algorithms that generate unique pieces.

🎫 POAP (Proof of Attendance Protocol)

NFT badges proving attendance at events. Each event creates unique ERC-721 tokens as digital souvenirs.

When to Use ERC-721

Use ERC-721 for:

  • Digital art: Unique artworks and collectibles
  • Gaming items: Unique weapons, characters, skins
  • Domain names: ENS (Ethereum Name Service) uses ERC-721
  • Identity/Verification: Proof of ownership, certificates
  • Real estate: Tokenized property ownership
  • Music/Media: Unique album releases, tracks

ERC-1155: The Multi-Token Standard

What is ERC-1155?

ERC-1155 is the most flexible token standard, allowing a single contract to manage multiple token types—both fungible and non-fungible. Created by Enjin, it's designed for efficiency and is perfect for gaming and applications needing various token types.

Key Characteristics of ERC-1155

  • Multi-token: One contract can handle unlimited token types
  • Fungible & Non-fungible: Can represent both in same contract
  • Gas efficient: Batch transfers save gas costs
  • Flexible: Can change token properties (make fungible → non-fungible)
  • Atomic swaps: Trade multiple token types in one transaction

Key Functions

  • balanceOf(owner, tokenId) - Balance of specific token type
  • balanceOfBatch(owners, tokenIds) - Multiple balances in one call
  • safeTransferFrom(from, to, tokenId, amount, data) - Transfer tokens
  • safeBatchTransferFrom(...) - Transfer multiple token types at once
  • uri(tokenId) - Metadata URI for token type

Real-World ERC-1155 Examples

🎮 Enjin Gaming

Gaming platform using ERC-1155 for in-game items. One contract manages swords, armor, potions, and unique items efficiently.

🎨 OpenSea Shared Storefront

Uses ERC-1155 for cheaper NFT minting. Artists can batch mint multiple NFTs in one transaction, saving gas fees significantly.

⚔️ Gods Unchained

Trading card game using ERC-1155. Manages thousands of card types efficiently. Common cards are fungible, rare cards are unique.

When to Use ERC-1155

Use ERC-1155 for:

  • Gaming platforms: Multiple item types (weapons, currencies, collectibles)
  • NFT marketplaces: Efficient batch minting and transfers
  • Multi-asset projects: Projects needing both fungible and NFTs
  • Gas optimization: When you need to transfer many items cheaply
  • Complex ecosystems: Platforms with diverse token needs

Side-by-Side Comparison

Feature ERC-20 ERC-721 ERC-1155
Type Fungible Non-Fungible Both (Fungible & NFT)
Uniqueness All tokens identical Each token unique Configurable per type
Divisibility Yes (18 decimals) No (whole tokens only) Yes (for fungible types)
Gas Efficiency Moderate Higher cost Most efficient (batch)
Token IDs No (balance-based) Yes (unique IDs) Yes (per token type)
Use Cases Currency, utility, governance Art, collectibles, gaming items Gaming, multi-asset platforms
Metadata Same for all tokens Unique per token Per token type
Batch Transfers No (one at a time) No (one at a time) Yes (multiple types)
Popularity Most popular (90%+ tokens) Very popular (NFTs) Growing (gaming/DeFi)
Examples USDC, UNI, LINK Bored Apes, CryptoKitties Enjin, Gods Unchained

Deep Dive: Technical Differences

How ERC-20 Works Internally

ERC-20 tokens track balances using a mapping: mapping(address => uint256) balances;

When you transfer tokens, the contract:

  1. Checks your balance has enough tokens
  2. Subtracts from your balance
  3. Adds to recipient's balance
  4. Emits a Transfer event

All tokens are identical—you don't track individual tokens, just total balances.

How ERC-721 Works Internally

ERC-721 tracks ownership per token ID: mapping(uint256 => address) owners;

Each token has:

  • Unique ID (like serial number)
  • Owner address
  • Metadata URI (pointing to JSON with image, attributes)

When transferring, you move ownership of specific token ID from one address to another.

How ERC-1155 Works Internally

ERC-1155 uses: mapping(address => mapping(uint256 => uint256)) balances;

This tracks:

  • Address (who owns)
  • Token ID (which type)
  • Balance (how many of that type)

One contract can manage token ID 1 (fungible coins), token ID 2 (sword NFTs), token ID 3 (another fungible type), etc.

Gas Cost Comparison

Gas costs vary significantly between standards:

Action ERC-20 ERC-721 ERC-1155
Deploy Contract ~$50-$150 ~$50-$150 ~$50-$200
Transfer 1 Token ~$2-$10 ~$5-$20 ~$2-$10
Transfer 10 Tokens ~$20-$100 (10 txns) ~$50-$200 (10 txns) ~$2-$10 (1 batch txn)
Mint 100 Tokens ~$20-$100 ~$500-$2000 ~$5-$20

Key insight: ERC-1155's batch operations make it most cost-effective for multiple transfers, while ERC-721 is most expensive for bulk operations.

Choosing the Right Standard

Decision Tree

Ask yourself:

  1. Are your tokens identical and interchangeable?
    • Yes → ERC-20 (or ERC-1155 fungible type)
    • No → Continue
  2. Are you creating digital collectibles, art, or unique items?
    • Yes → ERC-721 (or ERC-1155 NFT type)
    • No → Continue
  3. Do you need multiple token types in one contract?
    • Yes → ERC-1155
    • No → ERC-20 or ERC-721

Use Case Scenarios

Scenario 1: Creating a Memecoin

Answer: ERC-20

All tokens are identical, divisible, and interchangeable. Perfect for community coin or memecoin. Simple, widely supported, lowest complexity.

Scenario 2: NFT Art Collection

Answer: ERC-721

Each artwork is unique with distinct value. Buyers expect individual ownership. Standard for art marketplaces like OpenSea.

Scenario 3: Gaming Platform

Answer: ERC-1155

Need coins (fungible), items (NFTs), potions (fungible), and unique weapons (NFTs). One contract manages everything efficiently.

Scenario 4: Governance Token

Answer: ERC-20

Voting power based on token balance. All tokens equal (1 token = 1 vote). Standard choice for DAOs.

Common Misconceptions

Can ERC-20 tokens be NFTs?

No! ERC-20 is for fungible tokens only. If you want unique items, you need ERC-721 or ERC-1155. However, some projects create separate ERC-20 and ERC-721 contracts and link them.

Is ERC-1155 better than ERC-20?

Not necessarily! ERC-1155 is more flexible but also more complex. For simple fungible tokens, ERC-20 is perfectly fine and more widely supported. Use ERC-1155 only if you need its specific features (multi-token, batch transfers).

Can I convert ERC-20 to ERC-721?

Not directly! They're different standards. You'd need to create a new ERC-721 contract and "burn" the ERC-20 tokens while minting equivalent NFTs. This is complex and usually not recommended.

Which standard is most secure?

All are secure when implemented correctly! ERC-20 is most battle-tested (used by billions in value). ERC-721 is well-established for NFTs. ERC-1155 is newer but created by reputable team (Enjin) and widely audited.

Other Ethereum Token Standards (Brief Overview)

While ERC-20, ERC-721, and ERC-1155 are the most important, Ethereum has many other standards:

ERC-777 (Advanced Fungible Token)

Enhanced version of ERC-20 with hooks and operator functionality. More complex, less commonly used. Most projects stick with ERC-20.

ERC-4626 (Tokenized Vaults)

Standard for yield-bearing vault tokens in DeFi. Used by protocols like Yearn Finance. Advanced use case.

ERC-3525 (Semi-Fungible Token)

Hybrid standard combining fungible and NFT properties. Each token has unique ID but same value within slot. Very niche.

ERC-4907 (Rentable NFTs)

Extension of ERC-721 allowing renting NFTs. Users can grant temporary usage rights. Growing in gaming/metaverse.

For most creators: Stick with ERC-20, ERC-721, or ERC-1155. They cover 99% of use cases and have the best tooling support.

Implementation Tools

For ERC-20 Tokens

For ERC-721 (NFTs)

  • Mintable - User-friendly NFT creation
  • Manifold - Professional NFT contracts
  • Zora - Open-source NFT protocol

For ERC-1155

  • Enjin Platform - Original creators, gaming-focused
  • OpenZeppelin - Provides ERC-1155 contracts
  • Thirdweb - Supports ERC-1155 deployment

Best Practices for Each Standard

ERC-20 Best Practices

  • ✅ Use OpenZeppelin's audited implementation
  • ✅ Implement all required functions correctly
  • ✅ Consider adding burn/mint functions if needed
  • ✅ Use standard 18 decimals (unless specific reason)
  • ✅ Verify contract on Etherscan after deployment

ERC-721 Best Practices

  • ✅ Store metadata off-chain (IPFS) for cost efficiency
  • ✅ Implement proper access controls
  • ✅ Consider royalty functionality (ERC-2981)
  • ✅ Use proven contract templates
  • ✅ Test thoroughly before mainnet deployment

ERC-1155 Best Practices

  • ✅ Use batch functions to save gas
  • ✅ Implement proper token ID management
  • ✅ Consider fungibility per token type carefully
  • ✅ Test both fungible and NFT scenarios
  • ✅ Document token ID structure clearly

Migration Between Standards

Can you migrate from one standard to another? The short answer is: not easily, and usually not recommended.

Why migration is difficult:

  • Different data structures (balances vs token IDs)
  • Different function signatures
  • Requires new contract deployment
  • Users must approve/accept migration
  • Complex migration logic needed

Best practice: Choose the right standard from the start. Research thoroughly before deploying.

Future of Token Standards

Token standards continue evolving:

  • EIP-3074: Account abstraction improvements
  • EIP-5806: Delegate voting improvements
  • Layer 2 standards: Standards optimized for specific L2s
  • Cross-chain standards: Protocols for token bridging

However, ERC-20, ERC-721, and ERC-1155 remain the foundation and will continue being the most used standards for years to come.

Conclusion

Understanding token standards is crucial for creating the right type of token:

  • ERC-20: Your go-to for fungible tokens (coins, utility tokens, governance). 90%+ of tokens use this.
  • ERC-721: Essential for NFTs (art, collectibles, unique items). Standard for digital ownership.
  • ERC-1155: Powerful for complex projects needing multiple token types (gaming, multi-asset platforms).

For most creators starting out, ERC-20 is the right choice. It's simple, widely supported, and covers most use cases. As you grow, you can always create additional contracts using other standards if needed.

Ready to Create Your Token?

Now that you understand token standards, choose the best tool to create your ERC-20 token.

Compare Token Generator Tools →

Read our step-by-step creation guide →