Como construir, implantar e testar o dApp Waves RIDE

Olá! Neste artigo, mostrarei como escrever e executar um dApp normal em um nó Waves. Vejamos as ferramentas, métodos necessários e um exemplo de desenvolvimento.

Como construir, implantar e testar o dApp Waves RIDE

O esquema de desenvolvimento para dApps e aplicativos regulares é quase o mesmo:

  • Nós escrevemos o código
  • Escrevendo testes automatizados
  • Iniciando o aplicativo
  • Teste

Ferramentas

1. docker para executar o nó e o Waves Explorer

Se não quiser iniciar um nó, você pode pular esta etapa. Afinal, existe uma rede de teste e experimental. Mas sem implantar seu próprio nó, o processo de teste pode se arrastar.

  • Você precisará constantemente de novas contas com tokens de teste. A torneira da rede de teste transfere 10 ONDAS a cada 10 minutos.
  • O tempo médio de bloqueio na rede de teste é de 1 minuto, no nó – 15 segundos. Isto é especialmente perceptível quando uma transação requer múltiplas confirmações.
  • O cache agressivo é possível em nós de teste públicos.
  • Eles também podem estar temporariamente indisponíveis devido à manutenção.

De agora em diante assumirei que você está trabalhando com seu próprio nó.

2. Ferramenta de linha de comando da prancha de surf

  • Baixe e instale o Node.js usando ppa, homebrew ou exe aqui: https://nodejs.org/en/download/.
  • Instale o Surfboard, uma ferramenta que permite executar testes em um nó existente.

npm install -g @waves/surfboard

3. Plug-in de código do Visual Studio

Esta etapa é opcional se você não é fã de IDEs e prefere editores de texto. Todas as ferramentas necessárias são utilitários de linha de comando. Se você usa vim, preste atenção no plugin passeio vim.

Baixe e instale o código do Visual Studio: https://code.visualstudio.com/

Abra o VS Code e instale o plugin wave-ride:

Como construir, implantar e testar o dApp Waves RIDE

Extensão do navegador Waves Keeper: https://wavesplatform.com/products-keeper

Feito!

Inicie o nó e o Waves Explorer

1. Inicie o nó:

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

Certifique-se de que o nó seja iniciado por meio da API REST em http://localhost:6869:

Como construir, implantar e testar o dApp Waves RIDE
API REST Swagger para nó

2. Inicie uma instância do Waves Explorer:

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

Abra um navegador e vá para http://localhost:3000. Você verá a rapidez com que um circuito de nó local vazio é construído.

Como construir, implantar e testar o dApp Waves RIDE
Waves Explorer exibe uma instância de nó local

Estrutura RIDE e ferramenta de prancha de surf

Crie um diretório vazio e execute o comando nele

surfboard init

O comando inicializa um diretório com a estrutura do projeto, aplicações “hello world” e testes. Se você abrir esta pasta com VS Code, verá:

Como construir, implantar e testar o dApp Waves RIDE
Prancha de surf.config.json

  • Na pasta ./ride/ você encontrará um único arquivo wallet.ride - o diretório onde o código dApp está localizado. Analisaremos brevemente os dApps no próximo bloco.
  • Na pasta ./test/ você encontrará um arquivo *.js. Os testes são armazenados aqui.
  • ./surfboard.config.json – arquivo de configuração para execução de testes.

Envs é uma seção importante. Cada ambiente é configurado assim:

  • Endpoint da API REST do nó que será usado para iniciar o dApp e CHAIN_ID da rede.
  • Uma frase secreta para uma conta com tokens que serão as fontes dos seus tokens de teste.

Como você pode ver, surfboard.config.json oferece suporte a vários ambientes por padrão. O padrão é o ambiente local (a chave defaultEnv é um parâmetro alterável).

Aplicativo de demonstração de carteira

Esta seção não é uma referência à linguagem RIDE. Em vez disso, dê uma olhada no aplicativo que implantamos e testamos para entender melhor o que está acontecendo no blockchain.

Vejamos um aplicativo simples de demonstração da Wallet. Qualquer pessoa pode enviar tokens para um endereço dApp. Você só pode retirar seus WAVES. Duas funções @Callable estão disponíveis via InvokeScriptTransaction:

  • deposit()que requer um pagamento anexado em WAVES
  • withdraw(amount: Int)que retorna tokens

Ao longo do ciclo de vida do dApp, a estrutura (endereço → valor) será mantida:

Açao Social
Estado resultante

do estado inicial,
vazio

Alice deposita 5 ONDAS
endereço-alice → 500000000

