Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets

Hallo! In hierdie artikel sal ek jou wys hoe om 'n gewone dApp op 'n Waves-knoop te skryf en uit te voer. Kom ons kyk na die nodige gereedskap, metodes en 'n voorbeeld van ontwikkeling.

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets

Die ontwikkelingskema vir dApps en gereelde toepassings is amper dieselfde:

  • Skryf kode
  • Skryf outomatiese toetsing
  • Die bekendstelling van die toepassing
  • Toets

Tools

1. docker om die node en Waves Explorer te laat loop

As jy nie 'n nodus wil begin nie, kan jy hierdie stap oorslaan. Daar is immers 'n toets- en eksperimentele netwerk. Maar sonder om jou eie nodus te ontplooi, kan die toetsproses voortduur.

  • Jy sal voortdurend nuwe rekeninge met toetstokens nodig hê. Die toetsnetwerkkraan dra elke 10 minute 10 GOLWE oor.
  • Die gemiddelde bloktyd in die toetsnetwerk is 1 minuut, in die nodus – 15 sekondes. Dit is veral opvallend wanneer 'n transaksie veelvuldige bevestigings vereis.
  • Aggressiewe caching is moontlik op publieke toetsnodes.
  • Hulle kan ook tydelik onbeskikbaar wees weens onderhoud.

Van nou af sal ek aanvaar dat jy met jou eie nodus werk.

2. Surfboard Command Line Tool

  • Laai Node.js af en installeer met behulp van ppa, homebrew of exe hier: https://nodejs.org/en/download/.
  • Installeer Surfboard, 'n instrument waarmee u toetse op 'n bestaande nodus kan uitvoer.

npm install -g @waves/surfboard

3. Visual Studio Code-inprop

Hierdie stap is opsioneel as jy nie 'n aanhanger van IDE's is nie en teksredigeerders verkies. Al die nodige gereedskap is opdragreëlhulpmiddels. As jy vim gebruik, let op die inprop vim-rit.

Laai Visual Studio Code af en installeer: https://code.visualstudio.com/

Maak VS-kode oop en installeer die waves-ride-inprop:

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets

Waves Keeper-blaaieruitbreiding: https://wavesplatform.com/products-keeper

Gedoen!

Begin die node en Waves Explorer

1. Begin die nodus:

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

Maak seker dat die nodus via die REST API in http://localhost:6869:

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets
Swagger REST API vir nodus

2. Begin 'n instansie van Waves Explorer:

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

Maak 'n blaaier oop en gaan na http://localhost:3000. Jy sal sien hoe vinnig 'n leë plaaslike nodusbaan gebou word.

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets
Waves Explorer vertoon 'n plaaslike nodus-instansie

RIDE-struktuur en branderplank-instrument

Skep 'n leë gids en voer die opdrag daarin uit

surfboard init

Die opdrag inisialiseer 'n gids met die projekstruktuur, "hallo wêreld" toepassings en toetse. As jy hierdie gids oopmaak met VS-kode, sal jy sien:

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets
Surfboard.config.json

  • Onder die ./ride/-lêergids sal jy 'n enkele lêer wallet.ride vind - die gids waar die dApp-kode geleë is. Ons sal dApps in die volgende blok kortliks ontleed.
  • Onder die ./test/-lêergids sal jy 'n *.js-lêer vind. Toetse word hier gestoor.
  • ./surfboard.config.json – konfigurasielêer vir die uitvoer van toetse.

Envs is 'n belangrike afdeling. Elke omgewing is soos volg gekonfigureer:

  • REST API eindpunt van die nodus wat gebruik sal word om die dApp en CHAIN_ID van die netwerk te begin.
  • 'n Geheime frase vir 'n rekening met tokens wat die bronne van jou toetstokens sal wees.

