HomeGuia do mochileiro: Waves Smart Contracts – Parte 1

Guia do mochileiro: Waves Smart Contracts – Parte 1

outubro 11, 2018 By Irlan Pierre

No dia 10 de setembro, a plataforma Waves lançou uma nova versão do node que trouxe o suporte aos Smart Contracts. Esse artigo tem como foco as smart accounts da Waves e suas diferenças quando comparadas com as soluções existentes no mercado. Inicialmente, faremos uma breve introdução, com algumas definições de smart contracts para, em seguida, vermos as diferenças entre o Bitcoin Script, Ethereum Smart Contract e Waves Smart Accounts. Logo após, falaremos sobre a implementação de alguns casos de uso, explicando com mais detalhes sobre a nossa linguagem RIDE.

Portanto, pegue uma xícara de café e vamos começar logo nossa jornada!

Introdução

A palavra blockchain já existe há algum tempo, e a frequência com que a ouvimos aumenta cada vez mais. Geralmente, na segunda ou terceira frase sobre blockchain ouvimos sobre smart contracts, uma vez que eles estão intrinsecamente ligados.

A definição de smart contract

Muitas pessoas já ouviram falar sobre smart contracts, sendo o Ethereum a primeira coisa que se lembram quando falamos sobre esse assunto. Na verdade, isso é um pouco injusto, visto que a primeira prova de conceito (PoC, do inglês proof-of-concept) de um smart contract é o Bitcoin Script. Além disso, muitas plataformas blockchain implementaram a ideia de um smart contract e a definição desse termo foi introduzida há 20 anos por Nick Szabo.

Podemos definir um smart contract da seguinte forma:

  • Um smart contract é um programa executado no blockchain, orientado através do protocolo de consenso. Um contrato pode codificar qualquer conjunto de regras representadas em sua linguagem de programação. Portanto, os smart contracts podem implementar uma ampla gama de aplicativos, incluindo ferramentas financeiras e aplicativos de governança autônoma.
  • A ideia de um smart contract, conforme definido por Nick Szabo, é satisfazer condições contratuais comuns, minimizar as exceções, tanto maliciosas quanto acidentais, e minimizar a necessidade de intermediários confiáveis.

O Bitcoin Script

Agora vamos entender o conceito por trás do Bitcoin Script, a linguagem usada para criar scripts para a rede do Bitcoin. Basicamente, o Script é uma linguagem bytecode, semelhante a Forth, e baseada em stacks (pilhas). Sua diferença é que ela é projetada para ter sua execução finalizada. Algumas das características disponíveis no Forth, mas que não estão no Script são: Variáveis, matrizes, funções e loops.

O Bitcoin Script não dá primitivos que permitem o acesso aleatório à escrita de qualquer um dos stacks. É muito importante ter em mente que não existem contas na rede Bitcoin, existem apenas entradas e saídas. Toda transação é uma lista de saídas, fazendo referência à entrada. O Bitcoin Script pode ser anexado a qualquer entrada e define a regra de converter uma entrada em uma saída (enviando bitcoins para a pessoa, por exemplo).

Principais características do Bitcoin Script:

  • A linguagem de script inclui as operações criptográficas e primitivas necessárias, com muitos Opcodes diferentes (muitos deles estão desabilitados), mas não tem loops. O acesso à memória de script é com base em stack (pilha).
  • Um script sempre termina. O tempo de execução é limitado pelo comprimento do script, após o ponteiro da instrução. Essa limitação impede ataques de negação de serviço nos nodes que estão validando os blocos.

Por que precisamos de smart contracts?

Desde o primeiro dia de desenvolvimento, o principal objetivo que tínhamos em mente, era o de realizar duas tarefas através de smart contracts:

  1. Tarefas simples e bem definidas, como multi-assinaturas e atomic swap
  2. Dapps com lógica personalizada e possibilidades quase ilimitadas.

Tokens são um outro uso comum para smart contracts. Tomando como exemplo a rede Ethereum, a grande maioria dos contratos de trabalho são tokens com o padrão ERC20. Em nosso caso, isso não é relevante, porque nosso core possui tokens simplificados (mais detalhes aqui). Não é necessário criar um contrato para emitir um token, basta enviar uma transação do tipo predefinida.

Na primeira implementação de smart contracts, decidimos focar nas tarefas primordiais, como multi-assinaturas, atomic swaps e escrows. Isso irá fornecer a funcionalidade para implementar recursos muito importantes, bem como proteções mais sofisticadas para as criptomoedas. Além disso, com a nossa transação de dados, existirá uma maneira de postar dados do Oracle no blockchain.

Nos estágios iniciais de desenvolvimento, criamos uma lista de requisitos para os smart contracts:

  1. Segurança Máxima. Smart contracts para tarefas simples devem ser simples, seguros e fáceis de iniciar. Todos os meses lemos notícias sobre bugs como esta, e desejamos evitar erros em tarefas simples. A linguagem dos smart contracts deve ajudar a evitar esses erros.
  2. Sem necessidade de gás. Para fazer isso, o script deve ser executado por um período de tempo previsível.

O Blockchain da Waves

Antes de nos aprofundarmos em detalhes técnicos da implementação, e para uma melhor compreensão sobre o assunto, é necessário falar sobre o blockchain da Waves.

 

  1. Existem atualmente 12 tipos diferentes de transações no Blockchain Waves.

  2. Não há entradas e saídas (como no Bitcoin), em vez disso há contas. Toda transação é realizada por uma conta.
  3. Por padrão, a exatidão da transação é determinada pelo estado atual do blockchain e pela validade da assinatura. A representação JSON da transação é bem simples:

JSON de uma transação de transferência na rede Waves

O que é uma Smart Account?

A última versão do Waves Node habilitou as smart accounts. Abaixo temos um resumo sobre o que é uma smart account.

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

Fatos sobre Waves Smart Accounts (NÃO TER GAS é o melhor!)

  1. A smart account da Waves verifica se a transação atende a determinadas condições, definidas em um script, antes que essa seja enviada para a inclusão no próximo bloco gerado.
  2. Dessa forma, o usuário pode usar um script em sua conta que lhe permita controlar todas as transações de saída. Com isso, obtém-se o benefício da smart account em diferentes situações, como 2FA, Multisig, escrow e oracles, entre outros.
  3. A smart account também pode ser usada para definir diferentes regras no processo de verificação da validade da transação. Por exemplo: o usuário pode definir uma regra, segundo a qual as transações de um endereço podem ser enviadas somente se a altura do bloco for maior que N. Ele também pode estabelecer uma regra segundo a qual todas as transações do endereço sejam válidas (mesmo sem validação de assinatura).
  4. A smart account é baseada no tipo de transação, campos, altura ou registro de data e hora e, por fim, nos Dados no blockchain (transações de dados e oracles).

Na próxima parte, iremos falar sobre a ideia por trás da linguagem RIDE (linguagem dos smart contracts), além de detalhes técnicos sobre seu custo e a sua biblioteca padrão. Também iremos escrever nosso primeiro smart contract para a Waves usando a IDE.

Fique ligado!

P.S. Você pode encontrar uma infinidade de detalhes e explicações, incluindo o whitepaper da Smart Account no site da Waves.

Faça parte da comunidade Waves no Brasil!

Tags: