Cómo utilizar la pila OP con Avail

Introducción

Embárquese en la creación de su propia cadena de Avail-Optimismo. Esta guía está dirigida a la red de prueba Goerli de Ethereum y a la red de prueba Avail Goldberg. Para una comprensión detallada, revise elDocumentación de optimismo(se abre en una nueva pestaña).

En esta guía, realizará lo siguiente:

Requisitos previos

Asegúrese de haber instalado el siguiente software.

Los comandos de instalación se basan en Ubuntu 20.04 LTS:

Software

Versión

sistema operativo predeterminado

1.20

16.19.0

8.5.6

sistema operativo predeterminado

sistema operativo predeterminado

El último

Foundry se instalará localmente dentro del entorno del proyecto, a través depackage.json

# Install Gitsudo apt install -y git curl make jq # Install Gowget https://go.dev/dl/go1.20.linux-amd64.tar.gztar xvzf go1.20.linux-amd64.tar.gzsudo cp go/bin/go /usr/bin/gosudo mv go /usr/libecho export GOROOT=/usr/lib/go >> ~/.bashrc # Install Node.jscurl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -sudo apt-get install -y nodejs npm # Install Pnpmsudo npm install -g pnpm # Install Makesudo apt install -y make # Install jqsudo apt install -y jq # Install direnvsudo apt install -y direnv

Software

Versión

sistema operativo predeterminado

1.20

16.19.0

8.5.6

sistema operativo predeterminado

sistema operativo predeterminado

El último

Foundry se instalará localmente dentro del entorno del proyecto, a través depackage.json

Compile el código base principal

La configuración del EVM Rollup requiere compilar código de dos repositorios críticos: eladaptador-de-pila-opcional-disponible monorepo(se abre en una nueva pestaña)y elrepositorio op-geth(se abre en una nueva pestaña).

Construya la fuente del adaptador

  1. Clona y navega hasta el adaptador Avail:

    git clone https://github.com/availproject/avail-op-stack-adapter.gitcd avail-op-stack-adapter
  2. Instalar módulos:

    pnpm install
  3. Compile los paquetes necesarios:

    make op-node op-batcher op-proposerpnpm build

Construya la fuente Geth del optimismo

  1. Clona y navega hasta op-geth:

    git clone https://github.com/ethereum-optimism/op-geth.gitcd op-geth
  2. Compilar op-geth:

    make geth

Obtenga acceso a un nodo Goerli

Para implementar en Goerli, acceda a un nodo L1 utilizando un proveedor comoAlquimia(se abre en una nueva pestaña)oejecuta tu propio nodo Goerli(se abre en una nueva pestaña).

Generar y proteger claves

Cree cuatro cuentas esenciales con claves privadas:

  • Admin(autoridad de actualización de contrato)

  • Batcher(publica datos del secuenciador en L1)

  • Proposer(publica resultados de L2 en L1)

  • Sequencer(seña bloques en la red p2p)

Puede utilizar cast walleten el contracts-bedrockpaquete para la generación de claves:

  1. En el repositorio del adaptador Avail, navegue hasta elpaquete básico de contratos(se abre en una nueva pestaña):

    cd ~/avail-op-stack-adapter/packages/contracts-bedrock
  2. Generar cuentas:

    echo "Admin:"cast wallet newecho "Proposer:"cast wallet newecho "Batcher:"cast wallet newecho "Sequencer:"cast wallet new

    Deberías ver un resultado similar a:

    Admin:Successfully created new keypair.Address:     0xc4A01194958DE0D90A876e8A5fc9D7B530072148Private key: 0xb8e39bd94a210e410c4024e1cc91014de45a5eb1e42f3aa99a368b5a5ac19b45Proposer:Successfully created new keypair.Address:     0xFC0374Ae658e46cA4022acA179d3cb6D8e1A4934Private key: 0xa9bc1b3f5deb1e00251df68bf86e3493b25bc5430665433546f2f9aacc748d1aBatcher:Successfully created new keypair.Address:     0xD6857B5BE9468Be67d64ABaB48459378d5329b96Private key: 0xe9cd8960fc7984a301d567b819e0c62871eb2c7239c2e66b8f319eaa45c3cbd5Sequencer:Successfully created new keypair.Address:     0x33348817E4B1192D576C4f157e9a5EC93dc5392DPrivate key: 0xd98b49e11e4e0be9931017831395e6644a50c36285d08e14d1a479af5ee08675

    Registre y almacene de forma segura estos detalles clave. Necesitará financiar Admin, Proposery Batchercon Goerli ETH (2 ETH para Admin, 5 ETH para Proposer, 10 ETH para Batcher).

