Como construír, implementar e probar a aplicación Waves RIDE

Ola! Neste artigo mostrarei como escribir e executar unha dApp normal nun nodo de Waves. Vexamos as ferramentas, os métodos e un exemplo de desenvolvemento necesarios.

Como construír, implementar e probar a aplicación Waves RIDE

O esquema de desenvolvemento para dApps e aplicacións habituais é case o mesmo:

  • Código de escritura
  • Redacción de probas automatizadas
  • Lanzamento da aplicación
  • Probando

Ferramentas

1. docker para executar un nodo e Waves Explorer

Se non queres iniciar un nodo, podes omitir este paso. Despois de todo, hai unha rede de probas e experimentais. Pero sen implantar o teu propio nodo, o proceso de proba pode prolongarse.

  • Necesitarás constantemente novas contas con tokens de proba. A billa da rede de proba transfire 10 ONDAS cada 10 minutos.
  • O tempo medio de bloqueo na rede de proba é de 1 minuto, no nodo - 15 segundos. Isto é especialmente notable cando unha transacción require varias confirmacións.
  • O caché agresivo é posible nos nodos de proba públicos.
  • Tamén poden non estar dispoñibles temporalmente debido ao mantemento.

A partir de agora suporei que está a traballar co seu propio nodo.

2. Ferramenta de liña de comandos da táboa de surf

  • Descarga e instala Node.js usando ppa, homebrew ou exe aquí: https://nodejs.org/en/download/.
  • Instala Surfboard, unha ferramenta que che permite realizar probas nun nodo existente.

npm install -g @waves/surfboard

3. Complemento de Visual Studio Code

Este paso é opcional se non es fan dos IDE e prefires editores de texto. Todas as ferramentas necesarias son utilidades de liña de comandos. Se usas vim, presta atención ao complemento vim-paseo.

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

Abre VS Code e instala o complemento waves-ride:

Como construír, implementar e probar a aplicación Waves RIDE

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

Feito!

Inicia o nodo e Waves Explorer

1. Inicia o nodo:

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

Asegúrese de que o nodo se inicie a través da API REST http://localhost:6869:

Como construír, implementar e probar a aplicación Waves RIDE
Swagger REST API para nodo

2. Inicia unha 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 e vai a http://localhost:3000. Verás a rapidez con que se constrúe un circuíto de nodos locais baleiros.

Como construír, implementar e probar a aplicación Waves RIDE
Waves Explorer mostra unha instancia de nodo local

Estrutura RIDE e ferramenta de táboa de surf

Crea un directorio baleiro e executa o comando nel

surfboard init

O comando inicializa un directorio coa estrutura do proxecto, aplicacións "hola mundo" e probas. Se abres este cartafol con VS Code, verás:

Como construír, implementar e probar a aplicación Waves RIDE
Surfboard.config.json

  • Baixo o cartafol ./ride/ atoparás un único ficheiro wallet.ride: o directorio onde se atopa o código dApp. Analizaremos brevemente as dApps no seguinte bloque.
  • Baixo o cartafol ./test/ atoparás un ficheiro *.js. As probas almacénanse aquí.
  • ./surfboard.config.json: ficheiro de configuración para realizar probas.

Envs é unha sección importante. Cada ambiente está configurado así:

  • Punto final da API REST do nodo que se utilizará para iniciar a dApp e a CHAIN_ID da rede.
  • Unha frase secreta para unha conta con tokens que serán as fontes dos teus tokens de proba.

Como podes ver, surfboard.config.json admite varios ambientes por defecto. O predeterminado é o ambiente local (a clave defaultEnv é un parámetro modificable).

Aplicación de demostración de carteira

Esta sección non é unha referencia á linguaxe RIDE. Pola contra, unha ollada á aplicación que implementamos e probamos para comprender mellor o que está a suceder na cadea de bloques.

Vexamos unha simple aplicación de demostración de Wallet. Calquera persoa pode enviar tokens a un enderezo dApp. Só podes retirar as túas WAVES. Dúas funcións @Callable están dispoñibles a través de InvokeScriptTransaction:

  • deposit()que require un pago anexo en WAVES
  • withdraw(amount: Int)que devolve fichas

Ao longo do ciclo de vida de dApp, a estrutura (enderezo → importe) manterase:

acción
Estado resultante

inicio
baleiro

Alice deposita 5 ONDAS
enderezo-alicia → 500000000

