DEV Community

Cover image for Solidity: Bytecode vs ABI — EVM vs VM 🥊.
Armando Zlatkowicz
Armando Zlatkowicz

Posted on

Solidity: Bytecode vs ABI — EVM vs VM 🥊.

¿Alguna vez viste un bytecode o un **ABI **y no entendiste nada? ¿Cuál es la diferencia entre ambos? ¿Y que hay de las maquinas virtuales, sirven para lo mismo? Vamos a explicar un poco de estos conceptos, acompáñame:

Lagarto rey de las criptomonedas.

Bytecode vs ABI

Bytecode

Cuando hacemos deploy de nuestros contratos en la blockchain, nuestro código de Solidity es traducido a un lenguaje que la EVM pueda entender. Si bien Solidity está pensando para ser compatible con la EVM, al compilarse se traduce en una secuencia de números y letras que indican cada función que especificamos en nuestro código. Los bytecode suelen ser extremadamente largos. ¿Pero cómo pueden reemplazar una secuencia de números y letras a todas nuestras funciones en Solidity?.

Esto es gracias a que _Ethereum _implementa algo conocido como los “opcodes”. Estos son conjuntos de 2 caracteres que representan una función. Acá te dejo la primera parte de la tabla de opcodes disponibles:

Lista de Opcodes

De esta manera, el compilador traduce todo nuestro código Solidity a bytecode para poder ser ejecutado por la EVM.

Application Binary Interface (ABI)

Si bien estamos explicando los conceptos por separado, estos trabajan en conjunto a la hora de interactuar y deployear nuestros contratos. Siendo el bytecode el qué se envía a la EVM y el ABI el encargado de mostrarnos los métodos y funciones que tiene el contrato para que podamos interactuar con el.

El ABI define los métodos y variables que están disponibles en un Smart Contract y que podemos usar para interactuar con ese contrato. Dado que los Smart Contracts se convierten en bytecode antes de implementarse en la cadena de bloques, el **ABI **nos brinda una forma de saber qué operaciones e interacciones podemos realizar con ellos.

Además, si vemos el formato que posee un ABI, nos daremos cuenta que nos permite leerlo de forma fácil e interactuar con lenguajes más populares, dado a que se compila en formato JSON. Veamos un ejemplo:

[
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceID",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
]

EVM y VM ¿Cuál es la diferencia?

Pasemos a hablar sobre entornos de ejecución virtuales. Son el paso final para poder utilizar nuestro código.

VM

Las Virtual Machines son entornos de ejecución virtuales, es decir, no poseen un lugar físico. Son emulaciones de hardware en un entorno virtual. Esto sirve para poder generar poder de cómputo y procesamiento sin la necesidad de ocupar espacio físico. Existen muchas VM conocidas, como la JVM, la cuál es el entorno de ejecución de Java. Estos entornos virtuales nos permiten ejecutar software de manera controlada y aislada.

EVM

Una vez compilado y traducido nuestro código, se envía a la Ethereum Virtual Machine para ser ejecutado y poder utilizarlo. La EVM es específica para la plataforma de Ethereum, es descentralizada y vive en cada uno de los nodos que participan de la red. Es gracias a esta máquina virtual que todos nuestros Smart Contracts puede cumplir sus funciones.

Ethereum Virtual Machine por dentro.

En resumen, la EVM es una VM pero específicamente diseñada para la plataforma de Ethereum.

📢 Redes sociales: Twitter, LinkdIn, Instagram, Medium.

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay