تخطٍ إلى المحتوى الرئيسي
Change page

معيار الرموز المتعددة 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:

التحويلات المجمّعة

تعمل عملية نقل الدفعة بشكل مشابه جدًا لعمليات نقل ERC-20 العادية. دعونا نلقي نظرة على دالة transferFrom العادية في ERC-20:

1// ERC-20
2function transferFrom(address from, address to, uint256 value) external returns (bool);
3
4// ERC-1155
5function safeBatchTransferFrom(
6 address _from,
7 address _to,
8 uint256[] calldata _ids,
9 uint256[] calldata _values,
10 bytes calldata _data
11) external;
إظهار الكل

الفرق الوحيد في ERC-1155 هو أننا نمرر القيم كمصفوفة ونمرر أيضًا مصفوفة من المعرفات. على سبيل المثال، عند إعطاء ids=[3, 6, 13] وvalues=[100, 200, 5]، ستكون التحويلات الناتجة

  1. تحويل 100 رمز بمعرف 3 من _from إلى _to.
  2. تحويل 200 رمز بمعرف 6 من _from إلى _to.
  3. تحويل 5 رموز بمعرف 13 من _from إلى _to.

في ERC-1155، لدينا فقط transferFrom، وليس transfer. لاستخدامه كدالة transfer عادية، ما عليك سوى تعيين عنوان from إلى عنوان مستدعي الدالة.

الرصيد المجمّع

استدعاء balanceOf الخاص بـ ERC-20 له بالمثل دالته الشريكة مع الدعم المجمّع. كتذكير، هذه هي نسخة ERC-20:

1// ERC-20
2function balanceOf(address owner) external view returns (uint256);
3
4// ERC-1155
5function balanceOfBatch(
6 address[] calldata _owners,
7 uint256[] calldata _ids
8) 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-1155
2function setApprovalForAll(
3 address _operator,
4 bool _approved
5) external;
6
7function isApprovedForAll(
8 address _owner,
9 address _operator
10) 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 _data
7) 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).

قاعدة التحويل الآمن

لقد تطرقنا إلى بعض قواعد النقل الآمن في الشروحات السابقة. ولكن دعونا نلقي نظرة على أهم القواعد:

  1. يجب أن يكون المستدعي موافقًا عليه لإنفاق الرموز لعنوان _from أو يجب أن يكون المستدعي مساويًا لـ _from.
  2. يجب أن يتم إرجاع مكالمة التحويل إذا
    1. عنوان _to هو 0.
    2. طول _ids ليس هو نفسه طول _values.
    3. أي من رصيد (أرصدة) الحامل (الحاملين) للرمز (الرموز) في _ids أقل من المبلغ (المبالغ) المقابل في _values المرسلة إلى المستلم.
    4. يحدث أي خطأ آخر.

ملاحظة: جميع الدوال المجمّعة بما في ذلك الخطاف موجودة أيضًا كإصدارات غير مجمّعة. يتم ذلك من أجل كفاءة الغاز، مع الأخذ في الاعتبار أن نقل أحد الأصول فقط من المرجح أن يظل الطريقة الأكثر استخدامًا. لقد تركنا هذه الأمور جانباً من أجل تبسيط التفسيرات، بما في ذلك قواعد النقل الآمن. الأسماء متطابقة، فقط قم بإزالة "الدفعة".

قراءة إضافية

هل كانت هذه المقالة مفيدة؟