أهلا وسهلا بك! في المقالة ، سأعرض كيفية كتابة وتشغيل dApp منتظم على عقدة Waves. النظر في الأدوات والطرق اللازمة ومثال التنمية.
مخطط تطوير dApps والتطبيقات العادية هو نفسه تقريبا:
- كتابة رمز
- كتابة الاختبار الآلي
- قم بتشغيل التطبيق
- تجريب
الأدوات
1.
docker
لتشغيل العقد و Waves Explorer
إذا كنت لا تريد تشغيل العقدة ، يمكنك تخطي هذه الخطوة. بعد كل شيء ، هناك اختبار وشبكة تجريبية. ولكن بدون نشر العقدة الخاصة بك ، يمكن تأخير عملية الاختبار.
- ستحتاج دائمًا إلى حسابات جديدة مع رموز اختبار. يترجم رافعة شبكة الاختبار 10 موجات كل 10 دقائق.
- متوسط وقت الكتل في شبكة اختبار هو دقيقة واحدة ، في عقدة - 15 ثانية. هذا ملحوظ بشكل خاص عندما تتطلب معاملة عدة تأكيدات.
- في العقد اختبار العامة ، التخزين المؤقت العدواني هو ممكن.
- قد تكون غير متوفرة مؤقتًا بسبب الصيانة.
كذلك سوف أعتبر أنك تعمل مع العقدة الخاصة بك.
2. لوح التزلج أداة سطر الأوامر
- قم بتنزيل Node.js وتثبيته باستخدام ppa أو homebrew أو exe من هنا: https://nodejs.org/ar/download/ .
- قم بتثبيت Surfboard ، وهي أداة تسمح لك بإجراء الاختبارات على عقدة موجودة.
npm install -g @waves/surfboard
3. البرنامج المساعد Visual Studio Code
هذه الخطوة اختيارية إذا لم تكن من محبي IDE وتفضل برامج تحرير النصوص. جميع الأدوات اللازمة هي الأدوات المساعدة لسطر الأوامر. إذا كنت تستخدم vim ، انتبه إلى المكون الإضافي
vim-ride .
قم بتنزيل وتثبيت رمز Visual Studio:
https://code.visualstudio.com/افتح رمز VS وقم بتثبيت المكون الإضافي waves-ride:

