Saltar al contenido principal
Change page

Máquina Virtual de Ethereum (EVM)

La Máquina Virtual de Ethereum (EVM) es un entorno virtual descentralizado que ejecuta código de manera consistente y segura en todos los nodos de Ethereum. Los nodos ejecutan la EVM para ejecutar contratos inteligentes, utilizando «gas» para medir el esfuerzo computacional requerido para las operaciones, garantizando una asignación eficiente de recursos y la seguridad de la red.

Requisitos previos

Es necesario tener cierta familiaridad básica con la terminología común en informática, como bytes (opens in a new tab), memoria (opens in a new tab) y pila (opens in a new tab) para entender la EVM. También sería útil estar familiarizado con conceptos de criptografía y cadenas de bloques como las funciones hash (opens in a new tab) y el árbol de Merkle (opens in a new tab).

Del libro mayor a la máquina de estado

La analogía de un «libro mayor distribuido» se utiliza a menudo para describir cadenas de bloques como Bitcoin, que permiten una moneda descentralizada utilizando herramientas fundamentales de criptografía. El libro mayor mantiene un registro de actividad que debe adherirse a un conjunto de reglas que rigen lo que alguien puede y no puede hacer para modificar el libro mayor. Por ejemplo, una dirección de Bitcoin no puede gastar más Bitcoin del que ha recibido previamente. Estas reglas sustentan todas las transacciones en Bitcoin y en muchas otras cadenas de bloques.

Aunque Ethereum tiene su propia criptomoneda nativa (ether) que sigue casi exactamente las mismas reglas intuitivas, también permite una función mucho más potente: los contratos inteligentes. Para esta característica más compleja, se requiere una analogía más sofisticada. En lugar de un libro mayor distribuido, Ethereum es una máquina de estado (opens in a new tab) distribuida. El estado de Ethereum es una gran estructura de datos que no solo contiene todas las cuentas y saldos, sino un estado de la máquina, que puede cambiar de un bloque a otro de acuerdo con un conjunto de reglas predefinidas, y que puede ejecutar código de máquina arbitrario. Las reglas específicas para cambiar de estado de un bloque a otro están definidas por la EVM.

A diagram showing the make up of the EVM Diagrama adaptado de Ethereum EVM illustrated (opens in a new tab)

La función de transición de estado de Ethereum

La EVM se comporta como lo haría una función matemática: dada una entrada, produce una salida determinista. Por lo tanto, resulta bastante útil describir Ethereum de manera más formal como si tuviera una función de transición de estado:

Y(S, T)= S'

Dado un estado válido antiguo (S) y un nuevo conjunto de transacciones válidas (T), la función de transición de estado de Ethereum Y(S, T) produce un nuevo estado de salida válido S'

Estado

En el contexto de Ethereum, el estado es una enorme estructura de datos llamada trie de Merkle Patricia modificado, que mantiene todas las cuentas enlazadas mediante hashes y reducibles a un único hash raíz almacenado en la cadena de bloques.

Transacciones

Las transacciones son instrucciones firmadas criptográficamente desde las cuentas. Hay dos tipos de transacciones: las que resultan en llamadas de mensaje y las que resultan en la creación de contratos.

La creación de contratos da como resultado la creación de una nueva cuenta de contrato que contiene el código de bytes compilado del contrato inteligente. Cada vez que otra cuenta realiza una llamada de mensaje a ese contrato, este ejecuta su código de bytes.

Instrucciones de la EVM

La EVM se ejecuta como una máquina de pila (opens in a new tab) con una profundidad de 1024 elementos. Cada elemento es una palabra de 256 bits, que se eligió por la facilidad de uso con la criptografía de 256 bits (como los hashes Keccak-256 o las firmas secp256k1).

Durante la ejecución, la EVM mantiene una memoria transitoria (como una matriz de bytes direccionada por palabras), que no persiste entre transacciones.

Almacenamiento transitorio

El almacenamiento transitorio es un almacén de clave-valor por transacción al que se accede a través de los códigos de operación TSTORE y TLOAD. Persiste en todas las llamadas internas durante la misma transacción, pero se borra al final de la transacción. A diferencia de la memoria, el almacenamiento transitorio se modela como parte del estado de la EVM en lugar del marco de ejecución, aunque no se confirma en el estado global. El almacenamiento transitorio permite compartir estados temporales de manera eficiente en cuanto a gas a través de llamadas internas durante una transacción.

Almacenamiento

Los contratos contienen un trie de almacenamiento de Merkle Patricia (como una matriz de palabras direccionable por palabras), asociado con la cuenta en cuestión y parte del estado global. Este almacenamiento persistente difiere del almacenamiento transitorio, que está disponible solo durante la duración de una sola transacción y no forma parte del trie de almacenamiento persistente de la cuenta.

Códigos de operación

El código de bytes compilado del contrato inteligente se ejecuta como una serie de códigos de operación de la EVM, que realizan operaciones de pila estándar como XOR, AND, ADD, SUB, etc. La EVM también implementa una serie de operaciones de pila específicas de la cadena de bloques, como ADDRESS, BALANCE, BLOCKHASH, etc. El conjunto de códigos de operación también incluye TSTORE y TLOAD, que proporcionan acceso al almacenamiento transitorio.

A diagram showing where gas is needed for EVM operations Diagramas adaptados de Ethereum EVM illustrated (opens in a new tab)

Implementaciones de la EVM

Todas las implementaciones de la EVM deben adherirse a la especificación descrita en el Libro Amarillo de Ethereum.

A lo largo de los diez años de historia de Ethereum, la EVM ha sido objeto de varias revisiones, y existen varias implementaciones de la EVM en diversos lenguajes de programación.

Los clientes de ejecución de Ethereum incluyen una implementación de la EVM. Además, existen múltiples implementaciones independientes, que incluyen:

Más información

Tutoriales: Máquina Virtual de Ethereum (EVM) / Códigos de operación en Ethereum