معيار الرموز المتعددة ERC-1155
آخر تحديث للصفحة: 22 أكتوبر 2025
مقدمة
واجهة قياسية للعقود التي تدير أنواعًا متعددة من الرموز. قد يتضمن عقد واحد منشور أي مجموعة من الرموز القابلة للاستبدال، أو الرموز غير القابلة للاستبدال أو التكوينات الأخرى (على سبيل المثال، الرموز شبه القابلة للاستبدال).
ماذا يعني معيار الرموز المتعددة؟
الفكرة بسيطة وتسعى إلى إنشاء واجهة عقد ذكية يمكنها تمثيل والتحكم في أي عدد من أنواع الرموز القابلة للاستبدال وغير القابلة للاستبدال. وبهذه الطريقة، يمكن لرمز ERC-1155 أن يؤدي نفس وظائف رمز ERC-20 ورمز ERC-721، وحتى كليهما في نفس الوقت. إنه يحسن وظائف كل من معايير ERC-20 وERC-721، مما يجعلها أكثر كفاءة ويصحح أخطاء التنفيذ الواضحة.
تم وصف رمز ERC-1155 بالكامل في EIP-1155 (opens in a new tab).
المتطلبات الأساسية
لفهم هذه الصفحة بشكل أفضل، نوصيك أولاً بالقراءة عن معايير الرموز، وERC-20، وERC-721.
وظائف وميزات ERC-1155:
- التحويل المجمّع: تحويل أصول متعددة في استدعاء واحد.
- الرصيد المجمّع: الحصول على أرصدة أصول متعددة في استدعاء واحد.
- الموافقة المجمّعة: الموافقة على جميع الرموز لعنوان ما.
- الخطافات: خطاف استلام الرموز.
- دعم إن إف تي: إذا كان المعروض 1 فقط، يتم التعامل معه على أنه إن إف تي.
- قواعد التحويل الآمن: مجموعة من القواعد للتحويل الآمن.
التحويلات المجمّعة
تعمل عملية نقل الدفعة بشكل مشابه جدًا لعمليات نقل ERC-20 العادية. دعونا نلقي نظرة على دالة transferFrom العادية في ERC-20:
1// ERC-202function transferFrom(address from, address to, uint256 value) external returns (bool);34// ERC-11555function safeBatchTransferFrom(6 address _from,7 address _to,8 uint256[] calldata _ids,9 uint256[] calldata _values,10 bytes calldata _data11) external;إظهار الكلالفرق الوحيد في ERC-1155 هو أننا نمرر القيم كمصفوفة ونمرر أيضًا مصفوفة من المعرفات. على سبيل المثال، عند إعطاء ids=[3, 6, 13] وvalues=[100, 200, 5]، ستكون التحويلات الناتجة
- تحويل 100 رمز بمعرف 3 من
_fromإلى_to. - تحويل 200 رمز بمعرف 6 من
_fromإلى_to. - تحويل 5 رموز بمعرف 13 من
_fromإلى_to.
في ERC-1155، لدينا فقط transferFrom، وليس transfer. لاستخدامه كدالة transfer عادية، ما عليك سوى تعيين عنوان from إلى عنوان مستدعي الدالة.
الرصيد المجمّع
استدعاء balanceOf الخاص بـ ERC-20 له بالمثل دالته الشريكة مع الدعم المجمّع. كتذكير، هذه هي نسخة ERC-20:
1// ERC-202function balanceOf(address owner) external view returns (uint256);34// ERC-11555function balanceOfBatch(6 address[] calldata _owners,7 uint256[] calldata _ids8) external view returns (uint256[] memory);الأمر الأكثر بساطة بالنسبة لمكالمة الرصيد هو أنه يمكننا استرداد أرصدة متعددة في مكالمة واحدة. نقوم بتمرير مجموعة المالكين، متبوعة بمجموعة معرفات الرموز.
على سبيل المثال، عند إعطاء _ids=[3, 6, 13] و _owners=[0xbeef..., 0x1337..., 0x1111...]، ستكون القيمة المُرجعة
1[2 balanceOf(0xbeef...),3 balanceOf(0x1337...),4 balanceOf(0x1111...)5]الموافقة المجمّعة
1// ERC-11552function setApprovalForAll(3 address _operator,4 bool _approved5) external;67function isApprovedForAll(8 address _owner,9 address _operator10) external view returns (bool);إظهار الكلالموافقات مختلفة قليلا عن ERC-20. بدلاً من الموافقة على مبالغ محددة، يمكنك تعيين مُشغِّل (operator) إلى موافق عليه أو غير موافق عليه عبر setApprovalForAll.
يمكن قراءة الحالة الحالية عبر isApprovedForAll. كما ترون، إنها عملية إما كل شيء أو لا شيء. لا يمكنك تحديد عدد الرموز التي يجب الموافقة عليها أو حتى فئة الرمز.
تم تصميم هذا عمدا مع وضع البساطة في الاعتبار يمكنك الموافقة على كل شيء لعنوان واحد فقط.
خطاف الاستلام
1function onERC1155BatchReceived(2 address _operator,3 address _from,4 uint256[] calldata _ids,5 uint256[] calldata _values,6 bytes calldata _data7) external returns(bytes4);بفضل دعم EIP-165 (opens in a new tab)، يدعم ERC-1155 خطافات الاستلام للعقود الذكية فقط. يجب أن تقوم دالة الخطاف بإرجاع قيمة bytes4 محددة مسبقًا والتي يتم إعطاؤها على النحو التالي:
1bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))عندما يقوم العقد المستلم بإرجاع هذه القيمة، يُفترض أن العقد يقبل التحويل ويعرف كيفية التعامل مع رموز ERC-1155. رائع، لا مزيد من الرموز العالقة في العقد!
دعم إن إف تي
عندما يكون العرض واحدًا فقط، يكون الرمز في الأساس رمزًا غير قابل للاستبدال (إن إف تي). وكما هو معيار ERC-721، يمكنك تحديد عنوان URL للبيانات الوصفية. يمكن للعملاء قراءة عنوان URL وتعديله، انظر هنا (opens in a new tab).
قاعدة التحويل الآمن
لقد تطرقنا إلى بعض قواعد النقل الآمن في الشروحات السابقة. ولكن دعونا نلقي نظرة على أهم القواعد:
- يجب أن يكون المستدعي موافقًا عليه لإنفاق الرموز لعنوان
_fromأو يجب أن يكون المستدعي مساويًا لـ_from. - يجب أن يتم إرجاع مكالمة التحويل إذا
- عنوان
_toهو 0. - طول
_idsليس هو نفسه طول_values. - أي من رصيد (أرصدة) الحامل (الحاملين) للرمز (الرموز) في
_idsأقل من المبلغ (المبالغ) المقابل في_valuesالمرسلة إلى المستلم. - يحدث أي خطأ آخر.
- عنوان
ملاحظة: جميع الدوال المجمّعة بما في ذلك الخطاف موجودة أيضًا كإصدارات غير مجمّعة. يتم ذلك من أجل كفاءة الغاز، مع الأخذ في الاعتبار أن نقل أحد الأصول فقط من المرجح أن يظل الطريقة الأكثر استخدامًا. لقد تركنا هذه الأمور جانباً من أجل تبسيط التفسيرات، بما في ذلك قواعد النقل الآمن. الأسماء متطابقة، فقط قم بإزالة "الدفعة".