From c0ecf1de14e4b8da55beda911cfe88a6f00ed959 Mon Sep 17 00:00:00 2001 From: elizabeth Date: Thu, 3 Jul 2025 15:46:30 -0400 Subject: [PATCH] fix unreachable_pub for validator crate --- Cargo.toml | 8 +++---- crates/validator/Cargo.toml | 5 ++++- crates/validator/src/lib.rs | 12 ++++++++++ crates/validator/src/main.rs | 22 +++++++------------ crates/validator/src/p2p/mod.rs | 2 +- crates/validator/src/store/mod.rs | 2 +- .../src/validators/hardware_challenge.rs | 6 ++--- crates/validator/src/validators/mod.rs | 13 +++-------- .../src/validators/synthetic_data/mod.rs | 9 ++++---- .../src/validators/synthetic_data/toploc.rs | 18 +++++++-------- .../src/validators/synthetic_data/types.rs | 10 +++------ 11 files changed, 52 insertions(+), 55 deletions(-) create mode 100644 crates/validator/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 77d552be..fb3e3fbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,15 +39,15 @@ mockito = "1.7.0" iroh = "0.34.1" rand_v8 = { package = "rand", version = "0.8.5", features = ["std"] } rand_core_v6 = { package = "rand_core", version = "0.6.4", features = ["std"] } + [workspace.package] version = "0.3.10" edition = "2021" -[workspace.features] -default = [] -testnet = [] - [workspace.lints.clippy] match_same_arms = "warn" unused_async = "warn" uninlined_format_args = "warn" + +[workspace.lints.rust] +unreachable_pub = "warn" diff --git a/crates/validator/Cargo.toml b/crates/validator/Cargo.toml index 93ff77e8..db3694ca 100644 --- a/crates/validator/Cargo.toml +++ b/crates/validator/Cargo.toml @@ -3,6 +3,9 @@ name = "validator" version.workspace = true edition.workspace = true +[lints] +workspace = true + [dependencies] actix-web = { workspace = true } alloy = { workspace = true } @@ -34,4 +37,4 @@ url = { workspace = true } [dev-dependencies] mockito = { workspace = true } -tempfile = "=3.14.0" \ No newline at end of file +tempfile = "=3.14.0" diff --git a/crates/validator/src/lib.rs b/crates/validator/src/lib.rs new file mode 100644 index 00000000..760af2d1 --- /dev/null +++ b/crates/validator/src/lib.rs @@ -0,0 +1,12 @@ +mod metrics; +mod p2p; +mod store; +mod validators; + +pub use metrics::export_metrics; +pub use metrics::MetricsContext; +pub use p2p::P2PClient; +pub use store::redis::RedisStore; +pub use validators::hardware::HardwareValidator; +pub use validators::synthetic_data::types::InvalidationType; +pub use validators::synthetic_data::SyntheticDataValidator; diff --git a/crates/validator/src/main.rs b/crates/validator/src/main.rs index 855a0144..58d2d77e 100644 --- a/crates/validator/src/main.rs +++ b/crates/validator/src/main.rs @@ -1,7 +1,3 @@ -pub mod metrics; -pub mod p2p; -pub mod store; -pub mod validators; use actix_web::{web, App, HttpRequest, HttpResponse, HttpServer, Responder}; use alloy::primitives::utils::Unit; use alloy::primitives::{Address, U256}; @@ -9,8 +5,6 @@ use anyhow::{Context, Result}; use clap::Parser; use log::{debug, LevelFilter}; use log::{error, info}; -use metrics::MetricsContext; -use p2p::P2PClient; use serde_json::json; use shared::models::api::ApiResponse; use shared::models::node::DiscoveryNode; @@ -24,14 +18,15 @@ use std::sync::atomic::{AtomicI64, Ordering}; use std::sync::Arc; use std::time::Duration; use std::time::{Instant, SystemTime, UNIX_EPOCH}; -use store::redis::RedisStore; use tokio::signal::unix::{signal, SignalKind}; use tokio_util::sync::CancellationToken; use url::Url; -use validators::hardware::HardwareValidator; -use validators::synthetic_data::SyntheticDataValidator; -use crate::validators::synthetic_data::types::InvalidationType; +use validator::{ + export_metrics, HardwareValidator, InvalidationType, MetricsContext, P2PClient, RedisStore, + SyntheticDataValidator, +}; + // Track the last time the validation loop ran static LAST_VALIDATION_TIMESTAMP: AtomicI64 = AtomicI64::new(0); // Maximum allowed time between validation loops (2 minutes) @@ -407,7 +402,7 @@ async fn main() -> anyhow::Result<()> { .route( "/metrics", web::get().to(|| async { - match metrics::export_metrics() { + match export_metrics() { Ok(metrics) => { HttpResponse::Ok().content_type("text/plain").body(metrics) } @@ -634,7 +629,6 @@ async fn main() -> anyhow::Result<()> { #[cfg(test)] mod tests { - use actix_web::{test, App}; use actix_web::{ web::{self, post}, @@ -642,12 +636,12 @@ mod tests { }; use shared::models::challenge::{calc_matrix, ChallengeRequest, ChallengeResponse, FixedF64}; - pub async fn handle_challenge(challenge: web::Json) -> HttpResponse { + async fn handle_challenge(challenge: web::Json) -> HttpResponse { let result = calc_matrix(&challenge); HttpResponse::Ok().json(result) } - pub fn challenge_routes() -> Scope { + fn challenge_routes() -> Scope { web::scope("/challenge") .route("", post().to(handle_challenge)) .route("/", post().to(handle_challenge)) diff --git a/crates/validator/src/p2p/mod.rs b/crates/validator/src/p2p/mod.rs index 9d85f67f..33dad50c 100644 --- a/crates/validator/src/p2p/mod.rs +++ b/crates/validator/src/p2p/mod.rs @@ -1,3 +1,3 @@ -pub mod client; +pub(crate) mod client; pub use client::P2PClient; diff --git a/crates/validator/src/store/mod.rs b/crates/validator/src/store/mod.rs index 027fbef5..2f26ef72 100644 --- a/crates/validator/src/store/mod.rs +++ b/crates/validator/src/store/mod.rs @@ -1 +1 @@ -pub mod redis; +pub(crate) mod redis; diff --git a/crates/validator/src/validators/hardware_challenge.rs b/crates/validator/src/validators/hardware_challenge.rs index c28fd643..c881c542 100644 --- a/crates/validator/src/validators/hardware_challenge.rs +++ b/crates/validator/src/validators/hardware_challenge.rs @@ -9,16 +9,16 @@ use shared::models::{ }; use std::str::FromStr; -pub struct HardwareChallenge<'a> { +pub(crate) struct HardwareChallenge<'a> { p2p_client: &'a P2PClient, } impl<'a> HardwareChallenge<'a> { - pub fn new(p2p_client: &'a P2PClient) -> Self { + pub(crate) fn new(p2p_client: &'a P2PClient) -> Self { Self { p2p_client } } - pub async fn challenge_node(&self, node: &DiscoveryNode) -> Result { + pub(crate) async fn challenge_node(&self, node: &DiscoveryNode) -> Result { // Check if node has P2P ID and addresses let p2p_id = node .node diff --git a/crates/validator/src/validators/mod.rs b/crates/validator/src/validators/mod.rs index 03de7ebf..4dbb2c6e 100644 --- a/crates/validator/src/validators/mod.rs +++ b/crates/validator/src/validators/mod.rs @@ -1,10 +1,3 @@ -pub mod hardware; -pub mod hardware_challenge; -pub mod synthetic_data; -/// Common trait for all validators -pub trait Validator { - type Error; - - /// Returns the name of the validator - fn name(&self) -> &str; -} +pub(crate) mod hardware; +pub(crate) mod hardware_challenge; +pub(crate) mod synthetic_data; diff --git a/crates/validator/src/validators/synthetic_data/mod.rs b/crates/validator/src/validators/synthetic_data/mod.rs index a7c432de..ce472c8b 100644 --- a/crates/validator/src/validators/synthetic_data/mod.rs +++ b/crates/validator/src/validators/synthetic_data/mod.rs @@ -3,12 +3,10 @@ use crate::store::redis::RedisStore; use crate::validators::synthetic_data::types::{InvalidationType, RejectionInfo}; use alloy::primitives::U256; use anyhow::{Context as _, Error, Result}; -use chrono; use futures::future; use log::{debug, warn}; use log::{error, info}; use redis::AsyncCommands; -use serde_json; use shared::utils::StorageProvider; use shared::web3::contracts::implementations::prime_network_contract::PrimeNetworkContract; use shared::web3::contracts::implementations::work_validators::synthetic_data_validator::{ @@ -19,11 +17,12 @@ use std::collections::HashMap; use std::str::FromStr; use std::sync::Arc; use tokio_util::sync::CancellationToken; -pub mod chain_operations; + +pub(crate) mod chain_operations; #[cfg(test)] mod tests; -pub mod toploc; -pub mod types; +pub(crate) mod toploc; +pub(crate) mod types; use toploc::{GroupValidationResult, Toploc, ToplocConfig}; use types::{ diff --git a/crates/validator/src/validators/synthetic_data/toploc.rs b/crates/validator/src/validators/synthetic_data/toploc.rs index 05d65430..33d9f57f 100644 --- a/crates/validator/src/validators/synthetic_data/toploc.rs +++ b/crates/validator/src/validators/synthetic_data/toploc.rs @@ -14,14 +14,14 @@ pub struct ToplocConfig { } #[derive(Clone, Debug)] -pub struct Toploc { +pub(crate) struct Toploc { config: ToplocConfig, client: reqwest::Client, metrics: Option, } #[derive(Debug, PartialEq, Serialize, Deserialize)] -pub struct GroupValidationResult { +pub(crate) struct GroupValidationResult { pub status: ValidationResult, pub input_flops: f64, pub output_flops: f64, @@ -31,7 +31,7 @@ pub struct GroupValidationResult { } impl Toploc { - pub fn new(config: ToplocConfig, metrics: Option) -> Self { + pub(crate) fn new(config: ToplocConfig, metrics: Option) -> Self { let client = reqwest::Client::builder() .default_headers({ let mut headers = reqwest::header::HeaderMap::new(); @@ -56,7 +56,7 @@ impl Toploc { } } - pub fn name(&self) -> String { + pub(crate) fn name(&self) -> String { let prefix = self .config .file_prefix_filter @@ -80,7 +80,7 @@ impl Toploc { } } - pub fn matches_file_name(&self, file_name: &str) -> bool { + pub(crate) fn matches_file_name(&self, file_name: &str) -> bool { let normalized_name = self.normalize_path(file_name); match &self.config.file_prefix_filter { Some(prefix) => { @@ -93,7 +93,7 @@ impl Toploc { } } - pub async fn trigger_single_file_validation( + pub(crate) async fn trigger_single_file_validation( &self, file_sha: &str, key_address: &str, @@ -157,7 +157,7 @@ impl Toploc { } } - pub async fn trigger_group_file_validation( + pub(crate) async fn trigger_group_file_validation( &self, file_name: &str, file_shas: Vec, @@ -227,7 +227,7 @@ impl Toploc { } } - pub async fn get_group_file_validation_status( + pub(crate) async fn get_group_file_validation_status( &self, file_name: &str, ) -> Result { @@ -328,7 +328,7 @@ impl Toploc { } } - pub async fn get_single_file_validation_status( + pub(crate) async fn get_single_file_validation_status( &self, file_name: &str, ) -> Result { diff --git a/crates/validator/src/validators/synthetic_data/types.rs b/crates/validator/src/validators/synthetic_data/types.rs index d8c274f8..058cf815 100644 --- a/crates/validator/src/validators/synthetic_data/types.rs +++ b/crates/validator/src/validators/synthetic_data/types.rs @@ -6,7 +6,7 @@ use std::fmt; use std::str::FromStr; #[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] -pub enum ValidationResult { +pub(crate) enum ValidationResult { Accept, Reject, Crashed, @@ -33,7 +33,7 @@ impl fmt::Display for ValidationResult { } #[derive(Debug, Serialize, Deserialize, PartialEq)] -pub struct WorkValidationInfo { +pub(crate) struct WorkValidationInfo { pub status: ValidationResult, pub reason: Option, } @@ -61,9 +61,8 @@ impl fmt::Display for InvalidationType { } #[derive(Debug)] -pub enum ProcessWorkKeyError { +pub(crate) enum ProcessWorkKeyError { FileNameResolutionError(String), - ValidationTriggerError(String), ValidationPollingError(String), InvalidatingWorkError(String), MaxAttemptsReached(String), @@ -83,9 +82,6 @@ impl fmt::Display for ProcessWorkKeyError { ProcessWorkKeyError::FileNameResolutionError(msg) => { write!(f, "File name resolution error: {msg}") } - ProcessWorkKeyError::ValidationTriggerError(msg) => { - write!(f, "Validation trigger error: {msg}") - } ProcessWorkKeyError::ValidationPollingError(msg) => { write!(f, "Validation polling error: {msg}") }