WEB3DEV

Cover image for Interfaces Binárias de Aplicativos (ABIs) para Contratos Inteligentes
Paulo Gio
Paulo Gio

Posted on

Interfaces Binárias de Aplicativos (ABIs) para Contratos Inteligentes

https://miro.medium.com/v2/resize:fit:933/1*Wt6o1WP1w6SwnmDtyqqCcw.png

As Interfaces Binárias de Aplicativos (ABIs) são essenciais para contratos inteligentes na Ethereum e outras plataformas de blockchain.

Uma ABI define como interagir com um contrato inteligente em um nível baixo, especificando as funções, argumentos, tipos de retorno e outros detalhes necessários para chamar o contrato e executá-lo conforme esperado.

Compreender as ABIs é importante para desenvolvedores que constroem aplicativos descentralizados (dApps) com contratos inteligentes.

Quando seu aplicativo precisa chamar uma função em um contrato inteligente, ele usa a ABI para formatar corretamente a chamada de função. A Máquina Virtual Ethereum (EVM) então sabe como executar essa chamada para rodar o código correspondente do contrato inteligente.

Definindo a ABI

Para definir o que uma ABI significa, devemos primeiro entender como ela funciona e seu papel na EVM.

https://miro.medium.com/v2/resize:fit:933/0*BK9GFY8KXR82U_Df.png

Vamos quebrar este código e ver como a ABI opera. Encontre o código-fonte completo aqui.

Este trecho de código demonstra como um aplicativo usaria a ABI de um contrato inteligente para formatar uma chamada de função para a EVM.

Vamos quebrar isso linha por linha:

scofield[] public listofScofieldcontract;
Enter fullscreen mode Exit fullscreen mode

Isso declara um array de contratos inteligentes baseado na definição do contrato scofield importada do arquivo new1.sol. Este array manterá o controle de todas as instâncias do contrato scofield implantadas.

function get_new_contract() public {
scofield newlist = new scofield();
listofScofieldcontract.push(newlist);
}
Enter fullscreen mode Exit fullscreen mode

Quando esta função get_new_contract é chamada, ela implantará uma nova instância do contrato scofield usando a palavra-chave new. Ela adiciona esta instância ao array listofScofieldcontract para rastreá-la.

function store (uint _index, uint storeNumber) public {
listofScofieldcontract[_index].store(storeNumber);
}
Enter fullscreen mode Exit fullscreen mode

Esta chamada da função store é um exemplo chave de como usar a ABI para formatar a chamada de função para a EVM.

Ela recebe _index para referenciar qual contrato scofield no array chamar. Então, ela chama a função store naquela instância de contrato, passando o valor storeNumber.

A ABI para scofield, definida em seu código-fonte Solidity, especifica que store recebe um parâmetro uint. Então, com base nisso, este código formata a chamada corretamente para a EVM, empacotando o argumento storeNumber em uma chamada de transação para executar a função store.

A EVM usa a especificação da ABI para saber como desempacotar os dados da chamada, executar o código da função store com o valor passado e atualizar o armazenamento do contrato.

A ABI age como a especificação da interface que permite formatar chamadas de funções como a store para que a EVM entenda como executar o código do contrato inteligente conforme pretendido. O aplicativo aproveita os detalhes da ABI para garantir a codificação e decodificação adequadas.

Agora que sabemos o que é uma ABI, vamos mergulhar na EVM e ver o que está por trás da toca do coelho.

Máquina Virtual Ethereum

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*BmQlsKtaNEcYYScPAiYkJw.jpeg

cryptotimes.io

Se você quer entender o que faz a Ethereum funcionar, você precisa entender o conceito da Máquina Virtual Ethereum (EVM). A EVM é o ambiente de execução que lida com a execução de todos os contratos inteligentes e aplicativos descentralizados (dapps) na blockchain Ethereum.

Em termos simples, a EVM é um computador global gigante composto por milhares de nós individuais que executam código de forma sincronizada. Ela permite que desenvolvedores implantem aplicações bytecode que têm comportamento previsível, são resistentes a adulterações e podem acessar dados de estado da blockchain.

O Papel da EVM

A EVM lida com funções chave que tornam a Ethereum descentralizada e segura:

  • Execução de bytecode quando transações são acionadas — A EVM executa código de contrato inteligente quando uma transação invoca uma chamada de função. Todos os nós executam o código para validar resultados.
  • Gerenciamento de estado e contas — Dados de contrato vivem na EVM em uma estrutura de dados de árvore Patricia Merkle. Saldos de usuários e estados de contrato são preservados neste banco de dados de estado.
  • Imposição de determinismo — A EVM sempre produz a mesma saída para uma entrada dada, permitindo que milhares de nós verifiquem os resultados dos contratos.
  • Fornecimento de segurança através do isolamento — O código é executado em um sandbox virtual separado do sistema operacional do nó para maior tolerância a falhas.

