نحوه ساخت، استقرار و آزمایش امواج RIDE dApp

سلام! در این مقاله به شما نشان خواهم داد که چگونه یک dApp معمولی را روی گره Waves بنویسید و اجرا کنید. بیایید ابزارها، روش ها و نمونه ای از توسعه را بررسی کنیم.

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp

طرح توسعه برای dApps و برنامه های معمولی تقریباً یکسان است:

  • ما کد را می نویسیم
  • نوشتن تست خودکار
  • راه اندازی برنامه
  • آزمایش کردن

ابزارهای

1. docker برای اجرای گره و Waves Explorer

اگر نمی خواهید یک گره راه اندازی کنید، می توانید از این مرحله رد شوید. بالاخره یک شبکه آزمایشی و آزمایشی وجود دارد. اما بدون استقرار گره خود، فرآیند آزمایش ممکن است طولانی شود.

  • شما دائماً به حساب های جدید با توکن های آزمایشی نیاز خواهید داشت. شیر آب آزمایشی شبکه هر 10 دقیقه 10 موج انتقال می دهد.
  • میانگین زمان بلوک در شبکه آزمایشی 1 دقیقه، در گره - 15 ثانیه است. این امر به ویژه زمانی قابل توجه است که یک تراکنش نیاز به تأییدهای متعدد داشته باشد.
  • ذخیره سازی تهاجمی در گره های آزمایشی عمومی امکان پذیر است.
  • همچنین ممکن است به دلیل تعمیر و نگهداری موقتاً در دسترس نباشند.

از این به بعد من فرض می کنم که شما با گره خود کار می کنید.

2. ابزار خط فرمان تخته موج سواری

  • Node.js را با استفاده از ppa، homebrew یا exe از اینجا دانلود و نصب کنید: https://nodejs.org/en/download/.
  • Surfboard را نصب کنید، ابزاری که به شما امکان می‌دهد آزمایش‌ها را روی یک گره موجود اجرا کنید.

npm install -g @waves/surfboard

3. افزونه Visual Studio Code

اگر طرفدار IDE نیستید و ویرایشگرهای متن را ترجیح می دهید، این مرحله اختیاری است. تمام ابزارهای لازم ابزارهای خط فرمان هستند. اگر از vim استفاده می کنید به افزونه توجه کنید vim-ride.

کد ویژوال استودیو را دانلود و نصب کنید: https://code.visualstudio.com/

VS Code را باز کنید و افزونه waves-ride را نصب کنید:

نحوه ساخت، استقرار و آزمایش امواج 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:

نحوه ساخت، استقرار و آزمایش امواج 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. خواهید دید که با چه سرعتی یک مدار گره محلی خالی ساخته می شود.

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp
Waves Explorer یک نمونه گره محلی را نمایش می دهد

ساختار سوار و ابزار تخته موج سواری

یک دایرکتوری خالی ایجاد کنید و دستور را در آن اجرا کنید

surfboard init

این دستور یک دایرکتوری را با ساختار پروژه، برنامه‌های کاربردی و آزمایش‌های «hello world» مقداردهی اولیه می‌کند. اگر این پوشه را با VS Code باز کنید، خواهید دید:

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp
Surfboard.config.json

  • در زیر پوشه ./ride/ یک فایل wallet.ride را پیدا خواهید کرد - دایرکتوری که کد dApp در آن قرار دارد. در بلوک بعدی به طور خلاصه dApps را تحلیل خواهیم کرد.
  • در زیر پوشه ./test/ یک فایل *.js پیدا خواهید کرد. تست ها در اینجا ذخیره می شوند.
  • ./surfboard.config.json – فایل پیکربندی برای اجرای آزمایش ها.

Envs بخش مهمی است. هر محیط به صورت زیر پیکربندی شده است:

  • نقطه پایانی REST API گره که برای راه‌اندازی dApp و CHAIN_ID شبکه استفاده می‌شود.
  • یک عبارت مخفی برای یک حساب کاربری با توکن هایی که منابع توکن های آزمایشی شما خواهند بود.

همانطور که می بینید، surfboard.config.json به طور پیش فرض از چندین محیط پشتیبانی می کند. پیش فرض محیط محلی است (کلید defaultEnv یک پارامتر قابل تغییر است).

برنامه کیف پول نمایشی

این بخش اشاره ای به زبان RIDE نیست. در عوض، نگاهی به برنامه‌ای که برای درک بهتر آنچه در بلاک چین رخ می‌دهد، استقرار و آزمایش می‌کنیم.

