From 1a317f20e4d6f89577d5951c6eac2409e991dee8 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Fri, 17 Mar 2023 13:20:00 +0100 Subject: [PATCH] refactor: split consensus crate (#1814) --- Cargo.lock | 15 ++++++++++--- Cargo.toml | 3 ++- bin/reth/Cargo.toml | 10 ++++----- bin/reth/src/chain/import.rs | 2 +- bin/reth/src/node/mod.rs | 2 +- bin/reth/src/stage/mod.rs | 2 +- crates/consensus/Cargo.toml | 22 ------------------- crates/consensus/beacon/Cargo.toml | 19 ++++++++++++++++ .../beacon => beacon/src}/beacon_consensus.rs | 5 ++--- .../{src/beacon => beacon/src}/builder.rs | 0 crates/consensus/beacon/src/lib.rs | 13 +++++++++++ crates/consensus/common/Cargo.toml | 20 +++++++++++++++++ crates/consensus/{ => common}/src/lib.rs | 4 +--- .../consensus/{ => common}/src/validation.rs | 6 ++--- crates/consensus/src/beacon/mod.rs | 7 ------ 15 files changed, 79 insertions(+), 51 deletions(-) delete mode 100644 crates/consensus/Cargo.toml create mode 100644 crates/consensus/beacon/Cargo.toml rename crates/consensus/{src/beacon => beacon/src}/beacon_consensus.rs (98%) rename crates/consensus/{src/beacon => beacon/src}/builder.rs (100%) create mode 100644 crates/consensus/beacon/src/lib.rs create mode 100644 crates/consensus/common/Cargo.toml rename crates/consensus/{ => common}/src/lib.rs (76%) rename crates/consensus/{ => common}/src/validation.rs (99%) delete mode 100644 crates/consensus/src/beacon/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 8926959e5..09fd1b2f0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4569,7 +4569,7 @@ dependencies = [ "metrics-exporter-prometheus", "metrics-util", "proptest", - "reth-consensus", + "reth-beacon-consensus", "reth-db", "reth-discv4", "reth-downloaders", @@ -4598,6 +4598,16 @@ dependencies = [ "tui", ] +[[package]] +name = "reth-beacon-consensus" +version = "0.1.0" +dependencies = [ + "reth-consensus-common", + "reth-interfaces", + "reth-primitives", + "tokio", +] + [[package]] name = "reth-codecs" version = "0.1.0" @@ -4614,7 +4624,7 @@ dependencies = [ ] [[package]] -name = "reth-consensus" +name = "reth-consensus-common" version = "0.1.0" dependencies = [ "assert_matches", @@ -4622,7 +4632,6 @@ dependencies = [ "reth-interfaces", "reth-primitives", "reth-provider", - "tokio", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 62904d830..0481e20bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,8 @@ [workspace] members = [ "bin/reth", - "crates/consensus", + "crates/consensus/beacon", + "crates/consensus/common", "crates/executor", "crates/interfaces", "crates/metrics/metrics-derive", diff --git a/bin/reth/Cargo.toml b/bin/reth/Cargo.toml index 0e2202775..ff1aa0aed 100644 --- a/bin/reth/Cargo.toml +++ b/bin/reth/Cargo.toml @@ -9,22 +9,22 @@ readme = "README.md" [dependencies] # reth reth-primitives = { path = "../../crates/primitives", features = ["arbitrary"] } -reth-db = {path = "../../crates/storage/db", features = ["mdbx", "test-utils"] } +reth-db = { path = "../../crates/storage/db", features = ["mdbx", "test-utils"] } # TODO: Temporary use of the test-utils feature reth-provider = { path = "../../crates/storage/provider", features = ["test-utils"] } reth-staged-sync = { path = "../../crates/staged-sync" } reth-stages = { path = "../../crates/stages"} reth-interfaces = { path = "../../crates/interfaces", features = ["test-utils"] } reth-transaction-pool = { path = "../../crates/transaction-pool", features = ["test-utils"] } -reth-consensus = { path = "../../crates/consensus" } +reth-beacon-consensus = { path = "../../crates/consensus/beacon" } reth-executor = { path = "../../crates/executor" } reth-rpc-engine-api = { path = "../../crates/rpc/rpc-engine-api" } reth-rpc-builder = { path = "../../crates/rpc/rpc-builder" } reth-rpc = { path = "../../crates/rpc/rpc" } reth-rlp = { path = "../../crates/rlp" } -reth-network = {path = "../../crates/net/network", features = ["serde"] } -reth-network-api = {path = "../../crates/net/network-api" } -reth-downloaders = {path = "../../crates/net/downloaders", features = ["test-utils"] } +reth-network = { path = "../../crates/net/network", features = ["serde"] } +reth-network-api = { path = "../../crates/net/network-api" } +reth-downloaders = { path = "../../crates/net/downloaders", features = ["test-utils"] } reth-tracing = { path = "../../crates/tracing" } reth-tasks = { path = "../../crates/tasks" } reth-net-nat = { path = "../../crates/net/nat" } diff --git a/bin/reth/src/chain/import.rs b/bin/reth/src/chain/import.rs index 40c382b27..2a6ad2490 100644 --- a/bin/reth/src/chain/import.rs +++ b/bin/reth/src/chain/import.rs @@ -5,7 +5,7 @@ use crate::{ use clap::{crate_version, Parser}; use eyre::Context; use futures::{Stream, StreamExt}; -use reth_consensus::beacon::BeaconConsensus; +use reth_beacon_consensus::BeaconConsensus; use reth_db::mdbx::{Env, WriteMap}; use reth_downloaders::{ bodies::bodies::BodiesDownloaderBuilder, diff --git a/bin/reth/src/node/mod.rs b/bin/reth/src/node/mod.rs index f16fdc9e5..225676bd7 100644 --- a/bin/reth/src/node/mod.rs +++ b/bin/reth/src/node/mod.rs @@ -13,7 +13,7 @@ use events::NodeEvent; use eyre::Context; use fdlimit::raise_fd_limit; use futures::{pin_mut, stream::select as stream_select, Stream, StreamExt}; -use reth_consensus::beacon::BeaconConsensus; +use reth_beacon_consensus::BeaconConsensus; use reth_db::{ database::Database, mdbx::{Env, WriteMap}, diff --git a/bin/reth/src/stage/mod.rs b/bin/reth/src/stage/mod.rs index bcb079abf..ca0c4fb36 100644 --- a/bin/reth/src/stage/mod.rs +++ b/bin/reth/src/stage/mod.rs @@ -7,7 +7,7 @@ use crate::{ prometheus_exporter, }; use clap::{Parser, ValueEnum}; -use reth_consensus::beacon::BeaconConsensus; +use reth_beacon_consensus::BeaconConsensus; use reth_downloaders::bodies::bodies::BodiesDownloaderBuilder; use reth_primitives::ChainSpec; use reth_provider::{ShareableDatabase, Transaction}; diff --git a/crates/consensus/Cargo.toml b/crates/consensus/Cargo.toml deleted file mode 100644 index fbd98504d..000000000 --- a/crates/consensus/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "reth-consensus" -version = "0.1.0" -edition = "2021" -license = "MIT OR Apache-2.0" -repository = "https://github.com/paradigmxyz/reth" -readme = "README.md" - -[dependencies] -# reth -reth-primitives = { path = "../primitives" } -reth-interfaces = { path = "../interfaces" } -reth-provider = { path = "../storage/provider" } - -# async -tokio = { version = "1", features = ["sync"] } - -[dev-dependencies] -reth-interfaces = { path = "../interfaces", features = ["test-utils"] } -reth-provider = { path = "../storage/provider", features = ["test-utils"] } -assert_matches = "1.5.0" -mockall = "0.11.3" diff --git a/crates/consensus/beacon/Cargo.toml b/crates/consensus/beacon/Cargo.toml new file mode 100644 index 000000000..90a304372 --- /dev/null +++ b/crates/consensus/beacon/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "reth-beacon-consensus" +version = "0.1.0" +edition = "2021" +license = "MIT OR Apache-2.0" +repository = "https://github.com/paradigmxyz/reth" +readme = "README.md" + +[dependencies] +# reth +reth-consensus-common = { path = "../common" } +reth-primitives = { path = "../../primitives" } +reth-interfaces = { path = "../../interfaces" } + +# async +tokio = { version = "1", features = ["sync"] } + +[dev-dependencies] +reth-interfaces = { path = "../../interfaces", features = ["test-utils"] } diff --git a/crates/consensus/src/beacon/beacon_consensus.rs b/crates/consensus/beacon/src/beacon_consensus.rs similarity index 98% rename from crates/consensus/src/beacon/beacon_consensus.rs rename to crates/consensus/beacon/src/beacon_consensus.rs index d39895c37..5f7d22602 100644 --- a/crates/consensus/src/beacon/beacon_consensus.rs +++ b/crates/consensus/beacon/src/beacon_consensus.rs @@ -1,9 +1,8 @@ //! Consensus for ethereum network -use std::sync::Arc; - -use crate::validation; +use reth_consensus_common::validation; use reth_interfaces::consensus::{Consensus, ConsensusError, ForkchoiceState}; use reth_primitives::{ChainSpec, Hardfork, SealedBlock, SealedHeader, EMPTY_OMMER_ROOT, U256}; +use std::sync::Arc; use tokio::sync::watch; use super::BeaconConsensusBuilder; diff --git a/crates/consensus/src/beacon/builder.rs b/crates/consensus/beacon/src/builder.rs similarity index 100% rename from crates/consensus/src/beacon/builder.rs rename to crates/consensus/beacon/src/builder.rs diff --git a/crates/consensus/beacon/src/lib.rs b/crates/consensus/beacon/src/lib.rs new file mode 100644 index 000000000..5ecb1a1e0 --- /dev/null +++ b/crates/consensus/beacon/src/lib.rs @@ -0,0 +1,13 @@ +#![warn(missing_docs, unreachable_pub, unused_crate_dependencies)] +#![deny(unused_must_use, rust_2018_idioms)] +#![doc(test( + no_crate_inject, + attr(deny(warnings, rust_2018_idioms), allow(dead_code, unused_variables)) +))] +//! Beacon consensus implementation. + +mod beacon_consensus; +mod builder; + +pub use beacon_consensus::BeaconConsensus; +pub use builder::BeaconConsensusBuilder; diff --git a/crates/consensus/common/Cargo.toml b/crates/consensus/common/Cargo.toml new file mode 100644 index 000000000..627f89665 --- /dev/null +++ b/crates/consensus/common/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "reth-consensus-common" +version = "0.1.0" +edition = "2021" +license = "MIT OR Apache-2.0" +repository = "https://github.com/paradigmxyz/reth" +readme = "README.md" + +[dependencies] +# reth +reth-primitives = { path = "../../primitives" } +reth-interfaces = { path = "../../interfaces" } +reth-provider = { path = "../../storage/provider" } + + +[dev-dependencies] +reth-interfaces = { path = "../../interfaces", features = ["test-utils"] } +reth-provider = { path = "../../storage/provider", features = ["test-utils"] } +assert_matches = "1.5.0" +mockall = "0.11.3" diff --git a/crates/consensus/src/lib.rs b/crates/consensus/common/src/lib.rs similarity index 76% rename from crates/consensus/src/lib.rs rename to crates/consensus/common/src/lib.rs index 35bf33b03..4b1917d61 100644 --- a/crates/consensus/src/lib.rs +++ b/crates/consensus/common/src/lib.rs @@ -4,10 +4,8 @@ no_crate_inject, attr(deny(warnings, rust_2018_idioms), allow(dead_code, unused_variables)) ))] -//! Consensus algorithms for Ethereum. -/// Beacon consensus implementation. -pub mod beacon; +//! Commonly used consensus methods. /// Collection of consensus validation methods. pub mod validation; diff --git a/crates/consensus/src/validation.rs b/crates/consensus/common/src/validation.rs similarity index 99% rename from crates/consensus/src/validation.rs rename to crates/consensus/common/src/validation.rs index af2839085..8a0d8f733 100644 --- a/crates/consensus/src/validation.rs +++ b/crates/consensus/common/src/validation.rs @@ -1,8 +1,8 @@ //! Collection of methods for block validation. use reth_interfaces::{consensus::ConsensusError, Result as RethResult}; use reth_primitives::{ - BlockNumber, ChainSpec, Hardfork, Header, InvalidTransactionError, SealedBlock, SealedHeader, - Transaction, TransactionSignedEcRecovered, TxEip1559, TxEip2930, TxLegacy, + constants, BlockNumber, ChainSpec, Hardfork, Header, InvalidTransactionError, SealedBlock, + SealedHeader, Transaction, TransactionSignedEcRecovered, TxEip1559, TxEip2930, TxLegacy, }; use reth_provider::{AccountProvider, HeaderProvider, WithdrawalsProvider}; use std::{ @@ -10,8 +10,6 @@ use std::{ time::SystemTime, }; -use reth_primitives::constants; - /// Validate header standalone pub fn validate_header_standalone( header: &SealedHeader, diff --git a/crates/consensus/src/beacon/mod.rs b/crates/consensus/src/beacon/mod.rs deleted file mode 100644 index ec2d4ab5c..000000000 --- a/crates/consensus/src/beacon/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -//! Beacon consensus implementation. - -mod beacon_consensus; -mod builder; - -pub use beacon_consensus::BeaconConsensus; -pub use builder::BeaconConsensusBuilder;