mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: downgrade trie debug logs to trace, cleanup debug logs more (#5285)
This commit is contained in:
23
Cargo.toml
23
Cargo.toml
@ -87,7 +87,7 @@ codegen-units = 1
|
|||||||
incremental = false
|
incremental = false
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
## reth
|
# reth
|
||||||
reth = { path = "./bin/reth" }
|
reth = { path = "./bin/reth" }
|
||||||
reth-primitives = { path = "./crates/primitives" }
|
reth-primitives = { path = "./crates/primitives" }
|
||||||
reth-interfaces = { path = "./crates/interfaces" }
|
reth-interfaces = { path = "./crates/interfaces" }
|
||||||
@ -110,11 +110,12 @@ reth-eth-wire = { path = "./crates/net/eth-wire" }
|
|||||||
reth-ecies = { path = "./crates/net/ecies" }
|
reth-ecies = { path = "./crates/net/ecies" }
|
||||||
reth-tracing = { path = "./crates/tracing" }
|
reth-tracing = { path = "./crates/tracing" }
|
||||||
reth-tokio-util = { path = "crates/tokio-util" }
|
reth-tokio-util = { path = "crates/tokio-util" }
|
||||||
|
|
||||||
# revm
|
# revm
|
||||||
revm = { git = "https://github.com/bluealloy/revm", rev = "1609e07c68048909ad1682c98cf2b9baa76310b5" }
|
revm = { git = "https://github.com/bluealloy/revm", rev = "1609e07c68048909ad1682c98cf2b9baa76310b5" }
|
||||||
revm-primitives = { git = "https://github.com/bluealloy/revm", rev = "1609e07c68048909ad1682c98cf2b9baa76310b5" }
|
revm-primitives = { git = "https://github.com/bluealloy/revm", rev = "1609e07c68048909ad1682c98cf2b9baa76310b5" }
|
||||||
|
|
||||||
## eth
|
# eth
|
||||||
alloy-primitives = "0.4"
|
alloy-primitives = "0.4"
|
||||||
alloy-dyn-abi = "0.4"
|
alloy-dyn-abi = "0.4"
|
||||||
alloy-sol-types = "0.4"
|
alloy-sol-types = "0.4"
|
||||||
@ -126,11 +127,11 @@ ethers-middleware = { version = "2.0", default-features = false }
|
|||||||
discv5 = { git = "https://github.com/sigp/discv5", rev = "f289bbd4c57d499bb1bdb393af3c249600a1c662" }
|
discv5 = { git = "https://github.com/sigp/discv5", rev = "f289bbd4c57d499bb1bdb393af3c249600a1c662" }
|
||||||
igd = { git = "https://github.com/stevefan1999-personal/rust-igd", rev = "c2d1f83eb1612a462962453cb0703bc93258b173" }
|
igd = { git = "https://github.com/stevefan1999-personal/rust-igd", rev = "c2d1f83eb1612a462962453cb0703bc93258b173" }
|
||||||
|
|
||||||
## js
|
# js
|
||||||
boa_engine = "0.17"
|
boa_engine = "0.17"
|
||||||
boa_gc = "0.17"
|
boa_gc = "0.17"
|
||||||
|
|
||||||
## misc
|
# misc
|
||||||
aquamarine = "0.3"
|
aquamarine = "0.3"
|
||||||
bytes = "1.5"
|
bytes = "1.5"
|
||||||
bitflags = "2.4"
|
bitflags = "2.4"
|
||||||
@ -151,27 +152,27 @@ hex-literal = "0.4"
|
|||||||
once_cell = "1.17"
|
once_cell = "1.17"
|
||||||
syn = "2.0"
|
syn = "2.0"
|
||||||
|
|
||||||
### proc-macros
|
# proc-macros
|
||||||
proc-macro2 = "1.0"
|
proc-macro2 = "1.0"
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
|
|
||||||
## tokio
|
# tokio
|
||||||
tokio-stream = "0.1.11"
|
tokio-stream = "0.1.11"
|
||||||
tokio = { version = "1.21", default-features = false }
|
tokio = { version = "1.21", default-features = false }
|
||||||
tokio-util = { version = "0.7.4", features = ["codec"] }
|
tokio-util = { version = "0.7.4", features = ["codec"] }
|
||||||
|
|
||||||
## async
|
# async
|
||||||
async-trait = "0.1.68"
|
async-trait = "0.1.68"
|
||||||
futures = "0.3.26"
|
futures = "0.3.26"
|
||||||
pin-project = "1.0.12"
|
pin-project = "1.0.12"
|
||||||
futures-util = "0.3.25"
|
futures-util = "0.3.25"
|
||||||
|
|
||||||
## json
|
# rpc
|
||||||
jsonrpsee = { version = "0.20" }
|
jsonrpsee = { version = "0.20" }
|
||||||
jsonrpsee-core = { version = "0.20" }
|
jsonrpsee-core = { version = "0.20" }
|
||||||
jsonrpsee-types = { version = "0.20" }
|
jsonrpsee-types = { version = "0.20" }
|
||||||
|
|
||||||
## crypto
|
# crypto
|
||||||
secp256k1 = { version = "0.27.0", default-features = false, features = [
|
secp256k1 = { version = "0.27.0", default-features = false, features = [
|
||||||
"global-context",
|
"global-context",
|
||||||
"rand-std",
|
"rand-std",
|
||||||
@ -181,11 +182,11 @@ enr = { version = "0.9", default-features = false, features = ["k256"] }
|
|||||||
# for eip-4844
|
# for eip-4844
|
||||||
c-kzg = "0.4.0"
|
c-kzg = "0.4.0"
|
||||||
|
|
||||||
## config
|
# config
|
||||||
confy = "0.5"
|
confy = "0.5"
|
||||||
toml = "0.8"
|
toml = "0.8"
|
||||||
|
|
||||||
### misc-testing
|
# misc-testing
|
||||||
arbitrary = "1.1"
|
arbitrary = "1.1"
|
||||||
assert_matches = "1.5.0"
|
assert_matches = "1.5.0"
|
||||||
tempfile = "3.8"
|
tempfile = "3.8"
|
||||||
|
|||||||
@ -23,6 +23,11 @@ pub mod components;
|
|||||||
pub mod config;
|
pub mod config;
|
||||||
pub mod ext;
|
pub mod ext;
|
||||||
|
|
||||||
|
/// Default [Directive] for [EnvFilter] which disables high-frequency debug logs from `hyper` and
|
||||||
|
/// `trust-dns`
|
||||||
|
const DEFAULT_ENV_FILTER_DIRECTIVE: &str =
|
||||||
|
"hyper::proto::h1=off,trust_dns_proto=off,trust_dns_resolver=off";
|
||||||
|
|
||||||
/// The main reth cli interface.
|
/// The main reth cli interface.
|
||||||
///
|
///
|
||||||
/// This is the entrypoint to the executable.
|
/// This is the entrypoint to the executable.
|
||||||
@ -235,14 +240,18 @@ impl Logs {
|
|||||||
|
|
||||||
if self.journald {
|
if self.journald {
|
||||||
layers.push(
|
layers.push(
|
||||||
reth_tracing::journald(EnvFilter::builder().parse(&self.journald_filter)?)
|
reth_tracing::journald(
|
||||||
.expect("Could not connect to journald"),
|
EnvFilter::try_new(DEFAULT_ENV_FILTER_DIRECTIVE)?
|
||||||
|
.add_directive(self.journald_filter.parse()?),
|
||||||
|
)
|
||||||
|
.expect("Could not connect to journald"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let file_guard = if self.log_file_max_files > 0 {
|
let file_guard = if self.log_file_max_files > 0 {
|
||||||
let (layer, guard) = reth_tracing::file(
|
let (layer, guard) = reth_tracing::file(
|
||||||
EnvFilter::builder().parse(&self.log_file_filter)?,
|
EnvFilter::try_new(DEFAULT_ENV_FILTER_DIRECTIVE)?
|
||||||
|
.add_directive(self.log_file_filter.parse()?),
|
||||||
&self.log_file_directory,
|
&self.log_file_directory,
|
||||||
"reth.log",
|
"reth.log",
|
||||||
self.log_file_max_size * MB_TO_BYTES,
|
self.log_file_max_size * MB_TO_BYTES,
|
||||||
|
|||||||
@ -16,6 +16,7 @@ use std::{
|
|||||||
task::{Context, Poll},
|
task::{Context, Poll},
|
||||||
};
|
};
|
||||||
use tokio_stream::Stream;
|
use tokio_stream::Stream;
|
||||||
|
use tracing::{debug, trace};
|
||||||
|
|
||||||
/// [`MAX_MESSAGE_SIZE`] is the maximum cap on the size of a protocol message.
|
/// [`MAX_MESSAGE_SIZE`] is the maximum cap on the size of a protocol message.
|
||||||
// https://github.com/ethereum/go-ethereum/blob/30602163d5d8321fbc68afdcbbaf2362b2641bde/eth/protocols/eth/protocol.go#L50
|
// https://github.com/ethereum/go-ethereum/blob/30602163d5d8321fbc68afdcbbaf2362b2641bde/eth/protocols/eth/protocol.go#L50
|
||||||
@ -55,7 +56,7 @@ where
|
|||||||
status: Status,
|
status: Status,
|
||||||
fork_filter: ForkFilter,
|
fork_filter: ForkFilter,
|
||||||
) -> Result<(EthStream<S>, Status), EthStreamError> {
|
) -> Result<(EthStream<S>, Status), EthStreamError> {
|
||||||
tracing::trace!(
|
trace!(
|
||||||
%status,
|
%status,
|
||||||
"sending eth status to peer"
|
"sending eth status to peer"
|
||||||
);
|
);
|
||||||
@ -86,7 +87,7 @@ where
|
|||||||
let msg = match ProtocolMessage::decode_message(version, &mut their_msg.as_ref()) {
|
let msg = match ProtocolMessage::decode_message(version, &mut their_msg.as_ref()) {
|
||||||
Ok(m) => m,
|
Ok(m) => m,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
tracing::debug!("decode error in eth handshake: msg={their_msg:x}");
|
debug!("decode error in eth handshake: msg={their_msg:x}");
|
||||||
self.inner.disconnect(DisconnectReason::DisconnectRequested).await?;
|
self.inner.disconnect(DisconnectReason::DisconnectRequested).await?;
|
||||||
return Err(err)
|
return Err(err)
|
||||||
}
|
}
|
||||||
@ -96,7 +97,7 @@ where
|
|||||||
// https://github.com/ethereum/go-ethereum/blob/9244d5cd61f3ea5a7645fdf2a1a96d53421e412f/eth/protocols/eth/handshake.go#L87-L89
|
// https://github.com/ethereum/go-ethereum/blob/9244d5cd61f3ea5a7645fdf2a1a96d53421e412f/eth/protocols/eth/handshake.go#L87-L89
|
||||||
match msg.message {
|
match msg.message {
|
||||||
EthMessage::Status(resp) => {
|
EthMessage::Status(resp) => {
|
||||||
tracing::trace!(
|
trace!(
|
||||||
status=%resp,
|
status=%resp,
|
||||||
"validating incoming eth status from peer"
|
"validating incoming eth status from peer"
|
||||||
);
|
);
|
||||||
@ -241,7 +242,11 @@ where
|
|||||||
let msg = match ProtocolMessage::decode_message(*this.version, &mut bytes.as_ref()) {
|
let msg = match ProtocolMessage::decode_message(*this.version, &mut bytes.as_ref()) {
|
||||||
Ok(m) => m,
|
Ok(m) => m,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
tracing::debug!("decode error: msg={bytes:x}");
|
debug!(
|
||||||
|
version=?this.version,
|
||||||
|
msg=format!("{:02x?}...{:x?}", &bytes[..10], &bytes[bytes.len() - 10..]),
|
||||||
|
"failed to decode protocol message"
|
||||||
|
);
|
||||||
return Poll::Ready(Some(Err(err)))
|
return Poll::Ready(Some(Err(err)))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -9,7 +9,7 @@ repository.workspace = true
|
|||||||
description = "A basic payload builder for reth that uses the txpool API to build payloads."
|
description = "A basic payload builder for reth that uses the txpool API to build payloads."
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
## reth
|
# reth
|
||||||
reth-primitives.workspace = true
|
reth-primitives.workspace = true
|
||||||
reth-revm = { path = "../../revm" }
|
reth-revm = { path = "../../revm" }
|
||||||
reth-transaction-pool.workspace = true
|
reth-transaction-pool.workspace = true
|
||||||
@ -18,11 +18,11 @@ reth-payload-builder.workspace = true
|
|||||||
reth-tasks.workspace = true
|
reth-tasks.workspace = true
|
||||||
reth-interfaces.workspace = true
|
reth-interfaces.workspace = true
|
||||||
|
|
||||||
## ethereum
|
# ethereum
|
||||||
alloy-rlp.workspace = true
|
alloy-rlp.workspace = true
|
||||||
revm.workspace = true
|
revm.workspace = true
|
||||||
|
|
||||||
## async
|
# async
|
||||||
tokio = { workspace = true, features = ["sync", "time"] }
|
tokio = { workspace = true, features = ["sync", "time"] }
|
||||||
futures-core = "0.3"
|
futures-core = "0.3"
|
||||||
futures-util.workspace = true
|
futures-util.workspace = true
|
||||||
@ -31,7 +31,7 @@ futures-util.workspace = true
|
|||||||
reth-metrics.workspace = true
|
reth-metrics.workspace = true
|
||||||
metrics.workspace = true
|
metrics.workspace = true
|
||||||
|
|
||||||
## misc
|
# misc
|
||||||
tracing.workspace = true
|
tracing.workspace = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
|||||||
@ -9,27 +9,27 @@ repository.workspace = true
|
|||||||
description = "reth payload builder"
|
description = "reth payload builder"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
## reth
|
# reth
|
||||||
reth-primitives.workspace = true
|
reth-primitives.workspace = true
|
||||||
reth-rpc-types.workspace = true
|
reth-rpc-types.workspace = true
|
||||||
reth-transaction-pool.workspace = true
|
reth-transaction-pool.workspace = true
|
||||||
reth-interfaces.workspace = true
|
reth-interfaces.workspace = true
|
||||||
reth-rpc-types-compat.workspace = true
|
reth-rpc-types-compat.workspace = true
|
||||||
|
|
||||||
## ethereum
|
# ethereum
|
||||||
alloy-rlp.workspace = true
|
alloy-rlp.workspace = true
|
||||||
revm-primitives.workspace = true
|
revm-primitives.workspace = true
|
||||||
|
|
||||||
## async
|
# async
|
||||||
tokio = { workspace = true, features = ["sync"] }
|
tokio = { workspace = true, features = ["sync"] }
|
||||||
tokio-stream.workspace = true
|
tokio-stream.workspace = true
|
||||||
futures-util.workspace = true
|
futures-util.workspace = true
|
||||||
|
|
||||||
## metrics
|
# metrics
|
||||||
reth-metrics.workspace = true
|
reth-metrics.workspace = true
|
||||||
metrics.workspace = true
|
metrics.workspace = true
|
||||||
|
|
||||||
## misc
|
# misc
|
||||||
thiserror.workspace = true
|
thiserror.workspace = true
|
||||||
sha2 = { version = "0.10", default-features = false }
|
sha2 = { version = "0.10", default-features = false }
|
||||||
tracing.workspace = true
|
tracing.workspace = true
|
||||||
|
|||||||
@ -7,6 +7,7 @@ use std::{
|
|||||||
collections::{BTreeMap, HashMap},
|
collections::{BTreeMap, HashMap},
|
||||||
fmt::Debug,
|
fmt::Debug,
|
||||||
};
|
};
|
||||||
|
use tracing::trace;
|
||||||
|
|
||||||
mod state;
|
mod state;
|
||||||
pub use state::HashBuilderState;
|
pub use state::HashBuilderState;
|
||||||
@ -172,10 +173,10 @@ impl HashBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn set_key_value<T: Into<HashBuilderValue>>(&mut self, key: Nibbles, value: T) {
|
fn set_key_value<T: Into<HashBuilderValue>>(&mut self, key: Nibbles, value: T) {
|
||||||
tracing::trace!(target: "trie::hash_builder", key = ?self.key, value = ?self.value, "old key/value");
|
trace!(target: "trie::hash_builder", key = ?self.key, value = ?self.value, "old key/value");
|
||||||
self.key = key;
|
self.key = key;
|
||||||
self.value = value.into();
|
self.value = value.into();
|
||||||
tracing::trace!(target: "trie::hash_builder", key = ?self.key, value = ?self.value, "new key/value");
|
trace!(target: "trie::hash_builder", key = ?self.key, value = ?self.value, "new key/value");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn current_root(&self) -> B256 {
|
fn current_root(&self) -> B256 {
|
||||||
@ -199,7 +200,7 @@ impl HashBuilder {
|
|||||||
// current / self.key is always the latest added element in the trie
|
// current / self.key is always the latest added element in the trie
|
||||||
let mut current = self.key.clone();
|
let mut current = self.key.clone();
|
||||||
|
|
||||||
tracing::debug!(target: "trie::hash_builder", ?current, ?succeeding, "updating merkle tree");
|
trace!(target: "trie::hash_builder", ?current, ?succeeding, "updating merkle tree");
|
||||||
|
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
loop {
|
loop {
|
||||||
@ -220,7 +221,7 @@ impl HashBuilder {
|
|||||||
let len = std::cmp::max(preceding_len, common_prefix_len);
|
let len = std::cmp::max(preceding_len, common_prefix_len);
|
||||||
assert!(len < current.len());
|
assert!(len < current.len());
|
||||||
|
|
||||||
tracing::trace!(
|
trace!(
|
||||||
target: "trie::hash_builder",
|
target: "trie::hash_builder",
|
||||||
?len,
|
?len,
|
||||||
?common_prefix_len,
|
?common_prefix_len,
|
||||||
@ -233,11 +234,11 @@ impl HashBuilder {
|
|||||||
let extra_digit = current[len];
|
let extra_digit = current[len];
|
||||||
if self.groups.len() <= len {
|
if self.groups.len() <= len {
|
||||||
let new_len = len + 1;
|
let new_len = len + 1;
|
||||||
tracing::trace!(target: "trie::hash_builder", new_len, old_len = self.groups.len(), "scaling state masks to fit");
|
trace!(target: "trie::hash_builder", new_len, old_len = self.groups.len(), "scaling state masks to fit");
|
||||||
self.groups.resize(new_len, TrieMask::default());
|
self.groups.resize(new_len, TrieMask::default());
|
||||||
}
|
}
|
||||||
self.groups[len] |= TrieMask::from_nibble(extra_digit);
|
self.groups[len] |= TrieMask::from_nibble(extra_digit);
|
||||||
tracing::trace!(
|
trace!(
|
||||||
target: "trie::hash_builder",
|
target: "trie::hash_builder",
|
||||||
?extra_digit,
|
?extra_digit,
|
||||||
groups = self.groups.iter().map(|x| format!("{x:?}")).collect::<Vec<_>>().join(","),
|
groups = self.groups.iter().map(|x| format!("{x:?}")).collect::<Vec<_>>().join(","),
|
||||||
@ -252,19 +253,19 @@ impl HashBuilder {
|
|||||||
if !succeeding.is_empty() || preceding_exists {
|
if !succeeding.is_empty() || preceding_exists {
|
||||||
len_from += 1;
|
len_from += 1;
|
||||||
}
|
}
|
||||||
tracing::trace!(target: "trie::hash_builder", "skipping {} nibbles", len_from);
|
trace!(target: "trie::hash_builder", "skipping {} nibbles", len_from);
|
||||||
|
|
||||||
// The key without the common prefix
|
// The key without the common prefix
|
||||||
let short_node_key = current.slice_from(len_from);
|
let short_node_key = current.slice_from(len_from);
|
||||||
tracing::trace!(target: "trie::hash_builder", ?short_node_key);
|
trace!(target: "trie::hash_builder", ?short_node_key);
|
||||||
|
|
||||||
// Concatenate the 2 nodes together
|
// Concatenate the 2 nodes together
|
||||||
if !build_extensions {
|
if !build_extensions {
|
||||||
match &self.value {
|
match &self.value {
|
||||||
HashBuilderValue::Bytes(leaf_value) => {
|
HashBuilderValue::Bytes(leaf_value) => {
|
||||||
let leaf_node = LeafNode::new(&short_node_key, leaf_value);
|
let leaf_node = LeafNode::new(&short_node_key, leaf_value);
|
||||||
tracing::debug!(target: "trie::hash_builder", ?leaf_node, "pushing leaf node");
|
trace!(target: "trie::hash_builder", ?leaf_node, "pushing leaf node");
|
||||||
tracing::trace!(target: "trie::hash_builder", rlp = {
|
trace!(target: "trie::hash_builder", rlp = {
|
||||||
self.rlp_buf.clear();
|
self.rlp_buf.clear();
|
||||||
crate::hex::encode(&leaf_node.rlp(&mut self.rlp_buf))
|
crate::hex::encode(&leaf_node.rlp(&mut self.rlp_buf))
|
||||||
}, "leaf node rlp");
|
}, "leaf node rlp");
|
||||||
@ -274,7 +275,7 @@ impl HashBuilder {
|
|||||||
self.retain_proof_from_buf(¤t);
|
self.retain_proof_from_buf(¤t);
|
||||||
}
|
}
|
||||||
HashBuilderValue::Hash(hash) => {
|
HashBuilderValue::Hash(hash) => {
|
||||||
tracing::debug!(target: "trie::hash_builder", ?hash, "pushing branch node hash");
|
trace!(target: "trie::hash_builder", ?hash, "pushing branch node hash");
|
||||||
self.stack.push(rlp_hash(*hash));
|
self.stack.push(rlp_hash(*hash));
|
||||||
|
|
||||||
if self.stored_in_database {
|
if self.stored_in_database {
|
||||||
@ -294,8 +295,8 @@ impl HashBuilder {
|
|||||||
let stack_last =
|
let stack_last =
|
||||||
self.stack.pop().expect("there should be at least one stack item; qed");
|
self.stack.pop().expect("there should be at least one stack item; qed");
|
||||||
let extension_node = ExtensionNode::new(&short_node_key, &stack_last);
|
let extension_node = ExtensionNode::new(&short_node_key, &stack_last);
|
||||||
tracing::debug!(target: "trie::hash_builder", ?extension_node, "pushing extension node");
|
trace!(target: "trie::hash_builder", ?extension_node, "pushing extension node");
|
||||||
tracing::trace!(target: "trie::hash_builder", rlp = {
|
trace!(target: "trie::hash_builder", rlp = {
|
||||||
self.rlp_buf.clear();
|
self.rlp_buf.clear();
|
||||||
crate::hex::encode(&extension_node.rlp(&mut self.rlp_buf))
|
crate::hex::encode(&extension_node.rlp(&mut self.rlp_buf))
|
||||||
}, "extension node rlp");
|
}, "extension node rlp");
|
||||||
@ -306,7 +307,7 @@ impl HashBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if preceding_len <= common_prefix_len && !succeeding.is_empty() {
|
if preceding_len <= common_prefix_len && !succeeding.is_empty() {
|
||||||
tracing::trace!(target: "trie::hash_builder", "no common prefix to create branch nodes from, returning");
|
trace!(target: "trie::hash_builder", "no common prefix to create branch nodes from, returning");
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,14 +324,14 @@ impl HashBuilder {
|
|||||||
self.resize_masks(len);
|
self.resize_masks(len);
|
||||||
|
|
||||||
if preceding_len == 0 {
|
if preceding_len == 0 {
|
||||||
tracing::trace!(target: "trie::hash_builder", "0 or 1 state masks means we have no more elements to process");
|
trace!(target: "trie::hash_builder", "0 or 1 state masks means we have no more elements to process");
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
current.truncate(preceding_len);
|
current.truncate(preceding_len);
|
||||||
tracing::trace!(target: "trie::hash_builder", ?current, "truncated nibbles to {} bytes", preceding_len);
|
trace!(target: "trie::hash_builder", ?current, "truncated nibbles to {} bytes", preceding_len);
|
||||||
|
|
||||||
tracing::trace!(target: "trie::hash_builder", groups = ?self.groups, "popping empty state masks");
|
trace!(target: "trie::hash_builder", groups = ?self.groups, "popping empty state masks");
|
||||||
while self.groups.last() == Some(&TrieMask::default()) {
|
while self.groups.last() == Some(&TrieMask::default()) {
|
||||||
self.groups.pop();
|
self.groups.pop();
|
||||||
}
|
}
|
||||||
@ -356,7 +357,7 @@ impl HashBuilder {
|
|||||||
|
|
||||||
// Clears the stack from the branch node elements
|
// Clears the stack from the branch node elements
|
||||||
let first_child_idx = self.stack.len() - state_mask.count_ones() as usize;
|
let first_child_idx = self.stack.len() - state_mask.count_ones() as usize;
|
||||||
tracing::debug!(
|
trace!(
|
||||||
target: "trie::hash_builder",
|
target: "trie::hash_builder",
|
||||||
new_len = first_child_idx,
|
new_len = first_child_idx,
|
||||||
old_len = self.stack.len(),
|
old_len = self.stack.len(),
|
||||||
@ -364,8 +365,8 @@ impl HashBuilder {
|
|||||||
);
|
);
|
||||||
self.stack.resize(first_child_idx, vec![]);
|
self.stack.resize(first_child_idx, vec![]);
|
||||||
|
|
||||||
tracing::debug!(target: "trie::hash_builder", "pushing branch node with {:?} mask from stack", state_mask);
|
trace!(target: "trie::hash_builder", "pushing branch node with {:?} mask from stack", state_mask);
|
||||||
tracing::trace!(target: "trie::hash_builder", rlp = crate::hex::encode(&rlp), "branch node rlp");
|
trace!(target: "trie::hash_builder", rlp = crate::hex::encode(&rlp), "branch node rlp");
|
||||||
self.stack.push(rlp);
|
self.stack.push(rlp);
|
||||||
children
|
children
|
||||||
}
|
}
|
||||||
@ -401,7 +402,7 @@ impl HashBuilder {
|
|||||||
|
|
||||||
// Send it over to the provided channel which will handle it on the
|
// Send it over to the provided channel which will handle it on the
|
||||||
// other side of the HashBuilder
|
// other side of the HashBuilder
|
||||||
tracing::debug!(target: "trie::hash_builder", node = ?n, "intermediate node");
|
trace!(target: "trie::hash_builder", node = ?n, "intermediate node");
|
||||||
let common_prefix = current.slice(0, len);
|
let common_prefix = current.slice(0, len);
|
||||||
if let Some(nodes) = self.updated_branch_nodes.as_mut() {
|
if let Some(nodes) = self.updated_branch_nodes.as_mut() {
|
||||||
nodes.insert(common_prefix, n);
|
nodes.insert(common_prefix, n);
|
||||||
@ -428,7 +429,7 @@ impl HashBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn resize_masks(&mut self, new_len: usize) {
|
fn resize_masks(&mut self, new_len: usize) {
|
||||||
tracing::trace!(
|
trace!(
|
||||||
target: "trie::hash_builder",
|
target: "trie::hash_builder",
|
||||||
new_len,
|
new_len,
|
||||||
old_tree_mask_len = self.tree_masks.len(),
|
old_tree_mask_len = self.tree_masks.len(),
|
||||||
|
|||||||
@ -10,16 +10,16 @@ description = "Task management"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
||||||
## async
|
# async
|
||||||
tokio = { workspace = true, features = ["sync", "rt"] }
|
tokio = { workspace = true, features = ["sync", "rt"] }
|
||||||
tracing-futures = "0.2"
|
tracing-futures = "0.2"
|
||||||
futures-util.workspace = true
|
futures-util.workspace = true
|
||||||
|
|
||||||
## metrics
|
# metrics
|
||||||
reth-metrics.workspace = true
|
reth-metrics.workspace = true
|
||||||
metrics.workspace = true
|
metrics.workspace = true
|
||||||
|
|
||||||
## misc
|
# misc
|
||||||
tracing.workspace = true
|
tracing.workspace = true
|
||||||
thiserror.workspace = true
|
thiserror.workspace = true
|
||||||
dyn-clone = "1.0"
|
dyn-clone = "1.0"
|
||||||
|
|||||||
@ -21,6 +21,7 @@ use std::{
|
|||||||
collections::{HashMap, HashSet},
|
collections::{HashMap, HashSet},
|
||||||
ops::RangeInclusive,
|
ops::RangeInclusive,
|
||||||
};
|
};
|
||||||
|
use tracing::{debug, trace};
|
||||||
|
|
||||||
/// StateRoot is used to compute the root node of a state trie.
|
/// StateRoot is used to compute the root node of a state trie.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -143,7 +144,7 @@ impl<'a, TX: DbTx> StateRoot<'a, TX, &'a TX> {
|
|||||||
tx: &'a TX,
|
tx: &'a TX,
|
||||||
range: RangeInclusive<BlockNumber>,
|
range: RangeInclusive<BlockNumber>,
|
||||||
) -> Result<B256, StateRootError> {
|
) -> Result<B256, StateRootError> {
|
||||||
tracing::debug!(target: "trie::loader", "incremental state root");
|
debug!(target: "trie::loader", ?range, "incremental state root");
|
||||||
Self::incremental_root_calculator(tx, range)?.root()
|
Self::incremental_root_calculator(tx, range)?.root()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +160,7 @@ impl<'a, TX: DbTx> StateRoot<'a, TX, &'a TX> {
|
|||||||
tx: &'a TX,
|
tx: &'a TX,
|
||||||
range: RangeInclusive<BlockNumber>,
|
range: RangeInclusive<BlockNumber>,
|
||||||
) -> Result<(B256, TrieUpdates), StateRootError> {
|
) -> Result<(B256, TrieUpdates), StateRootError> {
|
||||||
tracing::debug!(target: "trie::loader", "incremental state root");
|
debug!(target: "trie::loader", ?range, "incremental state root");
|
||||||
Self::incremental_root_calculator(tx, range)?.root_with_updates()
|
Self::incremental_root_calculator(tx, range)?.root_with_updates()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,7 +174,7 @@ impl<'a, TX: DbTx> StateRoot<'a, TX, &'a TX> {
|
|||||||
tx: &'a TX,
|
tx: &'a TX,
|
||||||
range: RangeInclusive<BlockNumber>,
|
range: RangeInclusive<BlockNumber>,
|
||||||
) -> Result<StateRootProgress, StateRootError> {
|
) -> Result<StateRootProgress, StateRootError> {
|
||||||
tracing::debug!(target: "trie::loader", "incremental state root with progress");
|
debug!(target: "trie::loader", ?range, "incremental state root with progress");
|
||||||
Self::incremental_root_calculator(tx, range)?.root_with_progress()
|
Self::incremental_root_calculator(tx, range)?.root_with_progress()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -222,7 +223,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn calculate(self, retain_updates: bool) -> Result<StateRootProgress, StateRootError> {
|
fn calculate(self, retain_updates: bool) -> Result<StateRootProgress, StateRootError> {
|
||||||
tracing::debug!(target: "trie::loader", "calculating state root");
|
trace!(target: "trie::loader", "calculating state root");
|
||||||
let mut trie_updates = TrieUpdates::default();
|
let mut trie_updates = TrieUpdates::default();
|
||||||
|
|
||||||
let hashed_account_cursor = self.hashed_cursor_factory.hashed_account_cursor()?;
|
let hashed_account_cursor = self.hashed_cursor_factory.hashed_account_cursor()?;
|
||||||
@ -432,7 +433,7 @@ where
|
|||||||
&self,
|
&self,
|
||||||
retain_updates: bool,
|
retain_updates: bool,
|
||||||
) -> Result<(B256, usize, TrieUpdates), StorageRootError> {
|
) -> Result<(B256, usize, TrieUpdates), StorageRootError> {
|
||||||
tracing::debug!(target: "trie::storage_root", hashed_address = ?self.hashed_address, "calculating storage root");
|
trace!(target: "trie::storage_root", hashed_address = ?self.hashed_address, "calculating storage root");
|
||||||
let mut hashed_storage_cursor = self.hashed_cursor_factory.hashed_storage_cursor()?;
|
let mut hashed_storage_cursor = self.hashed_cursor_factory.hashed_storage_cursor()?;
|
||||||
|
|
||||||
// short circuit on empty storage
|
// short circuit on empty storage
|
||||||
@ -480,7 +481,7 @@ where
|
|||||||
trie_updates.extend(walker_updates.into_iter());
|
trie_updates.extend(walker_updates.into_iter());
|
||||||
trie_updates.extend_with_storage_updates(self.hashed_address, hash_builder_updates);
|
trie_updates.extend_with_storage_updates(self.hashed_address, hash_builder_updates);
|
||||||
|
|
||||||
tracing::debug!(target: "trie::storage_root", ?root, hashed_address = ?self.hashed_address, "calculated storage root");
|
trace!(target: "trie::storage_root", ?root, hashed_address = ?self.hashed_address, "calculated storage root");
|
||||||
Ok((root, storage_slots_walked, trie_updates))
|
Ok((root, storage_slots_walked, trie_updates))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user