Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp

Sawubona! Kulesi sihloko ngizokukhombisa ukuthi ungabhala kanjani futhi usebenzise i-dApp evamile ku-Waves node. Ake sibheke amathuluzi adingekayo, izindlela kanye nesibonelo sokuthuthukiswa.

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp

Uhlelo lokuthuthukisa lwe-dApps nezinhlelo zokusebenza ezijwayelekile lucishe lufane:

  • Ikhodi yokubhala
  • Ukubhala ukuhlola okuzenzakalelayo
  • Kwethulwa uhlelo lokusebenza
  • Ukuhlola

Amathuluzi

1. docker ukusebenzisa i-node kanye ne-Waves Explorer

Uma ungafuni ukuqala i-node, ungeqa lesi sinyathelo. Phela, kukhona ukuhlolwa kanye nenethiwekhi yokuhlola. Kodwa ngaphandle kokukhipha i-node yakho, inqubo yokuhlola ingase iqhubeke.

  • Uzodinga njalo ama-akhawunti amasha anamathokheni okuhlola. Umpompi ompompi wenethiwekhi wokuhlola udlulisa ama-WAVES angu-10 njalo emizuzwini eyi-10.
  • Isilinganiso sesikhathi sokuvimba kunethiwekhi yokuhlola siyiminithi elingu-1, ku-node - imizuzwana engu-15. Lokhu kubonakala ikakhulukazi uma umsebenzi udinga iziqinisekiso eziningi.
  • Ukugcinwa kwesikhashana okunamandla kuyenzeka ezindaweni zokuhlola zomphakathi.
  • Angase angatholakali okwesikhashana ngenxa yokulungiswa.

Kusukela manje kuya phambili ngizothatha ngokuthi usebenza nge-node yakho.

2. Ithuluzi le-Surfboard Command Line

  • Landa futhi ufake i-Node.js usebenzisa i-ppa, i-homebrew noma i-exe lapha: https://nodejs.org/en/download/.
  • Faka i-Surfboard, ithuluzi elikuvumela ukuthi wenze izivivinyo endaweni ekhona.

npm install -g @waves/surfboard

3. I-plugin ye-Visual Studio Code

Lesi sinyathelo singokuzithandela uma ungeyena umlandeli wama-IDE futhi ukhetha abahleli bombhalo. Wonke amathuluzi adingekayo ayizinsiza zomugqa womyalo. Uma usebenzisa i-vim, naka i-plugin vim-gibela.

Landa futhi ufake Ikhodi ye-Visual Studio: https://code.visualstudio.com/

Vula Ikhodi ye-VS bese ufaka i-plugin ye-waves-ride:

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp

Isandiso sesiphequluli se-Waves Keeper: https://wavesplatform.com/products-keeper

Kwenziwe!

Qala i-node kanye ne-Waves Explorer

1. Qala i-node:

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

Qiniseka ukuthi i-node yethulwa nge-REST API ku http://localhost:6869:

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp
I-Swagger REST API ye-node

2. Qala isibonelo se-Waves Explorer:

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

Vula isiphequluli bese uya ku http://localhost:3000. Uzobona ukuthi isifunda se-node yendawo esingenalutho sakhiwe ngokushesha kangakanani.

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp
I-Waves Explorer ibonisa isibonelo se-node yendawo

Isakhiwo se-RIDE kanye nethuluzi le-Surfboard

Dala umkhombandlela ongenalutho bese usebenzisa umyalo kuwo

surfboard init

Umyalo uqalisa uhla lwemibhalo ngesakhiwo sephrojekthi, "sawubona mhlaba" izinhlelo zokusebenza nezivivinyo. Uma uvula le folda nge-VS Code, uzobona:

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp
I-Surfboard.config.json

  • Ngaphansi kwefolda ethi ./ride/ uzothola ifayela elilodwa elithi wallet.ride - uhla lwemibhalo lapho ikhodi ye-dApp ikhona. Sizohlaziya kafushane ama-dApps kubhulokhi elandelayo.
  • Ngaphansi kwe-./test/ ifolda uzothola ifayela *.js. Izivivinyo zigcinwa lapha.
  • ./surfboard.config.json – ifayela lokucushwa lokuqhuba izivivinyo.

