Mana-Ethereum: preparándose para Constantinopla

El Constantinople Hard Fork está programado para realizarse en Ethereum Mainnet a mediados de enero de 2019, en el bloque 7,080,000. En esta publicación, discutimos los próximos cambios en el protocolo y describimos cómo POA Network , Consensys y Compound Finance están colaborando para desarrollar Mana-Ethereum , un nuevo cliente de Ethereum de código abierto.

Esta semana, el proyecto Mana-Ethereum celebró un hito: ¡una sincronización completa con la red de prueba de Ropsten! Esto es importante porque Ropsten actualmente está ejecutando Constantinople, una nueva bifurcación con un lanzamiento planificado para enero en la red principal de Ethereum. Esta sincronización significa que Mana-Ethereum cumple con las especificaciones de Constantinopla y nos permitirá ejecutar un nodo completamente funcional en el futuro en la red principal de Ethereum.

Constantinopla es una actualización intencional; ha sido parte de la hoja de ruta de Ethereum desde el principio. Es la segunda parte de una actualización de dos partes llamada “Metrópolis”. La primera parte, “Bizancio”, se integró en octubre de 2017.

Constantinople introducirá funciones para aumentar la eficiencia de la red, reducir los costos de transacción de algunos contratos inteligentes y reducir las recompensas mineras de 3ETH a 2ETH, preparando aún más la red para una transición a la validación de Prueba de participación que vendrá con la “Serenidad” (también conocido como Casper) hard fork.

Después de un período de prueba en Ropsten, que involucró algunos problemas iniciales que desde entonces se han resuelto, Constantinople ahora está programado para su lanzamiento en la red principal en el bloque 7.080.000.

Gracias a un esfuerzo de colaboración de Consensys, Compound Finance y POA Network, nos estamos preparando para Constantinopla mientras desarrollamos nuestro nuevo cliente Ethereum, Mana-Ethereum .

<×Mana-Ethereum

Mana-Ethereum es un cliente de Ethereum escrito en Elixir. Un cliente de Ethereum implementa la máquina virtual de Ethereum, lo que permite que un nodo de la red interactúe con la cadena de bloques de Ethereum. El cliente debe seguir con precisión las especificaciones descritas en el Ethereum Yellow Paper para sincronizarse con la cadena de bloques y verificar las recompensas en bloque, los contratos inteligentes y las transacciones. Cuando ocurre un hard fork, un cliente de Ethereum debe actualizar su código para sincronizar con las nuevas especificaciones de la cadena.

Cada nodo de la red ejecuta un cliente Ethereum. La mayoría de los nodos utilizan Geth y Parity, pero hay clientes adicionales que diversifican el ecosistema y ayudan a verificar el protocolo. Estos clientes están escritos en una variedad de lenguajes (como C ++, Python e incluso JavaScript) para aprovechar las propiedades y habilidades únicas de cada lenguaje para codificar el EVM.

Elegimos implementar Mana-Ethereum usando Elixir por varias razones.

Continuamos progresando en Mana-Ethereum ya que estamos pasando el 100% de las pruebas comunes de Ethereum y estamos completamente sincronizados en Ropsten. Para planificar Constantinopla, implementamos todos los EIP necesarios (Protocolos de mejora de Ethereum ). Así es como fue.

Preparándose para Constantinopla

Prepararse para un hard fork planificado es un desafío, ya que cada EIP incluido en la actualización debe implementarse con precisión. Diseñamos Mana-Ethereum para una fácil ramificación y modularidad de código, lo cual fue útil cuando se preparó para Constantinopla.

Constantinople presenta 5 nuevos EIP a la plataforma Ethereum.

La mayoría de estos cambios no tendrán un gran impacto en los usuarios de blockchain. Los desarrolladores de contratos inteligentes podrán aprovechar la nueva funcionalidad y reducir los costos de gas para algunas operaciones. Estas mejoras incrementales están diseñadas para mantener la funcionalidad de la red y prepararse para un cambio mayor cuando “Serenity (Casper)” establezca la validación de la Prueba de participación.

Los mayores impactos en la red pueden resultar de que todos los nodos actualicen a sus clientes. Actualmente, muchos nodos ejecutan versiones anteriores de clientes Ethereum; el hard fork de Constantinople requerirá que todos los nodos se actualicen a las últimas versiones del cliente. Esto debería resultar en una red más rápida y segura.

Nuestra experiencia

Durante nuestra implementación, descubrimos que era fácil trabajar con la mayoría de los EIP. En comparación con la actualización de Byzantium, que introdujo zkSNARKs entre otras cosas, las actualizaciones de Constantinople fueron más fáciles de implementar.

Un desafío al que nos enfrentamos estaba relacionado con SSTORE, la operación de almacenamiento modificada por EIP-1283. Antes de esta implementación, sobrescribíamos los valores de almacenamiento iniciales durante las transacciones porque el valor inicial no era necesario para calcular los costos de gas. Sin embargo, este EIP introdujo la necesidad de acceder a 3 valores para calcular el gas: el valor inicial almacenado antes de la ejecución de la transacción, el valor actual y el nuevo valor.

Para superar este obstáculo, creamos un caché de almacenamiento para usar durante la ejecución de la transacción. Ahora podemos acceder al valor inicial del almacenamiento permanente (el trie Merkle Patricia) y al valor actual del caché de almacenamiento. Los valores subsiguientes solo se escriben en el almacenamiento permanente después de que una transacción es exitosa.

Este proceso de almacenamiento en caché nos ayudó a implementar EIP1283 y presentó una oportunidad para optimizar nuestro cliente. ¡Nuestra velocidad de ejecución ha aumentado en un 30% con la adición de un caché de almacenamiento!

Qué sigue para Mana-Ethereum

Nuestro enfoque sigue estando en la implementación de un cliente completamente funcional y listo para producción. La sincronización de Constantinopla fue un hito importante, y ahora estamos trabajando hacia el procesamiento de bloques JSON-RPC y una implementación de warp-sync.

Uno de nuestros principales objetivos con el proyecto Mana-Ethereum es crear un cliente Ethereum que sea de código abierto, bien documentado y compuesto por un código modular limpio. Estamos en el proceso de construir ese cliente desde cero y continuaremos compartiendo el progreso a medida que avanzamos hacia el lanzamiento.

Conéctese con nosotros:

Sitio web: https://poa.network/

Twitter: https://twitter.com/poanetwork

Medio: https://medium.com/poa-network

Foro: https://forum.poa.network/

Reddit: https://reddit.com/r/poa