ProHoster > Blog > Bestjoer > Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
Hoe kinne jo golven bouwe, ynsette en testen RIDE dApp
Hallo! Yn dit artikel sil ik jo sjen litte hoe't jo in gewoane dApp skriuwe en útfiere op in Waves-knooppunt. Litte wy nei de nedige ark, metoaden en in foarbyld fan ûntwikkeling sjen.
It ûntwikkelingskema foar dApps en reguliere applikaasjes is hast itselde:
Skriuwen koade
Automatysk testen skriuwe
It starten fan de applikaasje
Testen
Tools
1. docker om it knooppunt en Waves Explorer út te fieren
As jo gjin knooppunt begjinne wolle, kinne jo dizze stap oerslaan. Der is ommers in test- en eksperiminteel netwurk. Mar sûnder jo eigen knooppunt yn te setten, kin it testproses trochslepe.
Jo sille konstant nije akkounts nedich hawwe mei testtokens. De testnetwurkkraan ferpleatst elke 10 minuten 10 WAVES.
De gemiddelde bloktiid yn it testnetwurk is 1 minút, yn 'e node - 15 sekonden. Dit is benammen opfallend as in transaksje meardere befêstigings fereasket.
Agressyf caching is mooglik op iepenbiere testknooppunten.
Se kinne ek tydlik net beskikber wêze fanwege ûnderhâld.
Fan no ôf gean ik der fan út dat jo mei jo eigen knooppunt wurkje.
Ynstallearje Surfboard, in ark wêrmei jo testen kinne útfiere op in besteande knooppunt.
npm install -g @waves/surfboard
3. Visual Studio Code plugin
Dizze stap is opsjoneel as jo gjin fan binne fan IDE's en leaver tekstbewurkers hawwe. Alle nedige ark binne kommando-rigel-helpprogramma's. As jo vim brûke, jouwe dan omtinken oan it plugin vim-ride.
Download en ynstallearje Visual Studio Code: https://code.visualstudio.com/
Iepenje VS Code en ynstallearje de waves-ride plugin:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Soargje derfoar dat it knooppunt wurdt lansearre fia de REST API yn http://localhost:6869:
Swagger REST API foar node
2. Start in eksimplaar fan Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Iepenje in browser en gean nei http://localhost:3000. Jo sille sjen hoe fluch in lege lokale node circuit wurdt boud.
Waves Explorer toant in lokale node-eksimplaar
RIDE-struktuer en Surfboard-ark
Meitsje in lege map en fier it kommando dêryn
surfboard init
It kommando initialisearret in map mei de projektstruktuer, "hallo wrâld" applikaasjes en tests. As jo dizze map iepenje mei VS Code, sille jo sjen:
Surfboard.config.json
Under de map ./ride/ fine jo ien bestân wallet.ride - de map wêr't de dApp-koade leit. Wy sille dApps koart analysearje yn it folgjende blok.
Under de ./test/ map fine jo in *.js triem. Tests wurde hjir opslein.
./surfboard.config.json - konfiguraasjetriem foar it útfieren fan testen.
Envs is in wichtige seksje. Elke omjouwing is sa ynsteld:
REST API-einpunt fan it knooppunt dat sil wurde brûkt om de dApp en CHAIN_ID fan it netwurk te starten.
In geheime sin foar in akkount mei tokens dy't de boarnen sille wêze fan jo testtokens.
Sa't jo sjen kinne, stipet surfboard.config.json standert meardere omjouwings. De standert is de lokale omjouwing (de standertEnv-kaai is in feroare parameter).
Wallet-demo-applikaasje
Dizze seksje is gjin ferwizing nei de RIDE-taal. Earder in blik op de applikaasje dy't wy ynsette en testen om better te begripen wat der bart yn 'e blockchain.
Litte wy nei in ienfâldige Wallet-demo-applikaasje sjen. Elkenien kin tokens stjoere nei in dApp-adres. Jo kinne allinne weromlûke jo WAVES. Twa @Callable-funksjes binne beskikber fia InvokeScriptTransaction:
deposit()dy't fereasket in taheakke betelling yn WAVES
withdraw(amount: Int)dy't tokens werombringt
Troch de dApp-libbenssyklus sil de struktuer (adres → bedrach) wurde hanthavene:
Aksje
Resultaat steat
earste
leech
Alice ôfsettings 5 WAVES
alice-adres → 500000000
Bob ôfsettings 2 WAVES
alice-adres → 500000000
bob-adres → 200000000
Bob lûkt 7 WAVES werom
DENIED!
Alice lûkt 4 WAVES werom
alice-adres → 100000000
bob-adres → 200000000
Hjir is de koade om de situaasje folslein te begripen:
# 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
De VSCode-plugin stipet trochgeande kompilaasje by it bewurkjen fan in bestân. Dêrom kinne jo altyd flaters kontrolearje yn it ljepblêd PROBLEMEN.
As jo in oare tekstbewurker wolle brûke by it kompilearjen fan it bestân, brûk dan
surfboard compile ride/wallet.ride
Dit sil in searje fan base64 kompilearre RIDE-koade útfiere.
Testskript foar 'wallet.ride'
Litte wy nei sjen test triem. Oandreaun troch JavaScript's Mocha framework. D'r is in "Foar" funksje en trije tests:
"Foar" finansiert meardere akkounts fia MassTransferTransaction, kompilearret it skript en set it yn 'e blockchain.
"Kin deponearje" stjoert in InvokeScriptTransaction nei it netwurk, aktivearret de boarch () funksje foar elk fan de twa akkounts.
"Kin net weromlûke mear as waard dellein" tests dat gjinien kin stelle oare minsken syn tokens.
"Kin deponearje" kontrolearret dat ûntlûken goed wurde ferwurke.
Run tests út Surfboard en analysearje resultaten yn Waves Explorer
Om de test út te fieren, rinne
surfboard test
As jo meardere skripts (Jo moatte bygelyks in apart ynset skript), kinne jo rinne
surfboard test my-scenario.js
Surfboard sil de testbestannen sammelje yn 'e map ./test/ en it skript útfiere op it knooppunt dat is konfigureare yn surfboard.config.json. Nei in pear sekonden sille jo sa'n ding sjen:
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)
Hoera! Tests slagge. Litte wy no ris sjen wat der bart by it brûken fan Waves Explorer: sjoch nei de blokken of plak ien fan de adressen hjirboppe yn it sykjen (bygelyks de oerienkommende wallet#. Dêr kinne jo transaksjeskiednis fine, dApp-status, dekompilearre binêre triem.
Waves Explorer. In applikaasje dy't krekt ynset is.
Waves Keeper ynstelle om te wurkjen mei in lokale knooppunt
2. Geheime frase ymportearje mei tokens foar it netwurk? Brûk foar ienfâld it earste sied fan jo knooppunt: waves private node seed with waves tokens. Adres: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.