I-Evs iyisigaba esibalulekile. Indawo ngayinye ihlelwe kanje:

  • Iphoyinti lokugcina le-REST API lenodi ezosetshenziswa ukuqalisa i-dApp kanye ne-CHAIN_ID yenethiwekhi.
  • Umusho oyimfihlo we-akhawunti enamathokheni azoba imithombo yamathokheni akho okuhlola.

Njengoba ubona, i-surfboard.config.json isekela izindawo eziningi ngokuzenzakalela. Okuzenzakalelayo indawo yendawo (ukhiye ozenzakalelayo we-Env uyipharamitha eshintshekayo).

Isicelo sedemo ye-wallet

Lesi sigaba asisona ireferensi yolimi lwe-RIDE. Kunalokho, bheka uhlelo lokusebenza esilisebenzisayo futhi silihlole ukuze uqonde kangcono ukuthi kwenzekani ku-blockchain.

Ake sibheke uhlelo lokusebenza olulula lwedemo ye-Wallet. Noma ubani angathumela amathokheni ekhelini le-dApp. Ungakwazi ukuhoxisa kuphela AMAgagasi akho. Imisebenzi emibili ye-@Callable iyatholakala nge-InvokeScriptTransaction:

  • deposit()okudinga inkokhelo enamathiselwe kuma-WAVES
  • withdraw(amount: Int)ebuyisela amathokheni

Kuwo wonke umjikelezo wempilo we-dApp, isakhiwo (ikheli → inani) sizogcinwa:

Action
Isimo somphumela

kokuqala
Ayinalutho

U-Alice ufaka 5 WAVES
alice-ikheli → 500000000

U-Bob ufaka amagagasi angu-2

alice-ikheli → 500000000
bob-ikheli → 200000000

U-Bob uhoxisa AMAgagasi angu-7
KUNQATSHELWE!

U-Alice uhoxisa AMAgagasi angu-4
alice-ikheli → 100000000
bob-ikheli → 200000000

Nansi ikhodi yokuqonda ngokugcwele isimo:

# 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

Ikhodi yesampula ingatholakala futhi ku GitHub.

I-plugin ye-VSCode isekela ukuhlanganiswa okuqhubekayo ngenkathi uhlela ifayela. Ngakho-ke, ungahlala uqapha amaphutha kuthebhu ethi IZINKINGA.

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp
Uma ufuna ukusebenzisa isihleli sombhalo esihlukile lapho uhlanganisa ifayela, sebenzisa

surfboard compile ride/wallet.ride

Lokhu kuzokhipha uchungechunge lwekhodi ye-RIDE ehlanganisiwe ye-base64.

Isikripthi sokuhlola se-'wallet.ride'

Ake sibheke ifayela lokuhlola. Inikwa amandla uhlaka lwe-Mocha lwe-JavaScript. Kunomsebenzi othi “Ngaphambi” nezivivinyo ezintathu:

  • "Ngaphambi" ixhasa ama-akhawunti amaningi nge-MassTransferTransaction, ihlanganisa iskripthi futhi isithumele ku-blockchain.
  • I-"Can deposit" ithumela i-InvokeScriptTransaction kunethiwekhi, ivule umsebenzi wediphozi() we-akhawunti ngayinye kulawa amabili.
  • “Awukwazi ukukhipha okungaphezu kwalokho obekufakiwe” okungekho muntu ongantshontsha amathokheni abanye abantu.
  • "Ingakwazi ukufaka" ihlola ukuthi ukuhoxiswa kucutshungulwa ngendlela efanele.

Yenza izivivinyo kusuka ku-Surfboard futhi uhlaziye imiphumela ku-Waves Explorer

