كيفية بناء ونشر واختبار Waves RIDE dApp

مرحبًا! سأوضح لك في هذه المقالة كيفية كتابة تطبيق dApp عادي وتشغيله على عقدة Waves. دعونا نلقي نظرة على الأدوات والأساليب اللازمة ومثال التطوير.

كيفية بناء ونشر واختبار Waves RIDE dApp

مخطط تطوير التطبيقات اللامركزية والتطبيقات العادية هو نفسه تقريبًا:

  • نكتب الكود
  • كتابة الاختبارات الآلية
  • بدء تشغيل التطبيق
  • اختبارات

أدوات

1. docker لتشغيل العقدة و Waves Explorer

إذا كنت لا ترغب في بدء عقدة، يمكنك تخطي هذه الخطوة. بعد كل شيء، هناك شبكة اختبارية وتجريبية. ولكن بدون نشر العقدة الخاصة بك، قد تستمر عملية الاختبار.

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

من الآن فصاعدا سأفترض أنك تعمل مع العقدة الخاصة بك.

2. أداة سطر الأوامر لركوب الأمواج

  • قم بتنزيل Node.js وتثبيته باستخدام ppa أو homebrew أو exe هنا: https://nodejs.org/en/download/.
  • قم بتثبيت Surfboard، وهي أداة تسمح لك بإجراء الاختبارات على عقدة موجودة.

npm install -g @waves/surfboard

3. البرنامج المساعد Visual Studio Code

هذه الخطوة اختيارية إذا لم تكن من محبي IDEs وتفضل برامج تحرير النصوص. جميع الأدوات اللازمة هي أدوات مساعدة لسطر الأوامر. إذا كنت تستخدم vim، انتبه إلى البرنامج المساعد ركوب vim.

قم بتنزيل وتثبيت كود Visual Studio: https://code.visualstudio.com/

افتح VS Code وقم بتثبيت البرنامج الإضافي Waves-Ride:

كيفية بناء ونشر واختبار Waves RIDE dApp

ملحق متصفح Waves Keeper: https://wavesplatform.com/products-keeper

القيام به!

ابدأ تشغيل العقدة وWaves Explorer

1. ابدأ العقدة:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

تأكد من تشغيل العقدة عبر REST API http://localhost:6869:

كيفية بناء ونشر واختبار Waves RIDE dApp
Swagger REST API للعقدة

2. ابدأ مثيل Waves Explorer:

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

افتح المتصفح وانتقل إلى http://localhost:3000. سترى مدى سرعة إنشاء دائرة العقدة المحلية الفارغة.

كيفية بناء ونشر واختبار Waves RIDE dApp
يعرض Waves Explorer مثيل العقدة المحلية

هيكل RIDE وأداة لوح التزلج

قم بإنشاء دليل فارغ وقم بتشغيل الأمر فيه

surfboard init

يقوم الأمر بتهيئة دليل يحتوي على بنية المشروع وتطبيقات واختبارات "hello World". إذا قمت بفتح هذا المجلد باستخدام VS Code، فسترى:

كيفية بناء ونشر واختبار Waves RIDE dApp
Surfboard.config.json

  • ستجد ضمن المجلد ./ride/ ملفًا واحدًا Wallet.ride - الدليل الذي يوجد به رمز dApp. سنقوم بتحليل التطبيقات اللامركزية بإيجاز في الكتلة التالية.
  • ستجد ضمن المجلد ./test/ ملف *.js. يتم تخزين الاختبارات هنا.
  • ./surfboard.config.json - ملف التكوين لتشغيل الاختبارات.

Envs هو قسم مهم. يتم تكوين كل بيئة على النحو التالي:

  • نقطة نهاية REST API للعقدة التي سيتم استخدامها لتشغيل dApp وCHAIN_ID للشبكة.
  • عبارة سرية لحساب يحتوي على الرموز المميزة التي ستكون مصادر الرموز الاختبارية الخاصة بك.

