Máquina virtual de Ethereum (EVM)
Última actualización de la página: 16 de diciembre de 2025
La Maquina Virtual de Ethereum (EVM) es un ecosistema virtual descentralizado que ejecuta código consistentemente y de forma 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, lo que garantiza una asignación eficiente de recursos y la seguridad de la red.
Requisitos previos
Para comprender la EVM es necesario tener cierta familiaridad con la terminología común en las ciencias de la computación, como los bytesopens in a new tab, la memoriaopens in a new tab y una pilaopens in a new tab. También sería útil estar familiarizado con conceptos de criptografía/blockchain, como las funciones de hashopens in a new tab y el árbol de Merkleopens in a new tab.
Del libro mayor a la máquina de estado
La analogía del "libro de contabilidad distribuido" suele utilizarse para describir blockchains como Bitcoin, que permite la existencia de una moneda descentralizada que utiliza 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. Por ejemplo, una dirección de Bitcoin no puede gastar más Bitcoin de los que ha recibido previamente. Estas reglas sustentan todas las transacciones de Bitcoin y muchas otras blockchains.
Aunque Ethereum tiene su propia criptomoneda nativa (ether) que sigue casi exactamente las mismas reglas intuitivas, también posibilita una función mucho más poderosa: los contratos inteligentes. Para explicar 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 estadoopens in a new tab distribuida. El estado de Ethereum es una gran estructura de datos que contiene no solo todas las cuentas y saldos, sino también un estado de máquina, que puede cambiar de bloque en bloque según un conjunto de reglas predefinidas y ejecutar código de máquina arbitrario. Las reglas específicas de cambiar el estado de bloque a bloque las define la EVM.
Diagrama adaptado de Ethereum EVM illustratedopens in a new tab
La función de transición de estado de Ethereum
La EVM se comporta como una función matemática: dada una entrada, esta produce una salida determinista. Por lo tanto, es bastante útil describir formalmente a Ethereum como que tiene una función de transición de estado:
1Y(S, T)= S'Dado un estado válido anterior (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 vinculadas por 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: aquellas que resultan de llamadas de mensajes y aquellas que resultan de la creación de contratos.
La creación de contratos da lugar a la creación de una nueva cuenta de contrato, que contiene el bytecode compilado del contrato inteligente. Cada vez que otra cuenta realiza una llamada de mensaje al contrato, este ejecuta su bytecode.
Instrucciones de la EVM
La EVM se ejecuta como una máquina de pilaopens in a new tab con una profundidad de 1024 elementos. Cada ítem es una palabra de 256 bits, que se selecciona para utilizar fácilmente 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 temporal (como un array de bytes con direccionamiento por palabras), que no se conserva 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; sin embargo, no se guarda en el estado global. El almacenamiento transitorio permite compartir el estado temporal de forma eficiente en cuanto a gas entre las llamadas internas durante una transacción.
Almacenamiento
Los contratos contienen un trie de almacenamiento Merkle Patricia (como una matriz de palabras con direccionamiento por palabra), asociado con la cuenta en cuestión y parte del estado global. Este almacenamiento persistente difiere del almacenamiento transitorio, ya que está disponible solo durante una única transacción y no forma parte del trie de almacenamiento persistente de la cuenta.
Códigos de operación
El bytecode 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 varias 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.
Diagramas adaptados de Ethereum EVM illustratedopens in a new tab
Implementaciones de la EVM
Todas las implementaciones de la EVM deben ser conformes con la especificación descrita en el protocolo de Ethereum.
A lo largo de los diez años de historia de Ethereum, la EVM ha sido sometida a 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:
- Py-EVMopens in a new tab - Python
- evmoneopens in a new tab - C++
- ethereumjs-vmopens in a new tab - JavaScript
- revmopens in a new tab - Rust
Lecturas recomendadas
- Ethereum Yellowpaperopens in a new tab
- Jellopaper, también conocido como KEVM: Semántica de la EVM en Kopens in a new tab
- The Beigepaperopens in a new tab
- Códigos de operación de la Máquina Virtual de Ethereumopens in a new tab
- Referencia interactiva de códigos de operación de la Máquina Virtual de Ethereumopens in a new tab
- Una breve introducción en la documentación de Solidityopens in a new tab
- Mastering Ethereum - La Máquina Virtual de Ethereumopens in a new tab