From 671519f38e6a7210815c9339d114a3fa693bff4b Mon Sep 17 00:00:00 2001 From: Oliver Nordbjerg Date: Tue, 10 Sep 2024 15:40:04 +0200 Subject: [PATCH] feat: activate prague always --- Cargo.lock | 78 +++++++++++++-------------- Cargo.toml | 3 ++ bin/alphanet/src/main.rs | 6 +-- crates/node/Cargo.toml | 4 ++ crates/node/src/chainspec.rs | 84 ++++++++++++++++++++++++++++++ crates/node/src/evm.rs | 22 ++++---- crates/node/src/lib.rs | 1 + crates/node/src/node.rs | 4 +- crates/precompile/Cargo.toml | 2 +- crates/precompile/src/secp256r1.rs | 2 +- crates/testing/Cargo.toml | 1 - 11 files changed, 150 insertions(+), 57 deletions(-) create mode 100644 crates/node/src/chainspec.rs diff --git a/Cargo.lock b/Cargo.lock index 7f4ec6d..db7c2f6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -779,12 +779,16 @@ version = "0.0.0" dependencies = [ "alphanet-precompile", "eyre", + "once_cell", "reth-chainspec", + "reth-cli", "reth-node-api", "reth-node-builder", + "reth-node-core", "reth-node-optimism", "reth-primitives", "reth-revm", + "serde_json", ] [[package]] @@ -794,7 +798,6 @@ dependencies = [ "eyre", "p256", "reth", - "reth-chainspec", "reth-node-api", "reth-revm", "rstest", @@ -810,7 +813,6 @@ dependencies = [ "alphanet-node", "once_cell", "reth", - "reth-chainspec", "reth-node-builder", "reth-node-core", "reth-primitives", @@ -885,9 +887,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.87" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8" +checksum = "4e1496f8fb1fbf272686b8d37f523dab3e4a7443300055e74cdaa449f3114356" [[package]] name = "aquamarine" @@ -3183,9 +3185,9 @@ checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "iri-string" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f5f6c2df22c009ac44f6f1499308e7a3ac7ba42cd2378475cc691510e1eef1b" +checksum = "3e0f755bd3806e06ad4f366f92639415d99a339a2c7ecf8c26ccea2097c11cb6" dependencies = [ "memchr", "serde", @@ -3270,9 +3272,9 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ec465b607a36dc5dd45d48b7689bc83f679f66a3ac6b6b21cc787a11e0f8685" +checksum = "8fd1ead9fb95614e8dc5556d12a8681c2f6d352d0c1d3efc8708c7ccbba47bc6" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -3288,9 +3290,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f0977f9c15694371b8024c35ab58ca043dbbf4b51ccb03db8858a021241df1" +checksum = "89841d4f03a14c055eb41d4f41901819573ef948e8ee0d5c86466fd286b2ce7f" dependencies = [ "base64 0.22.1", "futures-channel", @@ -3313,9 +3315,9 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e942c55635fbf5dc421938b8558a8141c7e773720640f4f1dbe1f4164ca4e221" +checksum = "ff79651479f69ada7bda604ef2acf3f1aa50755d97cc36d25ff04c2664f9d96f" dependencies = [ "async-trait", "bytes", @@ -3340,9 +3342,9 @@ dependencies = [ [[package]] name = "jsonrpsee-http-client" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33774602df12b68a2310b38a535733c477ca4a498751739f89fe8dbbb62ec4c" +checksum = "68ed8b301b19f4dad8ddc66ed956a70fc227def5c19b3898e0a29ce8f0edee06" dependencies = [ "async-trait", "base64 0.22.1", @@ -3365,9 +3367,9 @@ dependencies = [ [[package]] name = "jsonrpsee-proc-macros" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b07a2daf52077ab1b197aea69a5c990c060143835bf04c77070e98903791715" +checksum = "a0d4c6bec4909c966f59f52db3655c0e9d4685faae8b49185973d9d7389bb884" dependencies = [ "heck", "proc-macro-crate", @@ -3378,9 +3380,9 @@ dependencies = [ [[package]] name = "jsonrpsee-server" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038fb697a709bec7134e9ccbdbecfea0e2d15183f7140254afef7c5610a3f488" +checksum = "ebe2198e5fd96cf2153ecc123364f699b6e2151317ea09c7bf799c43c2fe1415" dependencies = [ "futures-util", "http", @@ -3405,9 +3407,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b67d6e008164f027afbc2e7bb79662650158d26df200040282d2aa1cbb093b" +checksum = "531e386460425e49679587871a056f2895a47dade21457324ad1262cd78ef6d9" dependencies = [ "http", "serde", @@ -3417,9 +3419,9 @@ dependencies = [ [[package]] name = "jsonrpsee-wasm-client" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0470d0ae043ffcb0cd323797a631e637fb4b55fe3eaa6002934819458bba62a7" +checksum = "5a2d2206c8f04c6b79a11bd1d92d6726b6f7fd3dec57c91e07fa53e867268bbb" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -3428,9 +3430,9 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.24.3" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "992bf67d1132f88edf4a4f8cff474cf01abb2be203004a2b8e11c2b20795b99e" +checksum = "87bc869e143d430e748988261d19b630e8f1692074e68f1a7f0eb4c521d2fc58" dependencies = [ "http", "jsonrpsee-client-transport", @@ -3479,9 +3481,9 @@ dependencies = [ [[package]] name = "keccak-asm" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422fbc7ff2f2f5bdffeb07718e5a5324dca72b0c9293d50df4026652385e3314" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -3597,7 +3599,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", - "redox_syscall 0.5.3", + "redox_syscall 0.5.4", ] [[package]] @@ -4371,7 +4373,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.3", + "redox_syscall 0.5.4", "smallvec", "windows-targets 0.52.6", ] @@ -4889,9 +4891,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ "bitflags 2.6.0", ] @@ -7730,9 +7732,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.36" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f55e80d50763938498dd5ebb18647174e0c76dc38c5505294bb224624f30f36" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -7922,9 +7924,9 @@ dependencies = [ [[package]] name = "secp256k1-sys" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1433bd67156263443f14d603720b082dd3121779323fce20cba2aa07b874bc1b" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ "cc", ] @@ -8123,9 +8125,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d79b758b7cb2085612b11a235055e485605a5103faccdd633f35bd7aee69dd" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ "cc", "cfg-if", @@ -9048,9 +9050,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" diff --git a/Cargo.toml b/Cargo.toml index 96b2dce..7ba6a22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,6 +74,7 @@ reth = { git = "https://github.com/paradigmxyz/reth.git", rev = "c1b5fbb" } reth-chainspec = { git = "https://github.com/paradigmxyz/reth.git", rev = "c1b5fbb", features = [ "optimism", ] } +reth-cli = { git = "https://github.com/paradigmxyz/reth.git", rev = "c1b5fbb" } reth-cli-util = { git = "https://github.com/paradigmxyz/reth.git", rev = "c1b5fbb" } reth-node-api = { git = "https://github.com/paradigmxyz/reth.git", rev = "c1b5fbb" } reth-node-builder = { git = "https://github.com/paradigmxyz/reth.git", rev = "c1b5fbb" } @@ -101,6 +102,8 @@ reth-tracing = { git = "https://github.com/paradigmxyz/reth.git", rev = "c1b5fbb clap = "4" eyre = "0.6.12" tracing = "0.1.0" +serde_json = "1" +once_cell = "1.19" # misc-testing rstest = "0.18.2" diff --git a/bin/alphanet/src/main.rs b/bin/alphanet/src/main.rs index 8fed050..0a24e53 100644 --- a/bin/alphanet/src/main.rs +++ b/bin/alphanet/src/main.rs @@ -23,10 +23,10 @@ //! - `min-debug-logs`: Disables all logs below `debug` level. //! - `min-trace-logs`: Disables all logs below `trace` level. -use alphanet_node::node::AlphaNetNode; +use alphanet_node::{chainspec::AlphanetChainSpecParser, node::AlphaNetNode}; use clap::Parser; use reth_node_optimism::args::RollupArgs; -use reth_optimism_cli::{chainspec::OpChainSpecParser, Cli}; +use reth_optimism_cli::Cli; use reth_optimism_rpc::eth::rpc::SequencerClient; // We use jemalloc for performance reasons. @@ -45,7 +45,7 @@ fn main() { } if let Err(err) = - Cli::::parse().run(|builder, rollup_args| async move { + Cli::::parse().run(|builder, rollup_args| async move { let node = builder .node(AlphaNetNode::new(rollup_args.clone())) .extend_rpc_modules(move |ctx| { diff --git a/crates/node/Cargo.toml b/crates/node/Cargo.toml index a1ddee1..7a92fad 100644 --- a/crates/node/Cargo.toml +++ b/crates/node/Cargo.toml @@ -11,12 +11,16 @@ categories.workspace = true [dependencies] alphanet-precompile.workspace = true +once_cell.workspace = true +reth-cli.workspace = true reth-node-api.workspace = true reth-node-builder.workspace = true +reth-node-core.workspace = true reth-node-optimism.workspace = true reth-chainspec.workspace = true reth-primitives.workspace = true reth-revm.workspace = true +serde_json.workspace = true eyre.workspace = true diff --git a/crates/node/src/chainspec.rs b/crates/node/src/chainspec.rs new file mode 100644 index 0000000..3cffb29 --- /dev/null +++ b/crates/node/src/chainspec.rs @@ -0,0 +1,84 @@ +//! Alphanet chainspec parsing logic. + +use once_cell::sync::Lazy; +use reth_chainspec::{ + BaseFeeParams, BaseFeeParamsKind, Chain, ChainHardforks, ChainSpec, EthereumHardfork, + ForkCondition, OptimismHardfork, +}; +use reth_cli::chainspec::ChainSpecParser; +use reth_node_core::args::utils::parse_custom_chain_spec; +use reth_primitives::{b256, U256}; +use std::sync::Arc; + +/// Development chain hardforks. +pub static DEV_HARDFORKS: Lazy = Lazy::new(|| { + ChainHardforks::new(vec![ + (EthereumHardfork::Frontier.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::Homestead.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::Dao.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::Tangerine.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::SpuriousDragon.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::Byzantium.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::Constantinople.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::Petersburg.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::Istanbul.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::Berlin.boxed(), ForkCondition::Block(0)), + (EthereumHardfork::London.boxed(), ForkCondition::Block(0)), + ( + EthereumHardfork::Paris.boxed(), + ForkCondition::TTD { fork_block: None, total_difficulty: U256::ZERO }, + ), + (EthereumHardfork::Shanghai.boxed(), ForkCondition::Timestamp(0)), + (EthereumHardfork::Cancun.boxed(), ForkCondition::Timestamp(0)), + (OptimismHardfork::Regolith.boxed(), ForkCondition::Timestamp(0)), + (OptimismHardfork::Bedrock.boxed(), ForkCondition::Block(0)), + (OptimismHardfork::Ecotone.boxed(), ForkCondition::Timestamp(0)), + (OptimismHardfork::Canyon.boxed(), ForkCondition::Timestamp(0)), + ]) +}); + +/// Alphanet dev testnet specification. +pub static ALPHANET_DEV: Lazy> = Lazy::new(|| { + { + ChainSpec { + chain: Chain::dev(), + genesis: serde_json::from_str(include_str!("../../../etc/alphanet-genesis.json")) + .expect("Can't deserialize Dev testnet genesis json"), + genesis_hash: Some(b256!( + "2f980576711e3617a5e4d83dd539548ec0f7792007d505a3d2e9674833af2d7c" + )), + paris_block_and_final_difficulty: Some((0, U256::from(0))), + hardforks: DEV_HARDFORKS.clone(), + base_fee_params: BaseFeeParamsKind::Constant(BaseFeeParams::ethereum()), + deposit_contract: None, + ..Default::default() + } + } + .into() +}); + +/// Alphanet chain specification parser. +#[derive(Debug, Clone, Default)] +pub struct AlphanetChainSpecParser; + +impl ChainSpecParser for AlphanetChainSpecParser { + type ChainSpec = ChainSpec; + + const SUPPORTED_CHAINS: &'static [&'static str] = &["dev"]; + + fn parse(s: &str) -> eyre::Result> { + Ok(match s { + "dev" => ALPHANET_DEV.clone(), + s => { + let mut chainspec = parse_custom_chain_spec(s)?; + + // NOTE(onbjerg): This is a temporary workaround until we figure out a better way to + // activate Prague based on a custom fork name. Currently there does not seem to be + // a good way to do it. + chainspec.hardforks.insert(EthereumHardfork::Prague, ForkCondition::Timestamp(0)); + + Arc::new(chainspec) + } + }) + } +} diff --git a/crates/node/src/evm.rs b/crates/node/src/evm.rs index 7e8fb5e..386f27d 100644 --- a/crates/node/src/evm.rs +++ b/crates/node/src/evm.rs @@ -11,20 +11,20 @@ //! precompiles defined by [`alphanet_precompile`]. use alphanet_precompile::secp256r1; +use reth_chainspec::{ChainSpec, EthereumHardfork, Head, OptimismHardfork}; +use reth_node_api::{ConfigureEvm, ConfigureEvmEnv}; use reth_primitives::{ - revm_primitives::{CfgEnvWithHandlerCfg, TxEnv}, - transaction::FillTxEnv, - Address, Bytes, Header, TransactionSigned, TxKind, U256, + revm_primitives::{CfgEnvWithHandlerCfg, TxEnv}, + transaction::FillTxEnv, + Address, Bytes, Header, TransactionSigned, TxKind, U256, }; use reth_revm::{ - handler::register::EvmHandler, - inspector_handle_register, - precompile::PrecompileSpecId, - primitives::{AnalysisKind, Env, OptimismFields}, - ContextPrecompiles, Database, Evm, EvmBuilder, GetInspector, + handler::register::EvmHandler, + inspector_handle_register, + precompile::PrecompileSpecId, + primitives::{AnalysisKind, Env, OptimismFields}, + ContextPrecompiles, Database, Evm, EvmBuilder, GetInspector, }; -use reth_chainspec::{ChainSpec, EthereumHardfork, Head, OptimismHardfork}; -use reth_node_api::{ConfigureEvm, ConfigureEvmEnv}; use std::sync::Arc; /// Custom EVM configuration @@ -223,11 +223,11 @@ fn revm_spec(chain_spec: &ChainSpec, block: &Head) -> reth_revm::primitives::Spe #[cfg(test)] mod tests { use super::*; + use reth_chainspec::{Chain, ChainSpecBuilder}; use reth_primitives::{ revm_primitives::{BlockEnv, CfgEnv, SpecId}, ForkCondition, Genesis, }; - use reth_chainspec::{Chain, ChainSpecBuilder, EthereumHardfork}; #[test] fn test_fill_cfg_and_block_env() { diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index b897a18..97b8dc2 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -15,5 +15,6 @@ #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] #![warn(unused_crate_dependencies)] +pub mod chainspec; pub mod evm; pub mod node; diff --git a/crates/node/src/node.rs b/crates/node/src/node.rs index cb81e8e..5d83a9f 100644 --- a/crates/node/src/node.rs +++ b/crates/node/src/node.rs @@ -4,12 +4,12 @@ //! required for the optimism engine API. use crate::evm::AlphaNetEvmConfig; +use reth_chainspec::ChainSpec; +use reth_node_api::{FullNodeTypes, NodeTypesWithEngine}; use reth_node_builder::{ components::{ComponentsBuilder, ExecutorBuilder}, BuilderContext, Node, NodeTypes, }; -use reth_chainspec::ChainSpec; -use reth_node_api::{FullNodeTypes, NodeTypesWithEngine}; use reth_node_optimism::{ args::RollupArgs, node::{ diff --git a/crates/precompile/Cargo.toml b/crates/precompile/Cargo.toml index 4bcda1f..9671997 100644 --- a/crates/precompile/Cargo.toml +++ b/crates/precompile/Cargo.toml @@ -11,12 +11,12 @@ categories.workspace = true [dependencies] reth-revm.workspace = true + p256 = { version = "0.13.2", features = ["ecdsa"] } [dev-dependencies] reth.workspace = true reth-node-api.workspace = true -reth-chainspec.workspace = true eyre.workspace = true rstest.workspace = true diff --git a/crates/precompile/src/secp256r1.rs b/crates/precompile/src/secp256r1.rs index d66aec8..a130971 100644 --- a/crates/precompile/src/secp256r1.rs +++ b/crates/precompile/src/secp256r1.rs @@ -11,6 +11,7 @@ //! ``` //! use alphanet_precompile::secp256r1; //! use reth::{ +//! chainspec::ChainSpec, //! primitives::{TransactionSigned, U256}, //! revm::{ //! precompile::{PrecompileSpecId, Precompiles}, @@ -18,7 +19,6 @@ //! ContextPrecompiles, Database, Evm, EvmBuilder, //! }, //! }; -//! use reth_chainspec::ChainSpec; //! use reth_node_api::{ConfigureEvm, ConfigureEvmEnv}; //! use std::sync::Arc; //! diff --git a/crates/testing/Cargo.toml b/crates/testing/Cargo.toml index 7bd406e..e524899 100644 --- a/crates/testing/Cargo.toml +++ b/crates/testing/Cargo.toml @@ -17,7 +17,6 @@ alloy-network.workspace = true alloy-signer-local = { workspace = true, features = ["mnemonic"] } reth = { workspace = true } -reth-chainspec.workspace = true reth-node-core = { workspace = true } reth-node-builder = { workspace = true, features = ["test-utils"] } reth-primitives.workspace = true