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.
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;
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);
}
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);
}
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
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:
A transação é propagada e incluída em um bloco.
Os dados da transação são passados para a EVM.
A EVM valida assinaturas e verifica nonces para prevenir gastos duplos.
A taxa de gás para execução da transação é deduzida.
O bytecode do contrato começa a ser executado através do conjunto de instruções da EVM.
A execução reverte ou tem sucesso; o gás de execução é reconciliado.
O estado do contrato é atualizado, eventos são registrados, Ether é transferido.
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.
- Escreva o Código Solidity
Como qualquer ambiente de desenvolvimento, você pode escrever e editar código de contratos inteligentes Solidity no explorador de arquivos do Remix.
- Compilar para Bytecode
Quando pronto, o Remix compila o código Solidity para bytecode da EVM a ser implantado e executado.
- Simulação Local do Ambiente Blockchain
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.
- Transações Acionam a Execução de Código
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.
Oldest comments (0)