⚠️

NOTA PARA PRODUCCIÓN Utilice hardware seguro para la gestión de claves en entornos de producción. cast walletno está diseñado para implementaciones de producción.

Configuración y configuración de red

Después de construir los repositorios, configure los ajustes de su cadena en elpaquete básico de contratos(se abre en una nueva pestaña).

  1. Asegúrese de estar en el contracts-bedrocksubdirectorio:

    cd ~/avail-op-stack-adapter/packages/contracts-bedrock
  2. Copie el archivo de entorno:

    cp .envrc.example .envrc
  3. Editar .envrccon los valores necesarios:

    • ETH_RPC_URL: URL para su nodo L1.

    • PRIVATE_KEY: Clave privada de la cuenta de administrador.

    • DEPLOYMENT_CONTEXT: Nombre de la red; debería ser "optimismo de aprovechamiento"

  4. Activa el entorno con direnv:

    Si necesita instalar direnv, asegúrese también demodificar la configuración del shell(se abre en una nueva pestaña).

    direnv allow .
  5. Elija un bloque L1 como punto de partida usando castel comando:

    Lo mejor es usar un bloque L1 finalizado como nuestro bloque inicial.

    cast block finalized --rpc-url $ETH_RPC_URL | grep -E "(timestamp|hash|number)"

    Debería obtener una respuesta similar a:

    hash                 0x784d8e7f0e90969e375c7d12dac7a3df6879450d41b4cb04d4f8f209ff0c4cd9number               8482289timestamp            1676253324
  6. A continuación, cree y modifique deploy-config/avail-optimism.jsonsegún deploy-config/getting-started.json. Conserve la configuración predeterminada proporcionada en la configuración y aplique las siguientes modificaciones:

    • Reemplácela ADMINcon la dirección de la cuenta de administrador que generó anteriormente.

    • Reemplácela PROPOSERcon la dirección de la cuenta del Proponente que generó anteriormente.

    • Reemplácela BATCHERcon la dirección de la cuenta de Batcher que generó anteriormente.

    • Reemplácela SEQUENCERcon la dirección de la cuenta de Sequencer que generó anteriormente.

    • Reemplácelo BLOCKHASHcon el blockhash que obtuvo del comando de transmisión.

    • Reemplácela TIMESTAMPcon la marca de tiempo que obtuvo del comando de transmisión. Tenga en cuenta que, aunque todos los demás campos son cadenas, ¡este campo es un número! No incluyas las comillas.

  7. Configure enableDAen avail-optimism.json( truepara cadena Avail como DA, falsepara Ethereum).

  8. Ingrese op-availal módulo:

    cd ~/avail-op-stack-adapter/op-avail
  9. Crear config.jsoncon las variables necesarias ( seed, api_url, app_id).

    {  "seed": "test test test test test test test test test test test test",  "api_url": "wss://goldberg.avail.tools:443/ws",  "app_id": 1}

Implementación del contrato principal

Implementar contratos L1 esenciales para la funcionalidad de la cadena:

  1. Navegue hasta /avail-op-stack-adapter/packages/contracts-bedrock/deploymentsy cree avail-optimismel directorio:

