Implemente un devnet OP Stack
Configuración de dependencia
Configuración del entorno e instalación de Golang
Primero, instale dependencias para el software Celestia y para Apila OP.
Repositorio de clones
A continuación, clone el repositorio:
bash
cd $HOME
git clone https://github.com/celestiaorg/optimism
cd optimism
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
git checkout tags/v1.2.0-OP_v1.7.0-CN_v0.12.4
git submodule update --init --recursive
Construir devnet
Construir definiciones de TypeScript para dependencias TS:
bash
cd $HOME
cd optimism
make
Establecer variables de entorno para iniciar la red:
bash
export SEQUENCER_BATCH_INBOX_ADDRESS=0xff00000000000000000000000000000000000000
export L2OO_ADDRESS=0x70997970C51812dc3A010C7d01b50e0d17dc79C8
Iniciar devnet
Inicie la red ejecutando:
bash
make devnet-up
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
).
Ver los registros del devnet
Si desea ver los registros del devnet, ejecute el siguiente comando desde la raíz del directorio Optimism:
bash
make devnet-logs
Encuentra una transacción
Ahora, verificaremos una transacción reciente en el L1 con:
bash
cast block latest --rpc-url localhost:8545
La salida de un bloque que contiene una transacción se verá así:
consola
baseFeePerGas 7
difficulty 2
extraData 0xd883010d04846765746888676f312e32312e33856c696e7578000000000000006b3afa42dce1f87f1f07a1ef569c4d43e41738ef93c865098bfa1458645f384e2e4498bcfe4ad9353ff1913a2e16162f496fafe5b0939a6c78fb5b503248d6da01
gasLimit 30000000
gasUsed 21568
hash 0x1cb54d2369752ef73511c202ff9cdfd0eadf3a77b7aef0092bea63f2b5d57659
logsBloom 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
miner 0x0000000000000000000000000000000000000000
mixHash 0x0000000000000000000000000000000000000000000000000000000000000000
nonce 0x0000000000000000
number 1141
parentHash 0x664bf4bb4a57dd5768a0a98991d77c58fb7a4e164c2581c79fb33ce9c3d4c250
receiptsRoot 0xaf8ff6af1180c8be9e4e8f3a5f882b3b227233f4abbefa479836d3721682a389
sealFields []
sha3Uncles 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347
size 767
stateRoot 0xd4b998a35d20d98ed3488221f0c161a0a9572d3de66399482553c8e3d2fae751
timestamp 1699638350
withdrawalsRoot
totalDifficulty 2283
transactions: [
0x79a0a7a1b4936aafe7a37dbfb07a6a9e55c145a4ed6fd54f962649b4b7db8de7
]
Copie el hash de la transacción de transactions: <transaction-hash>
y establecerlo como una variable:
bash
export TX_HASH=0x79a0a7a1b4936aafe7a37dbfb07a6a9e55c145a4ed6fd54f962649b4b7db8de7
Lea los datos de la llamada de transacción
Ahora lea los datos de la llamada de transacción en el L1:
bash
cast tx $TX_HASH --rpc-url localhost:8545
La salida se verá similar a la siguiente:
consola
blockHash 0x9f4dfae061b5ddd86f95a81be5daa0d7fe32e7f7f770f86dc375e0007d249bd2
blockNumber 24
from 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC
gas 21572
gasPrice 1040676758
hash 0xadd3a5dc0b8c605aeac891098e87cbaff43bb642896ebbf74f964c0690e46df2
input 0xce3500000000000000769074a923011bdda721eacc34c8a77c69c10f2b6c8e659f987e82f217a5340f
nonce 4
r 0xaf5c1505c7dfcebca94d9a6a8c0caf99b6c87a8ed6d6c0b3161c9026f270a84f
s 0x383ed2debf9f9055920cd7340418dda7e2bca6b989eb6992d83d123d4e322f2a
to 0xFf00000000000000000000000000000000000901
transactionIndex 0
v 0
value 0
yParity 0
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
export INPUT=ce3500000000000000769074a923011bdda721eacc34c8a77c69c10f2b6c8e659f987e82f217a5340f
export ENCODED_INPUT=$(echo "$INPUT" | xxd -r -p | base64)
PUNTA
Recuerda eliminar el 0xce
prefijo!
Encuentra los datos sobre Celestia
Clonar el go-da
repositorio:
bash
cd $HOME
git clone https://github.com/rollkit/go-da.git
cd go-da/proto/da
Ahora, de go-da/proto/da
correr:
bash
grpcurl -proto da.proto -plaintext -d "{\"ids\": [{\"value\": \"$ENCODED_INPUT\"}]}" 127.0.0.1:26650 da.DAService.Get
¡Su resultado se verá similar al siguiente!
consola
{
"blobs": [
{
"value": "AKUumhJ8FnuyVrBs38FDKEIAAAAAAZB42trhw/DDc4GFAlv4klkv5Zh4E16mmO5fpNOS1f5wzpds8YK3S0Rvs4ULLJj13euw+Ovdv6Q23zuV1ShROEvk5aptIT7bGmZunvc1OiKwJTXVbN0BiGm6k2zNWq78cNsT2ez3+nzQq84Ds28or/aKz/o1w4NpV7w4caZtgJomX71w96m63+xzYnarXLu7WWvRrwbeb6cW8R93YHXt1r4+TXCBGVe76obzf5JLTNu22gksD2cL+83D8DGjX0FKcwZD0VofkGmboKY1uTddu8704s2MwgNNe09s1bzw+n9Fq6fKFw7pvwJL200eCS0oFJ3HfPAEywnlgyyGQc89dh+98GD5TrdU4aNql9afmW+sDzJtC9S0fzLWYROOS0bvK3W7EvNpmWXe5qrdzKlBmv1LZi4ofrrxLHGmbYOaJhHsEn+B81lGUh33HDet8K9nVKKSF2+W3Xul6uPSxydPBwsv2GHskR+yfUlDbvyl1ROTvtS1zXlpEPz0M1e/RIIt57fVj0Gm7TgACAAA//+Qdel2AQ=="
}
]
}
Mecanismo de retroceso Ethereum en OP Stack
El Mecanismo de retroceso de Ethereum permite que los rollups "caigan" a Ethereum u otra cadena EVM en caso de tiempo de inactividad o errores al enviar datos a Celestia.
Implementación de fallback
El mecanismo de retroceso de Ethereum se implementa en el celestiaorg/optimismo versión v1.1.0.
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.
En driver.go
, el calldataTxCandidate
la función es responsable de la ruta de escritura 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.
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
func (l *BatchSubmitter) sendTransaction(
txdata txData,
queue *txmgr.Queue[txData],
receiptsCh chan txmgr.TxReceipt[txData],
) {
// ...
}
En calldata_source.go
, el DataFromEVMTransactions
la función define la ruta de lectura 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.
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
func DataFromEVMTransactions(
config *rollup.Config,
batcherAddr common.Address,
txs types.Transactions,
log log.Logger
) ([]eth.Data, error) {
// ...
}
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.
Probando el fallback
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
grpcurl -proto da.proto -plaintext -d '{"blobs": [{"value": "SGVsbG8gd28ybGQh"}]}' 127.0.0.1:26650 da.DAService.Submit
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.
Lotes de span
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
.
Last updated