mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
chore: use format_gas and format_gas_throughput for gas logs (#9247)
This commit is contained in:
3
Cargo.lock
generated
3
Cargo.lock
generated
@ -7293,6 +7293,7 @@ dependencies = [
|
||||
"reth-node-core",
|
||||
"reth-payload-builder",
|
||||
"reth-primitives",
|
||||
"reth-primitives-traits",
|
||||
"reth-provider",
|
||||
"reth-prune-types",
|
||||
"reth-revm",
|
||||
@ -7755,6 +7756,7 @@ dependencies = [
|
||||
"reth-network",
|
||||
"reth-network-api",
|
||||
"reth-primitives",
|
||||
"reth-primitives-traits",
|
||||
"reth-provider",
|
||||
"reth-prune",
|
||||
"reth-stages",
|
||||
@ -8409,6 +8411,7 @@ dependencies = [
|
||||
"reth-network-p2p",
|
||||
"reth-network-peers",
|
||||
"reth-primitives",
|
||||
"reth-primitives-traits",
|
||||
"reth-provider",
|
||||
"reth-prune-types",
|
||||
"reth-revm",
|
||||
|
||||
@ -19,6 +19,7 @@ reth-metrics.workspace = true
|
||||
reth-node-api.workspace = true
|
||||
reth-node-core.workspace = true
|
||||
reth-primitives.workspace = true
|
||||
reth-primitives-traits.workspace = true
|
||||
reth-provider.workspace = true
|
||||
reth-tasks.workspace = true
|
||||
reth-tracing.workspace = true
|
||||
|
||||
@ -2,10 +2,11 @@ use reth_db_api::database::Database;
|
||||
use reth_evm::execute::{BatchExecutor, BlockExecutionError, BlockExecutorProvider};
|
||||
use reth_node_api::FullNodeComponents;
|
||||
use reth_primitives::{Block, BlockNumber};
|
||||
use reth_primitives_traits::format_gas_throughput;
|
||||
use reth_provider::{Chain, FullProvider, ProviderError, TransactionVariant};
|
||||
use reth_prune_types::PruneModes;
|
||||
use reth_revm::database::StateProviderDatabase;
|
||||
use reth_stages_api::{format_gas_throughput, ExecutionStageThresholds};
|
||||
use reth_stages_api::ExecutionStageThresholds;
|
||||
use reth_tracing::tracing::{debug, trace};
|
||||
use std::{
|
||||
marker::PhantomData,
|
||||
|
||||
@ -20,6 +20,7 @@ reth-prune.workspace = true
|
||||
reth-static-file.workspace = true
|
||||
reth-db-api.workspace = true
|
||||
reth-primitives.workspace = true
|
||||
reth-primitives-traits.workspace = true
|
||||
|
||||
# alloy
|
||||
alloy-rpc-types-engine.workspace = true
|
||||
|
||||
@ -10,6 +10,7 @@ use reth_db_api::{database::Database, database_metrics::DatabaseMetadata};
|
||||
use reth_network::{NetworkEvent, NetworkHandle};
|
||||
use reth_network_api::PeersInfo;
|
||||
use reth_primitives::{constants, BlockNumber, B256};
|
||||
use reth_primitives_traits::{format_gas, format_gas_throughput};
|
||||
use reth_prune::PrunerEvent;
|
||||
use reth_stages::{EntitiesCheckpoint, ExecOutput, PipelineEvent, StageCheckpoint, StageId};
|
||||
use reth_static_file::StaticFileProducerEvent;
|
||||
@ -279,8 +280,8 @@ impl<DB> NodeState<DB> {
|
||||
hash=?block.hash(),
|
||||
peers=self.num_connected_peers(),
|
||||
txs=block.body.len(),
|
||||
mgas=%format!("{:.3}MGas", block.header.gas_used as f64 / constants::MGAS_TO_GAS as f64),
|
||||
mgas_throughput=%format!("{:.3}MGas/s", block.header.gas_used as f64 / elapsed.as_secs_f64() / constants::MGAS_TO_GAS as f64),
|
||||
gas=format_gas(block.header.gas_used),
|
||||
gas_throughput=format_gas_throughput(block.header.gas_used, elapsed),
|
||||
full=%format!("{:.1}%", block.header.gas_used as f64 * 100.0 / block.header.gas_limit as f64),
|
||||
base_fee=%format!("{:.2}gwei", block.header.base_fee_per_gas.unwrap_or(0) as f64 / constants::GWEI_TO_WEI as f64),
|
||||
blobs=block.header.blob_gas_used.unwrap_or(0) / constants::eip4844::DATA_GAS_PER_BLOB,
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
use std::time::Duration;
|
||||
|
||||
/// Represents one Kilogas, or `1_000` gas.
|
||||
pub const KILOGAS: u64 = 1_000;
|
||||
|
||||
@ -6,3 +8,73 @@ pub const MEGAGAS: u64 = KILOGAS * 1_000;
|
||||
|
||||
/// Represents one Gigagas, or `1_000_000_000` gas.
|
||||
pub const GIGAGAS: u64 = MEGAGAS * 1_000;
|
||||
|
||||
/// Returns a formatted gas throughput log, showing either:
|
||||
/// * "Kgas/s", or 1,000 gas per second
|
||||
/// * "Mgas/s", or 1,000,000 gas per second
|
||||
/// * "Ggas/s", or 1,000,000,000 gas per second
|
||||
///
|
||||
/// Depending on the magnitude of the gas throughput.
|
||||
pub fn format_gas_throughput(gas: u64, execution_duration: Duration) -> String {
|
||||
let gas_per_second = gas as f64 / execution_duration.as_secs_f64();
|
||||
if gas_per_second < MEGAGAS as f64 {
|
||||
format!("{:.} Kgas/second", gas_per_second / KILOGAS as f64)
|
||||
} else if gas_per_second < GIGAGAS as f64 {
|
||||
format!("{:.} Mgas/second", gas_per_second / MEGAGAS as f64)
|
||||
} else {
|
||||
format!("{:.} Ggas/second", gas_per_second / GIGAGAS as f64)
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns a formatted gas log, showing either:
|
||||
/// * "Kgas", or 1,000 gas
|
||||
/// * "Mgas", or 1,000,000 gas
|
||||
/// * "Ggas", or 1,000,000,000 gas
|
||||
///
|
||||
/// Depending on the magnitude of gas.
|
||||
pub fn format_gas(gas: u64) -> String {
|
||||
let gas = gas as f64;
|
||||
if gas < MEGAGAS as f64 {
|
||||
format!("{:.} Kgas", gas / KILOGAS as f64)
|
||||
} else if gas < GIGAGAS as f64 {
|
||||
format!("{:.} Mgas", gas / MEGAGAS as f64)
|
||||
} else {
|
||||
format!("{:.} Ggas", gas / GIGAGAS as f64)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_gas_fmt() {
|
||||
let gas = 100_000;
|
||||
let gas_unit = format_gas(gas);
|
||||
assert_eq!(gas_unit, "100 Kgas");
|
||||
|
||||
let gas = 100_000_000;
|
||||
let gas_unit = format_gas(gas);
|
||||
assert_eq!(gas_unit, "100 Mgas");
|
||||
|
||||
let gas = 100_000_000_000;
|
||||
let gas_unit = format_gas(gas);
|
||||
assert_eq!(gas_unit, "100 Ggas");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_gas_throughput_fmt() {
|
||||
let duration = Duration::from_secs(1);
|
||||
let gas = 100_000;
|
||||
let throughput = format_gas_throughput(gas, duration);
|
||||
assert_eq!(throughput, "100 Kgas/second");
|
||||
|
||||
let gas = 100_000_000;
|
||||
let throughput = format_gas_throughput(gas, duration);
|
||||
assert_eq!(throughput, "100 Mgas/second");
|
||||
|
||||
let gas = 100_000_000_000;
|
||||
let throughput = format_gas_throughput(gas, duration);
|
||||
assert_eq!(throughput, "100 Ggas/second");
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,8 +3,9 @@
|
||||
use alloy_primitives::{address, b256, Address, B256, U256};
|
||||
use core::time::Duration;
|
||||
|
||||
/// Gas units, for example [`GIGAGAS`](gas_units::GIGAGAS).
|
||||
/// Gas units, for example [`GIGAGAS`].
|
||||
pub mod gas_units;
|
||||
pub use gas_units::{GIGAGAS, KILOGAS, MEGAGAS};
|
||||
|
||||
/// The client version: `reth/v{major}.{minor}.{patch}`
|
||||
pub const RETH_CLIENT_VERSION: &str = concat!("reth/v", env!("CARGO_PKG_VERSION"));
|
||||
@ -98,9 +99,6 @@ pub const FINNEY_TO_WEI: u128 = (GWEI_TO_WEI as u128) * 1_000_000;
|
||||
/// Multiplier for converting ether to wei.
|
||||
pub const ETH_TO_WEI: u128 = FINNEY_TO_WEI * 1000;
|
||||
|
||||
/// Multiplier for converting mgas to gas.
|
||||
pub const MGAS_TO_GAS: u64 = 1_000_000u64;
|
||||
|
||||
/// The Ethereum mainnet genesis hash:
|
||||
/// `0x0d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3`
|
||||
pub const MAINNET_GENESIS_HASH: B256 =
|
||||
|
||||
@ -14,6 +14,7 @@ mod alloy_compat;
|
||||
|
||||
/// Common constants.
|
||||
pub mod constants;
|
||||
pub use constants::gas_units::{format_gas, format_gas_throughput};
|
||||
|
||||
/// Minimal account
|
||||
pub mod account;
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
use std::time::Duration;
|
||||
|
||||
use reth_primitives_traits::constants::gas_units::{GIGAGAS, KILOGAS, MEGAGAS};
|
||||
|
||||
/// Returns a formatted gas throughput log, showing either:
|
||||
/// * "Kgas/s", or 1,000 gas per second
|
||||
/// * "Mgas/s", or 1,000,000 gas per second
|
||||
/// * "Ggas/s", or 1,000,000,000 gas per second
|
||||
///
|
||||
/// Depending on the magnitude of the gas throughput.
|
||||
pub fn format_gas_throughput(gas: u64, execution_duration: Duration) -> String {
|
||||
let gas_per_second = gas as f64 / execution_duration.as_secs_f64();
|
||||
if gas_per_second < MEGAGAS as f64 {
|
||||
format!("{:.} Kgas/second", gas_per_second / KILOGAS as f64)
|
||||
} else if gas_per_second < GIGAGAS as f64 {
|
||||
format!("{:.} Mgas/second", gas_per_second / MEGAGAS as f64)
|
||||
} else {
|
||||
format!("{:.} Ggas/second", gas_per_second / GIGAGAS as f64)
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
use crate::{metrics::SyncMetrics, StageCheckpoint, StageId};
|
||||
use alloy_primitives::BlockNumber;
|
||||
use reth_primitives_traits::constants::MGAS_TO_GAS;
|
||||
use reth_primitives_traits::constants::MEGAGAS;
|
||||
use std::{
|
||||
future::Future,
|
||||
pin::Pin,
|
||||
@ -83,7 +83,7 @@ impl MetricsListener {
|
||||
}
|
||||
}
|
||||
MetricEvent::ExecutionStageGas { gas } => {
|
||||
self.sync_metrics.execution_stage.mgas_processed_total.increment(gas / MGAS_TO_GAS)
|
||||
self.sync_metrics.execution_stage.mgas_processed_total.increment(gas / MEGAGAS)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
mod execution;
|
||||
mod listener;
|
||||
mod sync_metrics;
|
||||
|
||||
pub use execution::format_gas_throughput;
|
||||
pub use listener::{MetricEvent, MetricEventsSender, MetricsListener};
|
||||
use sync_metrics::*;
|
||||
|
||||
@ -24,6 +24,7 @@ reth-evm.workspace = true
|
||||
reth-exex.workspace = true
|
||||
reth-network-p2p.workspace = true
|
||||
reth-primitives.workspace = true
|
||||
reth-primitives-traits.workspace = true
|
||||
reth-provider.workspace = true
|
||||
reth-execution-types.workspace = true
|
||||
reth-prune-types.workspace = true
|
||||
|
||||
@ -7,6 +7,7 @@ use reth_evm::execute::{BatchExecutor, BlockExecutorProvider};
|
||||
use reth_execution_types::{Chain, ExecutionOutcome};
|
||||
use reth_exex::{ExExManagerHandle, ExExNotification};
|
||||
use reth_primitives::{BlockNumber, Header, StaticFileSegment};
|
||||
use reth_primitives_traits::format_gas_throughput;
|
||||
use reth_provider::{
|
||||
providers::{StaticFileProvider, StaticFileProviderRWRefMut, StaticFileWriter},
|
||||
BlockReader, DatabaseProviderRW, HeaderProvider, LatestStateProviderRef, OriginalValuesKnown,
|
||||
@ -15,9 +16,9 @@ use reth_provider::{
|
||||
use reth_prune_types::PruneModes;
|
||||
use reth_revm::database::StateProviderDatabase;
|
||||
use reth_stages_api::{
|
||||
format_gas_throughput, BlockErrorKind, CheckpointBlockRange, EntitiesCheckpoint, ExecInput,
|
||||
ExecOutput, ExecutionCheckpoint, ExecutionStageThresholds, MetricEvent, MetricEventsSender,
|
||||
Stage, StageCheckpoint, StageError, StageId, UnwindInput, UnwindOutput,
|
||||
BlockErrorKind, CheckpointBlockRange, EntitiesCheckpoint, ExecInput, ExecOutput,
|
||||
ExecutionCheckpoint, ExecutionStageThresholds, MetricEvent, MetricEventsSender, Stage,
|
||||
StageCheckpoint, StageError, StageId, UnwindInput, UnwindOutput,
|
||||
};
|
||||
use std::{
|
||||
cmp::Ordering,
|
||||
@ -640,7 +641,7 @@ mod tests {
|
||||
StaticFileProviderFactory,
|
||||
};
|
||||
use reth_prune_types::{PruneMode, ReceiptsLogPruneConfig};
|
||||
use reth_stages_api::{format_gas_throughput, StageUnitCheckpoint};
|
||||
use reth_stages_api::StageUnitCheckpoint;
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
fn stage() -> ExecutionStage<EthExecutorProvider> {
|
||||
@ -661,22 +662,6 @@ mod tests {
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_gas_throughput_fmt() {
|
||||
let duration = Duration::from_secs(1);
|
||||
let gas = 100_000;
|
||||
let throughput = format_gas_throughput(gas, duration);
|
||||
assert_eq!(throughput, "100 Kgas/second");
|
||||
|
||||
let gas = 100_000_000;
|
||||
let throughput = format_gas_throughput(gas, duration);
|
||||
assert_eq!(throughput, "100 Mgas/second");
|
||||
|
||||
let gas = 100_000_000_000;
|
||||
let throughput = format_gas_throughput(gas, duration);
|
||||
assert_eq!(throughput, "100 Ggas/second");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn execution_checkpoint_matches() {
|
||||
let factory = create_test_provider_factory();
|
||||
|
||||
Reference in New Issue
Block a user