معيار ERC-1155 للرموز المتعددة
تعلّم معيار ERC-1155 للرموز المتعددة، الذي يتيح لعقد واحد إدارة الرموز القابلة للاستبدال وشبه القابلة للاستبدال وغير القابلة للاستبدال معًا، لإجراء عمليات دفعية فعّالة في استهلاك الغاز.
معيار ERC-1155 للرموز المتعددة درس مجاني في Blockchain Smart Contracts with Solidity على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Blockchain Smart Contracts with Solidity، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Blockchain Smart Contracts with Solidity 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Why ERC-1155 Exists
ERC-20 manages one fungible token; ERC-721 manages unique NFTs. But a game may need thousands of item types mixing both. Deploying a separate contract per type is wasteful.
ERC-1155 is a single contract that can manage many token IDs at once, each of which can be fungible or non-fungible.
Token IDs as Categories
In ERC-1155 each token is identified by a numeric id. The same id can have a balance greater than one (fungible) or a supply of exactly one (non-fungible).
id = 1with balance 500 = a fungible gold coinid = 2with balance 1 = a unique sword NFT
Core Balance Mapping
The heart of an ERC-1155 contract is a nested mapping from id to owner to balance.
mapping(uint256 => mapping(address => uint256)) private _balances;
function balanceOf(address account, uint256 id) public view returns (uint256) {
return _balances[id][account];
}Batch Balance Queries
A signature feature is balanceOfBatch, which returns many balances in one call, saving round trips.
function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
public view returns (uint256[] memory)
{
require(accounts.length == ids.length, 'length mismatch');
uint256[] memory batch = new uint256[](accounts.length);
for (uint256 i = 0; i < accounts.length; i++) {
batch[i] = _balances[ids[i]][accounts[i]];
}
return batch;
}Batch Transfers
ERC-1155 lets you move several token types in a single transaction with safeBatchTransferFrom. This is far cheaper than many separate ERC-20/721 transfers.
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) public {
require(ids.length == amounts.length, 'length mismatch');
for (uint256 i = 0; i < ids.length; i++) {
_balances[ids[i]][from] -= amounts[i];
_balances[ids[i]][to] += amounts[i];
}
}Approval For All
Instead of per-token approvals, ERC-1155 uses a single operator approval: setApprovalForAll grants an address permission to move every token you own.
mapping(address => mapping(address => bool)) private _operatorApprovals;
function setApprovalForAll(address operator, bool approved) public {
_operatorApprovals[msg.sender][operator] = approved;
}
function isApprovedForAll(address owner, address operator) public view returns (bool) {
return _operatorApprovals[owner][operator];
}The Shared Metadata URI
ERC-1155 uses one URI template for all tokens. The placeholder {id} is replaced by the hex token id by clients.
Example: https://game.example/api/{id}.json
string private _uri = 'https://game.example/api/{id}.json';
function uri(uint256) public view returns (string memory) {
return _uri;
}Minting Tokens
Minting increases a balance for an id. The same internal logic works for both fungible (amount > 1) and non-fungible (amount = 1) tokens.
function _mint(address to, uint256 id, uint256 amount) internal {
require(to != address(0), 'mint to zero');
_balances[id][to] += amount;
emit TransferSingle(msg.sender, address(0), to, id, amount);
}
event TransferSingle(address operator, address from, address to, uint256 id, uint256 value);Safe Transfer Receiver Check
Like ERC-721, ERC-1155 protects against tokens being locked in contracts. A receiving contract must implement onERC1155Received and return its magic value, or the transfer reverts.
interface IERC1155Receiver {
function onERC1155Received(
address operator, address from,
uint256 id, uint256 value, bytes calldata data
) external returns (bytes4);
}Using OpenZeppelin
In practice you inherit the audited OpenZeppelin implementation rather than writing it from scratch.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import '@openzeppelin/contracts/token/ERC1155/ERC1155.sol';
contract GameItems is ERC1155 {
uint256 public constant GOLD = 0;
uint256 public constant SWORD = 1;
constructor() ERC1155('https://game.example/api/{id}.json') {
_mint(msg.sender, GOLD, 1000, '');
_mint(msg.sender, SWORD, 1, '');
}
}When To Choose ERC-1155
Pick ERC-1155 when you have many token types, need batch operations, or mix fungible and non-fungible assets. Stick with ERC-20/721 for a single, simple asset where the extra complexity is not justified.
Quick Check
Test your understanding of ERC-1155.
Recap
You learned that ERC-1155 is a multi-token standard managing many IDs in one contract. Key points:
- Nested
id => owner => balancemapping - Batch queries and transfers save gas
- Single operator approval and shared
{id}URI - Safe-transfer receiver checks protect against locked tokens
It is the standard of choice for games and marketplaces with many asset types.
الأسئلة الشائعة
هل درس «معيار ERC-1155 للرموز المتعددة» مجاني؟
نعم — نص درس «معيار ERC-1155 للرموز المتعددة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Blockchain Smart Contracts with Solidity، انتقل إلى CoddyKit PRO. تتضمن دورة Blockchain Smart Contracts with Solidity 4 دروس في المجموع.
ماذا ستتعلم في «معيار ERC-1155 للرموز المتعددة»؟
تعلّم معيار ERC-1155 للرموز المتعددة، الذي يتيح لعقد واحد إدارة الرموز القابلة للاستبدال وشبه القابلة للاستبدال وغير القابلة للاستبدال معًا، لإجراء عمليات دفعية فعّالة في استهلاك الغاز. تتمرن على Blockchain Smart Contracts with Solidity مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Blockchain Smart Contracts with Solidity؟
لا تُشترط خبرة سابقة. Blockchain Smart Contracts with Solidity على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «معيار ERC-1155 للرموز المتعددة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Blockchain Smart Contracts with Solidity هذا؟
نعم. كل درس في Blockchain Smart Contracts with Solidity يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- معيار الرموز القابلة للاستبدال ERC-20
- تنفيذ رمز ERC-20
- الرموز غير القابلة للاستبدال ERC-721 (NFTs)
- معيار ERC-1155 للرموز المتعددة