Cómo crear, implementar y probar la dApp Waves RIDE

¡Hola! En este artículo, le mostraré cómo escribir y ejecutar una dApp normal en un nodo de Waves. Veamos las herramientas, los métodos y un ejemplo de desarrollo necesarios.

Cómo crear, implementar y probar la dApp Waves RIDE

El esquema de desarrollo para dApps y aplicaciones normales es casi el mismo:

  • Escribimos el código
  • Escribir pruebas automatizadas
  • Lanzamiento de la aplicación
  • Prueba

Instrumentos

1. docker para ejecutar el nodo y Waves Explorer

Si no desea iniciar un nodo, puede omitir este paso. Después de todo, existe una red de prueba y experimentación. Pero sin implementar su propio nodo, el proceso de prueba puede prolongarse.

  • Necesitará constantemente nuevas cuentas con tokens de prueba. El grifo de la red de prueba transfiere 10 ONDAS cada 10 minutos.
  • El tiempo medio de bloqueo en la red de prueba es de 1 minuto, en el nodo, de 15 segundos. Esto es especialmente notable cuando una transacción requiere múltiples confirmaciones.
  • El almacenamiento en caché agresivo es posible en nodos de prueba públicos.
  • También es posible que no estén disponibles temporalmente debido a mantenimiento.

De ahora en adelante asumiré que estás trabajando con tu propio nodo.

2. Herramienta de línea de comandos de tabla de surf

  • Descargue e instale Node.js usando ppa, homebrew o exe aquí: https://nodejs.org/en/download/.
  • Instale Surfboard, una herramienta que le permite ejecutar pruebas en un nodo existente.

npm install -g @waves/surfboard

3. Complemento de código de Visual Studio

Este paso es opcional si no eres fanático de los IDE y prefieres los editores de texto. Todas las herramientas necesarias son utilidades de línea de comandos. Si usas vim, presta atención al complemento. vim-ride.

Descargue e instale el código de Visual Studio: https://code.visualstudio.com/

Abra VS Code e instale el complemento Waves-Ride:

Cómo crear, implementar y probar la dApp Waves RIDE

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

¡Ya está!

Inicie el nodo y Waves Explorer

1. Inicie el nodo:

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

Asegúrese de que el nodo se inicie a través de la API REST en http://localhost:6869:

Cómo crear, implementar y probar la dApp Waves RIDE
API REST Swagger para nodo

2. Inicie una instancia de Waves Explorer:

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

Abre un navegador y ve a http://localhost:3000. Verá qué tan rápido se construye un circuito de nodo local vacío.

Cómo crear, implementar y probar la dApp Waves RIDE
Waves Explorer muestra una instancia de nodo local

Estructura RIDE y herramienta para tabla de surf.

Cree un directorio vacío y ejecute el comando en él

surfboard init

El comando inicializa un directorio con la estructura del proyecto, las aplicaciones y pruebas de "hola mundo". Si abre esta carpeta con VS Code, verá:

Cómo crear, implementar y probar la dApp Waves RIDE
Tabla de surf.config.json

  • En la carpeta ./ride/ encontrará un único archivo wallet.ride, el directorio donde se encuentra el código de la dApp. Analizaremos brevemente las dApps en el siguiente bloque.
  • Debajo de la carpeta ./test/ encontrará un archivo *.js. Las pruebas se almacenan aquí.
  • ./surfboard.config.json: archivo de configuración para ejecutar pruebas.

Envs es una sección importante. Cada entorno está configurado así:

  • Punto final de la API REST del nodo que se utilizará para iniciar la dApp y CHAIN_ID de la red.
  • Una frase secreta para una cuenta con tokens que serán la fuente de tus tokens de prueba.

Como puede ver, surfboard.config.json admite múltiples entornos de forma predeterminada. El valor predeterminado es el entorno local (la clave defaultEnv es un parámetro modificable).

Aplicación de demostración de billetera

Esta sección no es una referencia al lenguaje RIDE. Más bien, una mirada a la aplicación que implementamos y probamos para comprender mejor lo que sucede en la cadena de bloques.

Veamos una sencilla aplicación de demostración de Wallet. Cualquiera puede enviar tokens a una dirección de dApp. Sólo podrás retirar tus WAVES. Dos funciones @Callable están disponibles a través de InvokeScriptTransaction:

  • deposit()que requiere un pago adjunto en WAVES
  • withdraw(amount: Int)que devuelve fichas

Durante todo el ciclo de vida de la dApp, se mantendrá la estructura (dirección → cantidad):

la columna Acción
Estado resultante

inicial
vacío

Alice deposita 5 ONDAS
dirección-alicia → 500000000

