Kuidas ehitada, juurutada ja testida laineid RIDE dApp
Tere! Selles artiklis näitan teile, kuidas kirjutada ja käivitada tavalist dAppi sõlmes Waves. Vaatame vajalikke tööriistu, meetodeid ja näidet arendusest.
dAppide ja tavaliste rakenduste arendusskeem on peaaegu sama:
Kirjutame koodi
Automatiseeritud testimise kirjutamine
Rakenduse käivitamine
Testimine
Töövahendid
1. docker sõlme ja Waves Exploreri käivitamiseks
Kui te ei soovi sõlme käivitada, võite selle sammu vahele jätta. Lõppude lõpuks on olemas katse- ja katsevõrgustik. Kuid ilma oma sõlme juurutamata võib testimisprotsess venida.
Teil on pidevalt vaja uusi kontosid koos testmärkidega. Testvõrgu segisti edastab 10 LAINET iga 10 minuti järel.
Keskmine blokeerimisaeg testvõrgus on 1 minut, sõlmes – 15 sekundit. See on eriti märgatav, kui tehing nõuab mitut kinnitust.
Avalikes testsõlmedes on võimalik agressiivne vahemällu salvestamine.
Samuti võivad need hoolduse tõttu ajutiselt kättesaamatuks jääda.
Installige Surfboard, tööriist, mis võimaldab teil testida olemasolevas sõlmes.
npm install -g @waves/surfboard
3. Visual Studio Code plugin
See samm on valikuline, kui te ei ole IDE-de fänn ja eelistate tekstiredaktoreid. Kõik vajalikud tööriistad on käsurea utiliidid. Kui kasutate vimi, pöörake tähelepanu pistikprogrammile vim-sõit.
Laadige alla ja installige Visual Studio kood: https://code.visualstudio.com/
Avage VS Code ja installige waves-ride pistikprogramm:
Envs on oluline jaotis. Iga keskkond on konfigureeritud järgmiselt:
Selle sõlme REST API lõpp-punkt, mida kasutatakse dAppi ja võrgu CHAIN_ID käivitamiseks.
Salajane fraas konto jaoks, millel on žetoonid, mis on teie testmärkide allikad.
Nagu näete, toetab surfboard.config.json vaikimisi mitut keskkonda. Vaikimisi on kohalik keskkond (vaikeEnv-võti on muudetav parameeter).
Rahakoti demorakendus
See jaotis ei viita RIDE keelele. Pigem vaadake rakendust, mille juurutame ja testime, et paremini mõista, mis plokiahelas toimub.
Vaatame lihtsat Walleti demorakendust. Igaüks saab žetoone saata dAppi aadressile. Saate välja võtta ainult oma LAINED. InvokeScriptTransactioni kaudu on saadaval kaks @Callable funktsiooni:
deposit()mis nõuab manustatud makset WAVES
withdraw(amount: Int)mis tagastab märgid
Kogu dApp elutsükli jooksul säilitatakse struktuur (aadress → summa):
tegevus
Tulemuslik olek
esialgne
tühi
Alice hoiustab 5 LAINET
Alice-aadress → 500000000
Bob hoiustab 2 LAINET
Alice-aadress → 500000000
bob-aadress → 200000000
Bob tõmbab 7 LAINET
KEELATUD!
Alice tõmbab välja 4 LAINET
Alice-aadress → 100000000
bob-aadress → 200000000
Siin on kood olukorra täielikuks mõistmiseks:
# 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
VSCode'i pistikprogramm toetab pidevat kompileerimist faili redigeerimise ajal. Seetõttu saate vahekaardil PROBLEEMID alati vigu jälgida.
Kui soovite faili koostamisel kasutada mõnda muud tekstiredaktorit, kasutage
surfboard compile ride/wallet.ride
See väljastab base64 kompileeritud RIDE koodi seeria.
Testskript 'wallet.ride' jaoks
Vaatame edasi testfail. Toetab JavaScripti Mocha raamistik. Seal on funktsioon "Enne" ja kolm testi:
"Enne" rahastab MassTransferTransactioni kaudu mitut kontot, kompileerib skripti ja juurutab selle plokiahelasse.
„Saab deponeerida” saadab võrku InvokeScriptTransactioni, aktiveerides mõlema konto jaoks funktsiooni deposiit().
"Ei saa välja võtta rohkem, kui oli sissemakstud" testib, et keegi ei saa varastada teiste inimeste märke.
"Saab sissemakse" kontrollib, kas väljamakseid töödeldakse õigesti.
Käivitage Surfilaua teste ja analüüsige tulemusi Waves Exploreris
Testi käivitamiseks käivitage
surfboard test
Kui teil on mitu skripti (näiteks vajate eraldi juurutusskripti), saate seda käivitada
surfboard test my-scenario.js
Surfboard kogub testfailid kausta ./test/ ja käivitab skripti failis surfboard.config.json konfigureeritud sõlmes. Mõne sekundi pärast näete midagi sellist:
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)
Hurraa! Katsed läbitud. Nüüd vaatame, mis juhtub Waves Exploreri kasutamisel: vaata plokke või kleebi otsingusse üks ülaltoodud aadressidest (näiteks vastav wallet#. Sealt leiate tehingute ajaloo, dApp oleku, dekompileeritud binaarfaili.
Waves Keeperi seadistamine kohaliku sõlmega töötamiseks
2. Kas importida võrgu jaoks žetoonidega salafraasi? Lihtsuse huvides kasutage oma sõlme algset seemet: waves private node seed with waves tokens. Aadress: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.