
Autor: Nic Lin, Taipei Ethereum Meetup Persona a cargo
Título original: «Introducción al mecanismo de inclusión de la fuerza de Rollup»
Ayer, una cosa impactante se sorprendió:Ethereum Linea, una segunda capa de Linea lanzada por la empresa matriz de Metamask, ha tomado la iniciativa.Esto no puede evitar recordarle a la gente la cadena BSC anterior (cadena BNB) para reducir la pérdida de piratas informáticos, el funcionario coordinó activamente la suspensión.Cada vez que las personas hablan de este tipo de cosas, dudan sobre el valor descentralizado defendido por Web3.
ciertamente,La causa central del incidente anterior se trata más de la infraestructura imperfecta en sí, es decir, no es suficiente descentralización: Si una cadena está lo suficientemente descentralizada, no debe detenerse si se detiene.Debido a la estructura única del segundo piso de Ethereum,La mayoría de la capa2 depende del secuenciador centralizadoAunque cada vez más teoría de clasificadores descentralizados en los últimos años, considerando el propósito de la existencia y la estructura del segundo piso, podemos pensar queEl clasificador de Layer2 puede no estar más descentralizado, y puede no ser comparable al grado de descentralización de la cadena BSC.Si esto es cierto, ¿qué debemos hacer?
De hecho, para el segundo piso,El daño más directo causado por el clasificador no es descentralizado es la resistencia y la actividad.Si hay pocas entidades que manejan la transacción, entonces tiene poder absoluto si le sirve: si desea rechazarlo, rechazarlo y no lo ayuda.Cómo resolver el problema anti -revisión de Layer2 es obviamente un tema importante.
En los últimos años, el segundo piso del Major Ethereum ha propuesto una variedad de soluciones para problemas anti -censura, como el bocadillo y la capacidad forzada de Starkex y la capacidad de escape, el árbitro y otras funciones de la fuerza de transmisión OP, estos métodos. puede generar controles y equilibrios en el secuenciador bajo ciertas condiciones para evitar su rechazo gratuito de la solicitud de transacción de cualquier usuario.
En el artículo de hoy, Nic Lin de la Asociación Taipei Ethereum apareció,Experimenté personalmente con la función de comercio anti -revisión de 4 rollup en la corriente principal, y analicé el diseño del mecanismo de la inclusión de la fuerza en los aspectos del método de flujo de trabajo y operación.Esto es particularmente valioso para que la comunidad Ethereum y los grandes activos tengan activos enormes.
Revisión de transacciones e inclusión de fuerza
La resistencia a la censura es muy importante para una cadena de bloques.Las capacidades de transacción actuales de Ethereum provienen de sus muchos validador. Las transacciones basura que envían continuamente la tarifa de manejo que Bob para apoderarse del espacio de bloque.No importa qué método, el costo será muy alto.
Nota: En la arquitectura PBS actual de Ethereum, el costo de revisar las transacciones se reducirá muchoPuede referirse a la relación de bloque de la transacción en efectivo de Tornado con OFAC.Las capacidades actuales de anti -examinación dependen de verificaciones y relevos independientes fuera de OFAC y jurisdicción gubernamental.
¿Pero qué pasa con el rollo?El rollup no necesita mucho validador para garantizar la seguridad.Pero la capacidad de la seguridad y la revisión anti -revisión son dos cosas diferentes,Aunque un Rollup y Ethereum son tan seguros, pero solo un secuenciador centralizado, desea revisar las transacciones de cualquier usuario.
El secuenciador puede negarse a lidiar con las transacciones de los usuarios, lo que hace que los fondos de los usuarios se detenan y no puedan dejar el rollup
Mecanismo de inclusión de fuerza
En lugar de pedirle a Rollup que tenga una gran cantidad de secuenciador descentralizado, es mejor usar directamente las capacidades anti -revisión de L1:
Originalmente, el secuenciador era empacar los datos de la transacción al contrato de rollo de L1.Deje que los usuarios inservan la transacción al contrato de rollupo por sí mismos.Mientras la secuencia no revise a los usuarios en el nivel L1, no puede evitar que los usuarios se vean obligados a insertar transacciones en L1.De este modo,El rollup puede heredar la resistencia de L1.
La secuencia no puede revisar la transacción L1 del usuario, a menos que pague un alto costo
¿Cómo deben entrar en vigencia las transacciones obligatorias?
Si la transacción se escribe directamente en el contrato de rollo (es decir, lo inmediatamente efectivo) puede escribirse directamente a través de la inclusión de la fuerza, entonces el estado de reacción cambiará de inmediato. El último estado será de 1,000 DAI, y Carol Will 1000 DAI.
Si la inclusión de la fuerza puede escribir directamente la transacción en el contrato de rollup y entrar en vigencia de inmediato, el estado cambiará de inmediato
Si el secuenciador también está recolectando transacciones en la cadena en este momento, y enviando el siguiente lote de transacciones al contrato de rollo, las transacciones que BOB puede ser insertadas por la fuerza.Este tipo de problema debe tratarse de evitar, así queEl encierro generalmente no permite que la transacción de inclusión de la fuerza surja de inmediato.
Cuando el secuenciador empaqueta la transacción de la cadena al contrato de acumulación, elija si enchufar la transacción mencionada en la secuencia de negociación,Si el secuenciador siempre ha ignorado estas transacciones en el estado de «preparación», después de que termina el período de la ventana, los usuarios pueden forzar estas transacciones al contrato de rollo.
La secuencia puede decidir cuándo «ingresos» esperando en la cola en la cola
El secuenciador aún puede negarse a lidiar con las transacciones en la cola de espera
Si la secuencia se niega durante mucho tiempo, cualquiera puede insertar la transacción por la fuerza en el contrato de rollo a través de la función de inclusión de fuerza después de un período de tiempo
A continuación, introduciremos cuatro mecanismos de inclusión de fuerza de reminencia conocidas como optimismo, árbitro, Starknet y Zksync en orden.
Mecanismo de inclusión de la fuerza del optimismo
Primero introduzca el proceso de depósito de optimismo.Después de recibir el mensaje recién almacenado, el nodo L2 convertirá el mensaje en una transacción L2 para su ejecución y lo enviará al receptor especificado por el mensaje.
El usuario da L2 de L1 Depósito a L2
L1CrossDomainMessenger Contract
Cuando un usuario quiere depositar ETH o ERC-20 al optimismo, utilizará la página web front-end y L1 en el L1L1StandardBridgeLa interacción del contrato, cuánto se puede ahorrar el monto y qué dirección L2 recibirá estos activos.
El contrato L1StandardBridge pasará el mensaje al siguiente nivelL1crossdomainmessengercontrato,Este contrato se utiliza principalmente como un componente de la comunicación entre L1 y L2L1StandardBridge se comunica a través de este componente de comunicación general y L2StandardBridge en L2 para decidir quién puede lanzar tokens en L2 o quién puede desbloquear los tokens de L1.
Si los desarrolladores necesitan desarrollar un contrato entre L1 y L2, puede construir sobre el contrato de L1CrossDomainMenger.
El mensaje del usuario se transmite de L1 a L2 a través del contrato CrossDomainMessenger a L2Nota: En algunas fotos de este artículo, escriba CrossDomainMessager en CrossChainMessager
Contrato de OptimismPortal
L1CrossDomainMessenger El contrato enviará el mensaje a la capa inferiorOptimismoContrato, OptimismPortal Contract se expulsará después del procesamientoDeposidad de transacciónLos incidentes, los parámetros incluyen «personas que envían mensajes», «persona que recibe mensajes» y parámetros de ejecución relacionados.
Entonces L2’sOptimism Node monitoreará el evento depositado por la transacción lanzado por el contrato OptimismPortal y convertirá los parámetros en evento en una transacción L2.El iniciador de esta transacción es la «persona que envía mensajes» establecidas en el parámetro de evento de depósito de transacciones. eventos.
El nodo L2 convertirá los parámetros de eventos de transacción de OptimismPortalEmit en una transacción L2
Por ejemplo, esto esUn usuario de 0.01 transacciones ETH a través de L1StandardBridge contrata a través de L1StandardBridge.
Los patrocinadores del mensaje son el contrato de L1CrossDomainMessenger;Después de eso, se activarán algunos procesos, como agregar 0.01 ETH a L2StandardBridge, y luego transferirse a Bob desde este último.
Cómo activar
Cuando desea forzar la transacción en el contrato de optimismo enrollable, el efecto que desea lograr es hacer una «transacción iniciada desde su dirección L2 en L2 y la ejecución de la ejecución» puede implementarse sin problemas.Debe usar su propia dirección L2 para enviar el mensaje directamente al contrato OptimismPortal(Tenga en cuenta que el contrato OptimismPortal está realmente en L1, pero el formato de dirección de OP es el mismo que el formato de dirección L1.Puede llamar directamente al contrato anterior con la cuenta L1 de la misma dirección que la cuenta L2A.
Después de eso, el «iniciador» de la transformación del evento de depósito de transacción transformado por el contrato será su cuenta L2.
De la transacción L2 convertida del evento de depósito de transacciones, el patrocinador será Bob mismo;
Si desea llamar a la función de inclusión de la fuerza del optimismo, debe llamar a la función DepositStransaction del contrato OptimismPortal directamente para completar los parámetros que desea ejecutar en L2
Hice un experimento de inclusión de fuerza simple,Esta transacción quiere lograr tal cosa: use mi dirección en L2 (0xedc1 … 6909), y viene con un mensaje de texto de «inclusión de fuerza».
Esta es la transacción L1 que ejecuta la función de TrayTransaction a través del contrato OptimismPortal.
El valor en la columna de datos opacos restantes codifica el «cuántos ETH llaman a la función de transacción de depósito», «cuántos ETH para enviar la transacción L2 al receptor», «L2 TRANSACCIÓN GASLIMIT» y «Give L2» «Datos del receptor » etcétera.
Después de decodificar la información anterior, obtendrá:
«Cuánto se agrega ETH a la persona que llama a la transacción de depósito»: «:»0, porque no guardo ETH a L2 de L1;
«¿Cuántos ETH enviar por transacción L2 al receptor»: 5566 (wei)
«Gaslimit de la transacción L2»: 50000
«Datos para el receptor L2»:0x666f72636520696e636c7573696f6e, eso es
Luego, la conversión del comercio de L2 después de la conversión no fue larga: transfirí el dinero a mi propia transacción L2,La cantidad es 5566 Wei, y los datos son la cadena de «inclusión de fuerza».Y se puede observar que txntype (tipo de transacción) en la penúltima línea de otros atributos en la figura muestra que es una transacción del sistema 126 (sistema), lo que significa que la transacción no fue iniciada por mí en L2, y se depositó Comercio por transacción L1.
Transacción L2 convertida
Si desea llamar al contrato L2 con la inclusión de la fuerza y enviar datos diferentes, no es más que llenar los parámetros en la función de transacción de depósito anterior. Su propia cuenta L2.
Secuenciarwindow
El nodo Optimism L2 mencionado anteriormente convierte el evento de depósito de transacciones en transacciones L2.Solo la secuencia puede decidir cuándo convertir el evento mencionado anteriormente en transacciones L2.
Cuando escuché el incidente de la propagación de transacciones, el secuenciador puede no convertir inmediatamente el evento en transacciones L2, y puede haber un retraso.
En la actualidad, la ventana de secuencia en la red principal del optimismo es de 24 horas, es decir, cuando el usuario deposita una suma de dinero de L1 o una inclusión de fuerza, el peor de los casos es que se incluyó en la historia de la negociación de L2 después de 24 horas. .
Mecanismo de inclusión de la fuerza del árbitro
En optimismo, la operación de depósito de L1 organizará un evento de depósito de transacciones.Sin embargo, la operación que ocurre en L1 en el árbitro (ahorrando dinero o mensaje a L2, etc.) estará en una cola en L1.En lugar de lanzar un incidente simplemente.
El secuenciador recibirá un período de tiempo para incorporar las transacciones en la cola anterior en la historia de las transacciones L2.
El árbitro mantendrá una cola en el contrato L1.
En el diseño del árbitro, las operaciones como los depósitos en L1 deben ser contratos a través de la bandeja de entrada retrasada. a l1.Cada vez que la secuencia se carga las transacciones L2, puede tomar algunas transacciones para manejarse desde la bandeja de entrada tardía hasta el historial de la transacción desde la bandeja de entrada retrasada.
Cuando Secuencer escribe una nueva transacción, puede eliminar la transacción de DelteredInbox para escribirla juntosDiseños complejos y materiales de referencia de Fanxiangye
Si los lectores se refieren directamente a los capítulos oficiales del árbitro sobre secuencia e inclusión de fuerza, verá cómo funciona la inclusión de fuerza y algunos nombres de parámetros y nombres de funciones:
Los usuarios van primeroDeletedInboxLlamada de contratoSendunSignetTransactionFunción, si el secuenciador no se incluye en aproximadamente 24 horas, el usuario puede llamarSecurerInboxContratoForceinclusiónfunción.Luego, los funcionarios del árbitro no adjuntaron el enlace de la función al documento oficial del sitio web, y solo pude ver las funciones correspondientes en el código de contrato por sí mismos.
Cuando encuentre la función SendUnsignEdTransaction, descubre que debe completar el valor NonCE y MaxFeEperGas.¿Qué dirección es Nonce?¿Qué maxfeepergas está en Internet?¿Cómo llenarlo?Sin referencia de archivo, ni siquiera NATPSEC.Luego encontrará un montón de funciones similares en el contrato de árbitro:
SendL1FundedUnsignTTRANSACTION, SendUnsignetTractionToFork, SendContr ActTRansaction, SendL1FundContranChansaction, no hay archivos que le indiquen cómo usar estas funciones, cómo usarlo, parámetros, parámetros, parámetros, parámetros, parámetros, parámetros.
Probó los parámetros y envió la transacción con la mentalidad de intentar probarlo. Una dirección diferente al iniciar la transacción, por lo que su dirección L2 inmóvil.
sendl2message
Más tarde, hago clic accidentalmente en la búsqueda de Google por accidente, solo para descubrir que el árbitro original tenía una biblioteca de programas de tutorías con una demostración de script.sendl2message¿La función y el parámetro del mensaje se llevan a la transacción con la cuenta L2?
¿Quién sabe que «el mensaje para L2 a través de la inclusión de la fuerza» será una «transacción L2 con nombre»?Y no hay archivo y explicación de NATSPEC cuándo y cómo usar esta función.
Conclusión: es más problemático generar manualmente una transacción obligatoria del árbitro,Se recomienda ejecutar Arbitrum SDK en el tutorial oficial.Arbitrum no tiene archivos de desarrollador claros y notas de código como otros rollup.También le pregunté a Arbitrum en el arbitraje de la discordia, pero no obtuve una respuesta satisfactoria.
Cuando se le preguntó en Discord, la otra parte solo me dijo que viera SendL2Message, y no quería explicar las funciones de otras funciones (o incluso la SendUnsignedTransaction mencionada en el documento de inclusión de la fuerza), cómo usarlo y cuándo.
Mecanismo de ForceIinclusion de Starknet
Desafortunadamente, Starknet no tiene un mecanismo de inclusión de fuerza.Solo hay dos artículos discutidos en foros oficiales en el foro oficial.
No puedo probar una transacción fallida
Las razones anteriores se deben a que el sistema de prueba de conocimiento cero de Starknet no puede probar una transacción fallida, por lo que no se puede permitir la inclusión de fuerza.porqueSi alguien es una fuerza maliciosa (o involuntaria) incluye un fallido, incapaz de probar una transacción, entonces Starknet se atascará directamente: Porque después de que la transacción es ingreso por la fuerza, Prover debe probar la transacción de falla, pero no puede probarla.
Starknet espera introducir la función de las transacciones fallidas en la versión V0.15.0, y debe realizarse aún más para realizar aún más el mecanismo de inclusión de la fuerza.
Mecanismo de ForceIinclusion de Zksync
El mecanismo de transmisión e inclusión de fuerza de ZKSYNC;, Los usuarios especifican la dirección L2, CallData, la cantidad adicional de ETH, el valor de L2Gaslimit, etc., las transacciones de SolicL2 combinarán estos parámetros en una transacción L2, y luego los colocarán en la secuencia. (por la función CommitBatches) muestra que, por cierto, cuántas transacciones deben tomarse de la cola de prioridad e incluirse en el registro de transacción L2.
ZKSYNC es muy similar al optimismo en forma de inclusión de fuerza.(Llamadas, llamadas, etc.), en lugar de completar una transacción L2 con un nombre firmado como el árbitro; Fuera del usuario enviado directamente a la transacción y escríbelo en el historial de la transacción.
Si pasa por el puente oficial de Zksync al depósito ETHAl igual que esta transacción, es llamar a la función SolicL2Transaction del contrato del buzón,Pondrá este depósito en la transacción ETH L2 en la cola prioritaria y organizará un evento NewpriorityRequestEsenciaDebido a que el contrato codifica los datos de la transacción L2 en una cadena de cadenas bytes, no es fácil de leer. Transacción (porque es depósito para usted), por lo que después de un tiempo, esta transacción L2 fue sacada de la cola de prioridad por Sequeuncer de la cola de prioridad y se incluyó en la historia de la transacción de ETH.
En la transacción L1Deposit, el patrocinador y el receptor de la transacción son 0xedc1 … 6909, la cantidad es de 0.03eth y los datos de llamada están vacíos.
Un 0xedc1 … 6909 se transferirá a su propia transacción en L2.
Luego, al igual que la función de comercio obligatoria del experimento OP anterior, llamé a la función de transacción de Zksync para enviar una auto -transferencia: no hubo ETH, CallData trajo la codificación hexadecimal de la cadena de «inclusión de fuerza».
Luego se convirtió en una transacción en su propia transacción en L2.
Cuando el secuenciador toma la transacción de priorityqueue y la escribe en la historia
A través de la función SolicL2Transaction, los usuarios pueden enviar la información en L1 con la misma cuenta L1 que la dirección L2, especifique el receptor L2, el monto de ETH con el ETH adjunto y el Data CallData.Si el usuario desea llamar a otros contratos y con diferentes datos, llene los parámetros uno por uno en la función de TRANSACTION de requestl2.
La función que no ha permitido que los usuarios sean obligados a ser incluidos
Aunque la transacción L2 se coloca en la cola de prioridad, el período de espera de la transacción L2 se calcula por la transacción L2, peroEn la actualidad, la función de inclusión de fuerza que no permite a los usuarios hacer cumplir los usuarios en el diseño de ZKSYNC es equivalente a solo medias conjuntosEsenciaEs decir, aunque hay un «período de espera gratuito», de hecho, «ver si la secuencia debe ser ingreso»: la secuencia puede esperar hasta que el vencimiento haya expirado para ganar, y nunca puede ganar ninguna transacción en la cola de prioridad.
En el futuro, ZKSYNC debería agregar funciones relevantes para que los usuarios puedan obligar a la transacción a incluir el historial de las transacciones L2 cuando el período de ingresos haya terminado pero no ha sido incluido por Sequeuncer.
Resumir
L1 se basa en una gran cantidad de verificaciones para garantizar la «seguridad» y las «capacidades anti -revisión» de Internet.por lo tantoRollup necesita un mecanismo de inclusión de fuerza para permitir a los usuarios omitir el secuenciador y escribir la transacción en la historia.Evite ser revisado por el secuenciador, que no puede usarse o no puede retirar fondos del encierro.
La inclusión de la fuerza permite a los usuarios obligar a los usuarios a escribir transacciones en la historia., Pero diseño en el diseño, «si la transacción puede insertar el historial de inmediato y entrar en vigencia inmediatamente».Si se permite que la transacción entrara en vigencia de inmediato, tendrá un impacto negativo en el secuenciador, porque las transacciones que esperan ingresos en L2 pueden verse afectadas por los intercambios de ingresos forzados L1.
por lo tantoEn la actualidad, el mecanismo de inclusión de fuerza de Rollup primero permitirá que la transacción insertada en L1 ingrese al estado de espera.Y deje que el secuenciador reaccione por un tiempo para elegir una transacción al esperar si ingresa.
ZKSYNC y Arbitrum mantienen una cola de cola en L1 para administrar la transacción L2 enviada por el usuario desde L1 o el mensaje a L2.El árbitro se llama DeletedInbox;
peroLa forma en que Zksync de enviar transacciones L2 es más similar al optimismoTodos envían mensajes a L1 con la dirección L2.La función del optimismo enviado las transacciones L2 se llama depósito de tope;El árbitro genera una transacción L2 completa y firma, y luego envíela a través de la función SendL2Message.
Starknet aún no tiene el mecanismo de inclusión de la fuerza;—La priorityqueue y la transacción L2 en cada cola tienen un período válido, pero este período de validez es actualmente solo decorativo.