Bob deposita 2 ONDAS

endereço-alice → 500000000
endereço bob → 200000000

Bob retira 7 ONDAS
NEGADO!

Alice retira 4 ONDAS
endereço-alice → 100000000
endereço bob → 200000000

Aqui está o código para entender completamente a situação:

# 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 exemplo também pode ser encontrado em GitHub.

O plugin VSCode suporta compilação contínua durante a edição de um arquivo. Portanto, você sempre pode monitorar erros na aba PROBLEMAS.

Como construir, implantar e testar o dApp Waves RIDE
Se você quiser usar um editor de texto diferente ao compilar o arquivo, use

surfboard compile ride/wallet.ride

Isso produzirá uma série de códigos RIDE compilados em base64.

Script de teste para 'wallet.ride'

Vamos olhar para arquivo de teste. Desenvolvido pela estrutura Mocha do JavaScript. Existe uma função “Antes” e três testes:

  • “Before” financia múltiplas contas via MassTransferTransaction, compila o script e o implanta no blockchain.
  • “Can deposit” envia uma InvokeScriptTransaction para a rede, ativando a função deposit() para cada uma das duas contas.
  • “Não é possível sacar mais do que foi depositado” testa que ninguém pode roubar tokens de outras pessoas.
  • “Pode depositar” verifica se os saques foram processados ​​corretamente.

Execute testes no Surfboard e analise os resultados no Waves Explorer

Para executar o teste, execute

surfboard test

Se você tiver vários scripts (por exemplo, precisar de um script de implantação separado), poderá executar

surfboard test my-scenario.js

O Surfboard coletará os arquivos de teste na pasta ./test/ e executará o script no nó configurado em surfboard.config.json. Depois de alguns segundos você verá algo assim:

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)

Viva! Os testes foram aprovados. Agora vamos dar uma olhada no que acontece ao usar o Waves Explorer: observe os blocos ou cole um dos endereços acima na pesquisa (por exemplo, o correspondente wallet#. Lá você pode encontrar o histórico de transações, status do dApp e arquivo binário descompilado.

Como construir, implantar e testar o dApp Waves RIDE
Explorador de ondas. Um aplicativo que acabou de ser implantado.

Algumas dicas sobre pranchas de surf:

1. Para testar no ambiente testnet, use:

surfboard test --env=testnet

Obtenha tokens de teste

2. Se você quiser ver as versões JSON das transações e como elas são processadas pelo nó, execute o teste com -v (significa 'detalhado'):

surfboard test -v

Usando aplicativos com Waves Keeper

1. Configure o Waves Keeper para funcionar: http://localhost:6869

Como construir, implantar e testar o dApp Waves RIDE
Configurando o Waves Keeper para funcionar com um nó local

2. Importar frase secreta com tokens para a rede? Para simplificar, use a semente inicial do seu nó: waves private node seed with waves tokens. Endereço: 3M4qwDomRabJKLZxuXhwfqLApQkU592nWxF.

3. Você mesmo pode executar um aplicativo de página única sem servidor usando npm. Ou vá para o existente: chrome-ext.wvservices.com/dapp-wallet.html

4. Insira o endereço da carteira da execução do teste (sublinhado acima) na caixa de texto do endereço dApp

5. Insira uma pequena quantia no campo “Depósito” e clique no botão:

Como construir, implantar e testar o dApp Waves RIDE
Waves Keeper solicita permissão para assinar uma InvokeScriptTransaction com pagamento de 10 WAVES.

6. Confirme a transação:

Como construir, implantar e testar o dApp Waves RIDE
A transação é criada e transmitida para a rede. Agora você pode ver o ID dela

7. Monitore a transação usando o Waves Explorer. Digite o ID no campo de pesquisa

Como construir, implantar e testar o dApp Waves RIDE

Conclusões e informações adicionais

Analisamos as ferramentas para desenvolver, testar, implantar e usar dApps simples na plataforma Waves:

  • Idioma RIDE
  • Editor de código VS
  • Explorador de Ondas
  • Prancha de surfe
  • Guardião das Ondas

Links para quem quiser continuar aprendendo RIDE:

Mais exemplos
IDE online com exemplos
Documentação de ondas
Bate-papo do desenvolvedor no Telegram
Waves e RIDE no stackoverflow
NOVO! Cursos online sobre criação de dApps na plataforma Waves

Continue mergulhando no tópico RIDE e crie seu primeiro dApp!

TL; DR: bit.ly/2YCFnwY

Fonte: habr.com

Adicionar um comentário