كما ترون، يدعم Surfboard.config.json بيئات متعددة بشكل افتراضي. الافتراضي هو البيئة المحلية (مفتاح defaultEnv هو معلمة قابلة للتغيير).

تطبيق المحفظة التجريبي

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

دعونا نلقي نظرة على تطبيق Wallet-demo البسيط. يمكن لأي شخص إرسال الرموز المميزة إلى عنوان dApp. يمكنك فقط سحب موجاتك. تتوفر وظيفتانCallable عبر InvocScriptTransaction:

  • deposit()الأمر الذي يتطلب الدفع المرفق في WAVES
  • withdraw(amount: Int)الذي يعود الرموز

طوال دورة حياة dApp، سيتم الحفاظ على البنية (العنوان → المبلغ):

اكشن
الحالة الناتجة

في البداية
فارغ

ودائع أليس 5 موجات
عنوان أليس → 500000000

ودائع بوب 2 موجات

عنوان أليس → 500000000
عنوان بوب → 200000000

بوب ينسحب 7 موجات
رفض!

أليس تسحب 4 موجات
عنوان أليس → 100000000
عنوان بوب → 200000000

إليك الكود لفهم الموقف بالكامل:

# In this example multiple accounts can deposit their funds and safely take them back. No one can interfere with this.
# An inner state is maintained as mapping `address=>waves`.
{-# STDLIB_VERSION 3 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func deposit() = {
 let pmt = extract(i.payment)
 if (isDefined(pmt.assetId))
    then throw("works with waves only")
    else {
     let currentKey = toBase58String(i.caller.bytes)
     let currentAmount = match getInteger(this, currentKey) {
       case a:Int => a
       case _ => 0
     }
     let newAmount = currentAmount + pmt.amount
     WriteSet([DataEntry(currentKey, newAmount)]) 
   }
 }
@Callable(i)
func withdraw(amount: Int) = {
 let currentKey = toBase58String(i.caller.bytes)
 let currentAmount = match getInteger(this, currentKey) {
   case a:Int => a
   case _ => 0
 }
 let newAmount = currentAmount - amount
 if (amount < 0)
   then throw("Can't withdraw negative amount")
   else if (newAmount < 0)
     then throw("Not enough balance")
     else ScriptResult(
       WriteSet([DataEntry(currentKey, newAmount)]),
       TransferSet([ScriptTransfer(i.caller, amount, unit)])
      )
 }
@Verifier(tx)
func verify() = false

يمكن العثور على نموذج التعليمات البرمجية أيضًا على GitHub جيثب:.

يدعم البرنامج المساعد VSCode التجميع المستمر أثناء تحرير الملف. لذلك، يمكنك دائمًا مراقبة الأخطاء في علامة التبويب "المشاكل".

كيفية بناء ونشر واختبار Waves RIDE dApp
إذا كنت تريد استخدام محرر نصوص مختلف عند تجميع الملف، فاستخدمه

surfboard compile ride/wallet.ride

سيؤدي هذا إلى إخراج سلسلة من كود RIDE المترجم من Base64.

اختبار النص البرمجي لـ "wallet.ride"

دعنا ننظر إلى ملف الاختبار. مدعوم من إطار عمل جافا سكريبت Mocha. هناك وظيفة "قبل" وثلاثة اختبارات:

  • تقوم "قبل" بتمويل حسابات متعددة عبر MassTransferTransaction، وتجميع البرنامج النصي ونشره على blockchain.
  • يرسل خيار "إمكانية الإيداع" InvocScriptTransaction إلى الشبكة، مما يؤدي إلى تنشيط وظيفة الإيداع () لكل حساب من الحسابين.
  • اختبارات "لا يمكن سحب أكثر مما تم إيداعه" لا يمكن لأحد أن يسرق رموز الآخرين.
  • يتحقق "إمكانية الإيداع" من معالجة عمليات السحب بشكل صحيح.

قم بإجراء الاختبارات من Surfboard وتحليل النتائج في Waves Explorer

لإجراء الاختبار، قم بتشغيل

surfboard test

