mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-02-19 03:04:27 -05:00
143 lines
4.4 KiB
Rust
143 lines
4.4 KiB
Rust
//! Version information for reth.
|
|
use std::{borrow::Cow, sync::OnceLock};
|
|
|
|
use alloy_primitives::Bytes;
|
|
use alloy_rpc_types_engine::ClientCode;
|
|
use reth_db::ClientVersion;
|
|
|
|
/// The client code for Reth
|
|
pub const CLIENT_CODE: ClientCode = ClientCode::RH;
|
|
|
|
/// Global static version metadata
|
|
static VERSION_METADATA: OnceLock<RethCliVersionConsts> = OnceLock::new();
|
|
|
|
/// Initialize the global version metadata.
|
|
pub fn try_init_version_metadata(
|
|
metadata: RethCliVersionConsts,
|
|
) -> Result<(), RethCliVersionConsts> {
|
|
VERSION_METADATA.set(metadata)
|
|
}
|
|
|
|
/// Constants for reth-cli
|
|
///
|
|
/// Global defaults can be set via [`try_init_version_metadata`].
|
|
#[derive(Debug, Default)]
|
|
pub struct RethCliVersionConsts {
|
|
/// The human readable name of the client
|
|
pub name_client: Cow<'static, str>,
|
|
|
|
/// The latest version from Cargo.toml.
|
|
pub cargo_pkg_version: Cow<'static, str>,
|
|
|
|
/// The full SHA of the latest commit.
|
|
pub vergen_git_sha_long: Cow<'static, str>,
|
|
|
|
/// The 8 character short SHA of the latest commit.
|
|
pub vergen_git_sha: Cow<'static, str>,
|
|
|
|
/// The build timestamp.
|
|
pub vergen_build_timestamp: Cow<'static, str>,
|
|
|
|
/// The target triple.
|
|
pub vergen_cargo_target_triple: Cow<'static, str>,
|
|
|
|
/// The build features.
|
|
pub vergen_cargo_features: Cow<'static, str>,
|
|
|
|
/// The short version information for reth.
|
|
pub short_version: Cow<'static, str>,
|
|
|
|
/// The long version information for reth.
|
|
pub long_version: Cow<'static, str>,
|
|
/// The build profile name.
|
|
pub build_profile_name: Cow<'static, str>,
|
|
|
|
/// The version information for reth formatted for P2P (devp2p).
|
|
///
|
|
/// - The latest version from Cargo.toml
|
|
/// - The target triple
|
|
///
|
|
/// # Example
|
|
///
|
|
/// ```text
|
|
/// reth/v{major}.{minor}.{patch}-{sha1}/{target}
|
|
/// ```
|
|
/// e.g.: `reth/v0.1.0-alpha.1-428a6dc2f/aarch64-apple-darwin`
|
|
pub p2p_client_version: Cow<'static, str>,
|
|
|
|
/// extra data used for payload building
|
|
pub extra_data: Cow<'static, str>,
|
|
}
|
|
|
|
/// The default extra data used for payload building.
|
|
///
|
|
/// - The latest version from Cargo.toml
|
|
/// - The OS identifier
|
|
///
|
|
/// # Example
|
|
///
|
|
/// ```text
|
|
/// reth/v{major}.{minor}.{patch}/{OS}
|
|
/// ```
|
|
pub fn default_extra_data() -> String {
|
|
format!("reth/v{}/{}", env!("CARGO_PKG_VERSION"), std::env::consts::OS)
|
|
}
|
|
|
|
/// The default extra data in bytes.
|
|
/// See [`default_extra_data`].
|
|
pub fn default_extra_data_bytes() -> Bytes {
|
|
Bytes::from(default_extra_data().as_bytes().to_vec())
|
|
}
|
|
|
|
/// The default client version accessing the database.
|
|
pub fn default_client_version() -> ClientVersion {
|
|
let meta = version_metadata();
|
|
ClientVersion {
|
|
version: meta.cargo_pkg_version.to_string(),
|
|
git_sha: meta.vergen_git_sha.to_string(),
|
|
build_timestamp: meta.vergen_build_timestamp.to_string(),
|
|
}
|
|
}
|
|
|
|
/// Get a reference to the global version metadata
|
|
pub fn version_metadata() -> &'static RethCliVersionConsts {
|
|
VERSION_METADATA.get_or_init(default_reth_version_metadata)
|
|
}
|
|
|
|
/// default reth version metadata using compile-time env! macros.
|
|
pub fn default_reth_version_metadata() -> RethCliVersionConsts {
|
|
RethCliVersionConsts {
|
|
name_client: Cow::Borrowed("Reth"),
|
|
cargo_pkg_version: Cow::Borrowed(env!("CARGO_PKG_VERSION")),
|
|
vergen_git_sha_long: Cow::Borrowed(env!("VERGEN_GIT_SHA")),
|
|
vergen_git_sha: Cow::Borrowed(env!("VERGEN_GIT_SHA_SHORT")),
|
|
vergen_build_timestamp: Cow::Borrowed(env!("VERGEN_BUILD_TIMESTAMP")),
|
|
vergen_cargo_target_triple: Cow::Borrowed(env!("VERGEN_CARGO_TARGET_TRIPLE")),
|
|
vergen_cargo_features: Cow::Borrowed(env!("VERGEN_CARGO_FEATURES")),
|
|
short_version: Cow::Borrowed(env!("RETH_SHORT_VERSION")),
|
|
long_version: Cow::Owned(format!(
|
|
"{}\n{}\n{}\n{}\n{}",
|
|
env!("RETH_LONG_VERSION_0"),
|
|
env!("RETH_LONG_VERSION_1"),
|
|
env!("RETH_LONG_VERSION_2"),
|
|
env!("RETH_LONG_VERSION_3"),
|
|
env!("RETH_LONG_VERSION_4"),
|
|
)),
|
|
|
|
build_profile_name: Cow::Borrowed(env!("RETH_BUILD_PROFILE")),
|
|
p2p_client_version: Cow::Borrowed(env!("RETH_P2P_CLIENT_VERSION")),
|
|
extra_data: Cow::Owned(default_extra_data()),
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn assert_extra_data_less_32bytes() {
|
|
let extra_data = default_extra_data();
|
|
assert!(extra_data.len() <= 32, "extra data must be less than 32 bytes: {extra_data}")
|
|
}
|
|
}
|