Ukuze uqalise ukuhlolwa, gijima

surfboard test

Uma unemibhalo eminingi (isibonelo, udinga iskripthi sokuphakelwa esihlukile), ungaqalisa

surfboard test my-scenario.js

I-Surfboard izoqoqa amafayela okuhlola ku-./test/ ifolda futhi isebenzise iskripthi kunodi elungiselelwe kokuthi surfboard.config.json. Ngemva kwemizuzwana uzobona into efana nale:

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! Izivivinyo ziphumelele. Manje ake sibheke ukuthi kwenzekani uma usebenzisa i-Waves Explorer: bheka amabhlogo noma unamathisele elinye lamakheli angenhla ekusesheni (isibonelo, elihambisanayo. wallet#. Lapho ungathola umlando wokwenziwe, isimo se-dApp, ifayela kanambambili elihlakaziwe.

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp
Amagagasi Explorer. Isicelo esisanda kuthunyelwa.

Amanye amathiphu e-Surfboard:

1. Ukuze uhlole endaweni ye-testnet, sebenzisa:

surfboard test --env=testnet

Thola amathokheni okuhlola

2. Uma ufuna ukubona izinguqulo ze-JSON zemisebenzi nokuthi zicutshungulwa kanjani ngendawo, qalisa ukuhlola ngokuthi -v (kusho 'i-verbose'):

surfboard test -v

Ukusebenzisa izinhlelo zokusebenza ezine-Waves Keeper

1. Setha i-Waves Keeper ukuthi isebenze: http://localhost:6869

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp
Ukusetha i-Waves Keeper ukuze isebenze ngendawo yasendaweni

2. Ngenisa umusho oyimfihlo namathokheni enethiwekhi? Ukwenza kube lula, sebenzisa imbewu yokuqala yenodi yakho: waves private node seed with waves tokens. Ikheli: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Ungaqalisa uhlelo lokusebenza lwekhasi elilodwa elingenasiphakeli ngokwakho usebenzisa i-npm. Noma iya kwekhona: chrome-ext.wvservices.com/dapp-wallet.html

4. Faka ikheli lesikhwama semali kusukela ekuhlolweni (okudwetshwe ngenhla) ebhokisini lombhalo lekheli le-dApp

5. Faka inani elincane endaweni ethi “Idiphozithi” bese uchofoza inkinobho:

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp
I-Waves Keeper icela imvume yokusayina i-InvokeScriptTransaction enenkokhelo engu-10 WAVES.

6. Qinisekisa umsebenzi:

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp
Okwenziwayo kuyadalwa futhi kusakazwe kunethiwekhi. Manje usungakwazi ukubona i-ID yakhe

7. Gada okwenziwayo usebenzisa i-Waves Explorer. Faka i-ID endaweni yokusesha

Uwakha Kanjani, Uphake futhi Uhlole Amagagasi RIDE dApp

Iziphetho nolwazi olwengeziwe

Sibheke amathuluzi okuthuthukisa, ukuhlola, ukuthumela nokusebenzisa ama-dApp alula ku-Waves Platform:

  • Ulimi lwe-RIDE
  • I-VS Code Editor
  • Amagagasi Explorer
  • I-Surfboard
  • Amagagasi umgcini

Izixhumanisi zalabo abafuna ukuqhubeka nokufunda i-RIDE:

Izibonelo ezengeziwe
I-IDE eku-inthanethi enezibonelo
Amagagasi Amadokhumenti
Ingxoxo yonjiniyela kuTelegram
Amagagasi kanye ne-RIDE ku-stackoverflow
OKUSHA! Izifundo eziku-inthanethi zokudala i-dApps ku-Waves Platform

Qhubeka ungene esihlokweni se-RIDE bese udala i-dApp yakho yokuqala!

TL; DR: bit.ly/2YCFnwY

Source: www.habr.com

Engeza amazwana