إذا كان لديك برامج نصية متعددة (على سبيل المثال، تحتاج إلى برنامج نصي منفصل للنشر)، فيمكنك تشغيلها

surfboard test my-scenario.js

سيقوم Surfboard بجمع ملفات الاختبار في المجلد ./test/ وتشغيل البرنامج النصي على العقدة التي تم تكوينها في Surfboard.config.json. بعد بضع ثوان سترى شيئا مثل هذا:

wallet test suite
Generating accounts with nonce: ce8d86ee
Account generated: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Account generated: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Account generated: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Accounts successfully funded
Script has been set
   √ Can deposit (4385ms)
   √ Cannot withdraw more than was deposited
   √ Can withdraw (108ms)
3 passing (15s)

مرحا! مرت الاختبارات. الآن دعونا نلقي نظرة على ما يحدث عند استخدام Waves Explorer: انظر إلى الكتل أو الصق أحد العناوين أعلاه في البحث (على سبيل المثال، العنوان المقابل wallet#. هناك يمكنك العثور على سجل المعاملات وحالة dApp والملف الثنائي الذي تم فك ترجمته.

كيفية بناء ونشر واختبار Waves RIDE dApp
مستكشف الأمواج. أحد التطبيقات التي تم نشرها للتو.

بعض النصائح حول ركوب الأمواج:

1. للاختبار في بيئة testnet، استخدم:

surfboard test --env=testnet

الحصول على رموز الاختبار

2. إذا كنت تريد رؤية إصدارات JSON من المعاملات وكيفية معالجتها بواسطة العقدة، فقم بإجراء الاختبار باستخدام -v (يعني "مطول"):

surfboard test -v

استخدام التطبيقات مع Waves Keeper

1. قم بإعداد Wave Keeper للعمل: http://localhost:6869

كيفية بناء ونشر واختبار Waves RIDE dApp
إعداد Waves Keeper للعمل مع عقدة محلية

2. استيراد عبارة سرية مع الرموز المميزة للشبكة؟ للتبسيط، استخدم البذرة الأولية للعقدة الخاصة بك: waves private node seed with waves tokens. عنوان: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. يمكنك تشغيل تطبيق صفحة واحدة بدون خادم بنفسك باستخدام npm. أو اذهب إلى الموجود: chrome-ext.wvservices.com/dapp-wallet.html

4. أدخل عنوان المحفظة من التشغيل التجريبي (الموضح أعلاه) في مربع نص عنوان dApp

5. أدخل مبلغًا صغيرًا في حقل "الإيداع" وانقر فوق الزر:

كيفية بناء ونشر واختبار Waves RIDE dApp
يطلب Waves Keeper الإذن بالتوقيع على InvocScriptTransaction بدفع 10 WAVES.

6. تأكيد المعاملة:

كيفية بناء ونشر واختبار Waves RIDE dApp
يتم إنشاء المعاملة وبثها إلى الشبكة. الآن يمكنك رؤية هويتها

7. مراقبة المعاملة باستخدام Waves Explorer. أدخل رقم الهوية في حقل البحث

كيفية بناء ونشر واختبار Waves RIDE dApp

الاستنتاجات والمعلومات الإضافية

لقد نظرنا إلى الأدوات اللازمة لتطوير واختبار ونشر واستخدام التطبيقات اللامركزية البسيطة على منصة Waves:

  • لغة الركوب
  • محرر كود VS
  • مستكشف الأمواج
  • مزلجة
  • حارس الأمواج

روابط لأولئك الذين يرغبون في مواصلة تعلم RIDE:

مزيد من الأمثلة
IDE عبر الإنترنت مع أمثلة
توثيق الأمواج
دردشة المطور في Telegram
الأمواج والركوب على تدفق المكدس
جديد! دورات عبر الإنترنت حول إنشاء التطبيقات اللامركزية على منصة Waves

استمر في الغوص في موضوع RIDE وأنشئ أول تطبيق dApp خاص بك!

TL؛ DR: bit.ly/2YCFnwY

المصدر: www.habr.com

إضافة تعليق