cd ~/avail-op-stack-adapter/packages/contracts-bedrock/deploymentsmkdir avail-optimism
  1. Navegue hasta /avail-op-stack-adapter/packages/contracts-bedrock/los contratos de implementación (esto puede tardar hasta 15 minutos):

    forge script scripts/Deploy.s.sol:Deploy --private-key $PRIVATE_KEY --broadcast --rpc-url $ETH_RPC_URLforge script scripts/Deploy.s.sol:Deploy --sig 'sync()' --private-key $PRIVATE_KEY --broadcast --rpc-url $ETH_RPC_URL

Configuración de la configuración L2

Después de configurar la capa L1, la atención se centra en establecer la infraestructura L2. Esto implica generar tres archivos clave:

  • genesis.jsonpara el bloque génesis

  • rollup.jsonpara configuraciones acumuladas

  • jwt.txtpara una comunicación segura entre op-nodeyop-geth

  1. Navegue al op-nodedirectorio:

    cd ~/avail-op-stack-adapter/op-node
  2. Ejecute el siguiente comando, asegurándose de reemplazarlo <RPC>con su URL RPC L1 específica. Esto genera los archivos genesis.jsony rollup.json:

    go run cmd/main.go genesis l2 \    --deploy-config ../packages/contracts-bedrock/deploy-config/avail-optimism.json \    --deployment-dir ../packages/contracts-bedrock/deployments/avail-optimism/ \    --outfile.l2 genesis.json \    --outfile.rollup rollup.json \    --l1-rpc=$L1_RPC

    Encontrarás el recién creado genesis.jsony rollup.jsonen el op-nodepaquete.

  3. Genere un jwt.txtarchivo, que es crucial para la interacción segura entre nodos:

    openssl rand -hex 32 > jwt.txt
  4. Para op-gethprepararse, mueva los archivos genesis.jsony jwt.txta su directorio:

    cp genesis.json ~/op-gethcp jwt.txt ~/op-geth

Estos pasos garantizan que la capa L2 esté configurada correctamente y lista para la integración con los componentes L1, allanando el camino para un paquete acumulativo de EVM completamente funcional en Avail-OP Stack.

Inicializar y configurar Geth

Prepárese op-gethpara ejecutar la cadena:

  1. Navegar a op-geth:

    cd ~/op-geth
  2. Cree un directorio de datos:

    mkdir datadir
  3. Inicialice con el archivo génesis:

    build/bin/geth init --datadir=datadir genesis.json

Lanzar y monitorear nodos

En funcionamiento op-gethy op-nodees esencial para cada nodo. op-batchery op-proposerson exclusivos del secuenciador.

Establezca las siguientes variables de entorno:

Variable

Valor

SEQ_KEY

Clave privada del secuenciador

BATCHER_KEY

Clave privada del lote (mínimo 1 ETH)

PROPOSER_KEY

Clave privada del proponente

L1_RPC

URL del nodo L1

RPC_KIND

Tipo de servidor L1 (p. ej., alchemy, quicknode)

L2OO_ADDR

L2OutputOracleDirección proxy

Ejecutando op-geth

Para iniciar op-geth, navegue hasta su directorio y ejecute los siguientes comandos:

cd ~/op-geth./build/bin/geth \  --datadir ./datadir \  --http \  --http.corsdomain="*" \  --http.vhosts="*" \  --http.addr=0.0.0.0 \  --http.port=9545 \  --http.api=web3,debug,eth,txpool,net,engine \  --ws \  --ws.addr=0.0.0.0 \  --ws.port=9546 \  --ws.origins="*" \  --ws.api=debug,eth,txpool,net,engine \  --syncmode=full \  --gcmode=archive \  --nodiscover \  --maxpeers=0 \  --networkid=42069 \  --authrpc.vhosts="*" \  --authrpc.addr=0.0.0.0 \  --authrpc.port=9551 \  --authrpc.jwtsecret=./jwt.txt \  --rollup.disabletxpoolgossip=true

