Autor: Marshall Vyletel Jr. Fuente: *1kx Traducción: Shanooba, Golden Finance
La cantidad de rollups en la red Ethereum ha experimentado un crecimiento explosivo. Según los datos de L2Beat, actualmente hay 91 L2 y L3 en funcionamiento, y otros 82 están por ser lanzados. Por lo tanto, también existe una gran fragmentación en términos de liquidez, experiencia de usuario y herramientas de desarrollo. Las soluciones de interoperabilidad actuales aún necesitan mejoras, ya que dependen de una combinación de conectores de terceros, activos envueltos externos y marcos de intención, y cada solución tiene sus propios problemas.
En este artículo, exploramos las perspectivas de interoperabilidad sin confianza investigando las soluciones de interoperabilidad en seis niveles entre los ecosistemas de Rollup descentralizados, definiéndolos y discutiéndolos.
Comenzaremos desde la configuración predeterminada, que implica retirar asincrónicamente desde el rollup fuente hasta L1 y luego conectarse manualmente al rollup de destino, y terminaremos con una arquitectura hipotética de composabilidad entre rollups en una sola transacción. Discutiremos cómo la interoperabilidad en cada nivel afectará la experiencia del usuario, del desarrollador, el potencial de MEV y el rollup en sí (según los cambios en la infraestructura específicos).
Este artículo discute principalmente Ethereum y su L2, y solo la interoperabilidad sin confianza. En este caso, “interoperabilidad sin confianza” se refiere a canales dentro del protocolo que no requieren una infraestructura adicional necesaria que la mayoría de los rollups ya requieren para facilitar las transferencias.
En última instancia, la interoperabilidad sin confianza requiere algunos recursos compartidos, a los que cualquier dos protocolos que deseen interoperar deben poder acceder. En el caso de la capa L1 de Ethereum, todos los contratos inteligentes existen en el mismo entorno de estado completo compartido de Ethereum, por lo que siempre tendrán el más alto nivel de interoperabilidad. Sin embargo, en L2, la interoperabilidad está muy limitada ya que solo comparten una capa de liquidación a través de contratos puente independientes.
Los componentes clave de la infraestructura compartida que nos impulsan a avanzar en la escalera de interoperabilidad sin confianza son el clasificador compartido, el superconstructor y el Asentamiento compartido. Las garantías y las nuevas funcionalidades abiertas por estas capas compartidas están relacionadas, pero fundamentalmente son ortogonales.
En primer lugar, definiremos los seis niveles de interoperabilidad sin confianza mencionados en la introducción:
Para comprender mejor cada nivel, presentaremos los siguientes casos de uso clave para mostrar las funciones de cada nivel y su impacto en los usuarios, desarrolladores, agrupadores y buscadores de MEV.
Todavía responderemos a las siguientes preguntas para comprender mejor el impacto en los accionistas clave en cualquier ecosistema de agregación.
No aplicable
Según la definición, esto se refiere al modo de interoperabilidad sin confianza predeterminado actual. Todos los rollup se definen de esta manera, ya que se construyen como capas de liquidación en L1 y solo se puede acceder a L1 a través del contrato puente, y publican actualizaciones de estado periódicamente para proteger la red.
En este caso, la única forma específica de llevar a cabo cualquier actividad de Rollup cruzado sin confianza es extraer los activos del Rollup fuente a través de un puente específico y depositarlos manualmente en el Rollup de destino una vez que estén disponibles en L1.
Para Optimistic Rollup, considerando la ventana de seguridad, la latencia de retiro es de aproximadamente 7 días. En ZK Rollup, la latencia de retiro no es muy segura, pero podría estar entre 15 minutos y un día completo, ZkSync es un ejemplo de esta situación.
Además, es posible realizar intercambios atómicos punto a punto utilizando contratos inteligentes, pero este es un caso de uso menor y no es escalable de manera eficiente.
Vale la pena mencionar las soluciones de terceros actuales:
Ambos de nuestros ejemplos requieren soluciones de terceros para ayudar.
Enviar a uno mismo:
Orden de límite de desplazamiento cruzado
Debido a que esto es el caso por defecto, no hay necesidad de discutir los cambios en UX, DevEx, MEV y agregación.
Compartir serializador *
Los átomos garantizan que solo los paquetes de resumen cruzado se incluirán en el siguiente bloque.
Esto requiere un ordenador compartido, pero en teoría, si los ordenadores en dos rollups dados no alcanzan el máximo rendimiento, se puede implementar manualmente (solo es necesario enviar dos transacciones a cada rollup). Esto es por qué hemos agregado asteriscos en la infraestructura requerida.
Sin embargo, no asumimos que el ordenador compartido funcione como un nodo completo para cada rollup conectado, por lo que no se puede garantizar la ejecución exitosa de un conjunto de transacciones. En este caso, el ordenador compartido solo puede garantizar que el formato de la transacción sea correcto y se incluya en el siguiente bloque, pero no necesariamente puede ejecutarse con éxito.
Debido a la falta de ejecución garantizada, no es posible aprovechar de manera significativa la inclusión atómica en la programación sin correr el riesgo de que una transacción sea revertida. Por lo tanto, estamos efectivamente en la misma situación que la interoperabilidad L1 Async.
Considerar el lanzamiento de un intercambio de suma cruzada simple con garantía de inclusión atómica:
Podemos tener la garantía de que las transacciones atómicas, es decir, ambas transacciones están incluidas en el siguiente bloque consolidado, pero si la primera transacción falla y la segunda transacción no falla, los usuarios asignarán incorrectamente los fondos en on-chain objetivo sin necesidad de bloquearlos o quemarlos en on-chain fuente, nos enfrentaremos al problema de Doble gasto.
Cualquier solución de interoperabilidad, ya sea un puente de liquidez, un marco de intenciones o un intercambio xERC-20, es susceptible a este tipo de riesgo y no puede mitigarlo. Debido a este riesgo, las soluciones actuales requieren que la transacción se haya ejecutado con éxito y esté incluida en el Bloquear on-chain de origen antes de que se pueda utilizar un relé para transmitir el mensaje enviado y ejecutar una segunda transacción en el Bloquear on-chain de destino.
Importante: la inclusión de Atomic no tendrá un impacto significativo en el potencial de interoperabilidad.
Capa de agregación de prueba//Contrato de puente compartido
Aquí es donde las cosas empiezan a ponerse más interesantes. Gracias a la existencia del contrato de puente compartido, toda la Liquidez depositada desde L1 en el ecosistema rollup puede moverse libremente entre todos los rollup conectados. Antes de esto, no podíamos intercambiar entre rollup sin pasar por canales específicos, envolver activos externos o utilizar soluciones de terceros.
¿Por qué construir un contrato de puente compartido? Para entender por qué un contrato de puente compartido nos permite transferir activos a través de Rollup de manera confiable, primero consideremos qué sucedería si pudiéramos poseer Eth en Rollup A, destruirlo y luego acuñarlo nativamente en Rollup B sin necesidad de establecer un contrato de puente compartido en Layer1.
Vemos que cada rollup está fuera de sincronía con el contrato puente en Mainnet. El contrato puente del rollup B todavía tiene 50 ETH, por lo que los usuarios no pueden retirar 1 ETH a L1.
Para resolver este problema, hemos establecido un protocolo externo de emisión de activos, que recopila versiones empaquetadas externas de Token que representan las versiones nativas de otros lugares en la red.
Con la capa de liquidación compartida, la situación es diferente. Dado que toda la liquidez de cada rollup conectado está bloqueada en un solo contrato de puente, las personas pueden moverse libremente entre rollups, ya que el valor total en el contrato de puente se mantiene constante y siempre es accesible.
Es realmente necesario actualizar a nivel de contrato L1 para comprender dónde está la Liquidez, para permitir a los usuarios retirar de cualquier lugar, pero es simple ya que todos los agregados conectados pueden leer/escribir en el contrato compartido.
Utilizando una capa de liquidación compartida, el proceso puede parecer algo así para casos simples de envío a uno mismo.
Enviar a uno mismo:
Podemos extender este proceso a cualquier ERC-20 que tenga un contrato en todas las liquidaciones dentro del ecosistema de Asentamiento compartido.
Podemos considerar el contrato de puente compartido como la capa de transferencia de mensajes internos entre todas las conexiones agregadas, por lo que en teoría este proceso podría expandirse a cualquier estándar de transferencia de mensajes arbitrario.
Esto nos acerca más a la composabilidad, pero debido a que solo se requiere agregar pruebas y transmitir mensajes después de que los cambios de estado se reflejen en L1, la latencia es alta (aunque claramente menor que en el caso asincrónico de L1). Además, cualquier actividad compleja de Rollup cruzado (como usar un DEX en Rollup B para realizar una orden de límite cruzado desde un activo en Rollup A) sigue siendo un proceso engorroso para los usuarios, ya que aún deben enviar a sí mismos y cambiar manualmente los activos en el Rollup objetivo. En este caso, no se pueden crear paquetes atómicos de Rollup cruzado.
Otro beneficio importante de Asentamiento compartido es que hay menos fricción para los Proveedores o solucionadores de Liquidez que ejecutan órdenes en varios entornos. Dado que su Liquidez en todos los Rollups conectados se refleja en un mismo contrato puente, no necesitan esperar una ventana completa de retiro para gestionar la Liquidez entre Rollups.
Importante: El Asentamiento compartido permite la transferencia de activos no envueltos externamente y la transmisión de mensajes arbitrarios en todas las recopilaciones de puentes compartidos y de capas de agregación de pruebas, pero aún existe una latencia significativa (aunque mucho más corta que L1 Async) y no se pueden crear haces atómicos transversales a la recopilación.
Ordenador compartido // Súper constructor
La ejecución atómica nos permite garantizar la ejecución exitosa de paquetes de enlace cruzado, pero como veremos, la cantidad de casos de uso de paquetes de enlace cruzado sin dependencia de transacciones es menor de lo esperado inicialmente.
Si se revierte una transacción individual dentro de un conjunto de transacciones dependientes, todas las demás transacciones se volverán inválidas y también deberán revertirse, al igual que en el caso de destrucción y acuñación de Token en rollup cruzado. La acuñación de Token en el rollup de destino depende de si ya han sido destruidos o bloqueados en el rollup de origen, por lo que podríamos decir que un conjunto de transacciones de destrucción y acuñación son transacciones dependientes.
Si no hay un intermediario (por ejemplo, un superconstructor) que pueda crear la transacción objetivo, no se puede crear este paquete vinculado.
Al considerar la construcción de paquetes de intercambio cruzado entre Rollups sin la participación de otras partes que no sean los usuarios, debe cumplirse ciertas condiciones. Se debe crear un paquete para bloquear / grabar activos en el Rollup fuente y acuñar activos en el Rollup de destino, pero nos encontramos con un problema:
Podemos ver que, aunque podemos garantizar la ejecución de los paquetes de consolidación cruzada, hemos tenido dificultades en cómo construirlos primero para transferir activos de valor.
Pero todavía hay algunos casos de uso de ejecución atómica que no dependen de los paquetes de cross-rollup. Uno de ellos es el arbitraje cross-rollup: 01928374656574839201
Dado que no hay una dependencia estricta entre estas transacciones, cualquier persona puede crear este paquete atómico y enviarlo a un secuenciador compartido que garantiza la ejecución atómica.
Sin embargo, para garantizar la ejecución atómica primero, rollup debe elegir un ordenador compartido y un superconstructor para ejecutar todos los rollup conectados como un Nodo completo, por lo que el paso de ejecución atómica a la composabilidad de nivel de Bloquear es muy pequeño, y todas las soluciones de ordenación compartida lo lograrán. El único cambio necesario es que el constructor de Bloquear u otro tercero debe poder crear transacciones en nombre de los usuarios para completar paquetes de rollup dependientes.
Es poco probable construir una infraestructura que permita solo ejecuciones atómicas sin lograr la composabilidad. Dado que la infraestructura ya tiene capacidades de ejecución atómica, los beneficios relativos de lograr una composabilidad completa a nivel de bloque superan con creces la dificultad de lograr este objetivo.
Importante: Aunque el paquete vinculado de rollup garantiza la ejecución atómica, no está claro cómo se construirán estos paquetes si no se crea un superconstructor para la parte de empaquetamiento, por lo que la ejecución atómica en sí misma es poco probable que afecte a la interoperabilidad. Por defecto, el secuenciador compartido/superconstructor debería construir la composabilidad a nivel de bloque.
Ordenador compartido // Super constructor // Capa de agregación de prueba* // Contrato de puente compartido*
(* = opcional)
En la mayoría de las discusiones sobre el compartimiento de secuenciadores y la capa de liquidación compartida, el término utilizado para describir este nivel de interoperabilidad es “combinabilidad sincronizada”.
Hemos modificado ligeramente este término para que sea más descriptivo. Actualizar el término a “Bloquear级可组合性” significa que los paquetes de transacciones que se pueden combinar entre dos rollups estarán incluidos y ejecutados con éxito en el próximo Bloquear. La composabilidad sincrónica puede ser confundida con la composabilidad a nivel de transacciones, discutiremos esto en la siguiente sección. Es importante tener en cuenta que esto requiere un intermediario (infraestructura de ordenación compartida), que puede actuar como ejecutor y creador dependiente de los paquetes de transacciones.
En este nivel, empezamos a ver la verdadera composabilidad entre los Rollup, no solo enviando a sí mismos para participar en otro dapp en Rollup.
Al agregar un serializador compartido que puede crear transacciones, ahora podemos crear paquetes de resúmenes cruzados que los desarrolladores pueden utilizar programáticamente.
Hay dos situaciones que deben tenerse en cuenta:
En ambos casos, podemos crear paquetes de consolidación cruzada para actividades más complejas, pero en el segundo caso, mediante el uso compartido de Asentamiento, podemos utilizar activos nativos, lo que puede tener un mejor impacto del precio en las actividades DEX de consolidación cruzada.
Con la granularidad de los bloques, tenemos la ventaja de la ejecución atómica y la capacidad adicional de crear paquetes de transacciones dependientes. Veamos dos ejemplos ilustrativos.
Transferir el mismo Token a través de xERC-20 (sin compartido Asentamiento):
Con la capa de liquidación compartida, el proceso se simplifica aún más ya que no es necesario intercambiar primero ERC-20 por xERC-20.
Ahora echemos un vistazo a la orden limitada de Rollup cruzado, es decir, comprar ERC-20 en Rollup B con ERC-20 inicial (diferente) en Rollup A y enviar el ERC-20 generado de vuelta a Rollup A. En este caso, no asumimos que tenemos una capa de liquidación compartida, aunque existe un proceso similar cuando hay una capa de liquidación compartida. La única diferencia es que no es necesario envolver externamente los activos.
A continuación se presentan las transacciones requeridas en este caso:
A continuación se muestra su posible flujo de trabajo:
Flujo:
Dado que el súper constructor creará y ordenará transacciones en Bloquear, puede simular cada transacción y omitir el paquete de enlace en caso de que se cancele cualquier transacción. Por ejemplo, si se encuentra que el usuario no puede cumplir completamente su orden de límite de precio, se omitirá el paquete de enlace antes de ejecutar Bloquear.
En ausencia de una infraestructura de ordenación compartida Asentamiento, es necesario utilizar versiones empaquetadas externas de Eth y xERC-20, lo que podría llevar a un deterioro de las condiciones del mercado de DEX, ya que los pools de liquidez de activos empaquetados se volverían más delgados. En este caso, los usuarios podrían tener que aceptar restricciones más flexibles, una mayor tolerancia al Deslizamiento y posiblemente recibir precios subóptimos. Sin embargo, hay una excepción en el caso de USDC. Los ordenadores de clasificación compartida sin Asentamiento pueden colaborar con Circle para obtener derechos exclusivos sobre contratos USDC inter-rollup, facilitando la transferencia y el intercambio nativos de USDC entre rollups.
Con la capa de liquidación compartida, este envoltorio externo ya no es necesario, y debido a que la piscina de liquidez nativa de intercambio de activos es más profunda, es posible que ofrezca mejores precios, pero el proceso es básicamente el mismo.
Rollup requires optimistic trust in shared sorters/superbuilders to create efficient cross-rollup bundles. This is mainly because the cross-rollup bundle contains dependent transactions that cannot be verified by individual rollups until the blocks are added to the on-chain of each rollup and aggregated to the settlement layer on L1. An example is the initial destruction and minting of Eth from source to destination. It is crucial that Eth is actually destroyed on the source on-chain before being minted on the target on-chain, otherwise double spending may occur.
Pero, para ejecutar este paquete completo de transacciones en un Bloquear, todas las transacciones deben existir en ese Bloquear, incluso si representan un estado inválido antes del propio Bloquear (por ejemplo, si un usuario no tiene Eth antes del Bloquear, pero tiene Eth en el destino de la transacción on-chain). Por lo tanto, debemos confiar en que el ordenador de transacciones realmente incluyó relaciones de dependencia válidas en el paquete de transacciones cruzadas. Se pueden presentar pruebas posteriormente para demostrar la validez de cada transacción.
Sin embargo, esto no es tan importante cuando se utilizan activos envueltos, ya que no afectan a la Liquidez nativa almacenada en L1, pero aún así debe haber un mecanismo de retroceso para contrarrestar el riesgo de ordenadores malintencionados o errores en el código que permiten la ejecución de paquetes de transacciones vinculadas junto con transacciones dependientes revertidas.
VM nivel de cambio // Compartido Asentamiento // superconstructor
La composabilidad a nivel de transacción se refiere a la funcionalidad de nivel similar compartida por un contrato inteligente EVM on-chain. En este caso, una sola transacción puede actualizar simultáneamente el estado de múltiples rollups y garantizar la reversión de cualquier cambio de estado anterior si la llamada no se realiza con éxito. De hecho, los paquetes de transacciones atómicas en un entorno de composabilidad a nivel de bloque pueden completarse en una sola transacción que cruza rollups y VMs. Además de compartir capas de liquidación y constructores, esto también requiere cambios a nivel de VM para todos los rollups conectados.
Aquí describimos a alto nivel un posible mecanismo (que conocemos gracias al equipo de Espresso). En primer lugar, los usuarios envían simulación de comercio a los constructores de bloques superiores que pueden construir Bloquear en todos los rollup relacionados o en los rollup cuyo estado se modifique por la transacción. Los constructores de bloques superiores forman una lista de pares de entradas y salidas para cada rollup relacionado, que especifica los mensajes necesarios y esperados de cruce de rollup en la transacción (ten en cuenta que los constructores de bloques superiores solo pueden hacer esto si tienen un orden seguro sobre todos los rollup relacionados durante un cierto período de tiempo). Luego, los constructores de bloques superiores envían el Bloquear simulado junto con la lista de pares de entradas y salidas esperadas de cada transacción de cruce de rollup a los proponentes de cada rollup. Durante la ejecución, cada rollup ejecuta normalmente su propia función de cambio de estado, asumiendo que las entradas de la lista de transacciones de cruce de rollup son correctas. Durante el asentamiento, las listas de entradas y salidas se pueden comparar y demostrar que son seguras en la fase de agregación de pruebas en la capa de asentamiento compartida. Específicamente, si alguna entrada esperada de la transacción de cruce de rollup no coincide con una salida especificada por otro rollup, el proceso de asentamiento rechazará toda la transacción de cruce de rollup.
Aunque las nuevas características que se pueden desbloquear en términos de composabilidad de transacciones son limitadas, aparte de los Flash Loans, la experiencia de los desarrolladores para crear aplicaciones cruzadas de Rollup puede mejorar significativamente. Ser capaz de crear dapps que interactúen con todas las cadenas conectadas sin tener que considerar paquetes de Rollup cruzados hará que sea mucho más fácil innovar en entornos de múltiples Rollup. Además, pueden surgir nuevos casos de uso y comportamientos.
En cuanto a la composabilidad a nivel de transacciones, existen muchos problemas de diseño no resueltos. En primer lugar, es necesario considerar cuidadosamente cómo los desarrolladores eligen unirse o salir de sus llamadas cruzadas de Contrato inteligente en Rollup. Permitir la composabilidad arbitraria sin restricciones significa que volvemos a un único Rollup. Creemos que la respuesta aquí es que los desarrolladores indiquen claramente en sus contratos qué partes necesitan composabilidad cruzada en Rollup, por ejemplo, marcando ciertos puntos de entrada del contrato como llamables a través de Rollup con modificadores de Solidity (como ‘componible’).
Después de comprender los detalles técnicos de cada nivel de interoperabilidad definido aquí, podemos resumirlo como sigue:
Actualmente, hay muchos proyectos emergentes con el objetivo de crear sistemas ecológicos nativos interoperables. A continuación se presenta un resumen de alto nivel en este campo:
Mapa del ecosistema
Existen todavía algunas cuestiones pendientes relacionadas con los detalles técnicos de los marcos mencionados en este artículo. Por ejemplo, puede ser necesario un diseño más detallado para construir paquetes de órdenes limitadas cruzadas en un ecosistema componible a nivel de bloque para manejar casos de tolerancia al deslizamiento para órdenes parcialmente cumplidas y de mercado. Aquí proporcionamos una solución potencial en la que se puede recuperar un paquete de órdenes limitadas cruzadas si no se ha completado por completo, pero el espacio de diseño está abierto.
Además, vale la pena mencionar que esto está relacionado con el creciente intercambio de ideas en el campo de AppChain. AppChain es un L2 de cola larga, ya sea general o con licencia, con el objetivo de aislar protocolos específicos en un L2. Cuando logremos la composabilidad a nivel de bloque, es muy probable que también empecemos a ver un atractivo significativo en el entorno de AppChain debido a la composabilidad nativa entre todas las redes interconectadas.
Actualmente, sigue siendo muy difícil introducir Liquidez en estas cadenas de aplicaciones, pero una vez que las cadenas más grandes se conecten como puerta de entrada a un entorno interoperable, es probable que veamos un ecosistema de jardines amurallados en torno a la infraestructura compartida.
Otra cuestión crucial pendiente es cómo se abordará el espacio de diseño alrededor de los superconstructores. Este desarrollo está aún en sus primeras etapas, y aún no está claro cómo crear de manera más efectiva una red de superconstructores compleja que pueda crear paquetes de consolidación cruzada. Estos paquetes de consolidación cruzada se incluirán de la mejor manera en Bloquear, y el impacto en los ingresos consolidados sigue siendo una cuestión pendiente, con muchos equipos explorando diferentes estrategias.
Finalmente, en el futuro, puede haber una combinación de soluciones de puente tanto internas como externas del protocolo, que trabajarán juntas para ofrecer un proceso de interoperabilidad mejorado para todos. Creemos que los avances definidos en este documento pueden servir como guía para desarrolladores y constructores que se centran en proporcionar una interoperabilidad más fluida para los usuarios finales a través de Rollup.