The ERC-1155 standard lets you create and manage many types of tokens in one smart contract. This saves time and money compared to making separate contracts for each token.
You want to create a game with many items like swords, shields, and potions all in one contract.
You need to manage both collectible tokens and currency tokens together.
You want to save blockchain fees by batching multiple token transfers in one transaction.
You want to track ownership of different digital assets efficiently.
You want to build a marketplace that handles many token types easily.
Syntax
Blockchain / Solidity
contract MyToken is ERC1155 {
constructor(string memory uri) ERC1155(uri) {
// Initialize tokens here
}
function mint(address to, uint256 id, uint256 amount, bytes memory data) public {
_mint(to, id, amount, data);
}
function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public {
_mintBatch(to, ids, amounts, data);
}
}
The id represents the token type (like sword or shield).
The amount is how many tokens of that type you want to create or transfer.
Examples
This example creates a sword token with ID 1 and mints one to a player.
Blockchain / Solidity
contract GameItems is ERC1155 {
constructor() ERC1155("https://game.example/api/item/{id}.json") {}
function mintSword(address player) public {
_mint(player, 1, 1, ""); // Mint 1 sword (id=1)
}
}
This mints 10 swords and 5 shields to the player in one transaction.
Blockchain / Solidity
function mintBatchItems(address player) public {
uint256[] memory ids = new uint256[](2);
ids[0] = 1; // sword
ids[1] = 2; // shield
uint256[] memory amounts = new uint256[](2);
amounts[0] = 10;
amounts[1] = 5;
_mintBatch(player, ids, amounts, "");
}
Sample Program
This contract creates two token types: GOLD and SILVER. It mints 1000 GOLD and 5000 SILVER tokens to the contract creator.
ERC-1155 supports batch transfers which reduce transaction costs.
Each token type has its own ID, so you can track many assets in one contract.
Use OpenZeppelin's ERC1155 implementation to avoid security issues.
Summary
ERC-1155 lets you manage many token types in one smart contract.
It saves gas by batching token transfers and minting.
Useful for games, collectibles, and multi-asset platforms.
Practice
(1/5)
1. What is the main advantage of the ERC-1155 token standard compared to ERC-20 and ERC-721?
easy
A. It only supports fungible tokens.
B. It allows managing multiple token types in a single contract.
C. It is designed exclusively for non-fungible tokens.
D. It requires a separate contract for each token type.
Solution
Step 1: Understand ERC-20 and ERC-721 limitations
ERC-20 supports fungible tokens only, and ERC-721 supports non-fungible tokens but each token type needs its own contract.
Step 2: Identify ERC-1155 feature
ERC-1155 allows multiple token types (fungible and non-fungible) to be managed within a single contract efficiently.
Final Answer:
It allows managing multiple token types in a single contract. -> Option B
Quick Check:
ERC-1155 = multi-token single contract [OK]
Hint: ERC-1155 = many tokens, one contract [OK]
Common Mistakes:
Thinking ERC-1155 supports only one token type
Confusing ERC-1155 with ERC-20 or ERC-721
Believing ERC-1155 requires multiple contracts
2. Which of the following is the correct Solidity function signature to mint multiple tokens in ERC-1155?
easy
A. function mintBatch(address to, uint256[] ids, uint256[] amounts, bytes data) external;
B. function mintToken(address to, uint256 id) external;
C. function mint(address to, uint256 id, uint256 amount, bytes data) external;
D. function mintSingle(address to, uint256 id, uint256 amount) external;
Solution
Step 1: Recall ERC-1155 minting functions
ERC-1155 defines mintBatch to mint multiple token types at once, taking arrays of ids and amounts.
Step 2: Match function signature
function mintBatch(address to, uint256[] ids, uint256[] amounts, bytes data) external; matches the standard signature: mintBatch(address to, uint256[] ids, uint256[] amounts, bytes data).
Final Answer:
function mintBatch(address to, uint256[] ids, uint256[] amounts, bytes data) external; -> Option A
Quick Check:
mintBatch = batch minting function [OK]
Hint: Batch mint uses arrays of ids and amounts [OK]
Common Mistakes:
Using single id and amount for batch mint
Confusing mintBatch with mintSingle
Missing bytes data parameter
3. Given the following Solidity snippet, what will be the balance of token ID 5 for address 0xABC after execution?
5. You want to create a game inventory using ERC-1155 where players can hold multiple types of items. Which approach best uses ERC-1155 features to efficiently track and transfer items?
hard
A. Deploy one ERC-1155 contract with unique IDs for each item type and use batch transfers for multiple items.
B. Deploy separate ERC-721 contracts for each item type and transfer items individually.
C. Use ERC-20 tokens for each item type and transfer amounts representing item counts.
D. Create one ERC-1155 contract but mint only one token type for all items.
Solution
Step 1: Understand game inventory needs
Players hold many item types, needing efficient tracking and transfers.
Step 2: Evaluate ERC-1155 advantages
ERC-1155 supports multiple token IDs in one contract and batch transfers, reducing gas and complexity.
Step 3: Compare options
Deploy one ERC-1155 contract with unique IDs for each item type and use batch transfers for multiple items. uses one contract with unique IDs and batch transfers, matching ERC-1155 strengths. Others use less efficient or wrong standards.
Final Answer:
Deploy one ERC-1155 contract with unique IDs for each item type and use batch transfers for multiple items. -> Option A
Quick Check:
One contract + batch transfers = efficient multi-item management [OK]
Hint: Use one ERC-1155 contract with batch transfers for many items [OK]
Common Mistakes:
Using multiple contracts unnecessarily
Choosing ERC-20 or ERC-721 for multi-item inventory
Minting only one token type for all items
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.