Bob deposita 2 ONDAS

dirección-alicia → 500000000
dirección-bob → 200000000

Bob retira 7 ONDAS
¡DENEGADO!

Alice retira 4 ONDAS
dirección-alicia → 100000000
dirección-bob → 200000000

Aquí está el código para comprender completamente la situación:

# 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 código de muestra también se puede encontrar en GitHub.

El complemento VSCode admite la compilación continua mientras se edita un archivo. Por lo tanto, siempre puede monitorear los errores en la pestaña PROBLEMAS.

Cómo crear, implementar y probar la dApp Waves RIDE
Si desea utilizar un editor de texto diferente al compilar el archivo, utilice

surfboard compile ride/wallet.ride

Esto generará una serie de código RIDE compilado en base64.

Script de prueba para 'wallet.ride'

Miremos a archivo de prueba. Desarrollado por el marco Mocha de JavaScript. Hay una función “Antes” y tres pruebas:

  • "Antes" financia varias cuentas a través de MassTransferTransaction, compila el script y lo implementa en la cadena de bloques.
  • “Can deposit” envía una InvokeScriptTransaction a la red, activando la función deposit() para cada una de las dos cuentas.
  • "No se puede retirar más de lo depositado" prueba que nadie puede robar los tokens de otras personas.
  • "Puede depositar" cheques que los retiros se procesen correctamente.

Ejecute pruebas desde Surfboard y analice resultados en Waves Explorer

Para ejecutar la prueba, ejecute

surfboard test

Si tiene varios scripts (por ejemplo, necesita un script de implementación independiente), puede ejecutar

surfboard test my-scenario.js

Surfboard recopilará los archivos de prueba en la carpeta ./test/ y ejecutará el script en el nodo configurado en surfboard.config.json. Después de unos segundos verás algo como esto:

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)

¡Hurra! Se pasaron las pruebas. Ahora echemos un vistazo a lo que sucede cuando se usa Waves Explorer: mire los bloques o pegue una de las direcciones anteriores en la búsqueda (por ejemplo, la correspondiente wallet#. Allí puede encontrar el historial de transacciones, el estado de la dApp y el archivo binario descompilado.

Cómo crear, implementar y probar la dApp Waves RIDE
Explorador de olas. Una aplicación que acaba de implementarse.

Algunos consejos sobre tablas de surf:

1. Para realizar pruebas en el entorno testnet, utilice:

surfboard test --env=testnet

Obtener fichas de prueba

2. Si desea ver las versiones JSON de las transacciones y cómo las procesa el nodo, ejecute la prueba con -v (significa "detallado"):

surfboard test -v

Usar aplicaciones con Waves Keeper

1. Configure Waves Keeper para que funcione: http://localhost:6869

Cómo crear, implementar y probar la dApp Waves RIDE
Configurar Waves Keeper para que funcione con un nodo local

2. ¿Importar frase secreta con tokens para la red? Para simplificar, use la semilla inicial de su nodo: waves private node seed with waves tokens. DIRECCIÓN: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Puede ejecutar usted mismo una aplicación de una sola página sin servidor utilizando npm. O vaya al existente: chrome-ext.wvservices.com/dapp-wallet.html

4. Ingrese la dirección de la billetera de la ejecución de prueba (subrayada arriba) en el cuadro de texto de dirección de la dApp.

5. Ingrese una pequeña cantidad en el campo "Depósito" y haga clic en el botón:

Cómo crear, implementar y probar la dApp Waves RIDE
Waves Keeper solicita permiso para firmar una InvokeScriptTransaction con el pago de 10 WAVES.

6. Confirme la transacción:

Cómo crear, implementar y probar la dApp Waves RIDE
La transacción se crea y se transmite a la red. Ahora puedes ver su identificación.

7. Supervise la transacción utilizando Waves Explorer. Ingrese el ID en el campo de búsqueda

Cómo crear, implementar y probar la dApp Waves RIDE

Conclusiones e información adicional.

Analizamos las herramientas para desarrollar, probar, implementar y usar dApps simples en la plataforma Waves:

  • idioma de paseo
  • Editor de código VS
  • Explorador de olas
  • Tabla de surf
  • Guardián de las olas

Enlaces para aquellos que quieran seguir aprendiendo RIDE:

Más ejemplos
IDE en línea con ejemplos
Documentación de ondas
Chat de desarrollador en Telegram
Waves y RIDE en stackoverflow
¡NUEVO! Cursos en línea sobre la creación de dApps en la plataforma Waves

¡Continúa sumergiéndote en el tema RIDE y crea tu primera dApp!

TL; DR: bit.ly/2YCFnwY

Fuente: habr.com

Añadir un comentario