HomeGuia do mochileiro: Waves Smart Contracts – Parte 2

Guia do mochileiro: Waves Smart Contracts – Parte 2

Chris Roper

No dia 10 de setembro, a Plataforma Waves lançou uma versão do nó que comporta Smart Contracts. A primeira parte desta série traz a ideia por trás da Smart Account da Waves, e suas diferenças quando comparadas com outras soluções existentes. Nesta parte, falaremos mais sobre a linguagem do smart contract e as ferramentas para desenvolvedores. Este artigo é técnico, logo se você tiver problemas para entendê-lo, por favor, leia a Parte 1. Agrademos ao Engenheiro de Pesquisa da Waves, Nazim Faour, pela ajuda com os artigos.

A seguir está a parte mais importante do artigo anterior:

‘Uma smart account é, basicamente, uma conta com um script de verificação de transações anexado. Em outras palavras, um script é anexado a uma conta, para que essa possa validar todas as transações antes de confirmá-las.’

O contrato para a smart account deve sempre retornar True ou False.

 

Taxas e GÁS  

Antes de adentrarmos nas questões mais técnicas, vamos falar sobre taxas e gás. Um dos principais objetivos é eliminar o gás para operações simples, o que não significa que não haja taxas, afinal os mineradores também têm interesse em executar contratos. Resolvemos o problema do gás de um ponto de vista prático: fizemos testes de desempenho e calculamos a velocidade de execução de várias operações. Os benchmarks foram criados usando JMH e os resultados estão disponíveis aqui. Como resultado da nossa abordagem, não há gás para smart account não-Turing complete, apenas uma taxa fixa. Além disso, os benchmarks levaram a algumas restrições:

  1. O tamanho do script não pode ser maior que 8 kB e deve ser mais rápido do que 20 operações de verificação de assinatura. A segunda regra diz que a verificação para a Smart Account não será mais que 20 vezes mais lenta do que para a conta normal.
  2. Smart Account paga taxa adicional de 0.004 WAVES por cada transação. A taxa mínima, por transação, na rede Waves é de 0.001 WAVES para contas regulares e 0.005 para Smart Accounts.

Linguagem RIDE

Um script (contrato) deve ser escrito usando nossa linguagem RIDE. RIDE é uma linguagem não-Turing complete e sem complicação. Ela também é fortemente tipada e baseada em expressão estaticamente tipada. Esses recursos a tornam simples, expressiva e livre de bugs.

Scala (na qual o node da Waves é escrito) junto com o F#, influenciou RIDE. Na documentação, você pode encontrar uma descrição completa da biblioteca padrão (funções internas) e tipos de dados.

Uma das características mais interessantes é a correspondência de padrões, tornando conveniente a descrição de condições distintas para tipos diferentes de transações:

Permite apenas transações de transferência e transferência em massa

 

Se você está interessado em saber como a RIDE funciona, você pode encontrar mais detalhes no white paper. Há descrições de todos os estágios: análise, compilação, desserialização, cálculo de custos, avaliação. É bom ter em mente que os dois primeiros estágios são off-chain. Já desserialização, cálculo de custos e avaliação são on-chain.

Waves Smart Accounts: O Início

Vamos começar a parte mais interessante: escrever nosso primeiro contrato para smart account. Vamos implementar um exemplo muito simples com uma conta multisig 2-de-3. Multi-assinatura (ou a abreviação inglesa multisig) é o requisito de que as transações tenham duas ou mais assinaturas antes que possam ser executadas.

Para começar a escrever um smart contract da Waves, você precisará ir ao nosso IDE.
Clique em NewEmpty Contract para criar um novo arquivo.

O primeiro passo é definir chaves públicas para Alice, Bob e Cooper. Eles controlam a conta e apenas dois deles podem enviar uma transação.

 

Na documentação podemos encontrar a função sigVerify, que permite verificar uma assinatura:

sigVerify aceita o corpo de transação, a assinatura e chave pública como argumentos. Existe um objeto tx, que armazena dados de transação. Existe um campo tx.bodyBytes com bytes de verificação de transação. Há também o campo tx.proofs, que é uma matriz com assinaturas (até 8).

No segundo passo, vamos verificar as assinaturas na ordem correta:

O último passo é verificar se temos mais de 2 assinaturas:

É isso! Nosso contrato no RIDE, com 2-de-3 multisig está pronto. Você pode obter a versão compilada do IDE ou implantá-la diretamente no console. A última versão dos comandos do console está em documentação. Abaixo está um exemplo de uso:

https://youtu.be/WzhTk_rpngI

Exemplo de uso do console IDE da Waves

 

Vamos encerrar com nosso exemplo de multi-assinatura. A listagem de contratos completa:

Nota: não há comando de retorno. A última linha de contrato é um resultado.

Para fins de comparação, colocamos a seguir um exemplo de uma das muitas multi-assinaturas do Ethereum.

 

A importância das transações de dados em Smart Accounts

As Transações de Dados são projetadas para armazenar dados arbitrários como pares de valores-chave. Elas também estão relacionadas a uma conta (endereço). Cada valor tem um tipo de dado associado a ele. Quatro tipos de dados são comportados: boolean, integer, string e byte array. É possível obter dados a partir de Transações de Dados em seu contrato.

O exemplo acima mostra como ler dados de Transações de Dados e validar transações externas, dependendo do valor. Isso é muito útil para oracles e aplicativos de dados do mundo real. Há um enorme potencial do recurso, mas esse é assunto para outro artigo.

 

Aprenda mais

Documentação

  1. Todos os detalhes sobre Waves Smart Accounts podem ser encontrados aqui.
  2. A linguagem RIDE comporta diferentes tipos de dados e todos eles estão descritos aqui.
  3. Há uma série de funções embutidas, como addressFromPublicKey e sigVerify. Você pode encontrar a lista completa de funções embutidas no RIDE aqui.

Tutoriais

  1. Multisig: implementação e assinatura por contas diferentes (usando JS)
  2. Caso de uso: Escrow (usando Java).

Onde obter ajuda?

A comunidade Waves está sempre pronta para ajudar e responder a todas as suas perguntas. Por favor, não hesite em nos procurar:

  1. Discord
  2. Fórum
  3. Telegram
  4. Github

O que vem a seguir?

A continuação dos Smart Contracts da Waves terá a linguagem (ou sistema) Turing-complete, permitindo resolver todos os tipos de tarefa. Outra ideia interessante relacionada aos Smart Contracts no ecossistema da Waves são os Smart Assets (ativos inteligentes).

O funcionamento de ambos são semelhantes, com contratos não-Turing complete, que podem ser anexados ao token. Por exemplo, com os Smart Assets, será possível manter os tokens até uma certa altura blockchain ou proibir negociações P2P. Mais detalhes sobre smart assets podem ser encontrados neste artigo.

Na última versão, os smart assets não foram incluídos, mas já estão implementados na base do código Waves. Se você tiver ideias ou casos de uso, escreva-os nos comentários. Ficaremos felizes em conversar sobre isso.

Faça parte da comunidade Waves no Brasil!

Etiquetas:
Usamos cookies para personalizar conteúdos e anúncios, fornecer recursos de mídia social e oferecer a você uma experiência melhor. Ao continuar navegando no site, ou clicando em "OK, obrigado", você aceita o uso de cookies.