WaveClamp
سير العمل

دالة _mint لـ ERC1155 في عقد عناصر اللعبة: من التخطيط للاختبار

03
مجموعة عناصر اللعبة

إضافة الإصدار إلى عقد عناصر اللعبة

تريد عقدًا واحدًا يصدر سيوفًا، جرعات، ومفاتيح، لكل منها معرف رمز خاص به، وتريد معرفة من المسموح له بإنشاء رموز جديدة. يكتب الوكيل كود Solidity، يشغل أوامر التجميع والاختبار على سلسلة محلية أو شبكة اختبار، ويعرض كل خطوة كبطاقة تحتوي على النتيجة الفعلية. يتتبع هذا الدليل دالة الإصدار، لأن من يستطيع استدعاؤها يقرر عدد الرموز الموجودة. لا يمكن تغيير العقد بعد نشره، لذا يبقى كل شيء هنا على سلسلة محلية أو شبكة اختبار، حيث لا قيمة للعملات فيها. يمكن للمبتدئين اتباع الخطوات الأربع بالترتيب، ويمكن للقراء المتمرسين القفز إلى الشروحات أدناه. تعمل الخطوات الأربع نفسها لمجموعة تذاكر، حيث يحصل كل نوع تذكرة على معرف خاص به، وتقرر دالة الإصدار عدد كل نوع.

01

فتح مجلد المشروع

ابدأ WaveClamp، واختر المجلد الذي يحتوي على ملفات .sol والاختبارات كمجلد عمل للدردشة، واختر Ask first (اسأل أولاً) حتى يصل كل تغيير كـ diff (تباين) تقبله أو ترفضه. تعمل أدوات الملفات داخل هذا المجلد، لذا احتفظ بالمشروع في مكان واحد. أنشئ مجلدًا مؤقتًا للتشغيل الأول إذا كنت تريد التدرب فقط.

02

وصف العقد

اطلب عقدًا لعناصر اللعبة يحتوي على ثلاثة أنواع من العناصر، ودالة إصدار يمكن لحساب مالك واحد فقط استدعاؤها، ونقل الدفعات، واسمح للوكيل بإنشاء الملف باستخدام write_file. سمِّ الملف باسم العقد حتى يمكن للخطوات اللاحقة الرجوع إليه. اجعل الطلب الأول صغيرًا، لأن الطلب الثاني يمكن أن يضيف نقل الدفعات بعد قبول الـ diff الأول.

03

تشغيل التجميع والاختبارات

أخبر الوكيل بتشغيل أمر التجميع وأمر الاختبار الخاص بك عبر Shell، ثم اقرأ رمز الخروج وأسماء أي اختبارات فاشلة في البطاقة الموسعة. يُحكم بالنجاح بناءً على رمز الخروج الفعلي، وليس بناءً على ملخص. إذا فشل أمر التجميع، تظهر البطاقة نص الخطأ، ويمكن للوكيل قراءته واقتراح إصلاح كـ diff جديد.

04

قراءة النتيجة

افتح البطاقات الموسعة، اقرأ الـ diff وإخراج الأمر، اقبل ما هو صحيح، ارفض الباقي، واطلب إصلاحًا حيثما فشل اختبار. كرر العملية حتى تمر الاختبارات، ثم اقرأ دالة الإصدار مرة أخرى. احتفظ بكل diff مقبول صغيرًا، حتى يشير الفشل اللاحق إلى تغيير واحد وليس عشرة.

واجهة دنيا للبدء منها

MultiTokenMinimal.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IMultiTokenMinimal {
    event TransferSingle(address indexed operator,
        address indexed from, address indexed to,
        uint256 id, uint256 value);

    function balanceOf(address account, uint256 id)
        external view returns (uint256);

    function uri(uint256 id)
        external view returns (string memory);
}

تعلن هذه الواجهة للقراءة فقط عن حدث TransferSingle ووظيفتي balanceOf وuri الخاصتين بمعيار الرمز المتعدد. لا تحتوي على حالة، ولا منطق إصدار، ولا مفاتيح، مما يجعلها ملفًا صغيرًا للقراءة قبل إضافة المنطق الحقيقي. شغل أمر التجميع عليها أولاً. قم بتجميعها أولاً، ثم اسمح للوكيل بتوسيعها diff واحد تمت مراجعته في كل مرة، بدءًا بدالة الإصدار. يتطابق اسم الملف مع تسمية المثال، حتى تتمكن من طلب فتحه لاحقًا.

