Како да направите, примените и тестирате таласе РИДЕ дАпп
Здраво! У овом чланку ћу вам показати како да напишете и покренете обичан дАпп на Вавес чвору. Хајде да погледамо неопходне алате, методе и пример развоја.
Шема развоја за дАппс и обичне апликације је скоро иста:
Писање кода
Писање аутоматског тестирања
Покретање апликације
Тестирање
Алат
1. docker да покренете чвор и Вавес Екплорер
Ако не желите да покренете чвор, можете прескочити овај корак. На крају крајева, постоји тестна и експериментална мрежа. Али без постављања сопственог чвора, процес тестирања може да се одужи.
Стално ће вам требати нови налози са пробним токенима. Пробна мрежна славина преноси 10 ТАЛАСОВА сваких 10 минута.
Просечно време блокаде у тест мрежи је 1 минут, у чвору 15 секунди. Ово је посебно приметно када трансакција захтева више потврда.
Агресивно кеширање је могуће на јавним тест чворовима.
Такође могу бити привремено недоступни због одржавања.
Од сада ћу претпоставити да радите са сопственим чвором.
Инсталирајте Сурфбоард, алатку која вам омогућава да покренете тестове на постојећем чвору.
npm install -g @waves/surfboard
3. Додатак Висуал Студио Цоде
Овај корак је опциони ако нисте љубитељ ИДЕ-а и преферирате уређиваче текста. Сви потребни алати су услужни програми командне линије. Ако користите вим, обратите пажњу на додатак вим-риде.
Преузмите и инсталирајте Висуал Студио Цоде: https://code.visualstudio.com/
Отворите ВС Цоде и инсталирајте додатак Вавес-риде:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Отворите претраживач и идите на http://localhost:3000. Видећете колико брзо се гради празно коло локалног чвора.
Вавес Екплорер приказује инстанцу локалног чвора
РИДЕ структура и алат за даску за сурфовање
Направите празан директоријум и покрените команду у њему
surfboard init
Команда иницијализује директоријум са структуром пројекта, "здраво свет" апликацијама и тестовима. Ако отворите ову фасциклу са ВС кодом, видећете:
Сурфбоард.цонфиг.јсон
У фасцикли ./риде/ наћи ћете једну датотеку валлет.риде - директоријум у коме се налази дАпп код. Укратко ћемо анализирати дАппс у следећем блоку.
У фасцикли ./тест/ пронаћи ћете *.јс датотеку. Овде се чувају тестови.
./сурфбоард.цонфиг.јсон – конфигурациони фајл за покретање тестова.
Енвс је важан одељак. Свако окружење је овако конфигурисано:
РЕСТ АПИ крајња тачка чвора која ће се користити за покретање дАпп и ЦХАИН_ИД мреже.
Тајна фраза за налог са токенима који ће бити извори ваших тестних токена.
Као што видите, сурфбоард.цонфиг.јсон подразумевано подржава више окружења. Подразумевано је локално окружење (кључ дефаултЕнв је променљив параметар).
Валлет-демо апликација
Овај одељак није референца на РИДЕ језик. Уместо тога, погледајте апликацију коју примењујемо и тестирамо да бисмо боље разумели шта се дешава у блокчејну.
Погледајмо једноставну апликацију Валлет-демо. Свако може да пошаље токене на адресу дАпп. Можете повући само своје ТАЛАСОВЕ. Две функције @Цаллабле су доступне преко ИнвокеСцриптТрансацтион:
deposit()што захтева приложену уплату у ТАЛАСИМА
withdraw(amount: Int)који враћа жетоне
Током животног циклуса дАпп-а, структура (адреса → износ) ће се одржавати:
Ево кода да бисте у потпуности разумели ситуацију:
# 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
Додатак ВСЦоде подржава континуирану компилацију током уређивања датотеке. Због тога увек можете пратити грешке на картици ПРОБЛЕМИ.
Ако желите да користите други уређивач текста приликом компајлирања датотеке, користите
surfboard compile ride/wallet.ride
Ово ће дати серију РИДЕ кода компајлираног басе64.
Тест скрипта за 'валлет.риде'
Хајде да погледамо тест фајл. Покреће ЈаваСцрипт-ов Моцха оквир. Постоји функција „Пре“ и три теста:
„Пре“ финансира више налога преко МассТрансферТрансацтион, компајлира скрипту и примењује је у блок ланцу.
„Може депоновати“ шаље ИнвокеСцриптТрансацтион мрежи, активирајући функцију депозит() за сваки од два налога.
„Не могу повући више него што је депоновано“ тестови да нико не може украсти туђе токене.
„Може уплатити“ проверава да ли су исплате правилно обрађене.
Покрените тестове са Сурфбоард-а и анализирајте резултате у Вавес Екплорер-у
Да бисте покренули тест, покрените
surfboard test
Ако имате више скрипти (на пример, потребна вам је посебна скрипта за примену), можете да покренете
surfboard test my-scenario.js
Сурфбоард ће прикупити тест датотеке у фасцикли ./тест/ и покренути скрипту на чвору који је конфигурисан у сурфбоард.цонфиг.јсон. После неколико секунди видећете нешто овако:
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)
Ура! Тестови су прошли. Хајде сада да погледамо шта се дешава када користите Вавес Екплорер: погледајте блокове или налепите једну од горе наведених адреса у претрагу (на пример, одговарајућу wallet#. Тамо можете пронаћи историју трансакција, статус дАпп-а, декомпилирану бинарну датотеку.
Вавес Екплорер. Апликација која је управо постављена.
Неки савети за даску за сурфовање:
1. Да бисте тестирали у тестнет окружењу, користите:
Подешавање Вавес Кеепер-а за рад са локалним чвором
2. Да увезете тајну фразу са токенима за мрежу? Ради једноставности, користите почетно семе свог чвора: waves private node seed with waves tokens. Адреса: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.