Soos jy kan sien, ondersteun surfboard.config.json by verstek verskeie omgewings. Die verstek is die plaaslike omgewing (die defaultEnv-sleutel is 'n veranderlike parameter).

Wallet-demo-toepassing

Hierdie afdeling is nie 'n verwysing na die RIDE-taal nie. Kyk eerder na die toepassing wat ons ontplooi en toets om beter te verstaan ​​wat in die blokketting gebeur.

Kom ons kyk na 'n eenvoudige Wallet-demo-toepassing. Enigeen kan tokens na 'n dApp-adres stuur. Jy kan net jou GOLWE onttrek. Twee @Callable-funksies is beskikbaar via InvokeScriptTransaction:

  • deposit()wat 'n aangehegte betaling in GOLWE vereis
  • withdraw(amount: Int)wat tokens teruggee

Gedurende die dApp-lewensiklus sal die struktuur (adres → bedrag) gehandhaaf word:

Aksie
Resulterende toestand

aanvanklike
leeg

Alice deponeer 5 GOLWE
alice-adres → 500000000

Bob deponeer 2 GOLWE

alice-adres → 500000000
bob-adres → 200000000

Bob onttrek 7 GOLWE
GEWEEK!

Alice onttrek 4 GOLWE
alice-adres → 100000000
bob-adres → 200000000

Hier is die kode om die situasie ten volle te verstaan:

# 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

Voorbeeldkode kan ook gevind word by GitHub.

Die VSCode-inprop ondersteun deurlopende samestelling terwyl 'n lêer gewysig word. Daarom kan u altyd foute in die PROBLEME-oortjie monitor.

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets
As jy 'n ander teksredigeerder wil gebruik wanneer jy die lêer saamstel, gebruik

surfboard compile ride/wallet.ride

Dit sal 'n reeks van base64 saamgestelde RIDE-kode uitvoer.

Toetsskrif vir 'wallet.ride'

Kom ons kyk na toets lêer. Aangedryf deur JavaScript se Mocha-raamwerk. Daar is 'n "Voor"-funksie en drie toetse:

  • "Voordat" finansier verskeie rekeninge via MassTransferTransaction, stel die skrif saam en ontplooi dit na die blokketting.
  • "Can deposit" stuur 'n InvokeScriptTransaction na die netwerk, wat die deposit()-funksie vir elk van die twee rekeninge aktiveer.
  • “Kan nie meer onttrek as wat gedeponeer is nie” toetse dat niemand ander mense se tokens kan steel nie.
  • “Kan deponeer” kontroleer dat onttrekkings korrek verwerk word.

Doen toetse vanaf Surfboard en ontleed resultate in Waves Explorer

Om die toets uit te voer, hardloop

surfboard test

As jy veelvuldige skrifte het (jy het byvoorbeeld 'n aparte ontplooiingskrip nodig), kan jy hardloop

surfboard test my-scenario.js

Surfboard sal die toetslêers in die ./test/-lêergids versamel en die skrip op die nodus laat loop wat in surfboard.config.json opgestel is. Na 'n paar sekondes sal jy iets soos hierdie sien:

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)

Hoera! Toetse geslaag. Kom ons kyk nou na wat gebeur wanneer jy Waves Explorer gebruik: kyk na die blokke of plak een van die adresse hierbo in die soektog (byvoorbeeld die ooreenstemmende wallet#. Daar kan jy transaksiegeskiedenis, dApp-status, gedekompileerde binêre lêer vind.

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets
Waves Explorer. 'n Toepassing wat pas ontplooi is.

Sommige branderplankwenke:

1. Om in die toetsnet-omgewing te toets, gebruik:

surfboard test --env=testnet

Kry toetstekens

2. As jy die JSON-weergawes van transaksies wil sien en hoe hulle deur die nodus verwerk word, voer die toets uit met -v (beteken 'verbose'):

surfboard test -v

Gebruik toepassings met Waves Keeper

1. Stel Waves Keeper op om te werk: http://localhost:6869

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets
Stel Waves Keeper op om met 'n plaaslike nodus te werk

2. Voer geheime frase met tekens vir die netwerk in? Vir eenvoud, gebruik die aanvanklike saad van jou nodus: waves private node seed with waves tokens. Adres: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Jy kan self 'n bedienerlose enkelbladsy-toepassing gebruik deur npm te gebruik. Of gaan na die bestaande een: chrome-ext.wvservices.com/dapp-wallet.html

4. Voer die beursie-adres van die toetslopie (hierbo onderstreep) in die dApp-adres tekskassie in

5. Voer 'n klein bedrag in die "Deposito"-veld in en klik op die knoppie:

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets
Waves Keeper versoek toestemming om 'n InvokeScriptTransaction te onderteken met betaling van 10 WAVES.

6. Bevestig die transaksie:

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets
Die transaksie word geskep en na die netwerk uitgesaai. Nou kan jy haar ID sien

7. Monitor die transaksie met behulp van Waves Explorer. Voer ID in die soekveld in

Hoe om die Waves RIDE dApp te bou, te ontplooi en te toets

Gevolgtrekkings en bykomende inligting

Ons het gekyk na die gereedskap vir die ontwikkeling, toetsing, implementering en gebruik van eenvoudige dApps op die Waves-platform:

  • RIT taal
  • VS Kode Editor
  • Waves Explorer
  • branderplank
  • Golwe Bewaarder

Skakels vir diegene wat wil voortgaan om RIDE te leer:

Meer voorbeelde
Aanlyn IDE met voorbeelde
Golwe Dokumentasie
Ontwikkelaarklets in Telegram
Golwe en RY op stapeloorvloei
NUUT! Aanlynkursusse oor die skep van dApps op die Waves-platform

Gaan voort om in die RIDE-onderwerp te duik en skep jou eerste dApp!

TL; DR: bit.ly/2YCFnwY

Bron: will.com

Voeg 'n opmerking