Ir al contenido principal
Change page

Máquina virtual de Ethereum (EVM)

Última edición: , 1 de abril de 2024

La representación física de EVM no se puede describir del mismo modo que una nube o una ola, pero existe como una única entidad sustentada por miles de computadoras conectadas ejecutando un cliente de Ethereum.

El propio protocolo Ethereum existe únicamente con el propósito de mantener el funcionamiento continuo, ininterrumpido e inmutable de esta máquina de estado especial. Es el entorno en el que cohabitan todas las cuentas de Ethereum y los contratos inteligentes. En cualquier bloque de la cadena, Ethereum tiene un único estado «canónico» y la EVM es la que define las reglas de cálculo de un nuevo estado válido de bloque a bloque.

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.

Un diagrama que muestra la composición de 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.

Un diagrama en el que se muestra dónde se necesita gas para las operaciones de la EVM 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:

Más información

¿Le ha resultado útil este artículo?