Com construir, desplegar i provar la dApp Waves RIDE

Hola! En aquest article us mostraré com escriure i executar una dApp normal en un node Waves. Vegem les eines necessàries, els mètodes i un exemple de desenvolupament.

Com construir, desplegar i provar la dApp Waves RIDE

L'esquema de desenvolupament per a dApps i aplicacions normals és gairebé el mateix:

  • Codi d'escriptura
  • Redacció de proves automatitzades
  • Inicieu l'aplicació
  • Prova

Instruments

1. docker per executar el node i Waves Explorer

Si no voleu iniciar un node, podeu ometre aquest pas. Després de tot, hi ha una xarxa de proves i experimentals. Però sense desplegar el vostre propi node, el procés de prova pot allargar-se.

  • Necessitaràs constantment comptes nous amb fitxes de prova. L'aixeta de la xarxa de prova transfereix 10 ONDES cada 10 minuts.
  • El temps mitjà de bloc a la xarxa de prova és d'1 minut, al node - 15 segons. Això es nota especialment quan una transacció requereix confirmacions múltiples.
  • La memòria cau agressiva és possible als nodes de prova públics.
  • També poden no estar disponibles temporalment a causa del manteniment.

A partir d'ara assumiré que esteu treballant amb el vostre propi node.

2. Eina de línia d'ordres de la taula de surf

  • Baixeu i instal·leu Node.js amb ppa, homebrew o exe aquí: https://nodejs.org/en/download/.
  • Instal·leu Surfboard, una eina que us permet fer proves en un node existent.

npm install -g @waves/surfboard

3. Connector de Visual Studio Code

Aquest pas és opcional si no sou un fan dels IDE i preferiu els editors de text. Totes les eines necessàries són utilitats de línia d'ordres. Si utilitzeu vim, presteu atenció al connector vim-ride.

Baixeu i instal·leu Visual Studio Code: https://code.visualstudio.com/

Obriu VS Code i instal·leu el connector waves-ride:

Com construir, desplegar i provar la dApp Waves RIDE

Extensió del navegador Waves Keeper: https://wavesplatform.com/products-keeper

Fet!

Inicieu el node i Waves Explorer

1. Inicieu el node:

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

Assegureu-vos que el node s'inicia mitjançant l'API REST http://localhost:6869:

Com construir, desplegar i provar la dApp Waves RIDE
Swagger REST API per al node

2. Inicieu una instància de Waves Explorer:

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

Obriu el vostre navegador i aneu a http://localhost:3000. Veureu amb quina rapidesa es construeix un circuit de nodes locals buit.

Com construir, desplegar i provar la dApp Waves RIDE
Waves Explorer mostra una instància de node local

Estructura RIDE i eina de taula de surf

Creeu un directori buit i executeu-hi l'ordre

surfboard init

L'ordre inicialitza un directori amb l'estructura del projecte, aplicacions "hola món" i proves. Si obriu aquesta carpeta amb VS Code, veureu:

Com construir, desplegar i provar la dApp Waves RIDE
Surfboard.config.json

  • A la carpeta ./ride/ hi trobareu un únic fitxer wallet.ride: el directori on es troba el codi dApp. Analitzarem breument les dApps al bloc següent.
  • A la carpeta ./test/ trobareu un fitxer *.js. Les proves s'emmagatzemen aquí.
  • ./surfboard.config.json: fitxer de configuració per executar proves.

Envs és una secció important. Cada entorn es configura així:

  • Punt final de l'API REST del node que s'utilitzarà per llançar la dApp i CHAIN_ID de la xarxa.
  • Una frase secreta per a un compte amb fitxes que seran les fonts dels vostres fitxes de prova.

Com podeu veure, surfboard.config.json admet diversos entorns de manera predeterminada. El valor predeterminat és l'entorn local (la clau defaultEnv és un paràmetre canviable).

Aplicació de demostració de cartera

Aquesta secció no és una referència al llenguatge RIDE. Més aviat, una ullada a l'aplicació que implementem i provem per entendre millor què passa a la cadena de blocs.

Vegem una senzilla aplicació de demostració de Wallet. Qualsevol pot enviar fitxes a una adreça dApp. Només pots retirar les teves ONDES. Hi ha dues funcions @Callable disponibles mitjançant InvokeScriptTransaction:

  • deposit()que requereix un pagament adjunt en WAVES
  • withdraw(amount: Int)que retorna fitxes

Al llarg del cicle de vida dApp, es mantindrà l'estructura (adreça → import):

acció
Estat resultant

inicial
buit

L'Alice diposita 5 ONDES
adreça-alicia → 500000000

