كيفية بناء ICO على NEO باستخدام قالب العقد الذكي NEX ICO

يغطس هذا المنشور في القالب الجديد لـ Neon Exchange (NEX) وكيفية استخدامه كمطور ICO لتكوين وتجميع ونشر واختبار عقد ICO الذكي.

العملية برمتها تشمل الخطوات التالية:

  • تكييف قالب ICO لاحتياجاتك
  • ترجمة قالب العقد إلى bytecode NEO (ملف .avm)
  • نشر العقد الذكي المترجمة باستخدام الثعبان الجديد
  • استدعاء الأساليب في العقد المنشور (النشر ، mintTokens ، balanceOf ، ...)
  • لأغراض الاختبار ، سوف نستخدم شبكة خاصة من blockchain NEO

حول قالب NEX ICO

تم إصدار قالب العقد الذكي في منتصف شهر ديسمبر ، وتم تقديمه في منشور مدونة على وسيط التبادل الرسمي. يحتوي القالب على ثلاثة ابتكارات مثيرة للاهتمام بشكل خاص:

  • التوافق الكامل NEP5 (.1)
  • إنفاذ KYC / AML (اختياري): يمكن لمشغلي ICO اختيار طلب التحقق من المشاركين قبل المشاركة. يعمل هذا عن طريق إدراج عناوين المشاركين في القائمة البيضاء قبل أن يتمكنوا من استدعاء طريقة العقد الذكية بنجاح
  • آلية رد واسترداد مبسطة: يشتمل القالب على عدة طرق لتجنب مساهمات ICO غير الصالحة ومعالجة المبالغ المستردة تلقائيًا (على سبيل المثال ، عندما لا يتم إدراج أحد المشاركين في القائمة البيضاء ، أو يساهم خارج نافذة ICO).

يمكنك العثور على وصف أكثر تعمقًا لأولئك في منشور المدونة الرسمي.

المستحضرات: بيثون 3.5 + بيثون جديد

تأكد من تثبيت Python 3.5 ، ويمكنك الحصول عليه من صفحة التنزيلات الرسمية لـ Python أو من مدير الحزم الذي تختاره (في نظام MacOS ، يجب تثبيته افتراضيًا ، وإلا استخدم البيرة المحلية في الحصول عليها). يمكنك التحقق من إصدار Python باستخدام "python3.5 -V".

يستخدم هذا الدليل الثعبان الجديد ، وبالتالي إعداد هذا كخطوة أولى. استنساخ المستودع ، قم بإعداد virtualenv وتثبيت المتطلبات. تتم تغطية العملية برمتها كدليل مفصل خطوة بخطوة في الثعبان الجديد README. اتبع هذا وستكون لديك بيثون جديد على استعداد للذهاب في أي وقت من الأوقات.

تكوين قالب ICO

يوضح هذا القسم كيفية تكييف القالب مع ICO الخاص بك. تتمثل الخطوة الأولى في استنساخ مستودع قوالب ICO ، وتحديد البيئة الافتراضية وتثبيت التبعيات:

git clone https://github.com/neonexchange/neo-ico-template.git
$ cd neo-ico-template /
python3.5 $ venv venv
المصدر venv / بن / تفعيل
(venv) $ pip install -r requirements.txt

الآن دعنا نتعمق في تكوين العقد الذكي ، وخاصة الاسم والرمز والملكية والعرض ومقدار الرموز التي يحصل عليها المشارك لإرسال NEO أو GAS.

يمكن تكوين جميع الإعدادات المهمة لـ ICO في nex / token / mytoken.py.

ملكية

من المهم تعيين المالك المناسب ، الذي لديه حق الوصول إلى الأساليب الإدارية للعقد.

  • بالنسبة للنشر المباشر ، يجب عليك إنشاء محفظة خصيصًا لهذا ICO (في موجه ne-python: "neo> create wallet ico.wallet").
  • تحتاج إلى الحصول على "تجزئة البرنامج النصي" للمحفظة واستخدام هذا كقيمة لمتغير المالك للعقد الذكي. عندما تفتح المحفظة باستخدام بيثون neo-python وطباعة التفاصيل ("neo> wallet") ، ستطبع خط معلومات به تجزئة النص:
