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
sistema operativo predeterminado
sistema operativo predeterminado
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 direnvSoftware
Versión
sistema operativo predeterminado
sistema operativo predeterminado
sistema operativo predeterminado
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
- Clona y navega hasta el adaptador Avail: - git clone https://github.com/availproject/avail-op-stack-adapter.gitcd avail-op-stack-adapter
- Instalar módulos: - pnpm install
- Compile los paquetes necesarios: - make op-node op-batcher op-proposerpnpm build
Construya la fuente Geth del optimismo
- Clona y navega hasta - op-geth:- git clone https://github.com/ethereum-optimism/op-geth.gitcd op-geth
- 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:
- 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
- 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).
- Asegúrese de estar en el - contracts-bedrocksubdirectorio:- cd ~/avail-op-stack-adapter/packages/contracts-bedrock
- Copie el archivo de entorno: - cp .envrc.example .envrc
- 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"
 
- 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 .
- 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
- 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.
 
- Configure - enableDAen- avail-optimism.json(- truepara cadena Avail como DA,- falsepara Ethereum).
- Ingrese - op-availal módulo:- cd ~/avail-op-stack-adapter/op-avail
- 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:
- 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- 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-nodey- op-geth
- Navegue al - op-nodedirectorio:- cd ~/avail-op-stack-adapter/op-node
- 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.
- Genere un - jwt.txtarchivo, que es crucial para la interacción segura entre nodos:- openssl rand -hex 32 > jwt.txt
- 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:
- Navegar a - op-geth:- cd ~/op-geth
- Cree un directorio de datos: - mkdir datadir
- 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=trueop-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:
- op-proposerpara acceder al historial completo del estado.
- 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:
- Detener - op-geth.
- Eliminar los datos existentes: - cd ~/op-gethrm -rf datadir/geth
- Reinicializar: - build/bin/geth init --datadir=datadir genesis.json
- 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_KINDLa 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_KEYControlar 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_RPCAdquiera Goerli ETH para la Capa 2
Para obtener ETH en su Rollup:
- Ir a - contracts-bedrock:- cd ~/avail-op-stack-adapter/packages/contracts-bedrock
- Encuentre la dirección del contrato puente estándar L1: - cat deployments/avail-optimism/L1StandardBridgeProxy.json | jq -r .address
- 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
