Cómo construir, desplegar y probar la dApp de Waves RIDE

¡Hola! En este artículo, voy a mostrarte cómo escribir y ejecutar un dApp en la nodo Waves. Revisaremos las herramientas necesarias, los métodos y un ejemplo de desarrollo.

Cómo construir, desplegar y probar la dApp de Waves RIDE

El esquema de desarrollo de dApps y aplicaciones comunes no difiere mucho:

  • Escribimos el código
  • Escribimos pruebas automatizadas
  • Iniciamos la aplicación
  • Probamos

Herramientas

1. docker para ejecutar la nodo y Waves Explorer

Si no deseas ejecutar la nodo, puedes omitir este paso. Existen redes de pruebas y experimentales. Pero sin desplegar tu propia nodo, el proceso de prueba puede tardar.

  • Siempre necesitarás nuevas cuentas con tokens de prueba. El grifo de la red de pruebas transfiere 10 WAVES cada 10 minutos.
  • El tiempo medio de bloques en la red de pruebas es de 1 minuto, mientras que en la nodo es de 15 segundos. Esto es especialmente notorio cuando una transacción requiere varias confirmaciones.
  • En nodos de prueba públicos, puede haber un caché agresivo.
  • También pueden estar temporalmente fuera de servicio debido al mantenimiento técnico.

A partir de aquí asumiré que estás trabajando con tu propia nodo.

2. Herramienta de línea de comandos Surfboard

  • Descarga e instala Node.js usando ppa, homebrew o exe aquí: https://nodejs.org/en/download/.
  • Instala Surfboard, una herramienta que te permitirá ejecutar pruebas en una nodo existente.

npm install -g @waves/surfboard

3. Plugin de Visual Studio Code

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

Descarga e instala Visual Studio Code: https://code.visualstudio.com/

Abre VS Code e instala el plugin waves-ride:

Cómo construir, desplegar y probar la dApp de Waves RIDE

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

¡Listo!

Ejecuta la nodo y Waves Explorer

1. Inicia la nodo:

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

Asegúrate de que la nodo se ejecute a través de REST API en http://localhost:6869:

Cómo construir, desplegar y probar la dApp de Waves RIDE
Interfaz Swagger REST API para la nodo

2. Inicia 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 el navegador y ve a http://localhost:3000. Verás cómo se construye rápidamente una cadena vacía en la nodo local.

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

Estructura de RIDE y herramienta Surfboard

Crea un directorio vacío y ejecuta dentro de él el comando

surfboard init

El comando inicializa el directorio con la estructura del proyecto, una aplicación tipo 'hello world' y pruebas. Si abres esta carpeta con VS Code, verás:

Cómo construir, desplegar y probar la dApp de Waves RIDE
Surfboard.config.json

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

Envs es una sección importante. Cada entorno se configura de la siguiente manera:

  • El endpoint de la API REST de la nodo, que se utilizará para lanzar la dApp y el CHAIN_ID de la red.
  • Frase secreta para la cuenta con tokens, que serán las fuentes de tokens de su prueba.

Como puede ver, surfboard.config.json por defecto soporta varios entornos. Por defecto está configurado el entorno local (la clave defaultEnv es un parámetro modificable).

La aplicación Wallet-demo

Esta sección no es un manual del lenguaje RIDE. Más bien, es una mirada a la aplicación que estamos desplegando y probando para entender mejor lo que sucede en la blockchain.

Consideremos una aplicación simple Wallet-demo. Cualquiera puede enviar tokens a la dirección de la dApp. Solo se pueden retirar sus propios WAVES. Hay dos funciones @Callable disponibles a través de InvokeScriptTransaction:

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

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

Acción
Estado resultante

inicial
vacío

Alice deposita 5 WAVES
alice-address → 500000000

Bob deposita 2 WAVES

alice-address → 500000000
bob-address → 200000000

Bob retira 7 WAVES
¡DENEGADO!

Alice retira 4 WAVES
alice-address → 100000000
bob-address → 200000000

Aquí está el código para entender 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

También se puede encontrar un ejemplo de código en GitHub.

El plugin de VSCode soporta compilación continua al editar el archivo. Por lo tanto, siempre puede seguir los errores en la pestaña PROBLEMAS.

Cómo construir, desplegar y probar la dApp de Waves RIDE
Si desea usar otro editor de texto al compilar el archivo, use

surfboard compile ride\/wallet.ride

Esto generará una serie de códigos RIDE compilados en base64.