Bob diposita 2 ONDES

adreça-alicia → 500000000
adreça bob → 200000000

Bob retira 7 ONDES
NEGAT!

Alice retira 4 ONDES
adreça-alicia → 100000000
adreça bob → 200000000

Aquí teniu el codi per entendre completament la situació:

# 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

El codi de mostra també es pot trobar a GitHub.

El connector VSCode admet la compilació contínua mentre s'edita un fitxer. Per tant, sempre podeu controlar els errors a la pestanya PROBLEMES.

Com construir, desplegar i provar la dApp Waves RIDE
Si voleu utilitzar un editor de text diferent quan compileu el fitxer, feu servir

surfboard compile ride/wallet.ride

Això sortirà una sèrie de codi RIDE compilat en base64.

Script de prova per a "wallet.ride"

Mirem-ho fitxer de prova. Desenvolupat pel marc Mocha de JavaScript. Hi ha una funció "Abans" i tres proves:

  • "Abans" finança diversos comptes mitjançant MassTransferTransaction, compila l'script i el desplega a la cadena de blocs.
  • "Pot dipositar" envia una transacció InvokeScript a la xarxa, activant la funció de dipòsit () per a cadascun dels dos comptes.
  • "No es pot retirar més del que es va dipositar" proves que ningú pot robar fitxes d'altres persones.
  • "Pot dipositar" verifica que les retirades es processen correctament.

Executeu proves des de Surfboard i analitzeu els resultats a Waves Explorer

Per executar la prova, córrer

surfboard test

Si teniu diversos scripts (per exemple, necessiteu un script de desplegament independent), podeu executar-lo

surfboard test my-scenario.js

Surfboard recopilarà els fitxers de prova a la carpeta ./test/ i executarà l'script al node configurat a surfboard.config.json. Al cap d'uns segons veureu alguna cosa com això:

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! Proves superades. Mirem ara què passa quan utilitzeu Waves Explorer: mireu els blocs o enganxeu una de les adreces anteriors a la cerca (per exemple, la corresponent wallet#. Allà podeu trobar l'historial de transaccions, l'estat d'App, el fitxer binari descompilat.

Com construir, desplegar i provar la dApp Waves RIDE
Explorador de les ones. Una aplicació que s'acaba de desplegar.

Alguns consells sobre taules de surf:

1. Per provar a l'entorn testnet, utilitzeu:

surfboard test --env=testnet

Obteniu fitxes de prova

2. Si voleu veure les versions JSON de les transaccions i com les processa el node, executeu la prova amb -v (significa "verbosa"):

surfboard test -v

Ús d'aplicacions amb Waves Keeper

1. Configura Waves Keeper perquè funcioni: http://localhost:6869

Com construir, desplegar i provar la dApp Waves RIDE
Configurant Waves Keeper per treballar amb un node local

2. Importar una frase secreta amb fitxes per a la xarxa? Per simplificar, utilitzeu la llavor inicial del vostre node: waves private node seed with waves tokens. Adreça: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Podeu executar una aplicació d'una sola pàgina sense servidor mitjançant npm. O aneu a l'existent: chrome-ext.wvservices.com/dapp-wallet.html

4. Introduïu l'adreça de la cartera de la prova (subratllada més amunt) al quadre de text de l'adreça dApp

5. Introduïu una petita quantitat al camp "Dipòsit" i feu clic al botó:

Com construir, desplegar i provar la dApp Waves RIDE
Waves Keeper sol·licita permís per signar una InvokeScriptTransaction amb un pagament de 10 WAVES.

6. Confirmeu la transacció:

Com construir, desplegar i provar la dApp Waves RIDE
La transacció es crea i es transmet a la xarxa. Ara podeu veure el seu DNI

7. Superviseu la transacció mitjançant Waves Explorer. Introduïu l'identificador al camp de cerca

Com construir, desplegar i provar la dApp Waves RIDE

Conclusions i informació addicional

Hem analitzat les eines per desenvolupar, provar, desplegar i utilitzar dApps senzilles a la plataforma Waves:

  • Llenguatge RIDE
  • Editor de codi VS
  • Explorador de les ones
  • Taula de surf
  • Guardià de les ones

Enllaços per a aquells que vulguin continuar aprenent RIDE:

Més exemples
IDE en línia amb exemples
Documentació de les ones
Xat de desenvolupadors a Telegram
Waves i RIDE a stackoverflow
NOU! Cursos en línia sobre la creació d'Apps a la plataforma Waves

Continua endinsant-te en el tema RIDE i crea la teva primera dApp!

TL; DR: bit.ly/2YCFnwY

Font: www.habr.com

Afegeix comentari