EVM

De ALDEA WIKI
Ir a la navegación Ir a la búsqueda
Ethereum Virtual Machine

Ethereum Virtual Machine (EVM) es una máquina virtual distribuida que funciona dentro del protocolo de Ethereum. Esta cumple la función de actualizar el estado de la red, ejecutar las transacciones y procesar los contratos inteligentes. Esta tecnología representa un hito importante y un salto generacional dentro de la industria blockchain pues permitió desplegar por primera vez un protocolo Turing completo, haciendo posible la programación y la creación de nuevas aplicaciones dentro de la red mediante contratos inteligentes (cuestión imposible de realizar nativamente en el protocolo Bitcoin).


Una Máquina Virtual Distribuida

Para explicar esta tecnología hay que introducir antes lo que es una máquina virtual: Esta es una simulación de una computadora a través de un programa informático. No existe como una pieza de hardware en particular o un espacio físico en concreto, sino que, es una capa de abstracción a nivel de software que emula componentes como el procesador (CPU), memoria u otros dispositivos asociados. O dicho de otra manera, una máquina virtual es un computador que existe como un proceso interno de otro computador, que en el caso de la EVM no funciona solo en una sola computadora sino a través de múltiples computadoras que se coordinan a través de un protocolo. La EVM permanece como una única entidad mantenida por el conjunto de computadoras que corren un cliente de Ethereum. Cada nodo dentro de la red ejecuta una copia o instancia de la EVM y en conjunto se ponen de acuerdo sobre el estado de la máquina. Esta red forma parte de un protocolo abierto en el que cualquiera puede participar, y al ser una abstracción permite que esta pueda ser portable a diversas plataformas, lo que facilita que muchos usuarios puedan contribuir a esta infraestructura descentralizada.

¿Cómo funciona?

Propósito de la EVM

El propósito principal de la EVM es determinar el estado de cada bloque de la red. Lo que se denomina estado de la red es una gran estructura de datos que no solo toma en cuenta los balances de las transacciones, sino además, el estado de las instrucciones que se han codificado en la máquina y que va cambiando entre bloques. Las reglas básicas para cambiar el estado de la red están predefinidas por la EVM, ahora bien, estas pueden ser combinadas por los usuarios para codificar nuevos comportamientos dentro de la red, o sea, estas reglas básicas hacen que la red sea programable.

Programación de la EVM

Cabe aclarar que la EVM es uno de los tantas piezas que puede tener un cliente de Ethereum y análogo a un computador físico podría entenderse como una CPU que ejecuta códigos de bajo nivel en lenguaje máquina. Estos códigos expresados en lenguaje máquina son las reglas básicas del procesamiento de la red, los cuales son complicados de entender para un ser humano, por ello, oficialmente se ha creado un lenguaje de programación llamado Solidity que abstrae estas operaciones y permite que sea accesible la interacción con la EVM. Un desarrollador puede escribir en Solidity nuevos procesos que quiera desplegar en la red y luego esta escritura es compilada a las reglas básicas (o bytecodes) comprendidas por la EVM. Esta codificación se denomina un contrato inteligente y pueden representar algoritmos de la misma manera que lo haría un computador convencional, estos procesos hacen posible que se puedan desarrollar nuevas aplicaciones y funcionalidades dentro de Ethereum que no estaban previamente contempladas. Esto supuso una gran evolución para la industria blockchain con respecto a la red pionera Bitcoin que incluso hasta la actualidad carece de esta capacidad.

Una máquina de estado

La EVM opera como una función matemática: Dada una entrada, produce de manera determinista una salida; específicamente, dado el estado anterior y las transacciones actuales, produce un estado siguiente. Cuando un contrato inteligente es desplegado en la red cada nodo recibe una copia de este y ejecuta los bytecodes que resultan de la compilación del contrato efectuando con esto un cambio de estado, finalmente se valida el bloque una vez que este cambio de estado sea verificado según el consenso de todos los nodos de la red. La red Ethereum siempre tiende a establecer estado único o "canónico" donde precisamente viene a ser la EVM lo que define las reglas para computar correctamente el nuevo estado de la red. Para ejecutar dichos bytecodes existe un costo asociado que se mide en unas unidades denominadas gas, cada bytecode tiene asignado un costo de gas y entre mas complejo sean la codificación mayor será el costo de gas.

Implementaciones de la EVM

La implementación original de la EVM se encuentra en el cliente de Ethereum llamado Geth (Go-Ethereum), sin embargo, existen varias implementaciones alternativas desarrolladas con otros lenguajes que incluso capaces de compilar código EVM compatible sin utilizar Solidity. Algunas de estas son:

  1. Parity on Rust: Cliente de Ethereum escrito en Rust con su propia implementación de EVM (directorio ethcore).
  2. Cpp-Ethereum: Cliente de Ethereum escrito en C++ que genera el conjunto de pruebas de consenso (libevm / VM.cpp).
  3. Pyethereum: Cliente de Ethereum escrito en Python cliente con probablemente la mejor implementación de EVM legible (ethereum / vm.py).
  4. Py-EVM: Una implementación alternativa de Python diseñada para ser altamente configurable y modular.
  5. EthereumJ: Un cliente con su propia implementación de EVM escrita en Java.
  6. SputnikVM: una implementación realizada por Ethereum Classic el fork de Ethereum centrada en alta escalabilidad, paralelismo y portabilidad.

Esto muestra el proyecto sigue en constante desarrollo y la creación de versiones paralelas de la implementación oficial es una muestra de ello, muchas veces estas nuevas versiones buscan agilizar ampliar la cantidad de lenguajes compilables a códigos EVM y también arreglar desperfectos, por ejemplo, actualmente Cardano está desarrollando una implementación formalmente verificada de la EVM (véase KEVM).

Bibliografía

  1. Ethereum Virtual Machine (EVM). Ethereum official documentation. https://ethereum.org/en/developers/docs/evm/
  2. ¿Qué es la Ethereum Virtual Machine (EVM)? La máquina virtual de Ethereum. Cointelegraph Blog. https://es.cointelegraph.com/explained/what-is-the-ethereum-virtual-machine-evm-the-ethereum-virtual-machine
  3. What is the Ethereum Virtual Machine (EVM)?. Alchemy Blog. https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm
  4. What is Ethereum Virtual Machine (EVM)? Programmer explains. Ivan on Tech. https://www.youtube.com/watch?v=GPoze5RmDVU
  5. What Is an Ethereum Virtual Machine (EVM)? A Beginner's Guide. Bybit blog. https://learn.bybit.com/deep-dive/what-is-ethereum-virtual-machine-evm/
  6. The Ethereum Virtual Machine (EVM) in 2 mins. Eat the blocks. https://www.youtube.com/watch?v=HfTTbxQWWvg
  7. The War on Virtual Machines: WASM vs. EV. Kadeem Clarke. https://medium.com/momentum6/the-war-on-virtual-machines-wasm-vs-evm-8e68f9d53ef4

v2.0 - Escrito por ASH, revisado por Amaru - 13-09-2022