Waves Keeper Browser Extension:
https://wavesplatform.com/products-keeperالقيام به!
قم بتشغيل العقدة و Waves Explorer
1. قم بتشغيل العقدة:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
تأكد من تشغيل العقدة من خلال واجهة برمجة تطبيقات REST على
الموقع http: // localhost: 6869 :
Swagger REST API لعقدة2. قم بتشغيل مثيل Waves Explorer:
docker run -d -e API_NODE_URL=http:
افتح متصفحًا وانتقل إلى
http: // localhost: 3000 . تعرف على مدى سرعة بناء سلسلة عقدة محلية فارغة.
يعرض مستكشف Waves مثيلًا لعقدة محليةهيكل ركوب وأداة ركوب الأمواج
قم بإنشاء دليل فارغ وقم بتشغيل الأمر فيه
surfboard init
يقوم الأمر بتهيئة الدليل بهيكل المشروع وتطبيقات مثل "hello world" والاختبارات. إذا قمت بفتح هذا المجلد برمز VS ، فسترى:
Surfboard.config.json
- ضمن المجلد ./ride/ ، ستجد ملف wallet.ride واحدًا - الدليل الذي يوجد به رمز dApp. سنقوم بتحليل dApp لفترة قصيرة في الكتلة التالية.
- ضمن المجلد ./test/ ، ستجد ملف * .js. يتم تخزين الاختبارات هنا.
- ./surfboard.config.json - ملف التكوين لتشغيل الاختبارات.
Envs هو قسم مهم. يتم تكوين كل بيئة على النحو التالي:
- نقطة نهاية واجهة برمجة تطبيقات REST الخاصة بالعقدة التي سيتم استخدامها لتشغيل شبكتي dApp و CHAIN_ID.
- العبارة السرية للحساب مع الرموز التي ستكون مصادر الرموز للاختبار الخاص بك.
كما ترون ، يدعم surfboard.config.json عدة بيئات افتراضيًا. بشكل افتراضي ، يتم تعيين البيئة المحلية (مفتاح defaultEnv هو معلمة قابلة للتغيير).
تطبيق المحفظة التجريبي
هذا القسم ليس دليلًا على لغة RIDE. بدلاً من ذلك ، إلقاء نظرة على التطبيقات التي نقوم بنشرها واختبارها من أجل فهم أفضل لما يحدث على blockchain.
فكر في تطبيق Wallet-demo البسيط. يمكن للجميع إرسال الرموز إلى عنوان dApp. يمكنك فقط سحب موجاتك. تتوفر دالاتCallable من خلال InvokeScriptTransaction:
deposit()
، والذي يتطلب دفع مرفق في WAVESwithdraw(amount: Int)
، والذي يعود الرموز
خلال دورة حياة dApp ، سيتم دعم الهيكل (العنوان → المبلغ):
إليك الرمز لفهم الموقف تمامًا:
# 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 يدعم الترجمة المستمرة عند تحرير ملف. لذلك ، يمكنك دائمًا تتبع الأخطاء في علامة التبويب مشاكل.
إذا كنت ترغب في استخدام محرر نص مختلف عند تجميع الملف ، استخدم surfboard compile ride/wallet.ride
سيؤدي ذلك إلى إخراج نطاق من RIDE base64 المترجمة.
حالة اختبار لـ 'wallet.ride'
لنلقِ نظرة على
ملف الاختبار . مدعوم من جافا سكريبت إطار موكا. هناك وظيفة "قبل" وثلاثة اختبارات:
- تقوم "قبل" بتمويل العديد من الحسابات من خلال MassTransferTransaction ، وتجميع البرنامج النصي ونشره على blockchain.
- "يمكن الإيداع" يرسل InvokeScriptTransaction إلى الشبكة ، ويقوم بتنشيط وظيفة الإيداع () لكل حساب من الحسابين.
- اختبارات "لا يمكن الانسحاب أكثر مما تم إيداعه" ، حيث لا يمكن لأحد سرقة رموز الآخرين.
- يمكن للإيداع التحقق من أن عمليات السحب تتم معالجتها بشكل صحيح.
إجراء الاختبارات باستخدام 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#
المقابلة
wallet#
. هناك يمكنك العثور على محفوظات المعاملة ، وحالة dApp ، والملف الثنائي decompiled.
موجات اكسبلورر. التطبيق الذي نشر للتو.بعض نصائح لوح التزلج:
1. للاختبار في بيئة testnet ، استخدم:
surfboard test --env=testnet
الحصول على اختبار الرموز2. إذا كنت تريد مشاهدة إصدارات المعاملات JSON وكيفية معالجتها بواسطة عقدة ، فقم بإجراء الاختبار باستخدام -v (يعني "مطوّل"):
surfboard test -v
استخدام التطبيقات مع Waves Keeper
1. تكوين Waves Keeper للعمل:
http: // localhost: 6869
تكوين Waves Keeper للعمل مع عقدة محلية2. استيراد عبارة مرور مع الرموز للشبكة؟ للبساطة ، استخدم البذرة الأولية للعقدة:
waves private node seed with waves tokens
. العنوان:
3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF
.
3. يمكنك تشغيل تطبيق بدون خادم من صفحة واحدة بنفسك باستخدام npm. أو استعرض للوصول إلى الموجود:
chrome-ext.wvservices.com/dapp-wallet.html4. أدخل عنوان المحفظة من التشغيل التجريبي (المسطر أعلاه) في مربع نص عنوان dApp
5. أدخل مبلغًا صغيرًا في حقل الإيداع وانقر على الزر:
تطلب Waves Keeper إذنًا لتوقيع InvokeScriptTransaction بدفع 10 WAVES.
6. تأكيد المعاملة:
يتم إنشاء المعاملة والبث إلى الشبكة. الآن يمكنك أن ترى هويتها7. لاحظ المعاملة باستخدام Waves Explorer. أدخل المعرف في حقل البحث

استنتاجات ومعلومات إضافية
نظرنا في تطوير واختبار ونشر واستخدام أدوات dApps البسيطة على منصة Waves:
- ركوب اللغة
- محرر رمز VS
- موجات المستكشف
- مزلجة
- حارس الأمواج
روابط لأولئك الذين يرغبون في متابعة دراسة RIDE:
المزيد من الأمثلةبيئة تطوير متكاملة على الانترنت مع أمثلةالأمواج الوثائقدردشة المطور Telegramموجات وركوب على stackoverflowNEW! دورات عبر الإنترنت حول إنشاء dApps على Waves Platformمتابعة الخوض في موضوع RIDE وإنشاء dApp الأول الخاص بك!
TL ؛ DR:
bit.ly/2YCFnwY