WEB3DEV Español

Cover image for Interfaces de Aplicación Binaria (ABIs) para Contratos Inteligentes

Interfaces de Aplicación Binaria (ABIs) para Contratos Inteligentes

Image description

Las Interfaces de Aplicación Binaria (Application Binary Interfaces, ABIs) son esenciales para los contratos inteligentes en Ethereum y otras plataformas blockchain.

Una ABI define cómo interactuar con un contrato inteligente en un nivel bajo, especificando las funciones, argumentos, tipos de retorno y otros detalles requeridos para llamar al contrato y ejecutarlo como esperado.

Entender las ABIs es importante para los desarrolladores que construyen aplicaciones descentralizadas (dApps) con contratos inteligentes.

Cuando tu aplicación necesita llamar una función en un contrato inteligente, usa la ABI para dar formato adecuado a la función de llamada. Luego, la Máquina Virtual de Ethereum (EVM) sabe cómo ejecutar esa llamada para que ejecute el código correspondiente del contrato inteligente.

Definiendo la ABI

Para definir que significa una ABI, primero debemos entender cómo funciona y su rol en la EVM (Ethereum Virtual Machine, Máquina Virtual de Ethereum)

Image description

Vamos a desmenuzar este código y veamos cómo opera la ABI. Aquí está el código fuente entero.

Este fragmento del código demuestra cómo una aplicación usaría el contrato inteligente de la ABI (Application Binary Interface, Interfaz de Aplicación Binaria) para dar formato a la función de llama de la Máquina Virtual de Ethereum (EVM).

Desmenuzemos esto, línea por línea:

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

Esto declara un array de contratos inteligentes basado en la definición del contrato scofield, importado desde el archivo new1.sol.file. Este array mantendrá un rastreo de todas las instancias desplegadas del contrato scofield.

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

Cuando esta función get_new_contract se llama, desplegará una nueva instancia del contrato scofield, usando una keyword nueva. Le añade a esta instancia al array listofScofieldcontract para rastrearlo.

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

Esta función de llamada de almacenamiento es un un ejemplo clave del uso de la ABI para dar formato a la función de llamada al EVM.

Toma _index para referenciar cuál contrato scofield en el array a la llamada. Luego, llama a la función de almacenamiento en la instancia del contrato, pasando el valor storeNumber.

La ABI para el scofield, definido en su código fuente de Solidity, especifíca que el almacenamiento toma un parámetro uint. Así que basado en eso, este código da formato correcto a la llamada por la EVM, empaquetando el argumento storeNumber en una transacción de llamada para ejecutar la función de almacenamiento.

La EVM usa la especificación ABI para saber cómo desempaquetar los datos de llamada, ejecutar el código de la función de almacenamiento con el valor que pasó, y actualizar el almacenamiento del contrato.

La ABI actúa como la especificación de la interfaz que permite dar formato a las funciones de llamada como una tienda, para que la EVM entienda cómo ejecutar el código del contrato inteligente como debe ser. La aplicación aprovecha los detalles de la ABI para asegurar la codificación y decodificación adecuada.

Ahora que sabemos qué es una ABI, vamos a profundizar en la EVM y ver que hay más allá de la madriguera.

Máquina Virtual de Ethereum

Image description

crpytotimes.io

Si quieres entender qué hace que Ethereum funcione, necesitas entender el concepto de la Máquina Virtual de Ethereum (EVM). La EVM es el entorno de ejecución que maneja la ejecución de todos los contratos inteligentes y las aplicaciones descentralizadas (dapps) en la blockchain de Ethereum.

En términos simples, la EVM es una computadora gigante y global que contiene miles de nodos individuales, los cuales ejecutan el código sincronizadamente. Permite a los desarrolladores a desplegar aplicaciones bytecode que tienen un comportamiento predecible, son resistentes a la manipulación y pueden acceder a los estados de los datos de la blockchain.

El Rol de la EVM

La EVM maneja funciones claves que hace que Ethereum sea descentralizado y seguro:

  • Ejecuta bytecodes cuando se desencadenan transacciones: la EVM ejecuta el código del contrato inteligente cuando una transacción invoca una función de llamada. Todos los nodos ejecutan el código para validar los resultados.
  • Administra los estados y las cuentas: los datos del contrato viven en la EVM en una estructura de datos del árbol de Merkle Patricia. Los estados de balances y contratos están preservados en este estado de la base de datos.
  • Aplica el determinismo: la EVM siempre produce el mismo resultado por cierta entrada, permitiendo que miles de nodos verifiquen los resultados del contrato.
  • Proporcionar seguridad a través del aislamiento: el código se ejecuta en una caja virtual separada desde el sistema que opera en el nodo para incrementar la tolerancia a fallos.