Ciclo de Vida da EVM

Quando uma transação Ethereum é criada, aqui está o ciclo de vida que ocorre na EVM:

  1. A transação é propagada e incluída em um bloco.

  2. Os dados da transação são passados para a EVM.

  3. A EVM valida assinaturas e verifica nonces para prevenir gastos duplos.

  4. A taxa de gás para execução da transação é deduzida.

  5. O bytecode do contrato começa a ser executado através do conjunto de instruções da EVM.

  6. A execução reverte ou tem sucesso; o gás de execução é reconciliado.

  7. O estado do contrato é atualizado, eventos são registrados, Ether é transferido.

  8. A saída é validada entre os nós, raízes de estado são atualizadas.

Entendendo o Gás

O conceito de "gás" é importante para a EVM. Como a execução requer recursos computacionais, em cada operação na EVM é atribuído um custo de gás. Quando contratos são executados, o gás é lentamente esgotado com base nas operações realizadas.

Isso previne loops infinitos, encoraja eficiência e incentiva os mineradores que executam o código. O gás permite alocar recursos da EVM de forma eficiente.

Comparação EVM vs. Web Assembly

A EVM tem algumas semelhanças e diferenças em comparação com a popular tecnologia web Web Assembly (WASM):

  • Como o WASM, a EVM usa um formato de bytecode para execução de código. Isso permite que qualquer linguagem de alto nível seja compilada para bytecode da EVM.
  • Diferente do WASM, a EVM foi construída especialmente para características descentralizadas, à prova de adulterações e transparentes de blockchain. Isso permite incluir verificações de hash, assinaturas, medição de gás e armazenamento de estado.
  • Devido à especialização para blockchain, os contratos da EVM tendem a ser mais simples e menores que os programas típicos do WASM. O design da EVM força os programadores a pensar de forma diferente.

A EVM como Computador Mundial

Uma perspectiva útil é pensar na EVM como um computador global acessível que qualquer um pode usar. Desenvolvedores escrevem código que é implantado neste "computador mundial" que tem propriedades únicas:

  • Computação confiável — O código é executado exatamente como escrito graças às regras determinísticas da EVM.
  • Armazenamento permanente — Diferente de servidores que podem cair, os dados persistem em milhares de nós para sempre.
  • Acesso aberto — Qualquer um pode ler dados ou executar código enviando transações.
  • Saídas verificadas — Os nós verificam se os resultados da execução correspondem às regras de consenso.

EVM no Remix

Estes passos o guiarão se você quiser ver como a EVM funciona.

  1. Escreva o Código Solidity

https://miro.medium.com/v2/resize:fit:1100/format:webp/0*tMW0E8VGFe7YheBK.png

Como qualquer ambiente de desenvolvimento, você pode escrever e editar código de contratos inteligentes Solidity no explorador de arquivos do Remix.

  1. Compilar para Bytecode

https://miro.medium.com/v2/resize:fit:1100/format:webp/0*_J_WELTmAS22dv6_.png

Quando pronto, o Remix compila o código Solidity para bytecode da EVM a ser implantado e executado.

  1. Simulação Local do Ambiente Blockchain

https://miro.medium.com/v2/resize:fit:1100/format:webp/0*I_aQo93SHZFUhDwZ.png

O Remix permite injetar um provedor Web3, como a Metamask, para se conectar a uma blockchain local, como o Ganache ou uma testnet pública.

O Remix simula o ciclo de vida da transação na blockchain, permitindo definir coisas como número de blocos, marcas temporais (timestamps), saldos de contas e nonces.

Você pode usar uma torneira de testnet, como Goerli ou Sepolia, que funciona como dinheiro real, para simular a EVM real. Você deve estar conectado a uma carteira; uma das favoritas é a Metamask.

  1. Transações Acionam a Execução de Código

https://miro.medium.com/v2/resize:fit:1100/format:webp/0*FoiLFormdSdR8u-v.png

Uma chamada de função de contrato inicia uma transação para acionar a execução de código, assim como na EVM real.

Em conclusão, a Máquina Virtual Ethereum é um computador mundial descentralizado gigante, tornando possível criar aplicativos de blockchain incontestáveis. Entender a EVM ajuda a esclarecer as capacidades da Ethereum e as futuras possibilidades para desenvolvedores Web3.

Artigo original publicado por Scofield O. Idehen. Traduzido por Paulinho Giovannini.

Top comments (0)