Как да изградите, внедрите и тествате 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 Code плъгин

Тази стъпка не е задължителна, ако не сте фен на IDE и предпочитате текстови редактори. Всички необходими инструменти са помощни програми за командния ред. Ако използвате vim, обърнете внимание на приставката vim-ride.

Изтеглете и инсталирайте Visual Studio Code: https://code.visualstudio.com/

Отворете VS Code и инсталирайте приставката за каране на вълни:

Как да изградите, внедрите и тествате 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. Ще анализираме накратко dApps в следващия блок.
  • Под папката ./test/ ще намерите *.js файл. Тестовете се съхраняват тук.
  • ./surfboard.config.json – конфигурационен файл за изпълнение на тестове.

Envs е важен раздел. Всяка среда е конфигурирана по следния начин:

  • Крайна точка на REST API на възела, който ще се използва за стартиране на dApp и CHAIN_ID на мрежата.
  • Тайна фраза за акаунт с токени, които ще бъдат източниците на вашите тестови токени.

Както можете да видите, surfboard.config.json поддържа множество среди по подразбиране. По подразбиране е локалната среда (ключът defaultEnv е променлив параметър).

Wallet-демо приложение

Този раздел не е препратка към езика RIDE. По-скоро поглед към приложението, което внедряваме и тестваме, за да разберем по-добре какво се случва в блокчейна.

Нека да разгледаме едно просто демо приложение Wallet. Всеки може да изпраща токени до адрес на dApp. Можете да изтеглите само вашите WAVES. Две функции @Callable са достъпни чрез InvokeScriptTransaction:

  • deposit()което изисква прикачено плащане във WAVES
  • withdraw(amount: Int)който връща токени

През целия жизнен цикъл на dApp структурата (адрес → сума) ще се поддържа:

действие
Резултантно състояние

първоначален
празен

Алис депозира 5 ВЪЛНИ
алиса-адрес → 500000000

Боб депозира 2 ВЪЛНИ

алиса-адрес → 500000000
bob-адрес → 200000000

Боб изтегля 7 ВЪЛНИ
ОТКАЗАНО!

Алис изтегля 4 ВЪЛНИ
алиса-адрес → 100000000
bob-адрес → 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“

Нека да разгледаме тестов файл. Осъществено от рамката Mocha на JavaScript. Има функция „Преди“ и три теста:

  • „Before“ финансира множество акаунти чрез MassTransferTransaction, компилира скрипта и го внедрява в блокчейна.
  • „Може да депозира“ изпраща InvokeScriptTransaction към мрежата, активирайки функцията deposit() за всеки от двата акаунта.
  • „Не може да тегли повече, отколкото е депозирано“ тестове, че никой не може да открадне жетони на други хора.
  • „Може да депозира“ проверява дали тегленията се обработват правилно.

Изпълнете тестове от 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
Waves Explorer. Приложение, което току-що е внедрено.

Някои съвети за сърф:

1. За да тествате в среда testnet, използвайте:

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:

  • Език RIDE
  • VS редактор на код
  • Waves Explorer
  • сърф
  • Пазител на вълните

Връзки за тези, които искат да продължат да учат RIDE:

Още примери
Онлайн IDE с примери
Waves документация
Чат на разработчици в Telegram
Вълни и RIDE на stackoverflow
НОВО! Онлайн курсове за създаване на dApps на платформата Waves

Продължете да се гмуркате в темата RIDE и създайте своето първо dApp!

TL; DR: bit.ly/2YCFnwY

Източник: www.habr.com

Добавяне на нов коментар