Escenario de prueba para ‘wallet.ride’

Veamos el archivo de prueba. Funciona en el marco de JavaScript Mocha. Hay una función «Before» y tres pruebas:

  • «Before» financia varias cuentas a través de MassTransferTransaction, compila el script y lo despliega en la blockchain.
  • «Can deposit» envía a la red InvokeScriptTransaction, activando la función deposit() para cada una de las dos cuentas.
  • «Can’t withdraw more than was deposited» prueba que nadie podrá robar los tokens de otros.
  • «Can deposit» verifica que las retiradas se manejan correctamente.

Ejecutando pruebas con Surfboard y analizando los resultados en Waves Explorer

Para ejecutar la prueba, ejecute

surfboard test

Si tiene varios escenarios (por ejemplo, necesita un script de despliegue separado), puede ejecutar

surfboard test my-scenario.js

Surfboard recogerá archivos de prueba en la carpeta .\/test\/ y ejecutará el script en el nodo que está configurado en surfboard.config.json. Después de unos segundos, observarás algo similar:

cartera test suite
Generando cuentas con nonce: ce8d86ee
Cuenta generada: foofoofoofoofoofoofoofoofoofoofoo#ce8d86ee - 3M763WgwDhmry95XzafZedf7WoBf5ixMwhX
Cuenta generada: barbarbarbarbarbarbarbarbarbar#ce8d86ee - 3MAi9KhwnaAk5HSHmYPjLRdpCAnsSFpoY2v
Cuenta generada: wallet#ce8d86ee - 3M5r6XYMZPUsRhxbwYf1ypaTB6MNs2Yo1Gb
Cuentas financiadas con éxito
El script ha sido configurado
   √ Se puede depositar (4385ms)
   √ No se puede retirar más de lo que se depositó
   √ Se puede retirar (108ms)
3 aprobadas (15s)

¡Hurra! Las pruebas han sido superadas. Ahora echemos un vistazo a lo que sucede al usar Waves Explorer: revisemos los bloques o introduzcamos una de las direcciones mencionadas anteriormente en la búsqueda (por ejemplo, correspondiente cartera#. Allí se puede encontrar el historial de transacciones, el estado de dApp, el archivo binario decompilado.

Cómo construir, desplegar y probar la dApp de Waves RIDE
Waves Explorer. Una aplicación que acaba de ser desplegada.

Algunos consejos sobre Surfboard:

1. Para probar en el entorno testnet, usa:

surfboard test --env=testnet

Obtener tokens de prueba

2. Si deseas ver las versiones JSON de las transacciones y cómo son procesadas por el nodo, ejecuta la prueba con -v (significa 'verbose'):

surfboard test -v

Uso de aplicaciones con Waves Keeper

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

Cómo construir, desplegar y probar la dApp de Waves RIDE
Configuración de Waves Keeper para trabajar con un nodo local

2. ¿Importar la frase secreta con tokens para la red? Para simplificar, usa el seed inicial de tu nodo: waves private node seed with waves tokens. Dirección: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Puedes ejecutar una aplicación de una sola página, sin servidor, por tu cuenta, utilizando npm. O dirígete a una existente: chrome-ext.wvservices.com\/dapp-wallet.html

4. Introduce la dirección de la cartera del lanzamiento de prueba (subrayada arriba) en el campo de texto de la dirección dApp

5. Escribe una pequeña cantidad en el campo «Depositar» y presiona el botón:

Cómo construir, desplegar y probar la dApp de Waves RIDE
Waves Keeper solicita permiso para firmar el InvokeScriptTransaction con un pago de 10 WAVES.

6. Confirma la transacción:

Cómo construir, desplegar y probar la dApp de Waves RIDE
La transacción ha sido creada y se está transmitiendo a la red. Ahora se puede ver su ID

7. Observa la transacción usando Waves Explorer. Introduce el ID en el campo de búsqueda

Cómo construir, desplegar y probar la dApp de Waves RIDE

Conclusiones y información adicional

Hemos revisado herramientas de desarrollo, pruebas, despliegue y uso de aplicaciones dApps simples en la Waves Platform:

  • Lenguaje RIDE
  • Editor VS Code
  • Waves Explorer
  • Surfboard
  • Waves Keeper

Enlaces para aquellos que deseen continuar aprendiendo sobre RIDE:

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

¡Sigue profundizando en el tema de RIDE y crea tu primera dApp!

TL;DR: bit.ly/2YCFnwY

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster