Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp

Saluton! En ĉi tiu artikolo mi montros al vi kiel skribi kaj ruli regulan dApp sur Waves-nodo. Ni rigardu la necesajn ilojn, metodojn kaj ekzemplon de evoluo.

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp

La evoluskemo por dApps kaj regulaj aplikoj estas preskaŭ la sama:

  • Skriba kodo
  • Skribante aŭtomatigitan testadon
  • Lanĉante la programon
  • Testado

Iloj

1. docker ruli nodon kaj Waves Explorer

Se vi ne volas komenci nodon, vi povas salti ĉi tiun paŝon. Post ĉio, ekzistas prova kaj eksperimenta reto. Sed sen deplojado de via propra nodo, la testa procezo povas daŭri.

  • Vi konstante bezonos novajn kontojn kun testaj ĵetonoj. La prova reto-krano transdonas 10 ONDOJ ĉiujn 10 minutojn.
  • La averaĝa bloktempo en la testa reto estas 1 minuto, en la nodo - 15 sekundoj. Ĉi tio estas precipe rimarkebla kiam transakcio postulas plurajn konfirmojn.
  • Agresema kaŝmemoro eblas sur publikaj testnodoj.
  • Ili ankaŭ povas esti provizore neatingeblaj pro bontenado.

De nun mi supozos, ke vi laboras per via propra nodo.

2. Surfboard Command Line Tool

  • Elŝutu kaj instalu Node.js uzante ppa, homebrew aŭ exe ĉi tie: https://nodejs.org/en/download/.
  • Instalu Surfboard, ilon, kiu ebligas al vi fari testojn sur ekzistanta nodo.

npm install -g @waves/surfboard

3. Vida Studio Kodo kromaĵo

Ĉi tiu paŝo estas laŭvola se vi ne estas ŝatanto de IDEoj kaj preferas tekstredaktilojn. Ĉiuj necesaj iloj estas komandliniaj utilecoj. Se vi uzas vim, atentu la kromprogramon vim-ride.

Elŝutu kaj instalu Visual Studio Code: https://code.visualstudio.com/

Malfermu VS Code kaj instalu la kromprogramon waves-ride:

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp

Etendo de retumilo Waves Keeper: https://wavesplatform.com/products-keeper

Farita!

Komencu la nodon kaj Waves Explorer

1. Komencu la nodon:

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

Certigu, ke la nodo estas lanĉita per la REST API en http://localhost:6869:

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp
Swagger REST API por nodo

2. Komencu ekzemplon de Waves Explorer:

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

Malfermu retumilon kaj iru al http://localhost:3000. Vi vidos kiom rapide malplena loka noda cirkvito estas konstruita.

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp
Waves Explorer montras lokan nodan ekzemplon

RIDE strukturo kaj Surftabulo ilo

Kreu malplenan dosierujon kaj rulu la komandon en ĝi

surfboard init

La komando pravigas dosierujon kun la projektostrukturo, "saluton mondo" aplikaĵoj kaj testoj. Se vi malfermas ĉi tiun dosierujon kun VS Code, vi vidos:

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp
Surfboard.config.json

  • Sub la dosierujo ./ride/ vi trovos ununuran dosieron wallet.ride - la dosierujon kie troviĝas la dApp-kodo. Ni mallonge analizos dApps en la sekva bloko.
  • Sub la dosierujo ./test/ vi trovos dosieron *.js. Testoj estas konservitaj ĉi tie.
  • ./surfboard.config.json - agorda dosiero por ruli testojn.

Envs estas grava sekcio. Ĉiu medio estas agordita tiel:

  • REST API finpunkto de la nodo, kiu estos uzata por lanĉi la dApp kaj CHAIN_ID de la reto.
  • Sekreta frazo por konto kun ĵetonoj, kiuj estos la fontoj de viaj testaj ĵetonoj.

Kiel vi povas vidi, surfboard.config.json subtenas plurajn mediojn defaŭlte. La defaŭlta estas la loka medio (la defaultEnv-klavo estas ŝanĝebla parametro).

Monujo-demo-apliko

Ĉi tiu sekcio ne estas referenco al la RIDE-lingvo. Prefere, rigardu la aplikaĵon, kiun ni deplojas kaj testas por pli bone kompreni, kio okazas en la blokĉeno.

Ni rigardu simplan Wallet-demo-aplikaĵon. Ĉiu povas sendi ĵetonojn al dApp-adreso. Vi povas nur retiri viajn ONDOJN. Du @Callable-funkcioj haveblas per InvokeScriptTransaction:

  • deposit()kiu postulas kunan pagon en ONDOJ
  • withdraw(amount: Int)kiu resendas ĵetonojn

Dum la dApp-vivciklo, la strukturo (adreso → kvanto) estos konservita:

ago
Rezulta stato

komenca
malplena