El Ciclo de Vida de Ejecución de la EVM

Cuando una transacción Ethereum se crea, aquí está el ciclo de vida que ocurre en la EVM:

  1. La transacción se propaga y es incluída en un bloque
  2. Los datos de la transacción se pasan a la EVM
  3. La EVM valida las firmas y revisa los nonces para prevenir doble gastos
  4. Se deduce la tasa del gas de la ejecución de la transacción
  5. El bytecode del contrato empieza a ejecutarse a través del conjunto de instrucciones de la EVM
  6. La ejecución se revierte o es exitosa; se reconcilia la ejecución del gas
  7. El estado del contrato se actualiza, los eventos se registran, el Ether se transfiere
  8. El resultado es validado entre los nodos, el estado de la raíz se actualiza

Entendiendo el Gas

El concepto de “gas” es importante para la EVM porque la ejecución requiere recursos computacionales y cada operación, en la EVM, se le asigna un costo de gas. Cuando un contrato se ejecuta, el gas es lentamente gastado, basado en las operaciones realizadas.

Esto previene bucles infinitos, alienta la eficiencia e incentiva a los mineros a que ejecuten el código. El gas permite la colocación eficiente de recursos en la EVM.

Comparación entre la EVM y Web Assembly

La EVM tiene algunas similitudes y diferencias comparada con la tecnología web Web Assembly (Web Technology Web Assembly, WASD):

  • Como WASM, la EVM usa un formato bytecode para la ejecución del código. Esto permite que cualquier lenguaje de alto nivel sea compilado al bytecode de la EVM.
  • A diferencia de WASM, la EVM fue construída específicamente con características blockchain descentralizadas, resistentes a la manipulación y transparente. Esto permite incluir revisiones de hash, firmas, medición del gas y el almacenamiento de estado.
  • Por la especialización de la blockchain, el contrato de la EV, tiende a ser más simple y pequeño que los programas WASM típicos. El diseño de la EVM forza a los programadores a que piensen de forma distinta.

La EVM como la Computadora Mundial

Una perspectiva que ayuda es pensar que la EVM es una computadora global, accesible para que cualquiera la use. Los desarrolladores escriben código que será desplegado a esta “computadora global” que tiene propiedades únicas:

  • Algoritmo confiable: el código se ejecuta exactamente como está escrito, gracias a las reglas determinísticas de la EVM
  • Almacenamiento permanente: a diferencia de los servidores, que pueden caerse, los datos persisten en miles de nodos, para siempre
  • Acceso abierto: cualquiera puede leer los datos o ejecutar el código, enviando transacciones
  • Salidas verificadas: los nodos revisan que los resultado de la ejecución coincidan con las reglas del consenso

EVM en Remix

Estos pasos te guiarán si quieres ver cómo la EVM funciona;

  • Escribe el código de Solidity

Image description

Como cualquier entorno de desarrollo, puedes escribir y editar códigos de contratos inteligentes de Solidity en el explorador de archivos de Remix.

  • Compila el Bytecode

Image description

Cuando está listo, Remix compilará el código de Solidity al bytecode de EVM para que sea desplegado y ejecutado.

  • Simulación Local del Entorno de la Blockchain

Image description

Remix permite inyectar un proveedor Web3 como Metamask para que se conecte a una blockchain local como Ganache o una testnet pública.

Remix estimula el ciclo de vida de la transacción de la blockchain, permitiendo configurar como como un número de bloque, estampillas de tiempo, cuentas de balances y nonces.

Puedes usar una testnet faucet como Goerli y Sapolia, la cual funciona como dinero real para estimular la EVM real. Debes estar conectado a una billetera; una de las favoritas es Metamask.

  • Las Transacciones Desencadenan La Ejecución del Código

Image description

Una llamada a una función de contrato, inicia una transacción que desencadena la ejecución del código, así como en la EVM.

En conclusión, la Máquina Virtual de Ethereum es una computadora global gigante y descentralizada, haciendo que sea posible crear aplicaciones blockchain sin censura. Entender la EVM ayuda a clarificar las capacidades de Ethereum y las posibilidades futuras para los desarrolladores de la Web3.

Este artículo es una traducción de Scofield O. Idehen, hecha por Gabriella Martínez. Puedes encontrar el artículo original aquí
Sería genial escucharte en nuestro Discord, puedes contarnos tus ideas, comentarios, sugerencias y dejarnos saber lo que necesitas.
Si prefieres puedes escribirnos a @web3dev_es en Twitter.

Discussion (0)