Trends Cryptos

Como programar contratos inteligentes com Ethereum e Webassembly?

O Ethereum está por detrás de uma das criptomoedas mais populares – e, no entanto, é muito mais do que isso. Graças aos algoritmos, a criptomoeda pode ser gerida de forma completamente autónoma. Mas como é que os “contratos inteligentes” funcionam e até onde chegámos?

Como é que os contratos inteligentes funcionam no Ethereum?
Para compreender o princípio dos contratos inteligentes no Ethereum, precisamos de fazer uma pequena viagem ao mundo das linguagens de programação. As linguagens de programação actuais dividem-se essencialmente em dois grupos: linguagens interpretadas e linguagens compiladas. No primeiro grupo, os programas são escritos numa linguagem de alto nível e depois executados por um intérprete. Dois exemplos populares são o Python e o JavaScript. As linguagens interpretadas são comuns em muitas áreas de aplicação (como a Web) porque permitem começar de imediato. São também muito universais e podem ser utilizadas em diferentes plataformas sem necessidade de ferramentas adicionais.

Em contrapartida, existem as linguagens compiladas, em que um compilador converte primeiro o texto do programa noutra linguagem – frequentemente código binário de máquina. Este código binário depende da plataforma e é executado diretamente num processador. O compilador pode (e deve) produzir código personalizado para o conjunto de instruções do processador, por exemplo, para CPUs compatíveis com ARM ou Intel. Representantes bem conhecidos deste tipo são o C e o Rust.

No entanto, a realidade é, como sempre, mais complexa do que estas simples categorias sugerem. Há já algum tempo que existem formas híbridas, como o Java. O compilador Java não traduz o código Java diretamente para o código de máquina “real”, mas para um formato intermédio especial. Este formato intermédio, por sua vez, é depois executado por um intérprete – a máquina virtual Java – na arquitetura concreta do processador.

Os contratos inteligentes do Ethereum também funcionam de forma semelhante. Todos os nós que validam transacções e extraem nova moeda no Ethereum contêm uma instância da Máquina Virtual Ethereum (EVM). O Yellow Paper, a especificação técnica do Ethereum, define em pormenor as instruções que suportam a EVM – e a forma como devem ser executadas.

Trata-se de um desenvolvimento proprietário com uma série de características especiais:

A interação com o mundo exterior não é possível: todas as decisões algorítmicas devem resultar da cadeia de blocos e das suas transacções.
A aritmética é baseada em valores de 256 bits para facilitar o tratamento de endereços e montantes maiores.
Operações especiais, como funções de hash, são integradas para aumentar o desempenho.
A todas as instruções é atribuída uma função de custo (combustível), que corresponde aproximadamente ao tempo de execução necessário e à quantidade de memória necessária. O termo “metering” é comummente utilizado em inglês.
Programação no EVM
Tal como acontece com o ecossistema Java, existem várias linguagens de programação para as quais estão disponíveis compiladores EVM. A linguagem mais comum é a Solidity, que é superficialmente (sintaticamente) semelhante ao JavaScript. No final de 2020, a documentação do Ethereum lista duas linguagens adicionais: Vyper, que é baseada em Python, e Yul Plus, um desenvolvimento completamente independente.

O que todas estas linguagens têm em comum é o facto de serem específicas de um domínio porque, ao contrário das linguagens de uso geral, ocupam um nicho com características particulares e, em particular, um motor de execução especial: EVM. É claro que estas linguagens específicas de um domínio (DSL) são basicamente uma boa ideia para reduzir a complexidade das aplicações.

Mas no caso do EVM, isso parece fazer pouco sentido. Afinal, ele pode – independentemente da falta de capacidade de interagir com o mundo fora do blockchain – executar algoritmos arbitrários, por isso é (para simplificar) Turing-completo.

Porque não utilizar uma linguagem e um ambiente de execução já existentes?
Se necessário, algumas funcionalidades teriam de ser removidas, mas poderíamos recorrer a uma experiência mais longa, a ferramentas mais estáveis e – muito mais importante – a uma base mais alargada de programadores. De facto, é do conhecimento geral que, hoje em dia, a popularidade de uma linguagem de programação é determinada não só pelo facto de ser particularmente concisa, segura em termos de tipos ou dinâmica, mas também pela facilidade de acesso às muitas bibliotecas e pacotes existentes. Esta mudança de era é melhor ilustrada pelo JavaScript, que é frequentemente criticado pela sua semântica grosseira, mas que deve ser considerado a linguagem de programação mais popular desde o milionésimo pacote NPM.

Webassembly, uma linguagem intermédia universal
Os responsáveis pela especificação do Ethereum chegaram à conclusão de que certos problemas poderiam ser resolvidos abandonando o desenvolvimento personalizado a favor de uma linguagem universal. Como é conveniente que esteja a ser desenvolvido na Web um desenvolvimento para estabelecer uma alternativa ao grande cão JavaScript: Webassembly (WASM). Trata-se de uma linguagem intermédia universal e de um formato binário, combinados com uma especificação para intérpretes. Como o seu nome sugere, esta norma aberta foi originalmente concebida para a Web. Entretanto, foram examinadas outras áreas de aplicação (por exemplo, aplicações para smartphones).

O desenvolvimento da WASM é liderado por gigantes do sector, como a Microsoft, a Google e a Apple. Uma das principais características da linguagem é o facto de ter sido concebida desde o início com vista à sua portabilidade. Isto pode ser visto pelo facto de muitas linguagens de programação existentes, como Rust, C++ ou Go, já poderem compilar para montagem na Web.

Sommaire

Sois au courant des dernières actus !

Inscris-toi à notre newsletter pour recevoir toute l’actu crypto directement dans ta boîte mail

Envie d’écrire un article ?

Rédigez votre article et soumettez-le à l’équipe coinaute. On prendra le temps de le lire et peut-être même de le publier !

Articles similaires