Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp

Mhoro! Muchikamu chino ini ndinokuratidza maitiro ekunyora uye nekumhanyisa dApp yakajairwa pane Waves node. Ngatitarisei zvishandiso zvinodiwa, nzira uye muenzaniso wekusimudzira.

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp

Iyo yekuvandudza chirongwa chedApps uye yenguva dzose zvikumbiro zvakada kufanana:

  • Kodhi yekunyora
  • Kunyora otomatiki bvunzo
  • Kutangisa application
  • Testing

Tools

1. docker kumhanyisa node uye Waves Explorer

Kana iwe usingade kutanga node, unogona kusvetuka danho iri. Mushure mezvose, kune bvunzo uye yekuyedza network. Asi pasina kuendesa yako node, maitiro ekuyedza anogona kukwevera mberi.

  • Iwe uchagara uchida maakaundi matsva ane test tokens. Iyo test network faucet inotamisa gumi WAVES maminetsi gumi ega ega.
  • Avhareji yenguva yekuvhara muyedzo network ndeye 1 miniti, mune node - gumi nemashanu masekonzi. Izvi zvinonyanya kuoneka kana kutengeserana kuchida kusimbiswa kwakawanda.
  • Aggressive caching inogoneka paruzhinji test node.
  • Anogonawo kunge asiri kuwanikwa nekuda kwekugadziriswa.

Kubva zvino zvichienda mberi ndichafungidzira kuti uri kushanda nenode yako.

2. Surfboard Command Line Tool

  • Dhawunirodha uye isa Node.js uchishandisa ppa, homebrew kana exe pano: https://nodejs.org/en/download/.
  • Isa Surfboard, chishandiso chinokutendera kuti umhanye bvunzo pane iripo node.

npm install -g @waves/surfboard

3. Visual Studio Code plugin

Iyi nhanho ndeyekusarudza kana usiri fan weIDE uye sarudza mavara edhita. Yese maturusi anodiwa ndeye command line utilities. Kana iwe ukashandisa vim, teerera kune iyo plugin vim-ride.

Dhawunirodha uye isa Visual Studio Code: https://code.visualstudio.com/

Vhura VS Code uye isa mafungu-ride plugin:

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp

Waves Keeper browser yekuwedzera: https://wavesplatform.com/products-keeper

Yakaitwa!

Tanga node uye Waves Explorer

1. Tanga node:

docker run -d -p 6869:6869 wavesplatform/waves-private-node

Ita shuwa kuti node inotangwa kuburikidza neREST API mukati http://localhost:6869:

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp
Swagger REST API ye node

2. Tanga muenzaniso weWaves Explorer:

docker run -d -e API_NODE_URL=http://localhost:6869 -e NODE_LIST=http://localhost:6869 -p 3000:8080 wavesplatform/explorer

Vhura browser uye enda ku http://localhost:3000. Iwe uchaona kuti nokukurumidza sei isina chinhu yemunharaunda node circuit inovakwa.

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp
Waves Explorer inoratidza yemuno node muenzaniso

RIDE chimiro uye Surfboard chishandiso

Gadzira dhairekitori risina chinhu uye shandisa murairo mairi

surfboard init

Iwo murairo unotanga dhairekitori nechimiro cheprojekiti, "hello world" application uye bvunzo. Kana iwe ukavhura iyi folda neVS Code, uchaona:

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp
Surfboard.config.json

  • Pasi pe ./ride/ folda iwe unowana imwechete faira wallet.ride - dhairekitori panowanikwa dApp kodhi. Isu tichaongorora muchidimbu dApps mune inotevera bhuroka.
  • Pasi pe ./test/ folda unowana *.js faira. Miedzo inochengetwa pano.
  • ./surfboard.config.json – configuration file for running tests.

Envs chikamu chakakosha. Yese nharaunda inogadziriswa seizvi:

  • REST API endpoint yenode ichashandiswa kuvhura dApp uye CHAIN_ID yetiweki.
  • Mutsara wakavanzika weakaundi ine tokens inova manyuko ebvunzo tokeni dzako.

Sezvauri kuona, surfboard.config.json inotsigira akawanda nharaunda nekukasira. Iyo yakasarudzika ndiyo nharaunda yenzvimbo (iyo defaultEnv kiyi ndiyo inoshanduka paramende).

Wallet-demo application

Chikamu ichi hachirevi mutauro weRIDE. Asi, tarisa kune application yatinoisa uye kuyedza kuti tinzwisise zviri kuitika mu blockchain.

Ngatitarisei iri nyore Wallet-demo application. Chero ani zvake anogona kutumira tokeni kukero yedApp. Unogona chete kubvisa WAVES ako. Maviri @Callable mabasa anowanikwa kuburikidza neInvokeScriptTransaction:

  • deposit()iyo inoda mubhadharo wakabatanidzwa muWAVES
  • withdraw(amount: Int)iyo inodzorera zviratidzo

Muhupenyu hwese hwedApp, chimiro (kero → huwandu) chichachengetwa:

Action
Resulting state

kutanga
Zvisina chinhu

Alice anoisa 5 WAVES
alice-kero → 500000000

Bob anoisa 2 WAVES

alice-kero → 500000000
bob-kero → 200000000

Bob anobvisa 7 WAVES
KURAMBA!

Alice anobvisa 4 WAVES
alice-kero → 100000000
bob-kero → 200000000

Heino kodhi yekunyatsonzwisisa mamiriro acho:

# 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

Sample code inogonawo kuwanikwa pa GitHub.

Iyo VSCode plugin inotsigira kuenderera kuunganidzwa paunenge uchigadzirisa faira. Naizvozvo, iwe unogona kugara uchitarisa zvikanganiso mune iyo PROBLEMS tebhu.

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp
Kana iwe uchida kushandisa akasiyana mameseji edhita paunenge uchigadzira iyo faira, shandisa

surfboard compile ride/wallet.ride

Izvi zvinoburitsa nhevedzano yebase64 yakaunganidzwa RIDE kodhi.

Yedza chinyorwa che 'wallet.ride'

Ngatitarisei test file. Powered by JavaScript's Mocha chimiro. Pane "Pamberi" basa uye bvunzo nhatu:

  • "Pamberi" mari maakaundi akawanda kuburikidza neMassTransferTransaction, inounganidza iyo script uye inoendesa kune blockchain.
  • "Inogona dhipoziti" inotumira InvokeScriptTransaction kunetiweki, ichimisikidza iyo dhipoziti () basa kune imwe neimwe yemaakaundi maviri.
  • “Haikwanise kubvisa kupfuura yakaiswa” bvunzo dzekuti hapana anogona kuba ma tokeni evamwe vanhu.
  • "Can deposit" inotarisa kuti kubvisa kunogadziriswa nemazvo.

Mhanya bvunzo kubva kuSurfboard uye ongorora zvabuda muWaves Explorer

Kuti umhanye bvunzo, mhanya

surfboard test

Kana uine akawanda manyoro (semuenzaniso, iwe unoda rakasiyana deployment script), unogona kumhanya

surfboard test my-scenario.js

Surfboard ichaunganidza bvunzo mafaera mu./test/ folda uye mhanyisa script pane node yakagadziriswa mu surfboard.config.json. Mushure memasekondi mashoma uchaona chimwe chinhu chakadai:

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! Miedzo yakapfuura. Zvino ngatitarisei zvinoitika kana uchishandisa Waves Explorer: tarisa mabhuroko kana namira imwe yemakero ari pamusoro mukutsvaga (semuenzaniso, inoenderana. wallet#. Ikoko iwe unogona kuwana nhoroondo yekutengeserana, dApp chimiro, decompiled binary faira.

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp
Waves Explorer. Chikumbiro chichangobva kuiswa.

Mamwe Mazano eSurfboard:

1. Kuedza munzvimbo ye testnet, shandisa:

surfboard test --env=testnet

Wana test tokens

2. Kana iwe uchida kuona shanduro dzeJSON dzekutengeserana uye kuti dzinogadziriswa sei nenode, shandisa bvunzo ne -v (zvinoreva 'verbose'):

surfboard test -v

Kushandisa mapurogiramu ane Waves Keeper

1. Gadzira Waves Muchengeti kuti ashande: http://localhost:6869

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp
Kumisikidza Waves Muchengeti kuti ashande nenzvimbo yemuno

2. Pinza chirevo chakavanzika nematokeni etiweki? Kuti zvive nyore, shandisa mhodzi yekutanga yenode yako: waves private node seed with waves tokens. Kero: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Unogona kumhanyisa serverless single page application iwe pachako uchishandisa npm. Kana kuti enda kune iripo: chrome-ext.wvservices.com/dapp-wallet.html

4. Isa kero yewallet kubva pabvunzo run (yakanyorwa pamusoro) mubhokisi rekunyora kero yedApp.

5. Isa mari shoma mundima ye "Deposit" uye tinya bhatani:

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp
Waves Keeper anokumbira mvumo yekusaina InvokeScriptTransaction nemubhadharo wegumi WAVES.

6. Simbisa kutengeserana:

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp
Iko kutengeserana kunogadzirwa uye kutepfenyura kune network. Iye zvino wava kuona ID yake

7. Tarisa kutengeserana uchishandisa Waves Explorer. Isa ID munzvimbo yekutsvaga

Maitiro Ekuvaka, Kuendesa uye Kuedza Mafungu RIDE dApp

Mhedziso uye rumwe ruzivo

Takatarisa maturusi ekugadzira, kuyedza, kuendesa uye kushandisa akareruka dApps paWaves Platform:

  • RIDE mutauro
  • VS Code Editor
  • Waves Explorer
  • surf board
  • Waves Keeper

Zvinongedzo kune avo vanoda kuenderera mberi nekudzidza RIDE:

Mimwe mienzaniso
Online IDE ine mienzaniso
Waves Documentation
Developer chat muTeregiramu
Mafungu uye RIDE pane stack overflow
NEW! Online makosi ekugadzira dApps paWaves Platform

Ramba uchinyura muRIDE musoro uye gadzira yako yekutanga dApp!

TL; DR: bit.ly/2YCFnwY

Source: www.habr.com

Voeg