لأغراض تعليمية فقط؛ لا يشكل ذلك نصيحة استثمارية أو توصية استثمارية. قد تؤدي الاستثمارات إلى خسائر.
الإجابة المباشرة
ERC-1155 هو معيار إيثريوم للرموز المتعددة. يستطيع عقد واحد الاحتفاظ بأنواع كثيرة من الرموز، ويمكن لكل token ID أن يمثّل رصيدًا قابلاً للاستبدال، أو عنصرًا غير قابل للاستبدال، أو تصميم عرض آخر يختاره التنفيذ. لذلك يكون مفتاح الأصل هو contract address + token ID، وليس معرّف الرمز وحده.
يحدّد المعيار الاستعلامات الفردية والدفعية عن الأرصدة، وعمليات النقل الآمن الفردية والدفعية، والموافقة الشاملة للمشغّل، واستدعاءات المستلِم، وأحداث النقل، والسلوك الاختياري لمعرّف URI الخاص بالبيانات الوصفية. لكنه لا يحدّد من يجوز له السك، أو ما إذا كان العرض محدودًا، أو ما إذا كانت البيانات الوصفية دائمة، أو الحقوق القانونية التي يمنحها الرمز، أو قيمة أي رمز. ويجب التحقق من هذه الخصائص في العقد المعني نفسه وأدواره واعتماداته الخارجية.
آلية العمل
- حدّد الرصيد. تعيد
balanceOf(account, id)الكمية التي يحتفظ بها حساب لمعرّف واحد. وتستعلمbalanceOfBatch(accounts, ids)عن أزواج الحسابات والمعرّفات المتناظرة. قد يستخدم عقدان مختلفان المعرّف1لأصلين لا صلة بينهما، لذلك تظل الهوية الكاملة مكوّنة من الشبكة وعنوان العقد والمعرّف. - فوّض المتصل. يجوز للحائز نقل رصيده بنفسه أو استدعاء
setApprovalForAll(operator, true). تشمل هذه الموافقة كل معرّفات ERC-1155 التي يملكها الحائز في ذلك العقد؛ وتعرضisApprovedForAll(owner, operator)حالة الموافقة. لا يتضمن ERC-1155 موافقة أصلية تقتصر على معرّف واحد أو كمية محددة. - نفّذ نقلًا فرديًا أو دفعيًا. تنقل
safeTransferFromمعرّفًا واحدًا وكمية واحدة. وتنقلsafeBatchTransferFromمصفوفتَيidsوvaluesالمتوازيتين، ويجب أن يتطابق طولهما وترتيبهما. قد يقلل التجميع من النفقات المتكررة للمعاملات، لكنه ليس أرخص بالضرورة في كل تنفيذ أو عبء عمل. - تحقق من العقد المستلِم. بعد تحديث الأرصدة وإصدار الحدث المناسب، يستدعي النقل المتوافق إلى عقد
onERC1155ReceivedأوonERC1155BatchReceived. عادةً ما يؤدي عدم دعم الاستدعاء، أو إرجاع قيمة خاطئة، أو الرفض إلى إبطال النقل. يحدّ فحص المستلِم هذا من حجز الأصول عن طريق الخطأ؛ لكنه لا يثبت أن العقد المستلِم موثوق أو أنه يوفّر مسارًا للسحب. - أعِد بناء الحالة من الأحداث. يجب أن ينعكس كل سك أو نقل أو حرق في
TransferSingleأوTransferBatch. يستخدم السك عنوان الصفر في خانةfrom، بينما يستخدمه الحرق في خانةto. يستطيع المفهرسون اشتقاق الأرصدة وصافي العرض المسكوك لكل معرّف من هذه السجلات، لكن عليهم معالجة التاريخ الكامل وإعادات تنظيم الشبكة وعمليات ترحيل العقود بصورة صحيحة. - استخرج البيانات الوصفية. قد يعيد امتداد URI الاختياري قالبًا مشتركًا يحتوي على
{id}. يستبدل العميل هذا الجزء بمعرّف الرمز السداسي عشري المكتوب بأحرف صغيرة والمكمّل بأصفار إلى 64 خانة، من دون بادئة0x. ومع ذلك، قد تظل البيانات الوصفية قابلة للتغيير أو غير متاحة أو مضللة ما لم ينص التنفيذ وضمانات التخزين على خلاف ذلك.
مثال محلول
يخصّص عقد لعبة المعرّف 1 للعملات الذهبية، والمعرّف 7 لتصاريح الدخول، والمعرّف 42 لسيف فريد. تحتفظ أليس بـ balanceOf(Alice, 1) = 500 وbalanceOf(Alice, 7) = 3 وbalanceOf(Alice, 42) = 1.
- تستدعي أليس
safeBatchTransferFromمعids = [1, 7, 42]وvalues = [120, 1, 1]. إذا نجح التحقق، تصبح أرصدتها الجديدة500 - 120 = 380و3 - 1 = 2و1 - 1 = 0؛ ويحصل المستلِم على الكميات المقابلة. - يصدر العقد حدث
TransferBatch. وإذا كان المستلِم عقدًا، فعليه قبول الدفعة عبرonERC1155BatchReceived؛ وإلا تُبطَل المعاملة كلها ولا يبقى أي من تغييرات الأرصدة الثلاثة. - يتصرف المعرّف
42كرمز غير قابل للاستبدال فقط لأن منطق إصداره ونقله يبقي العرض عند1. لا يفرض ERC-1155 هذه القاعدة بذاته. ويمكن للعقد نفسه لاحقًا سك المزيد من المعرّف1وفقًا لضوابط الوصول الخاصة به.
المخاطر والضوابط
- صلاحية المشغّل الواسعة. قد ينقل مشغّل خبيث أو مخترق تمت الموافقة عليه عبر
setApprovalForAllكل معرّف مملوك في ذلك العقد. تحقّق من عنوان المشغّل والعقد، واستخدم محفظة منفصلة عند الحاجة، وألغِ الموافقات القديمة. - صلاحيات السك والإيقاف والترقية. هذه خصائص للتنفيذ وليست ضمانات يقدّمها المعيار. افحص أصحاب الأدوار، ومديري الوكيل، والأقفال الزمنية، وامتدادات العرض، وما إذا كانت الترقية تستطيع تغيير الأرصدة أو قواعد النقل.
- عدم تطابق البيانات الوصفية والأصل. قد يتغير معرّف URI أو ملف JSON المستضاف بينما يبقى المعرّف على الشبكة ثابتًا. تحقّق من تجزئات المحتوى، واستمرارية التخزين، والتزامات المُصدر، والحقوق الممثلة خارج عقد الرمز.
- أخطاء التكامل. قد تربط المحافظ والمفهرسات مصفوفات الدفعة بصورة خاطئة، أو تفوّت أحداثًا تاريخية، أو تسيء معالجة إعادة التنظيم، أو تخلط بين المعرّف نفسه عبر عقود وشبكات مختلفة. طابق استدعاءات العقد والسجلات والأرصدة النهائية.
- مخاطر المستلِم وإعادة الدخول. تنفّذ استدعاءات المستلِم شيفرة خارجية أثناء تدفق النقل. تحتاج عمليات التنفيذ والبروتوكولات المتكاملة إلى ترتيب ملائم للحالة ودفاعات ضد إعادة الدخول؛ ودعم الاستدعاء وحده لا يُعد مراجعة أمنية.
- مخاطر التكلفة والسيولة. تظل عمليات النقل الدفعي مستهلكة للغاز، وتُبطَل ذريًا إذا فشل شرط مطلوب واحد. ولا يغطي ERC-1155 سيولة السوق أو التسعير أو الإتاوات أو التجسير أو الاسترداد أو إنفاذ الحقوق خارج الشبكة.
مفاهيم خاطئة شائعة
- «كل معرّف هو NFT». يمكن أن تكون لأي معرّف أي كمية؛ وتعتمد صفة عدم القابلية للاستبدال على عرض التنفيذ ودلالاته.
- «العقد الواحد يعني مجموعة واحدة». يمكن أن يضم العقد أنواعًا كثيرة غير مترابطة من الرموز، ويشير المعرّف الرقمي نفسه في عقد آخر إلى أصل مختلف.
- «النقل الآمن يعني أن الأصل آمن». يتحقق الاستدعاء من توافق المستلِم، لا من جودة العقد أو السعر أو البيانات الوصفية أو قابلية الاسترداد.
- «التجميع يوفّر الغاز دائمًا». غالبًا ما يتجنب النفقات المتكررة، لكن النتيجة الفعلية تعتمد على التنفيذ وعدد المعرّفات وتغييرات التخزين وبيانات الاستدعاء ونموذج رسوم الشبكة.