Alice deponas 5 ONDOJ
alice-adreso → 500000000

Bob deponas 2 ONDOJ

alice-adreso → 500000000
bob-adreso → 200000000

Bob retiras 7 ONDOJ
NITA!

Alice retiriĝas 4 ONDOJ
alice-adreso → 100000000
bob-adreso → 200000000

Jen la kodo por plene kompreni la situacion:

# 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

Ekzempla kodo ankaŭ troveblas ĉe GitHub.

La kromaĵo VSCode subtenas kontinuan kompilon dum redaktado de dosiero. Tial vi ĉiam povas monitori erarojn en la langeto PROBLEMOJ.

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp
Se vi volas uzi alian tekstredaktilon dum kompilado de la dosiero, uzu

surfboard compile ride/wallet.ride

Ĉi tio eligos serion de base64 kompilita RIDE-kodo.

Testa skripto por 'wallet.ride'

Ni rigardu prova dosiero. Funkciigita de la Mocha kadro de JavaScript. Estas funkcio "Antaŭ" kaj tri testoj:

  • "Antaŭ" financas multoblajn kontojn per MassTransferTransaction, kompilas la skripton kaj deplojas ĝin al la blokĉeno.
  • "Povas deponi" sendas InvokeScriptTransaction al la reto, aktivigante la funkcion deponejo () por ĉiu el la du kontoj.
  • "Ne povas eltiri pli ol estis deponita" testoj, ke neniu povas ŝteli aliulajn ĵetonojn.
  • "Povas deponi" ĉekojn, ke retiriĝoj estas ĝuste procesitaj.

Faru testojn de Surfboard kaj analizu rezultojn en Waves Explorer

Por fari la teston, kuru

surfboard test

Se vi havas plurajn skriptojn (ekzemple, vi bezonas apartan deplojan skripton), vi povas ruli

surfboard test my-scenario.js

Surfboard kolektos la testdosierojn en la dosierujo ./test/ kaj ruligos la skripton sur la nodo agordita en surfboard.config.json. Post kelkaj sekundoj vi vidos ion tian:

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)

Hura! Provoj pasis. Nun ni rigardu kio okazas kiam vi uzas Waves Explorer: rigardu la blokojn aŭ algluu unu el la supraj adresoj en la serĉon (ekzemple, la responda wallet#. Tie vi povas trovi transakcian historion, dApp-statuson, malkompilitan binaran dosieron.

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp
Waves Explorer. Apliko kiu ĵus estis deplojita.

Kelkaj Surftabulo-Konsiloj:

1. Por testi en la testreto-medio, uzu:

surfboard test --env=testnet

Akiru testĵetonojn

2. Se vi volas vidi la JSON-versiojn de transakcioj kaj kiel ili estas procesitaj de la nodo, rulu la teston per -v (signifas 'vorteca'):

surfboard test -v

Uzante programojn kun Waves Keeper

1. Agordu Waves Keeper por funkcii: http://localhost:6869

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp
Agordante Waves Keeper por labori kun loka nodo

2. Importi sekretan frazon kun ĵetonoj por la reto? Por simpleco, uzu la komencan semon de via nodo: waves private node seed with waves tokens. Adreso: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Vi mem povas ruli senservilan unupaĝan aplikaĵon uzante npm. Aŭ iru al la ekzistanta: chrome-ext.wvservices.com/dapp-wallet.html

4. Enigu la monujo-adreson de la provo (substrekita supre) en la tekstujon de dApp-adreso

5. Enigu malgrandan kvanton en la kampo "Deponejo" kaj alklaku la butonon:

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp
Waves Keeper petas permeson subskribi InvokeScriptTransaction kun pago de 10 WAVES.

6. Konfirmu la transakcion:

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp
La transakcio estas kreita kaj dissendita al la reto. Nun vi povas vidi ŝian ID

7. Monitoru la transakcion uzante Waves Explorer. Enigu ID en la serĉkampon

Kiel Konstrui, Deploji kaj Testi Ondojn RIDE dApp

Konkludoj kaj pliaj informoj

Ni rigardis la ilojn por disvolvi, testi, disfaldi kaj uzi simplajn dApps sur la Waves Platformo:

  • RIDE lingvo
  • VS Code Editor
  • Waves Explorer
  • Surbordo
  • Ondgardisto

Ligiloj por tiuj, kiuj volas daŭre lerni RIDE:

Pli da ekzemploj
Enreta IDE kun ekzemploj
Waves Dokumentado
Babilejo de programistoj en Telegram
Ondoj kaj RIDE sur stackoverflow
NOVA! Retaj kursoj pri kreado de dApps sur la Waves Platformo

Daŭrigu plonĝi en la RIDE-temon kaj kreu vian unuan dApp!

TL; DR: bit.ly/2YCFnwY

fonto: www.habr.com

Aldoni komenton