op-gethahora está activo, pero la creación de bloques comenzará una vez op-nodeque esté operativo.

¿Por qué el modo de archivo?

El modo de archivo, que requiere más espacio en disco que el modo completo, es esencial para:

  1. op-proposerpara acceder al historial completo del estado.

  2. La funcionalidad del explorador.

Reiniciando op-geth

En casos de corrupción de la base de datos indicada por op-nodeerrores o falta de encontrar cabezas L2, siga estos pasos:

  1. Detener op-geth.

  2. Eliminar los datos existentes:

    cd ~/op-gethrm -rf datadir/geth
  3. Reinicializar:

    build/bin/geth init --datadir=datadir genesis.json
  4. Reinicie op-gethy luego op-node.

Ejecutando nodo de operación

Para iniciar op-node, que actúa como cliente de consenso, ejecute:

cd ~/avail-op-stack-adapter/op-node./bin/op-node \  --l2=http://localhost:9551 \  --l2.jwt-secret=./jwt.txt \  --sequencer.enabled \  --sequencer.l1-confs=3 \  --verifier.l1-confs=3 \  --rollup.config=./rollup.json \  --rpc.addr=0.0.0.0 \  --rpc.port=9547 \  --p2p.disable \  --rpc.enable-admin \  --p2p.sequencer.key=$SEQ_KEY \  --l1=$L1_RPC \  --l1.rpckind=$RPC_KIND

La creación del bloque comenzará una vez que op-nodecomience a procesar la información L1 y las interfaces con op-geth.

Sincronización P2P

Para optimizar la sincronización y evitar el desperdicio de recursos de la red:

  • Deshabilite la sincronización p2p ( --p2p.disable) de forma predeterminada.

  • Utilice parámetros de línea de comando específicos para la sincronización entre múltiples nodos.

Ejecutando op-batcher

op-batcheres crucial en la publicación de transacciones del secuenciador a L1. Asegúrese de que tenga al menos 1 Goerli ETH para la continuidad operativa.

cd ~/avail-op-stack-adapter/op-batcher./bin/op-batcher \  --l2-eth-rpc=http://localhost:9545 \  --rollup-rpc=http://localhost:9547 \  --poll-interval=10s \  --sub-safety-margin=6 \  --num-confirmations=1 \  --safe-abort-nonce-too-low-count=3 \  --resubmission-timeout=30s \  --rpc.addr=0.0.0.0 \  --rpc.port=9548 \  --rpc.enable-admin \  --max-channel-duration=1 \  --l1-eth-rpc=$L1_RPC \  --private-key=$BATCHER_KEY

Controlar los costos del dosificador

Ajuste la --max-channel-duration=nconfiguración para equilibrar la frecuencia de transacciones en L1 y los costos operativos del dosificador.

Ejecución del proponente de oposición

Finalmente, empezar op-proposera proponer nuevas raíces estatales:

cd ~/avail-op-stack-adapter/op-proposer./bin/op-proposer \  --poll-interval=12s \  --rpc.port=9560 \  --rollup-rpc=http://localhost:9547 \  --l2oo-address=$L2OO_ADDR \  --private-key=$PROPOSER_KEY \  --l1-eth-rpc=$L1_RPC

Adquiera Goerli ETH para la Capa 2

Para obtener ETH en su Rollup:

  1. Ir a contracts-bedrock:

    cd ~/avail-op-stack-adapter/packages/contracts-bedrock
  2. Encuentre la dirección del contrato puente estándar L1:

    cat deployments/avail-optimism/L1StandardBridgeProxy.json | jq -r .address
  3. Envíe Goerli ETH a la dirección del contrato puente.

Realizar transacciones de prueba

Ahora tiene un paquete acumulativo de EVM basado en Optimismo impulsado por Avail totalmente operativo. Experimente con él como lo haría con cualquier otra cadena de bloques de prueba.

¡Felicitaciones por configurar su cadena!

Last updated