Texto principal: En artículos anteriores, mencionamos que el contrato de la bandeja de entrada del secuenciador está diseñado específicamente para recibir lotes de datos de transacciones publicados por el secuenciador en la Capa 1. Al mismo tiempo, señalamos que la bandeja de entrada del secuenciador también se conoce como la "caja rápida", y la contraparte es la bandeja de entrada retrasada (conocida como bandeja de entrada). A continuación, proporcionaremos una explicación detallada de los componentes relacionados con la transmisión de mensajes entre cadenas, como la bandeja de entrada retrasada.
Las transacciones entre cadenas se pueden dividir en L1 a L2 (depósito) y L2 a L1 (retiro). Tenga en cuenta que el depósito y el retiro mencionados aquí no están necesariamente relacionados con activos entre cadenas, sino que pueden ser mensajes que no incluyen directamente activos. Por lo tanto, estas dos palabras solo representan dos direcciones de comportamientos relacionados con la cadena cruzada.
En comparación con las transacciones L2 puras, las transacciones entre cadenas intercambian información en dos sistemas diferentes, L1 y L2, por lo que el proceso es más complicado.
Además, lo que solemos llamar comportamiento entre cadenas es la cadena cruzada en dos redes no relacionadas utilizando un puente entre cadenas en modo testigo. La seguridad de esta cadena cruzada depende del puente de cadena cruzada. Históricamente, los puentes entre cadenas basados en un modo testigo han experimentado con frecuencia incidentes de robo.
Por el contrario, el comportamiento entre cadenas entre Rollup y la red principal de Ethereum es fundamentalmente diferente de las operaciones entre cadenas antes mencionadas. Esto se debe a que el estado de la Capa 2 está determinado por los datos registrados en la Capa 1. Siempre que utilice el puente de cadena cruzada oficial de Rollup, su estructura operativa es absolutamente segura.
Esto también resalta la esencia de Rollup, que, desde la perspectiva del usuario, aparece como una cadena independiente. Sin embargo, en realidad, la llamada "Capa 2" es solo una ventana de visualización rápida abierta por Rollup a los usuarios, y su verdadera estructura en forma de cadena todavía se registra en la Capa 1. Por lo tanto, podemos considerar L2 como la mitad de una cadena, o como una "cadena creada en la Capa 1".
Es importante tener en cuenta que las operaciones entre cadenas son asincrónicas y no atómicas. A diferencia de una sola cadena en la que se conoce el resultado de una transacción una vez que se confirma, las transacciones entre cadenas no pueden garantizar que ciertos eventos ocurran en el otro lado en un momento específico. Por lo tanto, las transacciones entre cadenas pueden fallar debido a problemas blandos, pero con los métodos correctos, como los tickets reintentables, no habrá ningún problema como que los fondos se atasquen.
Los tickets reintentables son herramientas básicas que se utilizan al depositar fondos a través del puente oficial de Arbitrum para tokens ETH y ERC20. Su ciclo de vida consta de tres pasos:
Envío del ticket en L1: cree un ticket de depósito con el método createRetryableTicket() en el contrato Bandeja de entrada retrasada y envíelo.
Canje automático en L2: En la mayoría de los casos, el secuenciador puede canjear automáticamente el ticket para el usuario sin más intervención manual.
Canje manual en L2: En ciertos casos extremos, como un aumento repentino en los precios de la gasolina en L2 donde la gasolina prepagada en el boleto es insuficiente, el canje automático puede fallar. En tales casos, se requiere la intervención manual del usuario. Tenga en cuenta que si falla el canje automático, el boleto debe canjearse manualmente dentro de los 7 días; De lo contrario, el boleto puede ser eliminado (lo que resulta en la pérdida permanente de fondos) o requerir el pago de una tarifa para renovar su arrendamiento.
Además, en el proceso de retiro del puente oficial de Arbitrum, aunque existe cierta similitud simétrica con el comportamiento del depósito en cuanto al proceso, no existe el concepto de Retryables. Esto se puede entender tanto desde la perspectiva del propio protocolo Rollup como examinando algunas diferencias:
No hay canje automático durante el retiro porque la EVM no tiene temporizadores ni automatización. Si bien el canje automático se puede implementar en L2 con la ayuda del secuenciador, los usuarios en L1 deben interactuar manualmente con el contrato de la Bandeja de salida para reclamar sus activos.
Tampoco hay problemas de caducidad del billete durante la retirada; Siempre que haya pasado el período de impugnación, los activos se pueden reclamar en cualquier momento.
Las transacciones entre cadenas que involucran activos ERC-20 son complejas. Podemos plantearnos varias preguntas:
No tenemos la intención de responder a todas estas preguntas, ya que son demasiado complejas para abordarlas de manera integral. Estas preguntas simplemente pretenden ilustrar la complejidad de las transacciones entre cadenas ERC-20.
Actualmente, muchas soluciones de escalado utilizan soluciones de lista blanca + lista manual para evitar varios problemas complejos y condiciones de contorno.
Arbitrum emplea un sistema de puerta de enlace para abordar la mayoría de los puntos débiles de las transacciones entre cadenas ERC20, con las siguientes características:
Para ilustrar la necesidad de puertas de enlace personalizadas, consideremos un ejemplo relativamente simple de transferencia WETH entre cadenas.
WETH es un equivalente ERC20 de ETH. Dado que Ether sirve como moneda principal, muchas funcionalidades complejas en dApps son imposibles de lograr directamente. Por lo tanto, se necesita un equivalente ERC20 como WETH. Al depositar algo de ETH en el contrato WETH, se bloquean dentro del contrato, generando una cantidad equivalente de WETH.
Del mismo modo, WETH se puede quemar para retirar ETH. Claramente, la cantidad circulante de WETH y la cantidad bloqueada de ETH siempre mantendrán una proporción de 1:1.
Si ahora cruzamos directamente WETH a L2, nos encontraremos con algunos problemas extraños:
Claramente, esto viola los principios de diseño de WETH. Por lo tanto, al cruzar la cadena cruzada de WETH, ya sea depositando o retirando, es necesario desenvolverlo primero en ETH, luego cruzarlo y volver a envolverlo en WETH. Aquí es donde entra en juego el WETH Gateway.
Del mismo modo, para otros tokens con lógicas más complejas, requieren puertas de enlace más sofisticadas y cuidadosamente diseñadas para funcionar correctamente en un entorno de cadena cruzada. La puerta de enlace personalizada de Arbitrum hereda la lógica de comunicación entre cadenas de una puerta de enlace estándar y permite a los desarrolladores personalizar los comportamientos entre cadenas relacionados con las lógicas de tokens, satisfaciendo la mayoría de los requisitos.
La contraparte de la bandeja de entrada del secuenciador, también conocida como la caja rápida, es la bandeja de entrada (oficialmente llamada bandeja de entrada retrasada). ¿Por qué hace una distinción entre cajas rápidas y retardadas? Debido a que la caja rápida está diseñada específicamente para recibir lotes de transacciones L2 publicadas por el secuenciador, y cualquier transacción no procesada previamente por el secuenciador dentro de la red L2 no debe aparecer en el contrato de caja rápida.
La primera función de la caja lenta es manejar el comportamiento del depósito de L1 a L2. Los usuarios inician los depósitos a través de la caja lenta, que luego el secuenciador refleja en L2. Eventualmente, este registro de depósito será incluido en la secuencia de transacciones L2 por el secuenciador y enviado al contrato de caja rápida, el SequencerInbox.
En este escenario, no es adecuado que los usuarios envíen directamente transacciones de depósito a la caja rápida porque las transacciones enviadas a SequencerInbox interferirían con la secuencia normal de transacciones de la capa 2, lo que afectaría al funcionamiento del secuenciador.
La segunda función de la caja retardada es la resistencia a la censura. Las transacciones enviadas directamente al contrato de caja retrasada suelen ser agregadas a la caja rápida en un plazo de 10 minutos por el secuenciador. Sin embargo, si el secuenciador ignora maliciosamente su solicitud, el cuadro retrasado tiene una función de inclusión forzada:
Si una transacción se envía a la bandeja de entrada retrasada y el secuenciador permanece sin agregar a la secuencia de transacciones después de 24 horas, los usuarios pueden activar manualmente la función de inclusión forzada en la capa 1. Esta acción obliga a que las solicitudes de transacción ignoradas por el secuenciador se agreguen a la caja rápida, la bandeja de entrada del secuenciador, y posteriormente sean detectadas por todos los nodos de Arbitrum One, por lo que se incluyen a la fuerza en la secuencia de transacciones de capa 2.
Como mencionamos anteriormente, los datos en el cuadro rápido representan la entidad de datos históricos de L2. Por lo tanto, en casos de censura maliciosa, las transacciones se pueden incluir en última instancia en el libro mayor L2 mediante el uso de la caja retrasada, cubriendo escenarios como retiros forzados de la capa 2.
A partir de esto, se puede ver que, en última instancia, el secuenciador no puede censurar permanentemente las transacciones en ninguna dirección o capa.
Varias funciones principales de la bandeja de entrada de cuadro lento son las siguientes:
Sin embargo, es importante tener en cuenta que la función forceInclusion() en realidad reside en el contrato de caja rápida. Para mayor claridad, lo discutimos aquí junto con las funciones de caja lenta.
Outbox solo se relaciona con los retiros y puede entenderse como un sistema de registro y gestión de comportamientos de retiro:
A continuación, explicaremos el proceso de depósito y retiro utilizando ETH como ejemplo. El proceso para los tokens ERC20 es similar, con la adición de una puerta de enlace, pero no lo explicaremos aquí.
El usuario llama a la función withdrawEth() del contrato ArbSys en L2 y quema la cantidad correspondiente de ETH en L2.
El secuenciador envía la solicitud de retiro a la caja rápida.
El nodo Validador crea un nuevo bloque acumulativo basado en la secuencia de transacciones en el cuadro rápido, que contendrá las transacciones de retiro anteriores.
Después de que el bloque acumulativo pase el período de desafío y se confirme, el usuario puede llamar a la función Outbox.execute Transaction() en L1 para demostrar que los parámetros están dados por el contrato de ArbSys mencionado anteriormente.
Una vez que se confirme que el contrato de la Bandeja de salida es correcto, la cantidad correspondiente de ETH en el puente se desbloqueará y se enviará al usuario.
Usar el puente oficial optimista de Rollup implica esperar un período de desafío. Para evitar este problema, podemos utilizar un puente de cadena cruzada privado de terceros:
La función forceInclusion() se utiliza para contrarrestar la censura del secuenciador. Se puede aplicar a cualquier transacción local de L2, transacciones de L1 a L2 y transacciones de L2 a L1. Dado que la censura maliciosa del secuenciador afecta significativamente a la experiencia de la transacción, a menudo optamos por retirarnos de L2. A continuación se muestra un ejemplo del uso de forceInclusion() para forzar retiros:
En el contexto de los retiros de ETH, solo los pasos 1 y 2 implican la censura del secuenciador. Por lo tanto, solo necesitamos modificar estos dos pasos:
Finalmente, los usuarios pueden retirar de la bandeja de salida, y los pasos restantes son los mismos que en un proceso de retiro normal.
Además, hay tutoriales detallados en el repositorio arbitrum-tutorials que guían a los usuarios sobre cómo realizar transacciones locales de L2 y transacciones de L2 a L1 usando forceInclusion() a través del SDK de Arb.
Texto principal: En artículos anteriores, mencionamos que el contrato de la bandeja de entrada del secuenciador está diseñado específicamente para recibir lotes de datos de transacciones publicados por el secuenciador en la Capa 1. Al mismo tiempo, señalamos que la bandeja de entrada del secuenciador también se conoce como la "caja rápida", y la contraparte es la bandeja de entrada retrasada (conocida como bandeja de entrada). A continuación, proporcionaremos una explicación detallada de los componentes relacionados con la transmisión de mensajes entre cadenas, como la bandeja de entrada retrasada.
Las transacciones entre cadenas se pueden dividir en L1 a L2 (depósito) y L2 a L1 (retiro). Tenga en cuenta que el depósito y el retiro mencionados aquí no están necesariamente relacionados con activos entre cadenas, sino que pueden ser mensajes que no incluyen directamente activos. Por lo tanto, estas dos palabras solo representan dos direcciones de comportamientos relacionados con la cadena cruzada.
En comparación con las transacciones L2 puras, las transacciones entre cadenas intercambian información en dos sistemas diferentes, L1 y L2, por lo que el proceso es más complicado.
Además, lo que solemos llamar comportamiento entre cadenas es la cadena cruzada en dos redes no relacionadas utilizando un puente entre cadenas en modo testigo. La seguridad de esta cadena cruzada depende del puente de cadena cruzada. Históricamente, los puentes entre cadenas basados en un modo testigo han experimentado con frecuencia incidentes de robo.
Por el contrario, el comportamiento entre cadenas entre Rollup y la red principal de Ethereum es fundamentalmente diferente de las operaciones entre cadenas antes mencionadas. Esto se debe a que el estado de la Capa 2 está determinado por los datos registrados en la Capa 1. Siempre que utilice el puente de cadena cruzada oficial de Rollup, su estructura operativa es absolutamente segura.
Esto también resalta la esencia de Rollup, que, desde la perspectiva del usuario, aparece como una cadena independiente. Sin embargo, en realidad, la llamada "Capa 2" es solo una ventana de visualización rápida abierta por Rollup a los usuarios, y su verdadera estructura en forma de cadena todavía se registra en la Capa 1. Por lo tanto, podemos considerar L2 como la mitad de una cadena, o como una "cadena creada en la Capa 1".
Es importante tener en cuenta que las operaciones entre cadenas son asincrónicas y no atómicas. A diferencia de una sola cadena en la que se conoce el resultado de una transacción una vez que se confirma, las transacciones entre cadenas no pueden garantizar que ciertos eventos ocurran en el otro lado en un momento específico. Por lo tanto, las transacciones entre cadenas pueden fallar debido a problemas blandos, pero con los métodos correctos, como los tickets reintentables, no habrá ningún problema como que los fondos se atasquen.
Los tickets reintentables son herramientas básicas que se utilizan al depositar fondos a través del puente oficial de Arbitrum para tokens ETH y ERC20. Su ciclo de vida consta de tres pasos:
Envío del ticket en L1: cree un ticket de depósito con el método createRetryableTicket() en el contrato Bandeja de entrada retrasada y envíelo.
Canje automático en L2: En la mayoría de los casos, el secuenciador puede canjear automáticamente el ticket para el usuario sin más intervención manual.
Canje manual en L2: En ciertos casos extremos, como un aumento repentino en los precios de la gasolina en L2 donde la gasolina prepagada en el boleto es insuficiente, el canje automático puede fallar. En tales casos, se requiere la intervención manual del usuario. Tenga en cuenta que si falla el canje automático, el boleto debe canjearse manualmente dentro de los 7 días; De lo contrario, el boleto puede ser eliminado (lo que resulta en la pérdida permanente de fondos) o requerir el pago de una tarifa para renovar su arrendamiento.
Además, en el proceso de retiro del puente oficial de Arbitrum, aunque existe cierta similitud simétrica con el comportamiento del depósito en cuanto al proceso, no existe el concepto de Retryables. Esto se puede entender tanto desde la perspectiva del propio protocolo Rollup como examinando algunas diferencias:
No hay canje automático durante el retiro porque la EVM no tiene temporizadores ni automatización. Si bien el canje automático se puede implementar en L2 con la ayuda del secuenciador, los usuarios en L1 deben interactuar manualmente con el contrato de la Bandeja de salida para reclamar sus activos.
Tampoco hay problemas de caducidad del billete durante la retirada; Siempre que haya pasado el período de impugnación, los activos se pueden reclamar en cualquier momento.
Las transacciones entre cadenas que involucran activos ERC-20 son complejas. Podemos plantearnos varias preguntas:
No tenemos la intención de responder a todas estas preguntas, ya que son demasiado complejas para abordarlas de manera integral. Estas preguntas simplemente pretenden ilustrar la complejidad de las transacciones entre cadenas ERC-20.
Actualmente, muchas soluciones de escalado utilizan soluciones de lista blanca + lista manual para evitar varios problemas complejos y condiciones de contorno.
Arbitrum emplea un sistema de puerta de enlace para abordar la mayoría de los puntos débiles de las transacciones entre cadenas ERC20, con las siguientes características:
Para ilustrar la necesidad de puertas de enlace personalizadas, consideremos un ejemplo relativamente simple de transferencia WETH entre cadenas.
WETH es un equivalente ERC20 de ETH. Dado que Ether sirve como moneda principal, muchas funcionalidades complejas en dApps son imposibles de lograr directamente. Por lo tanto, se necesita un equivalente ERC20 como WETH. Al depositar algo de ETH en el contrato WETH, se bloquean dentro del contrato, generando una cantidad equivalente de WETH.
Del mismo modo, WETH se puede quemar para retirar ETH. Claramente, la cantidad circulante de WETH y la cantidad bloqueada de ETH siempre mantendrán una proporción de 1:1.
Si ahora cruzamos directamente WETH a L2, nos encontraremos con algunos problemas extraños:
Claramente, esto viola los principios de diseño de WETH. Por lo tanto, al cruzar la cadena cruzada de WETH, ya sea depositando o retirando, es necesario desenvolverlo primero en ETH, luego cruzarlo y volver a envolverlo en WETH. Aquí es donde entra en juego el WETH Gateway.
Del mismo modo, para otros tokens con lógicas más complejas, requieren puertas de enlace más sofisticadas y cuidadosamente diseñadas para funcionar correctamente en un entorno de cadena cruzada. La puerta de enlace personalizada de Arbitrum hereda la lógica de comunicación entre cadenas de una puerta de enlace estándar y permite a los desarrolladores personalizar los comportamientos entre cadenas relacionados con las lógicas de tokens, satisfaciendo la mayoría de los requisitos.
La contraparte de la bandeja de entrada del secuenciador, también conocida como la caja rápida, es la bandeja de entrada (oficialmente llamada bandeja de entrada retrasada). ¿Por qué hace una distinción entre cajas rápidas y retardadas? Debido a que la caja rápida está diseñada específicamente para recibir lotes de transacciones L2 publicadas por el secuenciador, y cualquier transacción no procesada previamente por el secuenciador dentro de la red L2 no debe aparecer en el contrato de caja rápida.
La primera función de la caja lenta es manejar el comportamiento del depósito de L1 a L2. Los usuarios inician los depósitos a través de la caja lenta, que luego el secuenciador refleja en L2. Eventualmente, este registro de depósito será incluido en la secuencia de transacciones L2 por el secuenciador y enviado al contrato de caja rápida, el SequencerInbox.
En este escenario, no es adecuado que los usuarios envíen directamente transacciones de depósito a la caja rápida porque las transacciones enviadas a SequencerInbox interferirían con la secuencia normal de transacciones de la capa 2, lo que afectaría al funcionamiento del secuenciador.
La segunda función de la caja retardada es la resistencia a la censura. Las transacciones enviadas directamente al contrato de caja retrasada suelen ser agregadas a la caja rápida en un plazo de 10 minutos por el secuenciador. Sin embargo, si el secuenciador ignora maliciosamente su solicitud, el cuadro retrasado tiene una función de inclusión forzada:
Si una transacción se envía a la bandeja de entrada retrasada y el secuenciador permanece sin agregar a la secuencia de transacciones después de 24 horas, los usuarios pueden activar manualmente la función de inclusión forzada en la capa 1. Esta acción obliga a que las solicitudes de transacción ignoradas por el secuenciador se agreguen a la caja rápida, la bandeja de entrada del secuenciador, y posteriormente sean detectadas por todos los nodos de Arbitrum One, por lo que se incluyen a la fuerza en la secuencia de transacciones de capa 2.
Como mencionamos anteriormente, los datos en el cuadro rápido representan la entidad de datos históricos de L2. Por lo tanto, en casos de censura maliciosa, las transacciones se pueden incluir en última instancia en el libro mayor L2 mediante el uso de la caja retrasada, cubriendo escenarios como retiros forzados de la capa 2.
A partir de esto, se puede ver que, en última instancia, el secuenciador no puede censurar permanentemente las transacciones en ninguna dirección o capa.
Varias funciones principales de la bandeja de entrada de cuadro lento son las siguientes:
Sin embargo, es importante tener en cuenta que la función forceInclusion() en realidad reside en el contrato de caja rápida. Para mayor claridad, lo discutimos aquí junto con las funciones de caja lenta.
Outbox solo se relaciona con los retiros y puede entenderse como un sistema de registro y gestión de comportamientos de retiro:
A continuación, explicaremos el proceso de depósito y retiro utilizando ETH como ejemplo. El proceso para los tokens ERC20 es similar, con la adición de una puerta de enlace, pero no lo explicaremos aquí.
El usuario llama a la función withdrawEth() del contrato ArbSys en L2 y quema la cantidad correspondiente de ETH en L2.
El secuenciador envía la solicitud de retiro a la caja rápida.
El nodo Validador crea un nuevo bloque acumulativo basado en la secuencia de transacciones en el cuadro rápido, que contendrá las transacciones de retiro anteriores.
Después de que el bloque acumulativo pase el período de desafío y se confirme, el usuario puede llamar a la función Outbox.execute Transaction() en L1 para demostrar que los parámetros están dados por el contrato de ArbSys mencionado anteriormente.
Una vez que se confirme que el contrato de la Bandeja de salida es correcto, la cantidad correspondiente de ETH en el puente se desbloqueará y se enviará al usuario.
Usar el puente oficial optimista de Rollup implica esperar un período de desafío. Para evitar este problema, podemos utilizar un puente de cadena cruzada privado de terceros:
La función forceInclusion() se utiliza para contrarrestar la censura del secuenciador. Se puede aplicar a cualquier transacción local de L2, transacciones de L1 a L2 y transacciones de L2 a L1. Dado que la censura maliciosa del secuenciador afecta significativamente a la experiencia de la transacción, a menudo optamos por retirarnos de L2. A continuación se muestra un ejemplo del uso de forceInclusion() para forzar retiros:
En el contexto de los retiros de ETH, solo los pasos 1 y 2 implican la censura del secuenciador. Por lo tanto, solo necesitamos modificar estos dos pasos:
Finalmente, los usuarios pueden retirar de la bandeja de salida, y los pasos restantes son los mismos que en un proceso de retiro normal.
Además, hay tutoriales detallados en el repositorio arbitrum-tutorials que guían a los usuarios sobre cómo realizar transacciones locales de L2 y transacciones de L2 a L1 usando forceInclusion() a través del SDK de Arb.