eWASM Ethereum 2.0: una guía detallada
eWASM es una de las muchas innovaciones que Ethereum está buscando implementar para dar el salto a Ethereum 2.0. Muchos creen que eWASM ayudará a crear un ecosistema que sea rápido, escalable y flexible, alentando a los desarrolladores a construir contratos inteligentes complejos sobre el protocolo de Ethereum 2.0. Esto se suma a los muchos aspectos diferentes de ETH 2.0 que explican nuestros artículos anteriores sobre Staking, Sharding, Ethereum Layer-2, zk-SNARKs y mucho más. Entonces, antes de continuar, familiaricémonos con Ethereum 2.0.
Ethereum 2.0, ¿qué es?
Ethereum 2.0 es una serie de actualizaciones que cambiarán radicalmente el protocolo, haciéndolo más escalable y eficiente. Entonces, Ethereum 2.0, ¿qué es? Entre los ejemplos de estas actualizaciones se incluyen: Prueba de participación con el protocolo Casper, Sharding, Raiden, Plasma y Rollups. Estos cambios se implementarán en diferentes fases de Ethereum para garantizar una implementación y ejecución adecuadas.
- Fase 0: Cadena de balizas para iniciar una transición a prueba de participación (POS).
- Fase 1: iniciar la fragmentación.
- Fase 2: Transición de la máquina virtual Ethereum (EVM) a eWASM Ethereum 2.0
NOTA: Ya hemos cubierto Ethereum 2.0 y sus muchas innovaciones en detalle. Si quieres profundizar, te animamos a que leas primero.
Hoy nos centraremos en la última fase de este cambio. Si está un poco familiarizado con Ethereum 2.0, debe saber que la transición de EVM a eWASM es bastante inmensa. Entonces, antes de entrar en eWASM, primero comprendamos qué es EVM.
¿Qué es la máquina virtual Ethereum?
Cada ecosistema de blockchain descentralizado requiere una máquina virtual para procesar y ejecutar operaciones. La máquina virtual de Bitcoin es bastante sencilla, ya que solo necesita lidiar con transacciones. Sin embargo, las cosas se complican un poco más cuando necesitas lidiar con contratos inteligentes completos de Turing como Ethereum. Entonces, esto nos lleva a otra pregunta importante.
Dado que un contrato inteligente deberá ser inmutable y aún puede ejecutarse a través de múltiples nodos sin compromiso, ¿cuáles son las características principales que debe tener la máquina virtual de Ethereum, a veces conocida como EVM?
Bueno … estas características son:
- Determinismo
- Terminable
- Aislado
Determinismo
Un programa es determinista si da la misma salida al mismo conjunto de entradas, sin importar cuántas veces ejecute el código. Un ejemplo perfecto de una función determinista son las operaciones matemáticas clásicas. P.ej. Suponiendo que todos los números están en base 10, 1 + 4 siempre será 5, sin importar cuántas veces repita esta operación.
Entonces, ¿por qué es esto importante cuando se trata de contratos inteligentes?
Bueno, debido a que estas dApps tienden a lidiar con millones de dólares a la vez, los usuarios necesitan saber cómo reacciona el código en cada etapa de su ejecución.
Terminable
Debe tener en cuenta que los contratos inteligentes de Ethereum son Turing-complete. Si se les da suficiente tiempo y recursos, los contratos inteligentes deberían poder resolver cualquier problema. Sin embargo, es imposible saber si un contrato podrá finalizar todas las operaciones en un plazo determinado o no. Es por eso que los contratos inteligentes deben tener un mecanismo de terminación. Los contratos inteligentes de Ethereum usan “gas” para definir una vida útil. En el momento en que se supera el límite de gas de un contrato, se detienen todas las operaciones.
Aislado
Finalmente, un contrato inteligente debería ejecutarse en un entorno completamente aislado. Si algo le sucede al contrato inteligente (como un truco o un error), no debería afectar al resto del protocolo subyacente.
Hay dos sistemas que un contrato inteligente puede utilizar para facilitar estas tres funciones. Estos dos sistemas son: máquinas virtuales y contenedores Docker. Dado que los diseños de contrato de Docker no son deterministas, por defecto, Ethereum decidió ir con máquinas virtuales.
Máquina virtual Ethereum: ¿Cómo funciona?
Entonces, ¿qué queremos decir exactamente con “máquina virtual”?
Los sistemas operativos tradicionales como Windows e iOS solo necesitan ejecutarse en un sistema a la vez. Sin embargo, las máquinas virtuales son abstracciones de nivel superior que se han creado sobre sistemas operativos nativos para replicar el funcionamiento de una máquina física.
Hablando de que…. ¿Cómo te ayuda exactamente un EVM?
Una VM le permite ejecutar la misma plataforma en varias arquitecturas de hardware y sistemas operativos diferentes simultáneamente. Es por eso que las máquinas virtuales son una excelente opción para una red descentralizada como Ethereum. El objetivo principal de Ethereum es ser una supercomputadora global que alquila recursos informáticos a los desarrolladores para que creen sus propios contratos inteligentes y aplicaciones descentralizadas. El EVM actúa prácticamente como esta computadora global, accesible por múltiples nodos en todo el mundo.
Pila y máquina de estado
EVM tiene dos características más además de ser una máquina virtual. En primer lugar, es una máquina de estado que puede leer entradas y cambiar su estado en consecuencia. Además, es una máquina basada en pilas, en la que la estructura de la memoria se organiza y se accede a ella como una pila.
Si está familiarizado con las estructuras de datos, debe saber qué son las pilas. Las pilas son estructuras de datos lineales en las que las operaciones se realizan utilizando LIFO o Last In First Out.
Considere el siguiente ejemplo:
En la pila de arriba, el primer dato insertado fue Orange, y el último dato fue Apple. Entonces, si tuviéramos que sacar datos de la pila mediante la lógica LIFO, la primera pieza que recuperamos es Apple y la última es Orange.
Ahora, echemos un vistazo a las operaciones de pila: Push y Pop.
- Empujar: el acto de agregar datos a la pila.
- Pop: El acto de eliminar elementos de la pila utilizando el método LIFO.
Operaciones de pila en EVM
En una máquina virtual basada en pila, las operaciones se ejecutan así:
- Primero se extraen los datos y los operandos.
- Se realiza la operación correspondiente.
- El resultado se vuelve a colocar en la pila.
Mira el siguiente diagrama:
- Sacamos los dos primeros números: 20 y 7.
- Luego se suman los dos números, lo que nos da 27.
- Finalmente, el resultado se vuelve a colocar en la pila.
Ventajas del sistema basado en pila de EVM
- La estructura de la pila asegura que el EVM no necesita saber la dirección exacta de los operandos. La estructura de la pila siempre apuntará inevitablemente a la VM al siguiente operando. Esto elimina la sobrecarga operativa sustancial y aumenta la eficiencia general.
- El EVM tiene: el estado mundial, el estado de la máquina y la ROM virtual. El estado mundial almacena todas las cuentas en la red, el estado de la máquina incluye datos como el contador del programa, el gas disponible, la pila y la memoria. Finalmente, la ROM virtual lee el código a nivel de máquina llamado “código de bytes EVM”. Este es un lenguaje único que solo el EVM puede entender.
EVM: lectura del código de bytes
Los lenguajes de programación pueden ser de alto o bajo nivel. Los lenguajes de bajo nivel como el código de bytes son fácilmente legibles por las máquinas, pero es difícil para los humanos trabajar con ellos. Esta es la razón por la que la mayoría de los lenguajes de programación son de alto nivel. Entonces, ¿cómo funciona exactamente un flujo de programa en contratos inteligentes?
- El contrato solidity / vyper se compila en bytecode. El compilador utilizado aquí se llama “solc”.
- El código de bytes es leído y procesado por la red.
- El código de bytes es la representación binaria de los códigos de operación de solidez. Los compiladores son un componente crítico de todo el intercambio, ya que EVM no entenderá ningún otro idioma excepto el código de bytes.
- Cada código de operación recibe un nombre legible por humanos en la especificación y se representa mediante un código numérico. Por ejemplo, el número 0X01 representa el código de operación ADD.
Máquina virtual Ethereum: funcionalidades
- El EVM es la unidad de procesamiento descentralizada de toda la red Ethereum. Todas y cada una de las transacciones, interacciones y ejecución de contratos inteligentes solo pueden ocurrir a través de EVM.
- Es responsable de todas las diferentes estructuras de datos, incluidas las instrucciones, los operandos y los datos procesados.
- El EVM busca y ejecuta la instrucción y decodifica los operandos a través de un despachador de instrucciones.
- El EVM también realiza un seguimiento de los componentes de la red, como el estado mundial, el estado de almacenamiento y la información del bloque.
- Cree un entorno de tiempo de ejecución para contratos inteligentes en la red Ethereum. Este entorno incluye información utilizada para ejecutar transacciones específicas como: precio del gas (precio actual del gas), Codesize (tamaño de la base de monedas de la transacción), Caller (dirección del receptor de la transacción) y Origin (dirección del remitente de la transacción).
Los problemas con la máquina virtual Ethereum
A pesar de todas sus increíbles funcionalidades, hay cuatro problemas principales con EVM que limitan el rendimiento general de la red:
- Como el EVM tiene que procesar tantas operaciones diferentes y diversas, el EVM no es tan rápido como debería ser. La especificación del código de operación de EVM no ha cambiado con el tiempo y no está optimizada para diferentes plataformas de hardware.
- Ampliando el primer punto, dado que el EVM tiene que realizar tantas operaciones diferentes, tiende a convertirse en un cuello de botella operativo. Como puede imaginar, esto afecta drásticamente la eficiencia general de la red.
- El EVM no ha evolucionado mucho desde su especificación inicial. Es por eso que la herramienta y el soporte lingüístico necesarios para redactar contratos son extremadamente limitados.
No tiene sentido incorporar todas estas fantásticas innovaciones como fragmentación, acumulaciones, Casper si el entorno de trabajo básico en sí es muy defectuoso. Estos problemas son las razones exactas por las que Ethereum busca pasar de EVM a eWASM. Entonces, antes de entrar en eWASM, comprendamos qué es WebAssembly.
eWASM Ethereum 2.0: ¿Qué es WebAssembly (WASM)?
WebAssembly ha ganado mucha atención recientemente. Creado y definido por el Consorcio World Wide Web (W3C), WebAssembly es un nuevo tipo de código que se puede ejecutar de manera eficiente en los navegadores modernos.
Entonces, ¿qué lo hace tan único?
Dado que WASM tiene un formato binario de bajo nivel basado en pilas que es pequeño por defecto, puede cargarse y ejecutarse rápidamente. En el momento en que su navegador descarga un código WASM, puede convertirlo rápidamente en el ensamblaje de cualquier máquina.
Ventajas de WebAssembly
- Es compatible con varios motores de JavaScript y entornos de ejecución que lo hacen ejecutable en la mayoría de los navegadores modernos.
- Los lenguajes como Go, Rust y C / C ++ ya se pueden compilar directamente en WASM.
- Se adapta rápidamente a cualquier arquitectura a nivel de máquina, lo que la convierte en un dispositivo de alto rendimiento.
- Viene con un conjunto de instrucciones que es compatible con la mayoría de las arquitecturas de hardware modernas.
- Funciona cerca de la velocidad nativa en la mayoría de las plataformas.
eWASM Ethereum 2.0: Introducción
Como ya habrá descubierto, eWASM o Ethereum WebAssembly es la versión de WebAssembly de Ethereum 2.0. Según el equipo:
eWASM = WASM – no determinismo (punto flotante) + medición + métodos EEI (utilizados para interactuar con Ethereum).
Hablando sobre el equipo de eWASM, han establecido lo siguiente como sus objetivos de diseño específicos:
- Cree un transcompilador de EVM y un inyector de medición como un contrato de eWASM.
- Una especificación clara y bien documentada de la interfaz Ethereum y la semántica del contrato eWASM y detalles más finos.
- Cree un backend de eWASM para el compilador solc.
- Proporcione instrucción y una biblioteca para escribir contratos inteligentes en C y Rust.
Al implementar eWASM, Ethereum se unirá a proyectos como EOS, Tron, Cardano, etc., que ya han adoptado o están en proceso de elegir WASM.
eWASM vs EVM
El objetivo principal de EVM era garantizar la corrección, incluso si se producía a expensas de la eficiencia. Lane Rettig, un desarrollador de Ethereum, cree que el EVM se creó teóricamente, en lugar de prácticamente, ya que no parece ideal para aplicaciones en el mundo real. Cada uno de los nodos del EVM debe ejecutarse con total precisión. Por otro lado, WASM enfatiza la eficiencia y la velocidad, ya que ha sido construido para uso en el mundo real, lo que logra traduciendo fácilmente la lógica de codificación real.
Ahora que tenemos un conocimiento básico, entremos en detalles.
eWASM vs EVM # 1: Velocidad
En pocas palabras, EVM es un experto en todos los oficios y un maestro de ninguno. Por ejemplo, veamos cómo se ocupa de la compilación de código.
EVM a menudo tiene dificultades para compilar un gran volumen de código. El motor JS nativo de un navegador a menudo tiene dificultades para encontrar la ruta óptima de ejecución para ciertas operaciones, lo que puede tener un efecto drástico en el rendimiento general de EVM. Además, EVM solo puede procesar códigos de bytes de 256 bits, por lo que los códigos de bytes más pequeños que este tamaño deben convertirse a un formato de 256 bits antes de que puedan introducirse en el EVM.
Debido al diseño de EVM, Ethereum adolece de una gran velocidad y escalabilidad, lo que le permite procesar solo 25 transacciones por segundo. Como tal, es muy poco práctico para el uso tanto en el mundo real como en tiempo real.
Por otro lado, eWASM puede realizar la transición directamente al código compilado, lo que le permite cargar más rápido y aumentar significativamente la cantidad de transacciones que procesa cada bloque. Esto, junto con las soluciones de fragmentación y capa 2, debería aumentar la velocidad de Ethereum 2.0 en una cantidad significativa.
eWASM vs EVM # 2: precompilaciones
eWASM puede eliminar por completo la dependencia de Ethereum de los contratos precompilados o “precompilaciones”. Estas precompilaciones son bits únicos de códigos de bytes EVM, que hacen cálculos criptográficos eficientes sin consumir una gran cantidad de gas. La mayoría de las veces, es imposible crear un contrato dentro de los límites aceptables de gas sin llamar a una precompilación.
Sin embargo, no están exentos de problemas. La introducción de nuevas precompilaciones a menudo requiere que la red realice un hard fork en todo el sistema. Como nos ha enseñado la historia, las bifurcaciones duras pueden ser polémicas en la medida en que pueden dividir a toda la comunidad.
eWASM, por otro lado, puede ser tan eficiente en gas que puede hacer que la mayoría de las precompilaciones sean completa y absolutamente redundantes.
¿Entonces, qué significa esto?
eWASM permite a los desarrolladores crear contratos inteligentes que sean rápidos y eficientes sin preocuparse por posibles bifurcaciones.
eWASM vs EVM # 3: Flexibilidad
Por último, veamos una de las ventajas más importantes que tiene eWASM sobre la flexibilidad del código EVM estándar. Anteriormente, los desarrolladores de Ethereum tenían que aprender solidez para crear contratos inteligentes. Esto creó un cuello de botella en el conocimiento, ya que se esperaba que los desarrolladores pasaran por una curva de aprendizaje específica.
Sin embargo, como ya hemos visto, eWASM es interoperable con varios lenguajes diferentes y tiene un conjunto de herramientas para desarrolladores más extenso. Los idiomas admitidos por eWASM incluyen C, C ++ y Rust.
eWASM disfruta del soporte nativo de todos los principales motores de JavaScript como:
- Motor Chakra de Microsoft (Microsoft Edge)
- Motor V8 de Google (navegadores basados en Node.js y Chromium)
- Motor Spidermonkey de Mozilla (Firefox y Thunderbird)
eWASM también admite la siguiente implementación sin navegador:
- ml-proto, el intérprete de referencia OCaml.
- wasm-jit-prototype, una máquina virtual independiente de LLVM que utiliza backend.
- wabt, un intérprete basado en pila.
eWASM también le ofrece los siguientes beneficios que antes no eran posibles con EVM:
- Será más sencillo obtener soporte en el navegador para los clientes ligeros de Ethereum ya que eWASM está construido de acuerdo con los estándares de la World Wide Web.
- eWASM tiene más compiladores y una amplia variedad de herramientas de desarrollo.
- Dado que una amplia variedad de proyectos ya utilizan eWASM, ya ha atraído a una comunidad de desarrolladores sana y diversa.
Conclusión de eWASM Ethereum 2.0: ¿Llevará esto a Eth 2.0 a un nivel completamente nuevo?
Hay mucho entusiasmo en la comunidad en torno a eWASM. Desafortunadamente, esto a menudo conduce a una gran cantidad de publicidad innecesaria. Greg Colvin, un desarrollador experimentado de Ethereum, es un poco escéptico sobre los contratos inteligentes de eWASM en dos frentes:
- Colvin no cree que eWASM no pueda eliminar las precompilaciones.
- También siente que la dependencia excesiva de eWASM en los compiladores puede crear un único punto de falla.
Sin embargo, una gran mayoría de la base de desarrolladores de Ethereum cree que eWASM tendrá un efecto sísmico en el rendimiento y el rendimiento general del protocolo. ¿Cómo resultará realmente?
Bueno … tendremos que esperar y ver.
Sin embargo, si desea familiarizarse con Ethereum y los contratos inteligentes, no necesita esperar. Consulte nuestros cursos de blockchain y familiarícese con los contratos inteligentes y la codificación antes de que Ethereum 2.0 lance eWASM. Esperamos que haya obtenido un inmenso valor con esto, que finalmente pueda responder la pregunta “Ethereum 2.0, ¿qué es?”