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

معيار الرموز المميزة المتعددة ⁦ERC-1155⁩

مقدمة

واجهة قياسية للعقود التي تدير أنواعًا متعددة من الرموز المميزة. قد يتضمن أي عقد منشور مجموعة من الرموز القابلة للاستبدال، أو الرموز غير القابلة للاستبدال، أو تكوينات أخرى (مثل الرموز شبه القابلة للاستبدال).

ما المقصود بمعيار الرموز المميزة المتعددة؟

الفكرة بسيطة وتسعى إلى إنشاء واجهة عقد ذكي يمكنها تمثيل والتحكم في أي عدد من أنواع الرموز القابلة للاستبدال وغير القابلة للاستبدال. بهذه الطريقة، يمكن للرمز المميز 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:

الفرق الوحيد في ERC-1155 هو أننا نمرر القيم كمصفوفة ونمرر أيضًا مصفوفة من المعرفات (ids). على سبيل المثال، بالنظر إلى 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:

// ERC-20
function balanceOf(address owner) external view returns (uint256);

// ERC-1155
function balanceOfBatch(
    address[] calldata _owners,
    uint256[] calldata _ids
) external view returns (uint256[] memory);

الأمر أبسط بالنسبة لاستدعاء الرصيد، حيث يمكننا استرداد أرصدة متعددة في استدعاء واحد. نمرر مصفوفة الملاك، تليها مصفوفة معرفات الرموز المميزة.

على سبيل المثال، بالنظر إلى _ids=[3, 6, 13] و_owners=[0xbeef..., 0x1337..., 0x1111...]، ستكون القيمة المرجعة

[
    balanceOf(0xbeef...),
    balanceOf(0x1337...),
    balanceOf(0x1111...)
]

الموافقة المجمعة

تختلف الموافقات قليلاً عن ERC-20. بدلاً من الموافقة على مبالغ محددة، تقوم بتعيين مشغل (operator) كموافق عليه أو غير موافق عليه عبر setApprovalForAll.

يمكن قراءة الحالة الحالية عبر isApprovedForAll. كما ترى، إنها عملية إما كل شيء أو لا شيء. لا يمكنك تحديد عدد الرموز المميزة التي يجب الموافقة عليها أو حتى فئة الرمز المميز.

تم تصميم هذا عن قصد مع وضع البساطة في الاعتبار. يمكنك فقط الموافقة على كل شيء لعنوان واحد.

خطاف الاستلام (Receive Hook)

function onERC1155BatchReceived(
    address _operator,
    address _from,
    uint256[] calldata _ids,
    uint256[] calldata _values,
    bytes calldata _data
) external returns(bytes4);

نظرًا لدعم EIP-165 (opens in a new tab)، يدعم ERC-1155 خطافات الاستلام للعقود الذكية فقط. يجب أن تُرجع دالة الخطاف قيمة bytes4 سحرية محددة مسبقًا والتي تُعطى كالتالي:

bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))

عندما يُرجع العقد المستلم هذه القيمة، يُفترض أن العقد يقبل التحويل ويعرف كيفية التعامل مع الرموز المميزة ERC-1155. رائع، لا مزيد من الرموز المميزة العالقة في العقد!

دعم الرموز غير القابلة للاستبدال (NFT)

عندما يكون المعروض واحدًا فقط، يكون الرمز المميز في الأساس رمزًا غير قابل للاستبدال (NFT). وكما هو معتاد في ERC-721، يمكنك تحديد عنوان URL للبيانات الوصفية. يمكن قراءة عنوان URL وتعديله بواسطة العملاء، انظر هنا (opens in a new tab).

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

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

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

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

قراءة إضافية