
autor:Dragan Rakita,Traducción del paradigma: Good OUBA, Bitt Chain Vision World
EOF (formato de objeto EVM)
EOF (formato de objeto EVM) es un conjunto de pequeños EIP diseñados para mejorar EVM.Presenta un nuevo formato de código de byte para prepararse para el futuro de EVM.
La ventaja de EOF
El valor de EOF es difícil de explicar porque no es una sola cosa, y porque se ha retrasado en la bifurcación y muchos años de desarrollo e investigación, y la evolución de diferentes versiones, la explicación se vuelve más complicada.
El propósito de este artículo es resumir estas ventajas y explicarlas en una oración:
Ventajas:
-
EOF permite el cambio de precios de gas del código operativo
-
Si el precio del gas cambia, el bytecodo tradicional puede ser diferente.
-
Eliminar la observación de gas
-
Esto significa eliminar el código de operación de gas y el límite de gas en la llamada/delegatecall/staticcall.
-
Permitir que L2 cambie de gas según su caso de uso
-
Por ejemplo, el alto costo de la operación hash en ZK L2.
-
EIP-7667: Aumente el costo de gas de las funciones hash.
-
Reduzca el tamaño del código de byte y reduzca el uso de gas
-
Los datos tempranos indican que el tamaño del código/código de inicialización y la cantidad de uso de gas disminuyen:
-
El despliegue de UNISWAP-V3 disminuyó en un 6.5%y el código de implementación.
-
Implemente UNISWAP3Factory para usar aproximadamente el 14%de menos gas, llame a Runtest para usar aproximadamente un 9%menos de gas.
-
La implementación de ENS DNSGISTRAR disminuye en aproximadamente un 6%del código de inicialización y aproximadamente el 1.5%del código de implementación.
-
Ens llama a las provincias: use aproximadamente un 10%menos de gas.
-
Permitir la conversión de Bytecode y actualizar
-
Observación del código de eliminación significa eliminar la PC, Crear/Create2, ExtCodeHash, ExtCodesize, ExtCodeCopy, CodeSize y CodeCopy Operation Code.
-
Si se cambia el código, el contrato tradicional no podrá ejecutarse.
-
Esto nos permitirá modificar el Bytecode EOF al introducir Verkle en el futuro.
-
EOF habilita el número de código operativo inmediatamente
-
Abra la posibilidad de abrir Swapn, Dupn e Exchange.
-
Esto proporciona más libertad para la solidez al tamaño de la pila, y resuelve la profundidad de la pila en solidez.
-
Eliminar el análisis de objetivos de salto costoso
-
En Reth, los resultados del análisis se conservan con Bytecode, pero otros clientes son diferentes.Elimine el análisis del objetivo de salto antes de que la ejecución del contrato mejore la velocidad.
-
Con la eliminación del análisis, podemos aumentar el tamaño máximo de código de byto en el futuro.
-
El análisis estático se vuelve más fácil
-
Los sub -programas para flujos de control obligatorios y más estructurales hacen que la prueba difusa sea más efectiva y puede lograr un análisis estático del tiempo lineal.
-
La separación de datos y código es más fácil de razonar.
-
EOF Bytecode se puede compilar en Bytecode más rápido
-
EOF ByTecode se puede compilar en un código de máquina.
-
Prueba futura EVM
-
La versión y la estructura del código de byte permiten que sea escalabilidad.Esto es especialmente útil para L2 y la estandarización.
-
Un ejemplo es EIP-7701: la abstracción de la cuenta local con EOF ha agregado una nueva parte de cabeza.
-
Dirección de expansión del espacio
-
El nuevo código operativo de llamadas ext*se llena con cero al requerir el campo de dirección para prepararse para la expansión de la dirección futura.Cuando Ethereum decide expandir el espacio de direcciones, EOF se ha preparado para estos cambios.
-
ExtCall (0xf8), ExtDelegateCall (0xf9), ExtstaticCall (0xfb)
-
Tiene el mismo plan que la llamada abandonada, pero elimina los campos de salida de Gas_Limit y Memoria.
-
Antes de la introducción de ReturnAtaload (en una bifurcación muy temprana), la salida de memoria del código de funcionamiento de la llamada debe establecerse antes de ejecutar el código de operación de llamadas.Esto no permite la salida dinámica.
-
Eofcreate y returncontract
-
Es el nuevo contenido de EOF y requiere un tratamiento especial.
-
Intercambio (0xe8), swapn (0xe7), dupn (0xe6), dataCopy (0xd3), dataSize (0xd2), dataLoadn (0xd1), dataLoad (0xd0), rjumpi (0xe1), rjump) v (0xe2), returndataload
-
La lógica es simple, la mayoría de los cuales solo deben ser implementados por 10-20 líneas.No hay muchos bordes que necesiten estar cubiertos.
-
Callf (0xe3), Retf (0xe4) y Jumpf (0xe5)
-
Se requiere la pila de subrutina y la verificación de la pila, y la complejidad requiere aproximadamente 20-30 líneas.
-
Necesita un desarrollador durante aproximadamente 2-3 meses.El trabajo de prueba ha comenzado.En la actualidad, hay alrededor de 2,000 pruebas de verificación escritas a mano, y la prueba de estado también está en marcha.
Integrado con EVM actual
Para los desarrolladores, un problema importante es el esfuerzo, los costos de prueba y el costo de mantener estos códigos operativos requeridos para los cambios.
El nuevo código de operación no entrará en conflicto con el código operativo tradicional, y la verificación de EOF no tocará el código operativo abandonado.
La codificación y decodificación de EOF puede ser borrosa.La verificación es algo nuevo.
Cree una transacción para el Bytecode EOF, similar a EOFCreate, pero requiere verificación antes de la ejecución.
La mayoría de los códigos de funcionamiento son muy simples:
El cambio se concentra en el EVM, por lo que la integración del resto del cliente depende de la arquitectura del cliente y la ubicación del código de byte.
ExtCodeSize y ExtCodehash deben saber si la cuenta es EOF y devuelve el valor pre -definido (tamaño 0xef00 y hash), que puede cambiar ligeramente el método de integración del cliente.Una idea es guardar el logotipo de IS_EOF en un formulario de cuenta normal para saltar el código de byte para cargar el código de byte al llamar a cualquier código de operación de tipo Extcode.
Efecto sobre L2
El mayor problema es ¿por qué L2 no implementa estos cambios?¿Deberíamos detener las mejoras EVM en Ethereum L1?
La realidad es que L2 no está listo, no solo eso, no tienen plataforma para ayudar a integrar estas innovaciones.El control de versiones de Byte Code ayuda a construir una plataforma que puede ser utilizada por L2. ).
Más importante aún, EOF no es solo un formato, sino que también requiere el soporte del lenguaje (solidez/vyper/huff), y requiere el soporte de la cadena de herramientas para usar.Requiere un ecosistema para usarlo.
Desventajas: todavía existen bytes tradicionales
Este es un problema común.Las bytas tradicionales existirán para siempre.Con el código de byte de un formato alternativo, en el futuro, podemos hacer la transición y eliminar el código de byte tradicional cuando el estado expira.
Resumir
EOF no es la próxima cosa deslumbrante.Es necesario para el desarrollo adicional y la prueba futura de EVM.