Bob deposita 2 ONDAS

enderezo-alicia → 500000000
enderezo bob → 200000000

Bob retira 7 ONDAS
¡NEGADO!

Alice retira 4 ONDAS
enderezo-alicia → 100000000
enderezo bob → 200000000

Aquí está o código para comprender completamente a 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

O código de mostra tamén se pode atopar en GitHub.

O complemento VSCode admite a compilación continua ao editar un ficheiro. Polo tanto, sempre pode supervisar os erros na pestana PROBLEMAS.

Como construír, implementar e probar a aplicación Waves RIDE
Se quere utilizar un editor de texto diferente ao compilar o ficheiro, use

surfboard compile ride/wallet.ride

Isto producirá unha serie de código RIDE compilado base64.

Script de proba para 'wallet.ride'

Vexamos arquivo de proba. Desenvolvido polo framework Mocha de JavaScript. Hai unha función "Antes" e tres probas:

  • "Antes" financia varias contas a través de MassTransferTransaction, compila o script e implantao na cadea de bloques.
  • "Pode depositar" envía unha InvokeScriptTransaction á rede, activando a función deposit() para cada unha das dúas contas.
  • "Non se pode retirar máis do depositado" probas que ninguén pode roubar as fichas alleas.
  • "Pode depositar" cheques de que as retiradas se procesan correctamente.

Realiza probas desde Surfboard e analiza os resultados en Waves Explorer

Para executar a proba, executa

surfboard test

Se tes varios scripts (por exemplo, necesitas un script de implementación separado), podes executalo

surfboard test my-scenario.js

Surfboard recollerá os ficheiros de proba no cartafol ./test/ e executará o script no nodo que está configurado en surfboard.config.json. Despois duns segundos verás algo así:

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! Probas superadas. Agora vexamos o que ocorre ao usar Waves Explorer: mira os bloques ou pega un dos enderezos anteriores na busca (por exemplo, o correspondente wallet#. Alí podes atopar o historial de transaccións, o estado da dApp, o ficheiro binario descompilado.

Como construír, implementar e probar a aplicación Waves RIDE
Explorador de ondas. Unha aplicación que acaba de ser implantada.

Algúns consellos sobre táboas de surf:

1. Para probar no ambiente testnet, use:

surfboard test --env=testnet

Obtén fichas de proba

2. Se queres ver as versións JSON das transaccións e como son procesadas polo nodo, executa a proba con -v (quere dicir "verbose"):

surfboard test -v

Usando aplicacións con Waves Keeper

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

Como construír, implementar e probar a aplicación Waves RIDE
Configurando Waves Keeper para traballar cun nodo local

2. Importar frase secreta con tokens para a rede? Para simplificar, usa a semente inicial do teu nodo: waves private node seed with waves tokens. Enderezo: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Pode executar vostede mesmo unha aplicación sen servidor dunha soa páxina usando npm. Ou vai ao existente: chrome-ext.wvservices.com/dapp-wallet.html

4. Introduza o enderezo da carteira da proba (subliñado arriba) na caixa de texto do enderezo dApp

5. Introduza unha pequena cantidade no campo "Depósito" e prema no botón:

Como construír, implementar e probar a aplicación Waves RIDE
Waves Keeper solicita permiso para asinar unha InvokeScriptTransaction cun pago de 10 WAVES.

6. Confirme a transacción:

Como construír, implementar e probar a aplicación Waves RIDE
A transacción é creada e transmitida á rede. Agora podes ver o seu DNI

7. Supervisa a transacción usando Waves Explorer. Introduza o ID no campo de busca

Como construír, implementar e probar a aplicación Waves RIDE

Conclusións e información adicional

Analizamos as ferramentas para desenvolver, probar, implementar e usar dApps simples na plataforma Waves:

  • Linguaxe RIDE
  • Editor de código VS
  • Explorador de ondas
  • Táboa de surf
  • Guardián das ondas

Ligazóns para quen queira seguir aprendendo RIDE:

Máis exemplos
IDE en liña con exemplos
Documentación Waves
Chat para programadores en Telegram
Waves e RIDE en stackoverflow
NOVO! Cursos en liña sobre creación de dApps na plataforma Waves

Continúa mergullando no tema RIDE e crea a túa primeira dApp!

TL; DR: bit.ly/2YCFnwY

Fonte: www.habr.com

Engadir un comentario