ProHoster > Blogi > antaminen > Kuinka rakentaa, ottaa käyttöön ja testata Waves RIDE dApp -sovellusta
Kuinka rakentaa, ottaa käyttöön ja testata Waves RIDE dApp -sovellusta
Hei! Tässä artikkelissa näytän sinulle, kuinka tavallinen dApp kirjoitetaan ja suoritetaan Waves-solmussa. Katsotaanpa tarvittavia työkaluja, menetelmiä ja esimerkki kehittämisestä.
Kehityskaavio dAppsille ja tavallisille sovelluksille on lähes sama:
Kirjoitamme koodin
Automatisoidun testauksen kirjoittaminen
Käynnistä sovellus
Testaus
Työkalut
1. docker suorittaaksesi solmun ja Waves Explorerin
Jos et halua aloittaa solmua, voit ohittaa tämän vaiheen. Loppujen lopuksi on olemassa testi- ja kokeellinen verkosto. Mutta ilman oman solmun käyttöönottoa testausprosessi voi venyä.
Tarvitset jatkuvasti uusia tilejä testitunnuksilla. Testiverkkohana siirtää 10 AALTOA 10 minuutin välein.
Keskimääräinen estoaika testiverkossa on 1 minuutti, solmussa - 15 sekuntia. Tämä on erityisen havaittavissa, kun tapahtuma vaatii useita vahvistuksia.
Aggressiivinen välimuisti on mahdollista julkisissa testisolmuissa.
Ne voivat myös olla tilapäisesti poissa käytöstä huollon vuoksi.
Tästä eteenpäin oletan, että työskentelet oman solmusi kanssa.
Asenna Surfboard, työkalu, jonka avulla voit suorittaa testejä olemassa olevassa solmussa.
npm install -g @waves/surfboard
3. Visual Studio Code -laajennus
Tämä vaihe on valinnainen, jos et ole IDE-fani ja mieluummin tekstieditorit. Kaikki tarvittavat työkalut ovat komentorivin apuohjelmia. Jos käytät vimia, kiinnitä huomiota liitännäiseen vim-ajelu.
Lataa ja asenna Visual Studio Code: 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
Avaa selain ja siirry kohtaan http://localhost:3000. Näet kuinka nopeasti tyhjä paikallinen solmupiiri rakennetaan.
Waves Explorer näyttää paikallisen solmun esiintymän
RIDE rakenne ja surffilautatyökalu
Luo tyhjä hakemisto ja suorita siinä oleva komento
surfboard init
Komento alustaa hakemiston, jossa on projektirakenne, "hello world" -sovellukset ja testit. Jos avaat tämän kansion VS-koodilla, näet:
Surfboard.config.json
./ride/-kansion alta löydät yhden tiedoston wallet.ride - hakemiston, jossa dApp-koodi sijaitsee. Analysoimme lyhyesti dApppeja seuraavassa lohkossa.
./test/-kansion alta löydät *.js-tiedoston. Testit tallennetaan tänne.
./surfboard.config.json – määritystiedosto testien suorittamista varten.
Envs on tärkeä osa. Jokainen ympäristö on määritetty seuraavasti:
Solmun REST API -päätepiste, jota käytetään käynnistämään verkon dApp ja CHAIN_ID.
Salainen lause tilille, jossa on tokeneita, jotka ovat testitokeniesi lähteitä.
Kuten näet, surfboard.config.json tukee oletuksena useita ympäristöjä. Oletus on paikallinen ympäristö (oletusEnv-avain on muutettava parametri).
Lompakko-demo-sovellus
Tämä osio ei viittaa RIDE-kieleen. Pikemminkin katso sovellus, jonka otamme käyttöön ja testaamme ymmärtääksesi paremmin, mitä lohkoketjussa tapahtuu.
Katsotaanpa yksinkertaista Wallet-demo-sovellusta. Kuka tahansa voi lähettää tokeneja dApp-osoitteeseen. Voit vain nostaa WAVESi. Kaksi @Callable-toimintoa on käytettävissä InvokeScriptTransactionin kautta:
deposit()joka vaatii liitteenä olevan maksun WAVESissa
withdraw(amount: Int)joka palauttaa tokeneja
Koko dAppin elinkaaren ajan rakenne (osoite → määrä) säilyy:
Toiminta
Tuloksena oleva tila
ensimmäinen
tyhjä
Alice tallettaa 5 AALTOA
alice-osoite → 500000000
Bob tallettaa 2 AALTOA
alice-osoite → 500000000
bob-osoite → 200000000
Bob vetää 7 AALTOA
KIELLETTY!
Alice vetää pois 4 AALTOA
alice-osoite → 100000000
bob-osoite → 200000000
Tässä on koodi tilanteen täydelliseksi ymmärtämiseksi:
# 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-laajennus tukee jatkuvaa kääntämistä tiedoston muokkauksen aikana. Siksi voit aina tarkkailla virheitä ONGELMAT-välilehdellä.
Jos haluat käyttää toista tekstieditoria tiedoston kääntämisessä, käytä
surfboard compile ride/wallet.ride
Tämä tulostaa sarjan base64-käännettyä RIDE-koodia.
Wallet.ride-testiohjelma
Katsotaanpa testitiedosto. Powered by JavaScriptin Mocha-kehys. Siellä on "Ennen"-toiminto ja kolme testiä:
"Ennen" rahoittaa useita tilejä MassTransferTransactionin kautta, kokoaa skriptin ja ottaa sen käyttöön lohkoketjussa.
"Voi tallettaa" lähettää InvokeScriptTransactionin verkkoon aktivoiden deposit()-toiminnon kummallekin tilille.
"Ei voi nostaa enemmän kuin talletettiin" testaa, ettei kukaan voi varastaa muiden tokeneja.
"Voi tallettaa" tarkistaa, että kotiutukset käsitellään oikein.
Suorita testejä Surfboardista ja analysoi tulokset Waves Explorerissa
Suorita testi suorittamalla
surfboard test
Jos sinulla on useita komentosarjoja (tarvitset esimerkiksi erillisen käyttöönottokomentosarjan), voit suorittaa sen
surfboard test my-scenario.js
Surfboard kerää testitiedostot ./test/-kansioon ja suorittaa komentosarjan solmussa, joka on määritetty surfboard.config.json-tiedostossa. Muutaman sekunnin kuluttua näet jotain tällaista:
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! Testit meni läpi. Katsotaan nyt, mitä tapahtuu käytettäessä Waves Exploreria: katso lohkoja tai liitä jokin yllä olevista osoitteista hakuun (esim. wallet#. Sieltä löydät tapahtumahistorian, dApp-tilan, puretun binaaritiedoston.
Waves Explorer. Sovellus, joka on juuri otettu käyttöön.