بیایید به یک برنامه ساده Wallet-demo نگاه کنیم. هر کسی می تواند توکن ها را به آدرس dApp ارسال کند. شما فقط می توانید WAVES خود را خارج کنید. دو تابع @Callable از طریق InvokeScriptTransaction در دسترس هستند:

  • 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 از کامپایل مداوم در حین ویرایش فایل پشتیبانی می کند. بنابراین، همیشه می توانید خطاها را در برگه مشکلات نظارت کنید.

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp
اگر می خواهید هنگام کامپایل کردن فایل از ویرایشگر متن دیگری استفاده کنید، استفاده کنید

surfboard compile ride/wallet.ride

با این کار یک سری کد RIDE کامپایل شده در base64 تولید می شود.

اسکریپت تست برای "wallet.ride"

بیایید نگاهی بیندازیم به فایل تست. پشتیبانی شده توسط چارچوب موکای جاوا اسکریپت. یک تابع "قبل" و سه تست وجود دارد:

  • «پیش از» چندین حساب را از طریق MassTransferTransaction تأمین مالی می کند، اسکریپت را کامپایل می کند و آن را در بلاک چین مستقر می کند.
  • "Can depozit" یک InvokeScriptTransaction را به شبکه ارسال می کند و تابع ()deposit را برای هر یک از دو حساب فعال می کند.
  • تست‌های «نمی‌توان بیش از آنچه واریز شده برداشت کرد» که هیچ‌کس نمی‌تواند توکن‌های دیگران را بدزدد.
  • «می توانم واریز کنم» چک می کند که برداشت ها به درستی پردازش شده اند.

تست ها را از تخته موج سواری اجرا کنید و نتایج را در 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، فایل باینری دیکامپایل شده را پیدا کنید.

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp
کاوشگر امواج. برنامه ای که به تازگی راه اندازی شده است.

چند نکته تخته موج سواری:

1. برای تست در محیط تست نت از:

surfboard test --env=testnet

ژتون های تست را دریافت کنید

2. اگر می‌خواهید نسخه‌های JSON تراکنش‌ها و نحوه پردازش آن‌ها توسط گره را ببینید، آزمایش را با -v اجرا کنید (به معنی "کلمه"):

surfboard test -v

استفاده از برنامه ها با Waves Keeper

1. Waves Keeper را برای کار تنظیم کنید: http://localhost:6869

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp
راه اندازی Waves Keeper برای کار با یک گره محلی

2. عبارت مخفی را با توکن برای شبکه وارد کنید؟ برای سادگی، از seed اولیه گره خود استفاده کنید: waves private node seed with waves tokens. نشانی: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. شما می توانید یک برنامه تک صفحه ای بدون سرور را خودتان با استفاده از npm اجرا کنید. یا به مورد موجود بروید: chrome-ext.wvservices.com/dapp-wallet.html

4. آدرس کیف پول را از اجرای آزمایشی (که در بالا زیر آن خط کشیده شده) در کادر متنی آدرس dApp وارد کنید.

5. مقدار کمی را در قسمت "سپرده" وارد کنید و روی دکمه کلیک کنید:

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp
Waves Keeper برای امضای InvokeScriptTransaction با پرداخت 10 WAVES مجوز درخواست می کند.

6. تایید معامله:

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp
تراکنش ایجاد شده و به شبکه پخش می شود. حالا می توانید شناسه او را ببینید

7. تراکنش را با استفاده از Waves Explorer نظارت کنید. ID را در قسمت جستجو وارد کنید

نحوه ساخت، استقرار و آزمایش امواج RIDE dApp

نتیجه گیری و اطلاعات تکمیلی

ما به ابزارهایی برای توسعه، آزمایش، استقرار و استفاده از dApps ساده در بستر Waves نگاه کردیم:

  • زبان سواری
  • ویرایشگر کد VS
  • کاوشگر امواج
  • تخته موج سواری
  • نگهدار امواج

پیوندهایی برای کسانی که می خواهند به یادگیری RIDE ادامه دهند:

نمونه های بیشتر
IDE آنلاین با مثال
مستندات امواج
چت برنامه نویس در تلگرام
امواج و RIDE در stackoverflow
جدید! دوره های آنلاین ایجاد dApps در بستر Waves

به غواصی در موضوع RIDE ادامه دهید و اولین dApp خود را ایجاد کنید!

TL؛ DR: bit.ly/2YCFnwY

منبع: www.habr.com

اضافه کردن نظر