Sannu! A cikin wannan labarin zan nuna muku yadda ake rubutu da gudanar da dApp na yau da kullun akan kullin Waves. Bari mu dubi kayan aikin da ake bukata, hanyoyin da misali na ci gaba.
Tsarin haɓakawa na dApps da aikace-aikacen yau da kullun kusan iri ɗaya ne:
Lambar rubutu
Rubutun gwaji ta atomatik
Kaddamar da aikace -aikacen
Gwaji
Kayan aiki
1. docker don gudanar da node da Waves Explorer
Idan ba kwa son fara kumburi, zaku iya tsallake wannan matakin. Bayan haka, akwai cibiyar sadarwa na gwaji da gwaji. Amma ba tare da ƙaddamar da kumburin ku ba, tsarin gwaji na iya ja.
Matsakaicin lokacin toshewa a cikin hanyar sadarwar gwaji shine minti 1, a cikin kumburi - 15 seconds. Wannan abin lura ne musamman lokacin da ma'amala ke buƙatar tabbatarwa da yawa.
Ana iya yin caching mai ƙarfi akan nodes na gwaji na jama'a.
Hakanan ƙila ba su samuwa na ɗan lokaci saboda kulawa.
Shigar da Surfboard, kayan aiki wanda ke ba ku damar gudanar da gwaje-gwaje akan kullin da ke akwai.
npm install -g @waves/surfboard
3. Visual Studio Code plugin
Wannan matakin na zaɓi ne idan ba ku da masu sha'awar IDE kuma kun fi son masu gyara rubutu. Duk kayan aikin da ake buƙata sune abubuwan amfani da layin umarni. Idan kuna amfani da vim, kula da plugin ɗin vim-ride.
Zazzage kuma shigar da Kayayyakin Kayayyakin Kayayyakin Kaya: https://code.visualstudio.com/
Bude lambar VS kuma shigar da kayan aikin waves-ride:
docker run -d -p 6869:6869 wavesplatform/waves-private-node
Tabbatar cewa an ƙaddamar da kumburi ta hanyar REST API a ciki http://localhost:6869:
API ɗin Swagger REST don kumburi
2. Fara misalin Waves Explorer:
docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer
Bude mai bincike kuma je zuwa http://localhost:3000. Za ku ga yadda sauri an gina da'irar kuɗaɗen gida mara komai.
Waves Explorer yana nuna misalin kumburin gida
Tsarin RIDE da kayan aikin Surfboard
Ƙirƙiri kundin shugabanci mara komai kuma gudanar da umarni a ciki
surfboard init
Umurnin yana ƙaddamar da kundin adireshi tare da tsarin aikin, aikace-aikacen "sannu duniya" da gwaje-gwaje. Idan ka bude wannan babban fayil da lambar VS, za ka ga:
Surfboard.config.json
A ƙarƙashin ./ride/ babban fayil za ku sami fayil guda ɗaya wallet.ride - directory inda code dApp yake. Za mu ɗan bincika dApps a cikin toshe na gaba.
A ƙarƙashin ./test/ babban fayil za ku sami fayil * .js. Ana adana gwaje-gwaje anan.
./surfboard.config.json – fayil ɗin sanyi don gudanar da gwaje-gwaje.
Envs yanki ne mai mahimmanci. An tsara kowane yanayi kamar haka:
REST API na ƙarshen kumburin da za a yi amfani da shi don ƙaddamar da dApp da CHAIN_ID na hanyar sadarwa.
Kalmomin sirri don asusu tare da alamun da zasu zama tushen alamun gwajin ku.
Kamar yadda kake gani, surfboard.config.json yana goyan bayan mahalli da yawa ta tsohuwa. Tsohuwar ita ce muhallin gida (maɓallin tsohoEnv shine siga mai canzawa).
Aikace-aikacen walat-demo
Wannan sashe ba magana ce ga harshen RIDE ba. Maimakon haka, duba aikace-aikacen da muke turawa da gwadawa don ƙarin fahimtar abin da ke faruwa a cikin blockchain.
Mu kalli aikace-aikacen demo mai sauƙi na Wallet-demo. Kowa na iya aika alamu zuwa adireshin dApp. Zaku iya janye GUWAN naku kawai. Ana samun ayyuka @Callable guda biyu ta InvokeScriptTransaction:
deposit()wanda ke buƙatar biyan haɗe-haɗe a WAVES
withdraw(amount: Int)wanda ke mayar da alamomi
Duk tsawon rayuwar dApp, tsarin (adireshin → adadin) za a kiyaye shi:
Action
Sakamakon jihar
farko
komai
Alice ta ajiye 5 WAVES
Alice-adireshin → 500000000
Alice ta janye WAVES 4
Alice-adireshin → 100000000
bob-address → 200000000
Ga lambar don cikakken fahimtar halin da ake ciki:
# 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 plugin yana tallafawa ci gaba da haɗawa yayin gyara fayil. Don haka, koyaushe kuna iya sa ido kan kurakurai a cikin MATSALOLIN.
Idan kana son amfani da wani editan rubutu na daban lokacin tattara fayil ɗin, yi amfani da
surfboard compile ride/wallet.ride
Wannan zai fitar da jerin lambar tushe64 da aka harhada RIDE.
Rubutun gwaji don 'wallet.ride'
Mu duba gwajin fayil. Ƙaddamar da tsarin Mocha na JavaScript. Akwai aikin "Kafin" da gwaje-gwaje uku:
“Kafin” yana ba da asusu da yawa ta hanyar MassTransferTransaction, yana tattara rubutun kuma a tura shi zuwa blockchain.
"Za a iya ajiya" yana aika InvokeScriptTransaction zuwa cibiyar sadarwar, yana kunna aikin ajiya () ga kowane asusun biyu.
"Ba za a iya janye fiye da abin da aka ajiye" gwaje-gwajen da babu wanda zai iya satar sauran mutane ta token.
"Za a iya ajiyewa" cak cewa an sarrafa kuɗin da aka cire daidai.
Gudanar da gwaje-gwaje daga Surfboard kuma bincika sakamakon a cikin Waves Explorer
Don gudanar da gwajin, gudu
surfboard test
Idan kuna da rubutun da yawa (misali, kuna buƙatar rubutun turawa daban), kuna iya gudu
surfboard test my-scenario.js
Surfboard zai tattara fayilolin gwaji a cikin babban fayil ɗin ./test/ kuma ya gudanar da rubutun akan kumburin da aka saita a surfboard.config.json. Bayan 'yan dakiku za ku ga wani abu kamar haka:
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)
Hooray! Gwaje-gwaje sun wuce. Yanzu bari mu kalli abin da ke faruwa yayin amfani da Waves Explorer: duba tubalan ko liƙa ɗaya daga cikin adiresoshin da ke sama a cikin binciken (misali, masu dacewa). wallet#. A can za ku iya nemo tarihin ma'amala, matsayin dApp, fayil ɗin binary da ba a gama ba.
Waves Explorer. Aikace-aikacen da aka tura kwanan nan.
Wasu Nasihu na Surfboard:
1. Don gwadawa a cikin mahallin testnet, yi amfani da:
2. Shigo da kalmar sirri tare da alamu don hanyar sadarwa? Don sauƙi, yi amfani da iri na farko na kumburin ku: waves private node seed with waves tokens. Adireshi: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.