ABI
Last updated
Last updated
ABI (Application Binary Interface) en el contexto de la inform谩tica, es una interfaz entre dos m贸dulos de programa, a menudo entre sistemas operativos y programas de usuario. Dicho en otras palabras, podemos entender al ABI como la informaci贸n que proporciona un Contrato inteligente al ser compilado, esta informaci贸n estar谩 estructurada similar a un formato JSON.
EVM (Ethereum Virtual Machine) es el componente central de la red Ethereum, y los contratos inteligentes son fragmentos de c贸digo almacenados en la cadena de bloques de Ethereum que se ejecutan en la EVM.
Contratos inteligentes escritos en lenguajes de alto nivel como Solidity o Vyper deben compilarse en c贸digo de bytes ejecutables EVM; cuando se implementa un contrato inteligente, este c贸digo de bytes se almacena en la cadena de bloques y se asocia con una direcci贸n. Para Ethereum y la EVM, un contrato inteligente es solo esta secuencia de c贸digo de bytes.
Para acceder a funciones definidas en lenguajes de alto nivel, los usuarios deben traducir nombres y argumentos en representaciones de bytes para que el c贸digo de bytes funcione con ellos. para interpretar los bytes enviados en respuesta, los usuarios deben volver a convertir a la tupla de valores de retorno definidos en lenguajes de nivel superior.
Los lenguajes que compilan para EVM mantienen convenciones estrictas sobre estas conversiones, pero para realizarlas, se deben conocer los nombres y tipos precisos asociados con las operaciones. El ABI documenta estos nombres y tipos con precisi贸n en un formato f谩cilmente analizable, es muy similar a la API (interfaz de programa de aplicaci贸n), una representaci贸n legible por humanos de la interfaz de un c贸digo.
ABI define los m茅todos y las estructuras que se utilizan para interactuar con el contrato binario, al igual que API, pero en un nivel inferior. La ABI indica la persona que llama a la funci贸n para codificar la informaci贸n necesaria, como firmas de funciones y declaraciones de variables en un formato que la EVM puede entender para llamar a esa funci贸n en c贸digo de bytes; esto se llama codificaci贸n ABI.
La codificaci贸n ABI est谩 mayormente automatizada, a cargo de compiladores como REMIX o billeteras que interact煤an con la cadena de bloques. El contrato ABI se representa en formato JSON. Hay especificaciones claras de c贸mo codificar y decodificar un contrato ABI.
La forma m谩s f谩cil de obtenerlo es a trav茅s de Ethereum REMIX IDE, en la parte inferior de la secci贸n de compilar, lo copias usando el bot贸n ABI. Cabe destacar que no es necesario que despliegues el contrato para poder obtener el ABI, sencillamente puedes presionar el bot贸n compilar o presionas la combinaci贸n de teclas: ctrl + s y con ello te aparecer谩 el bot贸n.
Otra forma es compilar y generar ABI usando solc, que proporciona enlaces de JavaScript para Solidity Compiler. Para instalar solc, necesitamos tener npm, que viene con node.js. Compruebe si node.js est谩 instalado en su sistema o no:
Si no est谩 instalado, puede descargar la versi贸n LTS de NodeJS desde el sitio web oficial. Ahora vamos a instalar solc:
Compilaremos y generaremos ABI para el siguiente contrato, test.sol, que es un contrato para incrementar el valor de una variable:
L铆nea 1: especificando el tipo de licencia SPDX, esto es totalmente adicional despu茅s de la versi贸n de Solidity 0.6.8 y para versiones futuras; cada vez que el c贸digo fuente de un contrato inteligente se pone a disposici贸n del p煤blico, estas licencias pueden ayudar a resolver / evitar problemas de derechos de autor. Si no desea especificar ning煤n tipo de licencia, puede usar un valor especial SIN LICENCIA o simplemente omitir todo el comentario (no generar谩 un error, solo una advertencia). L铆nea 2: Declaraci贸n de la versi贸n Solidity. L铆nea 4: Comenzando con la estructura de nuestro contrato, en este caso se le asign贸 el nombre test. L铆nea 6: Declarando una variable privada llamada cuenta de tipo entero sin signo y asign谩ndole el valor cero. L铆nea 8-10: Declaraci贸n de un incremento de funci贸n p煤blica, que aumenta el valor de cuenta en uno cuando se llama. L铆nea 12-14: Declaraci贸n de una funci贸n p煤blica getCount que devolver谩 el valor de count en forma de n煤mero entero sin signo. Ahora, obtengamos el ABI para el contrato anterior.
驴C贸mo generar ABI?
Se crear谩 un archivo llamado test_sol_test.abi en el mismo directorio; tendr谩 el ABI en formato JSON algo como esto: