Máquina virtual de Ethereum (EVM)
Última edición: @comme.le.gnu(opens in a new tab), 21 de junio de 2024
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 corren 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 estar familiarizado con terminología básica y común de las ciencias informáticas, como bytes(opens in a new tab), memoria(opens in a new tab) y pila(opens in a new tab). También sería útil sertirse cómodo con los conceptos de criptografía/cadena de bloquesfunciones hash(opens in a new tab) y el árbol Merkle(opens in a new tab).
Del libro de contabilidad 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 tenga su propia criptomoneda nativa (Ether), que sigue casi exactamente las mismas reglas intuitivas, también permite el uso de 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 estado(opens in a new tab) distribuida. El estado de Ethereum es una gran estructura de datos, que no solo sostiene todas las cuentas y saldos, sino que también alberga el estado de la máquina. Este puede cambiar de bloque a bloque según un conjunto de reglas predefinidas, así como ejecutar un 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 ilustrado(opens in a new tab)
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 tanto, es bastante útil para describir formalmente a Ethereum como 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 gran estructura de datos llamada Merkle Patricia Trie modificado, que mantiene todas las cuentas enlazadas mediante los hashes y reducibles a un solo 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 pila(opens in a new tab) con una profundidad de 1024 ítems. 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.
Los contratos, sin embargo, contienen un Merkle Patricia trie de almacenamiento (como una matriz de palabras con direccionamiento por palabra), asociado a la cuenta en cuestión y que forma parte del estado global.
El bytecode compilado del contrato inteligente se ejecuta a través de códigos de operación de la EVM, que realizan operaciones estándar de pila como XOR
, AND
, ADD
, SUB
, etc. La EVM también implementa varias operaciones de pila específicas de las cadenas de bloques, como ADDRESS
, BALANCE
,BLOCKHASH
, etc.
Diagramas adaptados de la Ethereum EVM ilustrada(opens 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.
Durante los nueve años de historia de Ethereum, la EVM ha pasado varias revisiones y existen varias implementaciones de la EVM en distintos lenguajes de programación.
Los clientes de ejecución de Ethereum incluyen una implementación de EVM. Además, existen múltiples implementaciones independientes, que incluyen:
- Py-EVM(opens in a new tab) - Python.
- evmone(opens in a new tab) - C++.
- ethereumjs-vm(opens in a new tab) - JavaScript.
- revm(opens in a new tab) - Rust
Más información
- Libro amarillo de Ethereum(opens in a new tab)
- Jellopaper, también conocido como KEVM: semántica de EVM en K(opens in a new tab)
- El Beigepaper(opens in a new tab)
- Códigos de operación de la máquina virtual de Ethereum(opens in a new tab)
- Referencia interactiva de códigos de operación de máquina virtual Ethereum(opens in a new tab)
- Una breve introducción a la documentación de Solidity(opens in a new tab)
- Dominio de Ethereum: la Máquina Virtual de Ethereum(opens in a new tab)