Implemente un devnet OP Stack
Last updated
Last updated
Primero, y para .
A continuación, clone el repositorio:
bash
Consulte la versión para ver la versión estable o la versión ascendente:
v1.2.0-OP_v1.7.0-CN_v0.12.4rebase-arribabash
Construir definiciones de TypeScript para dependencias TS:
bash
Establecer variables de entorno para iniciar la red:
bash
Inicie la red ejecutando:
bash
Esto inicia la capa 1 (ETH), la capa 2 (op-geth
), capa de disponibilidad de datos (Celestia), el secuenciador (op-node
), remitente de lotes (op-batcher
), servicio de compromiso estatal (op-proposer
).
Si desea ver los registros del devnet, ejecute el siguiente comando desde la raíz del directorio Optimism:
bash
Ahora, verificaremos una transacción reciente en el L1 con:
bash
La salida de un bloque que contiene una transacción se verá así:
consola
Copie el hash de la transacción de transactions: <transaction-hash>
y establecerlo como una variable:
bash
Ahora lea los datos de la llamada de transacción en el L1:
bash
La salida se verá similar a la siguiente:
consola
PUNTA
Está buscando una transacción de bateador en la dirección 0xFf00000000000000000000000000000000000901
.
Primero, elimine el prefijo 0xce
. Ahora, establece el input
como el INPUT
variable y codificarlo como base64:
bash
PUNTA
Recuerda eliminar el 0xce
prefijo!
Clonar el go-da
repositorio:
bash
Ahora, de go-da/proto/da
correr:
bash
¡Su resultado se verá similar al siguiente!
consola
El op-batcher/batcher/driver.go
y op-node/rollup/derive/calldata_source.go
los archivos son parte del mecanismo de devolución de Ethereum en el op-batcher
y op-node
respectivamente.
Si los datos de la transacción se pueden publicar como un blob a Celestia, reemplaza el calldata con un identificador de blob y envía la transacción con estos datos. Si no se puede publicar en Celestia, vuelve a Ethereum sin ningún cambio en la transacción.
El identificador de blob comienza con el prefijo especial 0xce
, que se eligió como mnemotécnico para Celestia, e indica que los datos restantes deben interpretarse como un Block Height (8 bytes) y Blob Commitment (32 bytes) codificados por little-endian. La combinación de estos se puede usar más tarde para recuperar los calldata originales de Celestia.
Prefijo
8 bytes
32 bytes
0xce
Altura del Bloque
Compromiso de Blob
ir
Si la calldata coincide con el prefijo de versión 0xce
, se decodifica como un identificador de blob, el calldata original se recupera de Celestia y se devuelve para su derivación. Si la calldata no coincide con el prefijo, toda la calldata se devuelve para su derivación.
ir
Estas dos funciones trabajan juntas para garantizar que el mecanismo de retroceso de Ethereum funcione correctamente, lo que permite que el despliegue continúe funcionando incluso durante los períodos de inactividad en Celestia.
La prueba del mecanismo de retroceso de Ethereum se puede hacer con el go-da
herramienta. La activación de una transacción de blob simultánea causará el op-batcher
transacción de Blob a fallar, con un incorrect account sequence
error, que desencadena una devolución a Ethereum.
Para activar la transacción, envíe este comando desde el mismo go/proto/da
directorio:
bash
Alternativamente, puede apagar el local-celestia-devnet
y vea que los registros de devnet de OP Stack muestran que el rollup ha vuelto al L1, en este caso Ethereum, para publicar datos.
Los lotes de span se pueden habilitar configurando OP_BATCHER_BATCH_TYPE: 1
en tu docker-compose.yml
archivo.
Tenga en cuenta que esto requiere que se configure el tiempo de activación de Delta. Para su devnet, debe establecer "l2GenesisDeltaTimeOffset": "0x0",
en devnetL1-template.json
. Esto permitirá lotes de tramo y se puede probar mediante el engrasado docker compose logs -f | grep batch_type
que debe incluir batch_type=SpanBatch
y batch_type=1
.
El permite que los rollups "caigan" a Ethereum u otra cadena EVM en caso de tiempo de inactividad o errores al enviar datos a Celestia.
El mecanismo de retroceso de Ethereum se implementa en el versión v1.1.0.
En del retroceso de Ethereum. Esta función crea y envía una transacción a la dirección de la bandeja de entrada por lotes con los datos dados. Utiliza el subyacente txmgr
para manejar el envío de transacciones y la gestión de precios del gas.
En calldata_source.go
, del retroceso de Ethereum. Esta función filtra todas las transacciones y devuelve los calldata de las transacciones que se envían a la dirección de la bandeja de entrada del lote desde la dirección del remitente del lote.