[I 171218 15:24:14 UserWallet: 470] تجزئة البرنامج النصي b '# \ xba \' \ x03 \ xc52c \ xe8 \ xd6 \ xe5 "\ xdc2 39 \ xdc \ xd8 \ xee \ xe9" 
  • لأغراض الاختبار ، يمكنك فقط استخدام المحفظة المتوفرة مع صورة privatenet Docker ، والتي تحتوي على تجزئة هذا البرنامج النصي:
b '# \ xba \' \ x03 \ xc52c \ xe8 \ xd6 \ xe5 "\ xdc2 39 \ xdc \ xd8 \ xee \ xe9"

عيّن تجزئة البرنامج النصي كقيمة للمتغير "owner" في mytoken.py # 16.

إعدادات الرمز المميز ، العرض ، قيمة الرمز المميز ، الحدود القصوى ونافذة وقت ICO

  • تغيير اسم الرمز والرمز.
  • حدد المبلغ الإجمالي والمبلغ المبدئي الذي يحتفظ به الملاك ، وقم بتعيينه في المتغيرين "total_supply" و "initial_amount".
  • ثم حدد عدد الرموز التي سيتلقاها المشارك عند إرسال NEO أو GAS ، ثم قم بتعيينها في المتغيرات "tokens_per_neo" و "tokens_per_gas".
  • إذا كان يجب أن يكون هناك حد أقصى للمشاركين ، فيمكنك تعريف ذلك بـ "max_exchange_limited_round".
  • أخيرًا ، اضبط وقت بدء ICO ووقت الانتهاء ، استنادًا إلى ارتفاع كتلة NEO. لأغراض الاختبار ، اضبط المتغير block_sale_start على 1 والنهاية على 1 + 100000.

مختلف

إذا كنت ترغب في تعطيل عملية KYC ، فما عليك سوى إزالة التحقق من KYC على crowdsale.py # 149 ("إن لم يكن self.get_kyc_status (إن لم يكن self.get_kyc_status (attachments.sender_addr ، تخزين)")). انظر أيضا التعليقات في الكود.

إذا كنت ترغب في تمكين المستخدمين من إرسال GAS بالإضافة إلى NEO ، فأنت بحاجة إلى تمكينه عن طريق إلغاء تثبيت الخطوط على crowdsale.py # 136.

اختبار وتجميع قالب ICO إلى NEO bytecode

أثناء تكوين قالب ICO وتكييفه ، من المفيد جدًا اختبار الأساليب المختلفة باستمرار. يوفر ne-python وظيفة مضمنة لإنشاء التعاقدات الذكية وطريقة الاختبار مع المعلمات المخصصة.

على سبيل المثال ، دعنا نبني SC ونختبر طريقة "الاسم". افتح موجه ne-python واستخدم أمرًا مثل هذا (استبدل المسار إلى القالب بالمسار النسبي إلى دليل القالب الخاص بك):

