From 916339a6769765d75894f8d135ba24932b3479a5 Mon Sep 17 00:00:00 2001 From: refcell Date: Fri, 21 Jun 2024 12:09:14 -0400 Subject: [PATCH] fix(examples): Dynamic Rollup Config Loading (#293) * fix: dynamically load the rollup config by l1 chain id * fix(client): dynamic config loading --- Cargo.lock | 58 ++++++++++----------- bin/client/src/boot.rs | 13 ++--- crates/derive/src/online/alloy_providers.rs | 11 ++++ examples/trusted-sync/src/main.rs | 16 ++++-- 4 files changed, 55 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 643658269..ff2f30650 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -215,7 +215,7 @@ checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -312,7 +312,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -328,7 +328,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", "syn-solidity", "tiny-keccak", ] @@ -344,7 +344,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", "syn-solidity", ] @@ -609,7 +609,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -620,7 +620,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -647,7 +647,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -856,7 +856,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1004,7 +1004,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1096,7 +1096,7 @@ checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1246,7 +1246,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -1663,7 +1663,7 @@ dependencies = [ "kona-common", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -2109,7 +2109,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -2237,7 +2237,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -2329,9 +2329,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -2822,7 +2822,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -2845,7 +2845,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -3014,7 +3014,7 @@ checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" [[package]] name = "superchain-primitives" version = "0.1.0" -source = "git+https://github.com/ethereum-optimism/superchain-registry?branch=main#3fb9d9b4c72183373447571e932ea01f6fef46e9" +source = "git+https://github.com/ethereum-optimism/superchain-registry?branch=main#67128af695e57d6e32a740f8587aca4e0bded888" dependencies = [ "alloy-consensus 0.1.0", "alloy-eips 0.1.0", @@ -3040,9 +3040,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90" dependencies = [ "proc-macro2", "quote", @@ -3058,7 +3058,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -3123,7 +3123,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -3196,7 +3196,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -3310,7 +3310,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -3515,7 +3515,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", "wasm-bindgen-shared", ] @@ -3549,7 +3549,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3776,7 +3776,7 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] [[package]] @@ -3796,5 +3796,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.67", ] diff --git a/bin/client/src/boot.rs b/bin/client/src/boot.rs index da7fef421..f1a2b35fb 100644 --- a/bin/client/src/boot.rs +++ b/bin/client/src/boot.rs @@ -4,7 +4,7 @@ use alloy_primitives::{B256, U256}; use anyhow::{anyhow, Result}; use kona_preimage::{PreimageKey, PreimageOracleClient}; -use kona_primitives::{RollupConfig, OP_MAINNET_CONFIG}; +use kona_primitives::RollupConfig; /// The local key ident for the L1 head hash. pub const L1_HEAD_KEY: U256 = U256::from_be_slice(&[1]); @@ -89,16 +89,9 @@ impl BootInfo { .try_into() .map_err(|_| anyhow!("Failed to convert L2 chain ID to u64"))?, ); - let rollup_config = rollup_config_from_chain_id(chain_id)?; + let rollup_config = RollupConfig::from_l2_chain_id(chain_id) + .ok_or_else(|| anyhow!("Failed to get rollup config for L2 Chain ID: {chain_id}"))?; Ok(Self { l1_head, l2_output_root, l2_claim, l2_claim_block, chain_id, rollup_config }) } } - -/// Returns the rollup config for the given chain ID. -fn rollup_config_from_chain_id(chain_id: u64) -> Result { - match chain_id { - 10 => Ok(OP_MAINNET_CONFIG), - _ => anyhow::bail!("Unsupported chain ID: {}", chain_id), - } -} diff --git a/crates/derive/src/online/alloy_providers.rs b/crates/derive/src/online/alloy_providers.rs index 422c7412c..6d8ab613c 100644 --- a/crates/derive/src/online/alloy_providers.rs +++ b/crates/derive/src/online/alloy_providers.rs @@ -178,6 +178,17 @@ impl AlloyL2ChainProvider { } } + /// Returns the chain ID. + pub async fn chain_id(&mut self) -> Result { + let chain_id: TransportResult = + self.inner.raw_request("eth_chainId".into(), ()).await; + let chain_id = match chain_id { + Ok(s) => alloc::string::String::from(s.trim_start_matches("0x")), + Err(e) => return Err(anyhow!(e)), + }; + u64::from_str_radix(&chain_id, 16).map_err(|e| anyhow!(e)) + } + /// Creates a new [AlloyL2ChainProvider] from the provided [reqwest::Url]. pub fn new_http(url: reqwest::Url, rollup_config: Arc) -> Self { let inner = ReqwestProvider::new_http(url); diff --git a/examples/trusted-sync/src/main.rs b/examples/trusted-sync/src/main.rs index 9592f5615..41d7e78fa 100644 --- a/examples/trusted-sync/src/main.rs +++ b/examples/trusted-sync/src/main.rs @@ -1,6 +1,6 @@ use anyhow::{anyhow, Result}; use clap::Parser; -use kona_derive::{online::*, types::OP_MAINNET_CONFIG}; +use kona_derive::online::*; use reqwest::Url; use std::sync::Arc; use tracing::{debug, error, info, warn, Level}; @@ -37,10 +37,18 @@ async fn sync(cli_cfg: crate::cli::Cli) -> Result<()> { let beacon_url: String = cli_cfg.beacon_url.unwrap_or_else(|| std::env::var(BEACON_URL).unwrap()); - // Construct the pipeline and payload validator. - let cfg = Arc::new(OP_MAINNET_CONFIG); - let start = cli_cfg.start_l2_block.unwrap_or(cfg.genesis.l2.number); + // Query for the L2 Chain ID + let mut l2_provider = + AlloyL2ChainProvider::new_http(l2_rpc_url.clone(), Arc::new(RollupConfig::default())); + let l2_chain_id = + l2_provider.chain_id().await.expect("Failed to fetch chain ID from L2 provider"); + let cfg = RollupConfig::from_l2_chain_id(l2_chain_id) + .expect("Failed to fetch rollup config from L2 chain ID"); + let cfg = Arc::new(cfg); + + // Construct the pipeline let mut l1_provider = AlloyChainProvider::new_http(l1_rpc_url); + let start = cli_cfg.start_l2_block.unwrap_or(cfg.genesis.l2.number); let mut l2_provider = AlloyL2ChainProvider::new_http(l2_rpc_url.clone(), cfg.clone()); let attributes = StatefulAttributesBuilder::new(cfg.clone(), l2_provider.clone(), l1_provider.clone());