Hvernig á að smíða, dreifa og prófa Waves RIDE dApp
Halló! Í þessari grein mun ég sýna þér hvernig á að skrifa og keyra venjulegan dApp á Waves hnút. Skoðum nauðsynleg tæki, aðferðir og dæmi um þróun.
Þróunarkerfi fyrir dApps og venjuleg forrit er nánast það sama:
Við skrifum kóðann
Að skrifa sjálfvirk próf
Að ræsa forritið
Prófanir
Verkfæri
1. docker til að keyra hnútinn og Waves Explorer
Ef þú vilt ekki hefja hnút geturðu sleppt þessu skrefi. Eftir allt saman, það er próf og tilrauna net. En án þess að nota eigin hnút getur prófunarferlið dregist á langinn.
Þú þarft stöðugt nýja reikninga með prófunartáknum. Prófunarnetblöndunartækið flytur 10 BYLGJUR á 10 mínútna fresti.
Meðallokunartími í prófunarnetinu er 1 mínúta, í hnútnum - 15 sekúndur. Þetta er sérstaklega áberandi þegar viðskipti þurfa margar staðfestingar.
Árásargjarn skyndiminni er möguleg á opinberum prófhnútum.
Þeir gætu einnig verið tímabundið ótiltækir vegna viðhalds.
Héðan í frá mun ég gera ráð fyrir að þú sért að vinna með þinn eigin hnút.
Settu upp Surfboard, tól sem gerir þér kleift að keyra próf á núverandi hnút.
npm install -g @waves/surfboard
3. Visual Studio Code viðbót
Þetta skref er valfrjálst ef þú ert ekki aðdáandi IDE og kýst textaritla. Öll nauðsynleg verkfæri eru skipanalínutól. Ef þú notar vim skaltu fylgjast með viðbótinni vim-riði.
Hladdu niður og settu upp Visual Studio Code: https://code.visualstudio.com/
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Gakktu úr skugga um að hnúturinn sé ræstur í gegnum REST API í http://localhost:6869:
Swagger REST API fyrir hnút
2. Byrjaðu tilvik af Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Opnaðu vafra og farðu í http://localhost:3000. Þú munt sjá hversu fljótt tóm staðbundin hnút hringrás er byggð.
Waves Explorer sýnir staðbundið hnútatilvik
RIDE uppbygging og brimbrettaverkfæri
Búðu til tóma möppu og keyrðu skipunina í henni
surfboard init
Skipunin frumstillir möppu með uppbyggingu verkefnisins, „halló heimur“ forritum og prófum. Ef þú opnar þessa möppu með VS kóða muntu sjá:
Surfboard.config.json
Undir ./ride/ möppunni finnurðu eina skrá wallet.ride - möppuna þar sem dApp kóðinn er staðsettur. Við munum greina dApps stuttlega í næstu blokk.
Undir ./test/ möppunni finnurðu *.js skrá. Próf eru geymd hér.
./surfboard.config.json – stillingarskrá til að keyra próf.
Envs er mikilvægur hluti. Hvert umhverfi er stillt svona:
REST API endapunktur hnútsins sem verður notaður til að ræsa dApp og CHAIN_ID netsins.
Leynileg setning fyrir reikning með táknum sem verða uppsprettur prófunartáknanna þinna.
Eins og þú sérð styður surfboard.config.json sjálfgefið mörg umhverfi. Sjálfgefið er staðbundið umhverfi (defaultEnv lykillinn er breytilegur breytu).
Veski-sýnisforrit
Þessi hluti er ekki tilvísun í RIDE tungumálið. Frekar að skoða forritið sem við sendum inn og prófum til að skilja betur hvað er að gerast í blockchain.
Við skulum skoða einfalt Wallet-demo forrit. Hver sem er getur sent tákn á dApp heimilisfang. Þú getur aðeins afturkallað WAVES. Tvær @Callable aðgerðir eru fáanlegar í gegnum InvokeScriptTransaction:
deposit()sem krefst meðfylgjandi greiðslu í WAVES
withdraw(amount: Int)sem skilar táknum
Í gegnum dApp líftímann verður uppbyggingunni (heimilisfang → magn) viðhaldið:
aðgerð
Staðan sem myndast
byrjunar
tómur
Alice leggur inn 5 BYLGJUR
alice-heimilisfang → 500000000
Alice dregur 4 BYLGJUR til baka
alice-heimilisfang → 100000000
bob-heimilisfang → 200000000
Hér er kóðinn til að skilja ástandið að fullu:
# 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 viðbótin styður samfellda söfnun meðan verið er að breyta skrá. Þess vegna geturðu alltaf fylgst með villum í PROBLEMS flipanum.
Ef þú vilt nota annan textaritil þegar þú safnar saman skránni skaltu nota
surfboard compile ride/wallet.ride
Þetta mun gefa út röð af base64 samansettum RIDE kóða.
Prófunarforskrift fyrir 'wallet.ride'
Við skulum skoða próf skrá. Keyrt af Mokka ramma JavaScript. Það er „Áður“ aðgerð og þrjú próf:
„Áður“ fjármagnar marga reikninga í gegnum MassTransferTransaction, setur saman handritið og setur það á blockchain.
„Getur lagt inn“ sendir InvokeScriptTransaction til netsins og virkjar inná() aðgerðina fyrir hvern reikninganna tveggja.
„Getur ekki tekið út meira en lagt var inn“ próf sem enginn getur stolið táknum annarra.
„Getur lagt inn“ athugar að úttektir séu unnar á réttan hátt.
Keyrðu próf frá Surfboard og greindu niðurstöður í Waves Explorer
Til að keyra prófið skaltu keyra
surfboard test
Ef þú ert með margar forskriftir (til dæmis, þú þarft sérstakt dreifingarforskrift) geturðu keyrt
surfboard test my-scenario.js
Surfboard mun safna prófunarskránum í ./test/ möppunni og keyra skriftuna á hnútnum sem er stilltur í surfboard.config.json. Eftir nokkrar sekúndur muntu sjá eitthvað á þessa leið:
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)
Húrra! Próf stóðust. Nú skulum við skoða hvað gerist þegar Waves Explorer er notað: skoðaðu blokkirnar eða límdu eitt af vistföngunum hér að ofan í leitina (til dæmis samsvarandi wallet#. Þar geturðu fundið viðskiptasögu, dApp stöðu, afsamlaða tvíundarskrá.
Uppsetning Waves Keeper til að vinna með staðbundnum hnút
2. Flytja inn leynilega setningu með táknum fyrir netið? Til einföldunar, notaðu upphafsfræ hnútsins þíns: waves private node seed with waves tokens. Heimilisfang: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.