neo> إنشاء مسار إلى قالب / ico_template.py test 0710 05 اسم خاطئ صحيح []
تحميل وإنقاذ! ../nex/neo-ico-template/ico_template.py
التشذيب تحميل الأسلوب الذاتي
التشذيب تحميل الأسلوب الذاتي
تم حفظ الإخراج إلى المسار إلى القالب / ico_template.avm
[I 171219 14:21:29 EventHub: 102] [test_mode] [SmartContract.Execution.Success] [70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6] [b'NEX Template]]
-------------------------------------------------- ---------
استدعاء المسار إلى القالب / ico_template.py باستخدام الوسائط ['name' ، '[]']
اختبار نشر استدعاء ناجحة
تستخدم ما مجموعه 462 عملية
النتيجة b'NEX Template '
استدعاء تكلفة الغاز TX: 0.001
-------------------------------------------------- -----------

تقوم هذه الخطوة أيضًا بتجميع كود Python إلى NEO bytecode ، مما ينتج ملفًا باسم "ico_template.avm" (الموجود في دليل القالب ، بجانب ملف ico_template.py).

بدلاً من ذلك ، يمكنك أيضًا ترجمة رمز عقد بيثون الذكي يدويًا ، ويمكنك قراءة المزيد عن ذلك في القالب README.

بدء شبكة خاصة من NEO Blockchain

والخطوة التالية هي بدء شبكة خاصة من NEO blockchain لنشر العقد الذكي المترجمة مع الثعبان الجديد.

من السهل تشغيل شبكة خاصة باستخدام Docker مع هذه الصورة: https://hub.docker.com/r/metachris/neo-privnet-with-gas/. ما عليك سوى اتباع التعليمات الموجودة على موقع الويب لتنشيطه وتشغيله (انظر أيضًا هذا المنشور).

يمكنك التأكد من تشغيل الشبكة الخاصة باستخدام "docker ps".

الآن الاتصال بالشبكة الخاصة مع بيثون الجدد. يؤدي بدء المطالبة .py باستخدام وسيطة "-p" إلى استخدام الشبكة المحلية الخاصة:

$ python موجه. py -p
الأجسام القريبة من الأرض اكتب "مساعدة" للبدء
الجدد>

يجب أن يكون عدد القطع في أسفل المحطة حوالي 2115 ويزيد. قم بتنزيل وفتح ملف privatenet wallet.json (كلمة المرور: coz ، راجع أيضًا وصف لوحة الوصل Docker) ، وأعد إنشاء المحفظة:

neo> فتح محفظة neo-privnet.wallet
[كلمة المرور]> كوز
افتتح محفظة في neo-privnet.wallet
الجدد> إعادة بناء المحفظة

انتظر الآن بضع ثوان ، وتحقق من أن جميع NEO و GAS متاحة من خلال إصدار أمر "wallet" ، الذي يعرض جميع المعلومات:

الجدد> المحفظة

نشر العقد الذكي

لدينا الآن عقدًا ذكيًا مترجمًا ، وشبكة خاصة من blockchain قيد التشغيل ، وثعبان جديد تم إعداده بالكامل مع محفظة بها الكثير من NEO و GAS. والخطوة التالية هي نشر العقد الذكي مع الثعبان الجديد.

في هذا المثال ، قمت بنسخ العقد الذكي المترجم (ملف ico_template.avm) في دليل الثعبان الجديد ، مما يسهل نشره في blockchain:

neo> import contract ico_template.avm 0710 05 True False
خصائص العقد: 1
يرجى ملء تفاصيل العقد التالية:
[اسم العقد]> قالب NEX
[نسخة العقد]> 1
[المؤلف العقد]> نيكس
[عقد البريد الإلكتروني]> NEX
[وصف العقد]> NEX
إنشاء عقد ذكي ....
                 الاسم: نيكس ico القالب
              النسخة 1
               الكاتب: نيكس
                البريد الإلكتروني: NEX
          الوصف:
        يحتاج التخزين: صحيح
 يحتاج إلى استدعاء ديناميكي: خطأ
{
    "returntype": "05" ،
    ...
}

-------------------------------------------------- -------------------------------------------------- ---------------------------------
اختبار نشر استدعاء ناجحة
إجمالي العمليات المنفذة: 11
النتائج ['واجهة IOp: ']
توزيع تكلفة استدعاء الغاز TX: 490.0
نشر استدعاء رسوم TX: 0.0
-------------------------------------------------- -------------------------------------------------- ---------------------------------
أدخل كلمة المرور لمتابعة ونشر هذا العقد
[كلمة المرور]> كوز
[I 171218 12:59:31 المعاملة: 380] التحقق من المعاملة: b ''

كان الأمر الذي استخدمناه هو "import contract ico_template.avm 0710 05 True False" ، مما يعني استيراد الملف ico_template.avm مع أنواع المعلمات 0710 (السلسلة والصفيف) وإرجاع نوع بايت الصفيف. تعني المعلمات "خطأ حقيقي" في النهاية "احتاج إلى تخزين" (نعم) و "دعم الاستدعاء الديناميكي" (لا). راجع أيضًا مستندات neo حول أنواع معلمات SC.

في هذه المرحلة ، يتم نشر العقد. انتظر بضع كتل حتى تظهر على blockchain:

neo> tx 

استبدل بالتجزئة الفعلية في نهاية الخطوة السابقة. بمجرد العثور على المعاملة ، يمكنك البحث عن العقد الذكي للحصول على مزيد من المعلومات. في هذا المثال ، نبحث عن "nex" لأننا استخدمنا ذلك في خطوة نشر العقد الذكية:

الجدد> عقد البحث نيكس
تم العثور 1 النتائج لأجل nex
خصائص العقد الذاتي: 1
{
    "البريد الإلكتروني": "NEX" ،
    "الخصائص": {
        "dynamic_invoke": false ،
        "التخزين": صحيح
    }،
    "code_version": "nex" ،
    "name": "nex" ،
    "الوصف": "NEX" ،
    "المؤلف": "NEX" ،
    "الشفرة": {
        "نوع العودة": 5 ،
        ...
        "hash": "70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6" ،
        "المعلمات": "0710"
    }،
    "الإصدار": 0
}

في هذه الحالة ، يحتوي العقد الذكي ICO على رقم تجزئة 70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6 ، والذي سنحتاج إلى استخدامه في جميع عمليات استدعاء الأسلوب.

استدعاء الأساليب

يحتوي العقد الذكي ICO على عدة طرق ، بعضها يجب أن يستشهد به المالك والبعض الآخر يمكن أن يطلق عليه الجميع.

يوفر هذا الرسم البياني نظرة عامة تقريبية على المراحل وأساليب العقد الذكية ذات الصلة:

مراحل ICO والأساليب المختارة

يمكنك أيضًا إلقاء نظرة على NEP-5.1 وموقع مدونة Neon Exchange للحصول على مزيد من المعلومات حول الطرق المختلفة المتاحة ، بما في ذلك الطرق غير المدرجة هنا في الرسم التخطيطي.

تتمثل الخطوة الأولى في استدعاء طريقة "النشر" الخاصة بالعقد الذكي ، والتي تخزن الكمية الأولية من الرموز المميزة كـ "الرموز المتداولة" في تخزين العقد. مع الثعبان الجديد نستخدم الأمر testinvoke مع تجزئة العقد الذكية لاستدعاء طريقة نشر (دون أي وسيطات):

الجدد> testinvoke 70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6 نشر []

الأقواس الفارغة تعني أنه لا توجد وسيطات لتمرير طريقة النشر.

بعد استدعاء طريقة النشر وإظهار المعاملة على blockchain ، يمكننا التحقق من عدد الرموز المميزة المتداولة بالفعل باستخدام طريقة التداول:

الجدد> testinvoke 70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6 تداول []
[I 171218 16:11:31 EventHub: 102] [test_mode] [SmartContract.Storage.Get] [70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6] b'in_circulation '-> bytearray (b' \ x00 \ xa_ \ xa_
[I 171218 16:11:31 EventHub: 102] [test_mode] [SmartContract.Execution.Success] [70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6] [b '\ x00 \ xa01 \ xa9_ \ xe3 \ x00']
-------------------------------------------------- -------------------------------------------------- ---------------------------------
اختبار استدعاء ناجحة
مجموع العمليات: 969
النتائج ["ByteArray: bytearray (b '\\ x00 \\ xa01 \\ xa9 _ \\ xe3 \\ x00')"]
استدعاء تكلفة الغاز TX: 0.0
استدعاء رسوم TX: 0.001
-------------------------------------------------- -------------------------------------------------- ---------------------------------

في هذه الحالة ، تكون النتيجة صفيف البايت هذا: b '\ x00 \ xa01 \ xa9_ \ xe3 \ x00'. يمكننا تحويله إلى عدد صحيح مع Python 3 مثل هذا:

>>> val = b '\ x00 \ xa01 \ xa9_ \ xe3 \ x00'
>>> int.from_bytes (val، byteorder = "little")
250000000000000

كما ترون ، يمثل صفيف البايت قيمة عدد صحيح 250000000000000 ، وهو 2500000.00000000 الرموز ، المبلغ الأولي من 2.5m الرموز المميزة للمالكي المحدد في mytoken.py.

إرجاع الأمر crowdsale_available العدد المتبقي من الرموز المميزة المتوفرة في هذه الكتلة:

الجدد> testinvoke 70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6 crowdsale_available []
-------------------------------------------------- -------------------------------------------------- ---------------------------------
اختبار استدعاء ناجحة
إجمالي العمليات: 1047
النتائج ['عدد صحيح: 750000000000000']
استدعاء تكلفة الغاز TX: 0.0
استدعاء رسوم TX: 0.001
-----------------------------

في هذه الحالة ، لا تزال جميع الرموز التي يبلغ طولها 7.5 متر متاحة.

هناك بعض طرق التعاقد الذكية الخاصة في هذا القالب: crowdsale_register و crowdsale_status.

يتعين على مشغل ICO وضع عناوين في القائمة البيضاء للسماح لها بالمشاركة. لإدراج عنوان مثل ATELFGeypfK15uwNvRdQe1zaD3vw38976L في القائمة البيضاء ، يمكنك استدعاء crowdsale_register مثل هذا:

الجدد> testinvoke 70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6 crowdsale_register ["ATELFGeypfK15uwNvRdQe1zaD3vw38976L"]

بعد مرور هذه المعاملة ، يمكنك التحقق من حالة حشود العنوان باستخدام هذا الأمر:

الجدد

بمجرد تسجيل عنوان kyc ، يمكن للمستخدمين المشاركة في ICO من خلال استدعاء طريقة mintTokens مع بعض NEO / GAS المرفقة.

هذه هي الطريقة التي ستصدر بها هذه الدعوة من الثعبان الجديد مع 5 NEO المرفقة:

الجدد> testinvoke 70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6 mintTokens [] --attach-neo = 5

بمجرد انتهاء هذه المكالمة ، يمكنك التحقق من الرصيد باستخدام طريقة NEP-5 القياسية:

الجدد> testinvoke 70b3f7098a9a3f2361a1f0c312e9842ec4ca6cc6

وهذا هو! لقد أجرينا جميع الخطوات اللازمة لتشغيل ICO باستخدام قالب NEX ICO. يمكنك أن تقرأ عن طرق NEP-5 الإضافية هنا.

أخيرًا ، في الثعبان الجديد ، ستحتاج إلى إضافة رمز NEP-5 هذا إلى محفظتك. يمكنك القيام بذلك باستخدام "استيراد الرمز المميز <رمز>" ، وبعد ذلك سترى الأرصدة في محفظتك:

الجدد> رمز الاستيراد 70b3f7098a9a3f2361a1f0c312e9842ec4ca6dc6

بالمناسبة ، سيكون هناك مقال قادم يفسر بعض الفروق الدقيقة والمآزق الخاصة بمترجم العقود الذكية الجديد!

شكرًا جزيلاً للأشخاص في Neon Exchange على الاستعانة بمصادر خارجية لمثل هذه البرامج الرائعة. سيكون من المفيد للعديد من المشاريع القادمة!

إذا كانت لديك أسئلة أو تعليقات ، فتواصل مع المؤلف عبرmetachris.

المراجع

  • الجدد إيكو-القالب
  • NEP5 (0.1)
  • الجدد الثعبان
  • الجدد أفعى
  • تبادل النيون