شروحات: الإصدار، المقارنة، نقل الدفعات ووصف الرموز

إضافة دالة الإصدار

افتح العقد واطلب من الوكيل تغليف مساعد ERC1155 _mint في دالة عامة يمكن لحساب المالك فقط استدعاؤها. يستخدم الوكيل read_file لرؤية الكود الحالي وedit_file لإدراج الدالة، ويعرض التغيير كـ diff. تكشف التطبيقات مفتوحة المصدر الشائعة عن مساعدات داخلية تسمى _mint و_mintBatch، والمساعد الداخلي لا يحتوي على فحص وصول خاص به، وهذا هو سبب أهمية الغلاف. يمكنك إنشاء رمز ERC20 خطوة بخطوة بنفس الطريقة، لكن مجموعة عناصر اللعبة تحتاج إلى معرفات، لذا ابدأ من تخطيط الرمز المتعدد. ثم يشغل Shell أمر التجميع وأمر الاختبار الخاص بك، وتعرض كل بطاقة رمز خروج حقيقي. اقبل الـ diff فقط عندما تكون قد قرأت الاختبارات.

المقارنة مع مثال ERC-721

افتح مثال عقد ERC721 من مشروعك الخاص، أو اطلب من الوكيل كتابته باستخدام write_file، وضعه بجانب مجموعة العناصر الخاصة بك. يستخدم الوكيل grep لسرد الوظائف في كلا الملفين وread_file لمقارنة كيفية تخزين الملكية: مالك واحد لكل رمز في الملف الخاص بالرمز الفريد، رصيد لكل حساب ومعرف في ملف الرمز المتعدد. قد تحتاج معيار لملفات تعريف لامركزية باستخدام NFTs غير القابلة للنقل (soulbound) إلى رموز لا يمكن نقلها، وهو تصميم مختلف عن العناصر التي يمررها اللاعبون. اطلب من الوكيل وضع الاختلافات في جدول قصير. تقرأ المقارنة في الدردشة، تقرر أي معيار يناسب تصميمك، ثم فقط اطلب تغييرات في الكود.

إضافة نقل الدفعات

ينقل اللاعبون غالبًا عدة أنواع من العناصر في وقت واحد، لذا اطلب من الوكيل إضافة safeBatchTransferFrom وbalanceOfBatch إلى العقد. يستخدم الوكيل edit_file للتغيير، وglob للعثور على ملفات الاختبار، وShell لتشغيل أمر الاختبار الخاص بك بعد كل تعديل. تنقل وظائف الدفعات عدة معرفات رموز في معاملة واحدة، مما يعني أن اختبارًا واحدًا يمكنه التحقق من أرصدة متعددة. يعد فهم تسجيل الدخول بدون رسوم في ERC4337 موضوعًا منفصلًا، لذا احتفظ به خارج العقد الأول واختبره بشكل مستقل. اقرأ الـ diff في Ask first، شغل الاختبارات مرة أخرى، وابحث عن حدث TransferBatch في الإخراج قبل قبول التغيير.

فحص المستقبل والبيانات الوصفية

يجب على العقد الذي يستقبل الرموز تنفيذ onERC1155Received وonERC1155BatchReceived وقبول الرموز، وإلا سيتم رفض النقل الآمن. اطلب من الوكيل استخدام grep لكلا الاسمين وفتح العقد المستقبل باستخدام read_file، ثم سرد أيهما مفقود. اطلب منه بعد ذلك استخدام edit_file على قيمة uri(id) بحيث تحتوي على {id}، والتي تستبدلها العملاء بمعرف الرمز بصيغة سداسية عشرية صغيرة، مع حشو إلى 64 حرفًا. استخدم write_file لملف JSON واحد لكل معرف. شغل أمر التجميع وأمر الاختبار الخاص بك، اقرأ رموز الخروج، ومراجعة الـ diff النهائي قبل قبوله.

WaveClamp لنظام Windows

ابدأ عقدك الأول للرموز المتعددة

تحميل WaveClamp ↗