
Autor: Investigador de Ethere Justin Drake, EthResearch;
El crédito para este artículo se debe a la comunidad de I + D de Ethereum más amplia.Las contribuciones clave surgieron de 2017, con desbloqueos incrementales significativos en el diseño a lo largo de los años.Los avances recientes en la ingeniería ZKVM han provocado una exploración exhaustiva del espacio de diseño.Este artículo solo está haciendo todo lo posible para armar un diseño coherente para una gran idea que finalmente puede llegar.
resumen
Proponemos una precompilación de ejecución elegante y poderosa que expone el motor de ejecución L1 EVM nativo a la capa de aplicación.Resumen de ejecución nativa («resumen nativo») es un resumen de las transiciones de estado EVM utilizando Ejecutar para verificar las transacciones de los usuarios por lotes.El resumen nativo puede considerarse como «fragmentos de ejecución programables» y precompilado en funciones derivadas para manejar la lógica del sistema fuera del EVM, como la clasificación, los puentes, la inclusión forzada, la gobernanza.
Dado que la precompilación de ejecución es realizada directamente por el validador, disfruta (ZK) EL Diversidad del cliente y proporciona equivalentes EVM que están constructivamente libres de errores y se actualizan a EVM a través de la compatibilidad previa de L1 Hard Fork.Para un resumen equivalente EVM que desea heredar completamente la seguridad de Ethereum, es necesario formularios de introspección EVM como ejecutar precompilación.Llamamos al resumen de la seguridad de Ethereum totalmente un «resumen de confianza».
Ejecutar la precompilación simplifica enormemente el desarrollo del resumen equivalente de EVM porque la simulación y el mantenimiento de EVM se realizan sin infraestructura compleja, como juegos de prevención de fraude, circuitos de sarcasía, tableros de seguridad.Con Execute, se pueden usar unas pocas líneas de código de solidez para implementar resúmenes nativos y basados en roles minimalizados utilizando funciones derivadas simples, eliminando la necesidad de un tratamiento especial de clasificación, inclusión forzada o gobernanza.
Lo más importante,La agregación nativa puede disfrutar de un acuerdo en tiempo real sin preocuparse por la prueba en tiempo real, simplificando enormemente la composibilidad sincrónica.
Este artículo se divide en dos partes, primero introduce la precompilación propuesta y finalmente discute el resumen nativo.
Parte 1 – Ejecutar precompilado
estructura
Ejecutar precompilación acepta entradas pre_state_root, post_state_root, rastrear y gas_used.Devuelve verdadero si y solo si se cumplen las siguientes condiciones:
-
Trace es un seguimiento de ejecución bien formado (por ejemplo, la lista de transacciones L2 y la prueba de acceso de estado correspondiente)
-
La ejecución sin estado de traza comienza con pre_state_root y termina con post_state_root
-
La ejecución sin estado de rastreo solo consume gas de gas.
Hay un mecanismo de estilo EIP-1559 para medir y fijar el precio del gas acumulado consumido por todas las llamadas de ejecución en el bloque L1.Específicamente, existe un límite de gas acumulado Execute_Cumulative_Gas_Limit, y un objetivo de gas acumulado EXECUTE_CUMULATIVE_GAS_TARGET.(Cuando el verificador puede ejecutar L1 EVM con estatuto por el verificador, los límites y objetivos acumulativos se pueden fusionar con el mecanismo L1 EIP-1559).
Llamar a la precompilación requiere un número fijo de gas L1, ejecute_gas_cost, más gas_used * GAS_PRICE, donde el mecanismo de estilo EIP-1559 establece GAS_PRICE (precio en ETH/GAS).El prepago completo se retirará incluso si la precompilación devuelve falso.
El seguimiento debe apuntar a los datos de Ethereum disponibles de los datos de llamadas, BLOB, estado o memoria.
Volver a ejecutar
Si EXECUTE_CUMULATIVE_GAS_LIMIT es lo suficientemente pequeño, el validador simplemente puede volver a ejecutar el rastro para hacer cumplir la corrección de la llamada de ejecución.El despliegue inicial basado en la precompilación de reexecución puede servir como un trampolín, similar a la simple descarga de la disminución original del danksharding completo.Tenga en cuenta que la reexecución simple no lleva el crecimiento del estado o la sobrecarga de ancho de banda al validador, y cualquier sobrecarga de ejecución puede ser paralelo a los núcleos de CPU.
El validador debe contener una copia explícita de la traza para la re-ejecución, evitando así el uso de punteros a datos de blob muestreados (en lugar de descargar) a través de DAS.Tenga en cuenta que los resúmenes nativos optimistas aún pueden publicar datos agregados en forma de blobs, recurriendo a los datos de llamadas solo en juegos a prueba de fraude.También es importante tener en cuenta que la agregación nativa optimista puede tener límites de gas que exceden con creces Execute_cumulative_gas_limit, porque Execuut Precompilación solo requiere una llamada única en un pequeño segmento EVM para resolver el desafío a prueba de fraude.
Como registro histórico, en 2017, Vitalik propuso una precompilación similar «EVM Inside EVM» llamada ExectX.
Ejecutar a través de Snark
Para desbloquear el más grande EXECUTE_CUMULATIVE_GAS_LIMIT, naturalmente permitirá que el verificador verifique selectivamente la prueba de snark.A partir de ahora, suponemos que una ranura de tiempo retrasa la ejecución, donde un bloque no válido (o transacción no válida) se considera una operación sin operación.(Para obtener más información sobre la ejecución retrasada, consulte esta publicación de EthResearch, este EIP y este diseño para Francesco). Una ejecución de ranura retrasada da como resultado segundos (toda la ranura) para la prueba.También evitan incentivar las competiciones de prueba impulsadas por MEV, que introducirán vectores centralizados.
Tenga en cuenta que incluso si la ejecución es aplicada por SNARK, no hay una prueba clara de que el sistema o circuito se incorpore al consenso.(Tenga en cuenta que Ejecutación de precompilación no toma ninguna prueba explícita como entrada). En su lugar, cada operador de replanteo es libre de elegir su cliente de validador Zkel favorito, similar al enfoque actual para seleccionar un cliente EL subjetivamente.La siguiente sección «Prueba fuera de la cadena» explicará los beneficios de esta decisión de diseño.
A partir de ahora, suponemos que el propomiso de ejecución es maduro en el contexto de la separación de prueba de prueba (APS) con una ejecución alterna y ranuras de consenso.Para motivar a los propuestas de ejecución racional a generar pruebas de manera oportuna (dentro de 1 intervalo de tiempo), requerimos que las pruebas demuestren el bloque de ejecución n+1 solo cuando el bloque de ejecución n está disponible.(Recomendamos agrupar el bloque N+1 con la prueba de ejecución del bloque N en la capa P2P). Los propuestas de ejecución que se saltan las pruebas pueden perder sus espacios, lo que resulta en tarifas perdidas y MEV.Además, imponemos una penalización fija en las ranuras de ejecución perdidas, lo que la establece lo suficientemente alta (por ejemplo, 1 ETH) para exceder siempre el costo de la prueba.
Tenga en cuenta que en el contexto de APS, la generación de bloques de consenso no está bloqueada por las ranuras de ejecución perdidas.Sin embargo, la generación oportuna de pruebas es importante para los clientes de la luz para que puedan leer el estado fácilmente en el lado de la cadena sin una reexecución sin estado.Para garantizar una generación de prueba oportuna para clientes de luz, confiamos en el supuesto de prueba de minorías altruistas incluso en el caso especial en el que el próximo propositor de ejecución pierde su intervalo de tiempo.Un solo prover altruista es suficiente para generar una prueba en 1 intervalo de tiempo.Para evitar pruebas redundantes innecesarias, la mayoría de las pruebas altruistas pueden esperar en espera e iniciarse solo cuando no llega ninguna prueba dentro de 1 ranura, actuando así como una medida segura para retrasos de hasta 2 espacios.
Tenga en cuenta que Execute_Cumulative_Gas_Limit debe establecerse lo suficientemente bajo para que los supuestos altruistas minoritarios sean confiables (y para que la propuesta de ejecución se complique de manera poco realista).Una estrategia conservadora podría ser establecer EXECUTE_CUMULATIVE_GAS_LIMIT para que las computadoras portátiles como MacBook Pro de alta gama puedan acceder a pruebas de ranura única.Una política más pragmática y positiva puede ser apuntar a un pequeño porcentaje de GPU, y una vez que están totalmente comerciantes, eventualmente puede apuntar a la prueba ASIC sarcelea.
Prueba fuera de la cadena
Para reiterar, recomendamos no poner la prueba de ejecución de Zkel en la cadena, sino compartirla fuera de la cadena.No guardar pruebas es una buena idea, propuesta por primera vez por Vitalik, y tiene varias ventajas:
-
Diversidad:Los verificadores son gratuitos para seleccionar validadores de prueba (incluidos sistemas de prueba y circuitos) del equipo de desarrollo en el que confían, similar a la forma en que los validadores eligen los clientes EL en los que confían.Esto proporciona robustez a través de la diversidad.El cliente de validador ZKEL (y algunos de los ZKVM subyacentes de los clientes) son un software de cifrado complejo.Los errores en ninguno de los clientes no deben hacer que Ethereum se bloquee.
-
Neutralidad:Tener el mercado cliente de validador Zkel permite que la capa de consenso no seleccione el ganador de la tecnología.Por ejemplo, el mercado ZKVM es altamente competitivo y elegir un proveedor ganador (como Risc0, sucinto o muchos otros proveedores) puede no considerarse neutral.
-
Sencillez:La capa de consenso no necesita incluir un validador de snark específico, que simplifica enormemente la especificación de la capa de consenso.Solo incluya el formato de la prueba de acceso de estado, no los detalles de implementación de validador de prueba específica.
-
flexibilidad:Si se encuentran errores u optimizaciones, los validadores afectados pueden actualizar a sus clientes sin horquillas duras.
Tener una prueba fuera de la cadena provoca algunas complejidades controlables:
-
Probar la carga y la fragmentación p2p:Dado que no hay una prueba de especificación única, se deben generar múltiples pruebas (al menos uno por cliente Zkel).Cada personalización del cliente Zkel (por ejemplo, intercambiar un RISC-V ZKVM por otro) requiere una prueba diferente.Del mismo modo, cada actualización de la versión ZKEL requiere una prueba diferente.Esto dará como resultado una mayor carga de prueba.Si cada tipo de prueba tiene un canal de chismes separado, se fragmentará aún más la red P2P.
-
Unos pocos zkel:Es difícil motivar a algunos Zkel para generar pruebas.Los propuestas de ejecución racional solo pueden generar suficientes pruebas para alcanzar la gran mayoría de las pruebas sin perder su período de tiempo.Para resolver este problema, se puede alentar a los operadores estados desde la sociedad a ejecutar múltiples clientes de Zkel en paralelo, similar a los operadores de cupones de hoy.La ejecución de la configuración de K-OF-N también tiene el beneficio adicional de mejorar la seguridad, especialmente prevenir las vulnerabilidades sanitarias que permiten a los atacantes crear pruebas para llamadas de ejecución arbitrarias (este caso no es para clientes EL tradicionales. Común).
La prueba fuera de la cadena también reducirá la eficiencia del acuerdo en tiempo real L2:
-
No Sustituye DA:Dado que la entrada de seguimiento de Ejecutar debe proporcionarse al validador L1, el L2 que se establece en tiempo real (el L2 que actualiza su raíz de estado de especificación inmediatamente) debe consumir L1 DA, es decir, resumen.Tenga en cuenta que no existe tal límite en el L2 optimista del acuerdo retrasado del juego por fraude, es decir, puede ser un valor válido.
-
Sobrecarga de acceso de estado:Dado que la traza debe ser ejecutable sin estado, debe incluir hojas de trie estatales que se lean o escriban, lo que introduce una pequeña cantidad de sobrecarga de DA que un bloque L2 típico.Tenga en cuenta que el L2 optimista no tiene esta limitación porque las hojas de trie estatales solo son necesarias en desafíos a prueba de fraude, y el retador puede recalcular las hojas de Trie.
-
Sin diferencia estatal:Dado que la prueba debe no tener permiso, la diferencia de estado resumida no se puede hacer debido a un seguimiento determinado.Sin embargo, si la prueba especializada correspondiente se incorpora al consenso, la prueba de acceso sin estado o la firma de transacción EVM se pueden comprimir.
Ejecución nativa de RISC-V
Dada la convergencia real de hoy a RISC-V ZKVM, puede haber una oportunidad para exponer localmente las transiciones de estado RISC-V a EVM (similar a WASMS en los entornos de arbitraje de lápiz) y mantener con los sarcasros.
Parte 2 – Rollup nativo
nombre
Primero discutamos el nombramiento del acurrucado nativo para resolver varios problemas confusos:
-
Nombre alternativo:El resumen nativo se conocía anteriormente como resumen consagrado.(El término «resumen canónico» también se usó brevemente en Polynya 12.) El término «consagrado» fue luego abandonado y reemplazado por «nativo» para indicar que el resumen equivalente EVM existente se puede actualizar opcionalmente a nativo.El nombre «nativo» fue propuesto independientemente por Dan Robinson y un colaborador de Lido que quería permanecer en el anonimato en noviembre de 2022.
-
Basado en el resumen:Según el resumen y los resúmenes nativos, siempre son conceptos ortogonales: «basado» está relacionado con la clasificación L1, mientras que «nativo» está relacionado con la ejecución de L1.Al mismo tiempo, según el resumen nativo y el nativo es caprichoso llamado «resumen superónico».
-
Ejecutar fragmentos:El fasto de ejecución (es decir, la copia consagrada de la cadena L1 EVM) es un concepto diferente pero relacionado relacionado con resúmenes nativos, varios años antes de los resúmenes nativos.(La ejecución del fragmento fue antes de la «Fase 2» de la hoja de ruta Ethereum 2.0). A diferencia del rollo nativo, el fragmento no es programable, es decir, no hay opciones como gobernanza personalizada, clasificación personalizada y tokens de gas personalizados.Los fragmentos de ejecución también generalmente se instancian en un número fijo (por ejemplo, 64 o 1,024 fragmentos).Desafortunadamente, Martin Köppelmann usó el término «L2 nativo» 7 en su discurso de 2024 Devcon en la ejecución de fragmentos.
beneficio
Los rollups nativos tienen varios beneficios, que introduciremos en detalle a continuación:
-
Sencillez:La mayor parte de la complejidad de una VM nativa se puede encapsular por precompilación.Hoy, el optimismo y el rollup ZK, comparables a EVM, tienen miles de líneas de código para sus juegos a prueba de fraude o validadores de snark que pueden comprimirse en una línea de código.Los acurrucados nativos tampoco requieren infraestructura auxiliar, como redes de prueba, torres de vigilancia y comités de seguridad.
-
Seguridad:Construir un juego de prueba de fraude EVM sin errores o un validador de snark es una tarea de ingeniería muy difícil que puede requerir una validación de forma profunda.Hoy en día, es probable que cada optimismo y rollup de ZK EVM tengan una seria vulnerabilidad en su función de transición de estado EVM.Para prevenir las vulnerabilidades, la clasificación centralizada a menudo se usa como una muleta para controlar la producción de bloques adversos.La ejecución nativa de precompilación permite la implementación segura de la clasificación sin permiso.Rollups sin confianza que heredan completamente la seguridad L1 también heredan completamente la intercambiabilidad de activos L1.
-
EVM equivalencia:Hoy, la única forma en que el acurrucado se mantiene sincronizado con las reglas L1 EVM es tener una gobernanza (comités de seguridad y/o tokens de gobernanza) reflejando las mejoras L1 EVM.(Las actualizaciones de EVM todavía se realizan regularmente con horquillas duras aproximadamente una vez al año). La gobernanza no es solo un vector de ataque, sino que se desvía estrictamente de L1 EVM y evita que cualquier encierro logre una verdadera equivalencia de EVM a largo plazo.Por otro lado, el acurrucado nativo se puede actualizar sincrónicamente con L1 sin gobernanza.
-
Costo de gas de gruñido:Verificar Snark en la cadena es costoso.Por lo tanto, muchos rollups ZK se establecen rara vez para minimizar los costos.Dado que Snark no se valida en la cadena, la precompilación de ejecución se puede utilizar para reducir los costos de verificación.Si usa SNARK para realizar pruebas de ejecución recursivamente de lotes para múltiples llamadas en un bloque, Execute_gas_cost se puede establecer relativamente bajo.
-
Composibilidad sincrónica:Hoy, la composibilidad sincrónica con L1 requiere una prueba en tiempo real de la misma ranura.La implementación de pruebas de latencia ultra bajas (por ejemplo, alrededor de 100 milisegundos) es una tarea de ingeniería particularmente desafiante para los acumulaciones de ZK.Usando una sola raíz de estado de retraso en la ranura, puede relajar el retraso de prueba del rendimiento nativo que se realiza precompilado a una ranura completa.