Како да се изгради, распореди и тестира Waves RIDE dApp

Здраво! Во оваа статија, ќе ви покажам како да пишувате и стартувате обична dApp на јазол Waves. Размислете за потребните алатки, методи и пример за развој.

Како да се изгради, распореди и тестира 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

Овој чекор е изборен ако не сте обожавател на IDE и претпочитате уредувачи на текст. Сите потребни алатки се комунални услуги на командната линија. Ако користите vim, проверете го приклучокот vim-возење.

Преземете и инсталирајте Visual Studio Code: 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. Накратко ќе го анализираме dApp во следниот блок.
  • Под папката ./test/ ќе ја најдете датотеката *.js. Ова е местото каде што се чуваат тестовите.
  • ./surfboard.config.json - конфигурациска датотека за извршување на тестови.

Envs е важен дел. Секоја околина е конфигурирана вака:

  • Крајната точка REST API на јазолот што ќе се користи за стартување на dApp и CHAIN_ID на мрежата.
  • Лозинка за сметката на токен што ќе биде извор на вашите тест токени.

Како што можете да видите, surfboard.config.json стандардно поддржува повеќе средини. Стандардно, локалната средина е поставена (клучот defaultEnv е параметар на променлива).

Демо апликација за паричник

Овој дел не е референца за јазикот RIDE. Наместо тоа, погледнете ја апликацијата што ја распоредуваме и тестираме со цел подобро да разбереме што се случува во блокчејнот.

Размислете за едноставна апликација за демо паричник. Секој може да испраќа токени на адресата dApp. Можете да ги повлечете само вашите сопствени БРАНОВИ. Две @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 поддржува континуирана компилација додека уредувате датотека. Затоа, секогаш можете да гледате за грешки во картичката ПРОБЛЕМИ.

Како да се изгради, распореди и тестира Waves RIDE dApp
Ако сакате да користите различен уредувач на текст при составувањето на датотеката, користете

surfboard compile ride/wallet.ride

Ова ќе излезе низа base64 од компајлиран RIDE код.

Тест скрипта за „wallet.ride“

Ајде да погледнеме тест датотека. Овозможено од рамката Мока на JavaScript. Има функција „Пред“ и три теста:

  • „Before“ финансира повеќе сметки преку MassTransferTransaction, ја составува скриптата и ја распоредува во блокчејнот.
  • „Може да се депонира“ испраќа InvokeScriptTransaction на мрежата, активирајќи ја функцијата депозит() за секоја од двете сметки.
  • „Не може да се повлече повеќе од депонираниот“ тестови дека никој не може да украде туѓи токени.
  • „Може да депонира“ проверува дали повлекувањата се обработени правилно.

Извршување тестови од даска за сурфање и анализа на резултати во 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. За тестирање во околината на тестнет, користете:

surfboard test --env=testnet

Добијте тест токени

2. Ако сакате да ги видите верзиите на трансакциите на JSON и како тие се обработуваат од јазолот, извршете го тестот со -v (што значи „објаснето“):

surfboard test -v

Користење на апликации со Waves Keeper

1. Поставете Waves 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 бара дозвола да потпише InvokeScriptTransaction со плаќање од 10 WAVES.

6. Потврдете ја трансакцијата:

Како да се изгради, распореди и тестира Waves RIDE dApp
Трансакцијата е креирана и емитувана на мрежата. Сега можете да ја видите нејзината лична карта

7. Гледајте ја трансакцијата со Waves Explorer. Внесете ID во полето за пребарување

Како да се изгради, распореди и тестира Waves RIDE dApp

Заклучоци и дополнителни информации

Ги разгледавме алатките за развој, тестирање, распоредување и користење на едноставни dApps на платформата Waves:

  • Јазик на ВОЗЕЊЕ
  • VS код уредник
  • Waves Explorer
  • Сурфање
  • Чувар на бранови

Линкови за оние кои сакаат да продолжат да учат RIDE:

Повеќе примери
Онлајн IDE со примери
Документација на бранови
Разговор на програмерите на Телеграма
Бранови и ВОЗЕТЕ на оџакот
НОВО! Онлајн курсеви за создавање dApps на платформата Waves

Продолжете да нуркате во RIDE и изградете ја вашата прва dApp!

TL; ДР: bit.ly/2YCFnwY

Извор: www.habr.com

Додадете коментар