From 3e17fa203da6e4c79dd4dc7ae5a54187c60dafd4 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Sun, 12 Oct 2025 22:11:14 +0200 Subject: [PATCH 01/10] Track timing of consensus stages --- Cargo.lock | 61 ++++--- node/bft/Cargo.toml | 10 ++ node/bft/src/bft.rs | 3 + node/bft/src/helpers/mod.rs | 3 + node/bft/src/helpers/timing.rs | 317 +++++++++++++++++++++++++++++++++ node/bft/src/primary.rs | 7 + node/consensus/src/lib.rs | 48 +++++ 7 files changed, 420 insertions(+), 29 deletions(-) create mode 100644 node/bft/src/helpers/timing.rs diff --git a/Cargo.lock b/Cargo.lock index 056ef2ebbd..6c811a21fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -534,9 +534,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.40" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d05d92f4b1fd76aad469d46cdd858ca761576082cd37df81416691e50199fb" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ "find-msvc-tools", "jobserver", @@ -1268,9 +1268,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0399f9d26e5191ce32c498bebd31e7a3ceabc2745f0ac54af3f335126c3f24b3" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "flate2" @@ -2151,9 +2151,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.176" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libgit2-sys" @@ -2511,11 +2511,11 @@ checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2722,12 +2722,12 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "3.0.5" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ "base64 0.22.1", - "serde", + "serde_core", ] [[package]] @@ -3155,9 +3155,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.3" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" +checksum = "4a52d8d02cacdb176ef4678de6c052efb4b3da14b78e4db683a4252762be5433" dependencies = [ "aho-corasick", "memchr", @@ -3167,9 +3167,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" +checksum = "722166aa0d7438abbaa4d5cc2c649dac844e8c56d82fb3d33e9c34b5cd268fc6" dependencies = [ "aho-corasick", "memchr", @@ -3178,9 +3178,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "c3160422bbd54dd5ecfdca71e5fd59b7b8fe2b1697ab2baf64f6d05dcc66d298" [[package]] name = "reqwest" @@ -3573,9 +3573,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" dependencies = [ "serde_core", ] @@ -3775,7 +3775,7 @@ dependencies = [ "snarkos-node-tcp", "snarkvm", "tikv-jemallocator", - "toml 0.9.7", + "toml 0.9.8", "tracing", "walkdir", ] @@ -3902,6 +3902,7 @@ dependencies = [ "locktick", "lru 0.16.1", "mockall", + "once_cell", "open", "parking_lot", "paste", @@ -3911,6 +3912,8 @@ dependencies = [ "rand_chacha 0.3.1", "rand_distr", "rayon", + "serde", + "serde_json", "sha2", "snarkos-account", "snarkos-node-bft", @@ -5601,9 +5604,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ "indexmap 2.11.4", "serde_core", @@ -5616,27 +5619,27 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ "serde_core", ] [[package]] name = "toml_parser" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" [[package]] name = "tower" diff --git a/node/bft/Cargo.toml b/node/bft/Cargo.toml index 8eeb1434d2..543782e5f9 100644 --- a/node/bft/Cargo.toml +++ b/node/bft/Cargo.toml @@ -93,6 +93,16 @@ workspace = true [dependencies.rayon] workspace = true +[dependencies.serde] +workspace = true +features = [ "derive" ] + +[dependencies.serde_json] +workspace = true + +[dependencies.once_cell] +version = "1.0" + [dependencies.sha2] version = "0.10" default-features = false diff --git a/node/bft/src/bft.rs b/node/bft/src/bft.rs index 2d878d7bfb..f33532b4a9 100644 --- a/node/bft/src/bft.rs +++ b/node/bft/src/bft.rs @@ -480,6 +480,9 @@ impl BFT { // Insert the certificate into the DAG. self.dag.write().insert(certificate); + // Record the certificate added event + crate::helpers::record_event(certificate_round, crate::helpers::ConsensusStage::CertificateAdded, None); + // Get the previous round number. let commit_round = certificate_round.saturating_sub(1); diff --git a/node/bft/src/helpers/mod.rs b/node/bft/src/helpers/mod.rs index 28f27da3cb..2c3e50d720 100644 --- a/node/bft/src/helpers/mod.rs +++ b/node/bft/src/helpers/mod.rs @@ -51,6 +51,9 @@ pub use telemetry::*; pub mod timestamp; pub use timestamp::*; +pub mod timing; +pub use timing::*; + /// Formats an ID into a truncated identifier (for logging purposes). pub fn fmt_id(id: impl ToString) -> String { let id = id.to_string(); diff --git a/node/bft/src/helpers/timing.rs b/node/bft/src/helpers/timing.rs new file mode 100644 index 0000000000..f48233d90c --- /dev/null +++ b/node/bft/src/helpers/timing.rs @@ -0,0 +1,317 @@ +// Copyright (c) 2019-2025 Provable Inc. +// This file is part of the snarkOS library. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: + +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use std::{ + collections::HashMap, + sync::{Arc, RwLock}, + time::SystemTime, +}; + +use once_cell::sync::Lazy; +use serde::{Deserialize, Serialize}; + +/// Global storage for round-based event data +static ROUND_EVENTS: Lazy>>> = Lazy::new(|| Arc::new(RwLock::new(HashMap::new()))); + +/// Global storage for subdag-based timing data (using lowest/highest rounds from subdag) +static SUBDAG_TIMINGS: Lazy>>> = + Lazy::new(|| Arc::new(RwLock::new(HashMap::new()))); + +/// Consensus stages that occur per round +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ConsensusStage { + ProposalSeen, + ProposalCreated, + CertificateAdded, +} + +/// Block processing stages that occur per subdag +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum SubdagStage { + SubdagProcessing, + CheckNextBlock, + AdvanceToNextBlock, +} + +/// Timing event for a specific consensus stage +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TimingEvent { + pub round: u64, + pub timestamp: SystemTime, + pub event_type: String, + pub is_local: Option, // Some(true) for local events, Some(false) for peer events, None for unknown +} + +/// Timing data for round-based events +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct RoundEvents { + pub round: u64, + pub proposal_seen: Vec, + pub proposal_created: Vec, + pub certificate_added: Vec, +} + +/// Timing data for a specific subdag (identified by lowest and highest rounds) +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SubdagTimings { + pub lowest_round: u64, + pub highest_round: u64, + pub subdag_processing: Option<(SystemTime, Option)>, + pub check_next_block: Option<(SystemTime, Option)>, + pub advance_to_next_block: Option<(SystemTime, Option)>, +} + +/// Combined timing data for export +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TimingSnapshot { + pub timestamp: SystemTime, + pub round_events: HashMap, + pub subdag_timings: HashMap, +} + +impl RoundEvents { + fn new(round: u64) -> Self { + Self { round, proposal_seen: Vec::new(), proposal_created: Vec::new(), certificate_added: Vec::new() } + } + + fn add_event(&mut self, stage: ConsensusStage, timestamp: SystemTime, is_local: Option) { + let event = TimingEvent { + round: self.round, + timestamp, + event_type: match stage { + ConsensusStage::ProposalSeen => "proposal_seen".to_string(), + ConsensusStage::ProposalCreated => "proposal_created".to_string(), + ConsensusStage::CertificateAdded => "certificate_added".to_string(), + }, + is_local, + }; + + match stage { + ConsensusStage::ProposalSeen => self.proposal_seen.push(event), + ConsensusStage::ProposalCreated => self.proposal_created.push(event), + ConsensusStage::CertificateAdded => self.certificate_added.push(event), + } + } +} + +impl SubdagTimings { + fn new(lowest_round: u64, highest_round: u64) -> Self { + Self { + lowest_round, + highest_round, + subdag_processing: None, + check_next_block: None, + advance_to_next_block: None, + } + } + + fn start_stage(&mut self, stage: SubdagStage) { + let now = SystemTime::now(); + match stage { + SubdagStage::SubdagProcessing => { + self.subdag_processing = Some((now, None)); + } + SubdagStage::CheckNextBlock => { + self.check_next_block = Some((now, None)); + } + SubdagStage::AdvanceToNextBlock => { + self.advance_to_next_block = Some((now, None)); + } + } + } + + fn end_stage(&mut self, stage: SubdagStage) { + let now = SystemTime::now(); + match stage { + SubdagStage::SubdagProcessing => { + if let Some((start, _)) = self.subdag_processing { + self.subdag_processing = Some((start, Some(now))); + } + } + SubdagStage::CheckNextBlock => { + if let Some((start, _)) = self.check_next_block { + self.check_next_block = Some((start, Some(now))); + } + } + SubdagStage::AdvanceToNextBlock => { + if let Some((start, _)) = self.advance_to_next_block { + self.advance_to_next_block = Some((start, Some(now))); + } + } + } + } +} + +/// Record a consensus event for a specific round +pub fn record_event(round: u64, stage: ConsensusStage, is_local: Option) { + let now = SystemTime::now(); + if let Ok(mut events) = ROUND_EVENTS.write() { + let round_events = events.entry(round).or_insert_with(|| RoundEvents::new(round)); + round_events.add_event(stage, now, is_local); + } +} + +/// Record a consensus event with custom timestamp for a specific round +pub fn record_event_with_timestamp(round: u64, stage: ConsensusStage, timestamp: SystemTime, is_local: Option) { + if let Ok(mut events) = ROUND_EVENTS.write() { + let round_events = events.entry(round).or_insert_with(|| RoundEvents::new(round)); + round_events.add_event(stage, timestamp, is_local); + } +} + +/// Record the start of a subdag processing stage +pub fn start_subdag_stage(lowest_round: u64, highest_round: u64, stage: SubdagStage) { + let key = (lowest_round, highest_round); + if let Ok(mut timings) = SUBDAG_TIMINGS.write() { + let subdag_timing = timings.entry(key).or_insert_with(|| SubdagTimings::new(lowest_round, highest_round)); + subdag_timing.start_stage(stage); + } +} + +/// Record the end of a subdag processing stage +pub fn end_subdag_stage(lowest_round: u64, highest_round: u64, stage: SubdagStage) { + let key = (lowest_round, highest_round); + if let Ok(mut timings) = SUBDAG_TIMINGS.write() { + if let Some(subdag_timing) = timings.get_mut(&key) { + subdag_timing.end_stage(stage); + } + } +} + +/// Get event data for a specific round +pub fn get_round_events(round: u64) -> Option { + ROUND_EVENTS.read().ok()?.get(&round).cloned() +} + +/// Get timing data for a specific subdag +pub fn get_subdag_timings(lowest_round: u64, highest_round: u64) -> Option { + let key = (lowest_round, highest_round); + SUBDAG_TIMINGS.read().ok()?.get(&key).cloned() +} + +/// Get a snapshot of all current timing data +pub fn get_timing_snapshot() -> TimingSnapshot { + let round_events = ROUND_EVENTS.read().map(|t| t.clone()).unwrap_or_default(); + let subdag_timings = SUBDAG_TIMINGS.read().map(|t| t.clone()).unwrap_or_default(); + + // Convert keys to strings for JSON serialization + let round_events_str: HashMap = + round_events.into_iter().map(|(k, v)| (k.to_string(), v)).collect(); + + let subdag_timings_str: HashMap = + subdag_timings.into_iter().map(|((low, high), v)| (format!("{low}-{high}"), v)).collect(); + + TimingSnapshot { timestamp: SystemTime::now(), round_events: round_events_str, subdag_timings: subdag_timings_str } +} + +/// Export current timing state to a JSON file +pub fn export_to_json(file_path: &str) -> Result<(), Box> { + let snapshot = get_timing_snapshot(); + let json = serde_json::to_string_pretty(&snapshot)?; + std::fs::write(file_path, json)?; + Ok(()) +} + +/// Clean up old timing entries to prevent memory growth +/// Keeps only the most recent `keep_count` entries for each type +pub fn cleanup_old_entries(keep_count: usize) { + // Clean up round events + if let Ok(mut round_events) = ROUND_EVENTS.write() { + if round_events.len() > keep_count { + let mut rounds: Vec = round_events.keys().copied().collect(); + rounds.sort_unstable(); + let to_remove = rounds.len().saturating_sub(keep_count); + for &round in &rounds[..to_remove] { + round_events.remove(&round); + } + } + } + + // Clean up subdag timings + if let Ok(mut subdag_timings) = SUBDAG_TIMINGS.write() { + if subdag_timings.len() > keep_count { + let mut keys: Vec<(u64, u64)> = subdag_timings.keys().copied().collect(); + keys.sort_unstable_by_key(|(low, _)| *low); + let to_remove = keys.len().saturating_sub(keep_count); + for &key in &keys[..to_remove] { + subdag_timings.remove(&key); + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::{thread, time::Duration}; + + #[test] + fn test_event_recording() { + let round = 12345; + + record_event(round, ConsensusStage::ProposalCreated, Some(true)); + record_event(round, ConsensusStage::ProposalSeen, Some(false)); + + let events = get_round_events(round).unwrap(); + assert_eq!(events.proposal_created.len(), 1); + assert_eq!(events.proposal_seen.len(), 1); + assert_eq!(events.certificate_added.len(), 0); + + assert_eq!(events.proposal_created[0].is_local, Some(true)); + assert_eq!(events.proposal_seen[0].is_local, Some(false)); + } + + #[test] + fn test_subdag_timing() { + let (low, high) = (100, 105); + + start_subdag_stage(low, high, SubdagStage::SubdagProcessing); + thread::sleep(Duration::from_millis(10)); + end_subdag_stage(low, high, SubdagStage::SubdagProcessing); + + let timings = get_subdag_timings(low, high).unwrap(); + assert!(timings.subdag_processing.is_some()); + + if let Some((start, Some(end))) = timings.subdag_processing { + assert!(end > start); + } else { + panic!("Expected complete timing data"); + } + } + + #[test] + fn test_json_export() { + let round = 54321; + let (low, high) = (200, 210); + + // Add some timing data + record_event(round, ConsensusStage::ProposalCreated, None); + thread::sleep(Duration::from_millis(5)); + record_event(round, ConsensusStage::ProposalCreated, None); + + start_subdag_stage(low, high, SubdagStage::SubdagProcessing); + thread::sleep(Duration::from_millis(5)); + end_subdag_stage(low, high, SubdagStage::SubdagProcessing); + + // Test JSON export + let snapshot = get_timing_snapshot(); + let json_result = serde_json::to_string_pretty(&snapshot); + assert!(json_result.is_ok(), "JSON serialization should succeed"); + + let json_str = json_result.unwrap(); + assert!(json_str.contains(&round.to_string()), "JSON should contain round data"); + assert!(json_str.contains(&format!("{low}-{high}")), "JSON should contain subdag data"); + } +} diff --git a/node/bft/src/primary.rs b/node/bft/src/primary.rs index f8debab512..9f2a4ad1c0 100644 --- a/node/bft/src/primary.rs +++ b/node/bft/src/primary.rs @@ -694,6 +694,10 @@ impl Primary { error!("Failed to reinsert transmissions: {e:?}"); } })?; + + // Record the proposal created event + crate::helpers::record_event(round, crate::helpers::ConsensusStage::ProposalCreated, Some(true)); + // Broadcast the batch to all validators for signing. self.gateway.broadcast(Event::BatchPropose(batch_header.into())); // Set the timestamp of the latest proposed batch. @@ -761,6 +765,9 @@ impl Primary { ); } + // Record the proposal seen event + crate::helpers::record_event(batch_round, crate::helpers::ConsensusStage::ProposalSeen, Some(false)); + // Retrieve the cached round and batch ID for this validator. if let Some((signed_round, signed_batch_id, signature)) = self.signed_proposals.read().get(&batch_author).copied() diff --git a/node/consensus/src/lib.rs b/node/consensus/src/lib.rs index 80415491bf..f77ea5d228 100644 --- a/node/consensus/src/lib.rs +++ b/node/consensus/src/lib.rs @@ -524,12 +524,60 @@ impl Consensus { #[cfg(feature = "metrics")] let current_block_timestamp = self.ledger.latest_block().header().metadata().timestamp(); + // Extract lowest and highest rounds from the subdag + let rounds: Vec = subdag.keys().copied().collect(); + let lowest_round = rounds.iter().min().copied().unwrap_or(0); + let highest_round = rounds.iter().max().copied().unwrap_or(0); + // Create the candidate next block. + snarkos_node_bft::helpers::start_subdag_stage( + lowest_round, + highest_round, + snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, + ); let next_block = self.ledger.prepare_advance_to_next_quorum_block(subdag, transmissions)?; + let _next_block_height = next_block.height(); + snarkos_node_bft::helpers::end_subdag_stage( + lowest_round, + highest_round, + snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, + ); // Check that the block is well-formed. + snarkos_node_bft::helpers::start_subdag_stage( + lowest_round, + highest_round, + snarkos_node_bft::helpers::SubdagStage::CheckNextBlock, + ); self.ledger.check_next_block(&next_block)?; + snarkos_node_bft::helpers::end_subdag_stage( + lowest_round, + highest_round, + snarkos_node_bft::helpers::SubdagStage::CheckNextBlock, + ); // Advance to the next block. + snarkos_node_bft::helpers::start_subdag_stage( + lowest_round, + highest_round, + snarkos_node_bft::helpers::SubdagStage::AdvanceToNextBlock, + ); self.ledger.advance_to_next_block(&next_block)?; + snarkos_node_bft::helpers::end_subdag_stage( + lowest_round, + highest_round, + snarkos_node_bft::helpers::SubdagStage::AdvanceToNextBlock, + ); + + // Export timing data to JSON after block generation + let dev_index = self.bft().primary().gateway().dev().unwrap(); // TODO: cleanly handle unwrap. + let json_filename = format!("consensus_timing_block_{dev_index}.json"); + if let Err(e) = snarkos_node_bft::helpers::export_to_json(&json_filename) { + warn!("Failed to export timing data to {}: {}", json_filename, e); + } else { + info!("Exported timing data to {}", json_filename); + } + + // Clean up old timing entries to prevent memory growth (keep last 100 entries) + // snarkos_node_bft::helpers::cleanup_old_entries(100); #[cfg(feature = "telemetry")] // Fetch the latest committee let latest_committee = self.ledger.current_committee()?; From f462afde7b6e02ebd933368ce1d8319102a184c3 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Mon, 13 Oct 2025 13:51:06 +0200 Subject: [PATCH 02/10] Guard consensus tracking by test_network feature, remove dead code, use parking_lot lock --- Cargo.toml | 2 +- node/Cargo.toml | 1 + node/bft/Cargo.toml | 1 + node/bft/src/bft.rs | 2 +- node/bft/src/helpers/mod.rs | 2 + node/bft/src/helpers/timing.rs | 79 +++++++++++----------------------- node/bft/src/primary.rs | 4 +- node/consensus/Cargo.toml | 1 + node/consensus/src/lib.rs | 51 ++++++++++++---------- 9 files changed, 62 insertions(+), 81 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d27e4a8f5d..4f014cf3b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -273,7 +273,7 @@ locktick = [ serial = [ "snarkos-cli/serial" ] test_targets = [ "snarkos-cli/test_targets" ] test_consensus_heights = [ "snarkos-cli/test_consensus_heights" ] -test_network = [ "snarkos-cli/test_network" ] +test_network = [ "snarkos-cli/test_network", "snarkos-node/test_network" ] [dependencies.clap] workspace = true diff --git a/node/Cargo.toml b/node/Cargo.toml index d9cf8407a4..a089e7b5db 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -50,6 +50,7 @@ cuda = [ "snarkos-node-sync/cuda" ] serial = [ "snarkos-node-bft/serial" ] +test_network = [ "snarkos-node-bft/test_network", "snarkos-node-consensus/test_network" ] [dependencies.aleo-std] workspace = true diff --git a/node/bft/Cargo.toml b/node/bft/Cargo.toml index 543782e5f9..a030e79544 100644 --- a/node/bft/Cargo.toml +++ b/node/bft/Cargo.toml @@ -44,6 +44,7 @@ test = [ "snarkos-node-bft-ledger-service/test", "snarkos-node-bft-storage-service/test" ] +test_network = [ ] serial = [ "snarkos-node-bft-ledger-service/serial" ] [dependencies.aleo-std] diff --git a/node/bft/src/bft.rs b/node/bft/src/bft.rs index f33532b4a9..1c365d9046 100644 --- a/node/bft/src/bft.rs +++ b/node/bft/src/bft.rs @@ -480,7 +480,7 @@ impl BFT { // Insert the certificate into the DAG. self.dag.write().insert(certificate); - // Record the certificate added event + #[cfg(feature = "test_network")] crate::helpers::record_event(certificate_round, crate::helpers::ConsensusStage::CertificateAdded, None); // Get the previous round number. diff --git a/node/bft/src/helpers/mod.rs b/node/bft/src/helpers/mod.rs index 2c3e50d720..1458957d33 100644 --- a/node/bft/src/helpers/mod.rs +++ b/node/bft/src/helpers/mod.rs @@ -51,7 +51,9 @@ pub use telemetry::*; pub mod timestamp; pub use timestamp::*; +#[cfg(feature = "test_network")] pub mod timing; +#[cfg(feature = "test_network")] pub use timing::*; /// Formats an ID into a truncated identifier (for logging purposes). diff --git a/node/bft/src/helpers/timing.rs b/node/bft/src/helpers/timing.rs index f48233d90c..ddab83ccc5 100644 --- a/node/bft/src/helpers/timing.rs +++ b/node/bft/src/helpers/timing.rs @@ -13,11 +13,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::{ - collections::HashMap, - sync::{Arc, RwLock}, - time::SystemTime, -}; +use std::{collections::HashMap, sync::Arc, time::SystemTime}; + +#[cfg(feature = "locktick")] +use locktick::parking_lot::RwLock; +#[cfg(not(feature = "locktick"))] +use parking_lot::RwLock; use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; @@ -157,61 +158,57 @@ impl SubdagTimings { /// Record a consensus event for a specific round pub fn record_event(round: u64, stage: ConsensusStage, is_local: Option) { let now = SystemTime::now(); - if let Ok(mut events) = ROUND_EVENTS.write() { - let round_events = events.entry(round).or_insert_with(|| RoundEvents::new(round)); - round_events.add_event(stage, now, is_local); - } + let mut round_events = ROUND_EVENTS.write(); + let round_event = round_events.entry(round).or_insert_with(|| RoundEvents::new(round)); + round_event.add_event(stage, now, is_local); } /// Record a consensus event with custom timestamp for a specific round pub fn record_event_with_timestamp(round: u64, stage: ConsensusStage, timestamp: SystemTime, is_local: Option) { - if let Ok(mut events) = ROUND_EVENTS.write() { - let round_events = events.entry(round).or_insert_with(|| RoundEvents::new(round)); - round_events.add_event(stage, timestamp, is_local); - } + let mut events = ROUND_EVENTS.write(); + let round_events = events.entry(round).or_insert_with(|| RoundEvents::new(round)); + round_events.add_event(stage, timestamp, is_local); } /// Record the start of a subdag processing stage pub fn start_subdag_stage(lowest_round: u64, highest_round: u64, stage: SubdagStage) { let key = (lowest_round, highest_round); - if let Ok(mut timings) = SUBDAG_TIMINGS.write() { - let subdag_timing = timings.entry(key).or_insert_with(|| SubdagTimings::new(lowest_round, highest_round)); - subdag_timing.start_stage(stage); - } + let mut timings = SUBDAG_TIMINGS.write(); + let subdag_timing = timings.entry(key).or_insert_with(|| SubdagTimings::new(lowest_round, highest_round)); + subdag_timing.start_stage(stage); } /// Record the end of a subdag processing stage pub fn end_subdag_stage(lowest_round: u64, highest_round: u64, stage: SubdagStage) { let key = (lowest_round, highest_round); - if let Ok(mut timings) = SUBDAG_TIMINGS.write() { - if let Some(subdag_timing) = timings.get_mut(&key) { - subdag_timing.end_stage(stage); - } + let mut timings = SUBDAG_TIMINGS.write(); + if let Some(subdag_timing) = timings.get_mut(&key) { + subdag_timing.end_stage(stage); } } /// Get event data for a specific round pub fn get_round_events(round: u64) -> Option { - ROUND_EVENTS.read().ok()?.get(&round).cloned() + ROUND_EVENTS.read().get(&round).cloned() } /// Get timing data for a specific subdag pub fn get_subdag_timings(lowest_round: u64, highest_round: u64) -> Option { let key = (lowest_round, highest_round); - SUBDAG_TIMINGS.read().ok()?.get(&key).cloned() + SUBDAG_TIMINGS.read().get(&key).cloned() } /// Get a snapshot of all current timing data pub fn get_timing_snapshot() -> TimingSnapshot { - let round_events = ROUND_EVENTS.read().map(|t| t.clone()).unwrap_or_default(); - let subdag_timings = SUBDAG_TIMINGS.read().map(|t| t.clone()).unwrap_or_default(); + let round_events = ROUND_EVENTS.read(); + let subdag_timings = SUBDAG_TIMINGS.read(); // Convert keys to strings for JSON serialization let round_events_str: HashMap = - round_events.into_iter().map(|(k, v)| (k.to_string(), v)).collect(); + round_events.iter().map(|(k, v)| (k.to_string(), v.clone())).collect(); let subdag_timings_str: HashMap = - subdag_timings.into_iter().map(|((low, high), v)| (format!("{low}-{high}"), v)).collect(); + subdag_timings.iter().map(|((low, high), v)| (format!("{low}-{high}"), v.clone())).collect(); TimingSnapshot { timestamp: SystemTime::now(), round_events: round_events_str, subdag_timings: subdag_timings_str } } @@ -224,34 +221,6 @@ pub fn export_to_json(file_path: &str) -> Result<(), Box> Ok(()) } -/// Clean up old timing entries to prevent memory growth -/// Keeps only the most recent `keep_count` entries for each type -pub fn cleanup_old_entries(keep_count: usize) { - // Clean up round events - if let Ok(mut round_events) = ROUND_EVENTS.write() { - if round_events.len() > keep_count { - let mut rounds: Vec = round_events.keys().copied().collect(); - rounds.sort_unstable(); - let to_remove = rounds.len().saturating_sub(keep_count); - for &round in &rounds[..to_remove] { - round_events.remove(&round); - } - } - } - - // Clean up subdag timings - if let Ok(mut subdag_timings) = SUBDAG_TIMINGS.write() { - if subdag_timings.len() > keep_count { - let mut keys: Vec<(u64, u64)> = subdag_timings.keys().copied().collect(); - keys.sort_unstable_by_key(|(low, _)| *low); - let to_remove = keys.len().saturating_sub(keep_count); - for &key in &keys[..to_remove] { - subdag_timings.remove(&key); - } - } - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/node/bft/src/primary.rs b/node/bft/src/primary.rs index 9f2a4ad1c0..5d9d4d548e 100644 --- a/node/bft/src/primary.rs +++ b/node/bft/src/primary.rs @@ -695,7 +695,7 @@ impl Primary { } })?; - // Record the proposal created event + #[cfg(feature = "test_network")] crate::helpers::record_event(round, crate::helpers::ConsensusStage::ProposalCreated, Some(true)); // Broadcast the batch to all validators for signing. @@ -765,7 +765,7 @@ impl Primary { ); } - // Record the proposal seen event + #[cfg(feature = "test_network")] crate::helpers::record_event(batch_round, crate::helpers::ConsensusStage::ProposalSeen, Some(false)); // Retrieve the cached round and batch ID for this validator. diff --git a/node/consensus/Cargo.toml b/node/consensus/Cargo.toml index 88c1e1c367..29da6c355e 100644 --- a/node/consensus/Cargo.toml +++ b/node/consensus/Cargo.toml @@ -29,6 +29,7 @@ metrics = [ "dep:snarkos-node-metrics" ] telemetry = [ "snarkos-node-bft/telemetry" ] cuda = [ "snarkvm/cuda", "snarkos-account/cuda", "snarkos-node-bft-ledger-service/cuda" ] serial = [ "snarkos-node-bft-ledger-service/serial" ] +test_network = [ ] [dependencies.aleo-std] diff --git a/node/consensus/src/lib.rs b/node/consensus/src/lib.rs index f77ea5d228..94c4a6dd05 100644 --- a/node/consensus/src/lib.rs +++ b/node/consensus/src/lib.rs @@ -526,58 +526,65 @@ impl Consensus { // Extract lowest and highest rounds from the subdag let rounds: Vec = subdag.keys().copied().collect(); - let lowest_round = rounds.iter().min().copied().unwrap_or(0); - let highest_round = rounds.iter().max().copied().unwrap_or(0); + let _lowest_round = rounds.iter().min().copied().unwrap_or(0); + let _highest_round = rounds.iter().max().copied().unwrap_or(0); // Create the candidate next block. + #[cfg(feature = "test_network")] snarkos_node_bft::helpers::start_subdag_stage( - lowest_round, - highest_round, + _lowest_round, + _highest_round, snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, ); let next_block = self.ledger.prepare_advance_to_next_quorum_block(subdag, transmissions)?; let _next_block_height = next_block.height(); + #[cfg(feature = "test_network")] snarkos_node_bft::helpers::end_subdag_stage( - lowest_round, - highest_round, + _lowest_round, + _highest_round, snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, ); // Check that the block is well-formed. + #[cfg(feature = "test_network")] snarkos_node_bft::helpers::start_subdag_stage( - lowest_round, - highest_round, + _lowest_round, + _highest_round, snarkos_node_bft::helpers::SubdagStage::CheckNextBlock, ); self.ledger.check_next_block(&next_block)?; + #[cfg(feature = "test_network")] snarkos_node_bft::helpers::end_subdag_stage( - lowest_round, - highest_round, + _lowest_round, + _highest_round, snarkos_node_bft::helpers::SubdagStage::CheckNextBlock, ); // Advance to the next block. + #[cfg(feature = "test_network")] snarkos_node_bft::helpers::start_subdag_stage( - lowest_round, - highest_round, + _lowest_round, + _highest_round, snarkos_node_bft::helpers::SubdagStage::AdvanceToNextBlock, ); self.ledger.advance_to_next_block(&next_block)?; + #[cfg(feature = "test_network")] snarkos_node_bft::helpers::end_subdag_stage( - lowest_round, - highest_round, + _lowest_round, + _highest_round, snarkos_node_bft::helpers::SubdagStage::AdvanceToNextBlock, ); // Export timing data to JSON after block generation - let dev_index = self.bft().primary().gateway().dev().unwrap(); // TODO: cleanly handle unwrap. - let json_filename = format!("consensus_timing_block_{dev_index}.json"); - if let Err(e) = snarkos_node_bft::helpers::export_to_json(&json_filename) { - warn!("Failed to export timing data to {}: {}", json_filename, e); - } else { - info!("Exported timing data to {}", json_filename); + #[cfg(feature = "test_network")] + { + let dev_index = self.bft().primary().gateway().dev().unwrap_or_default(); + let json_filename = format!("consensus_timing_block_{dev_index}.json"); + if let Err(e) = snarkos_node_bft::helpers::export_to_json(&json_filename) { + warn!("Failed to export timing data to {}: {}", json_filename, e); + } else { + info!("Exported timing data to {}", json_filename); + } } - // Clean up old timing entries to prevent memory growth (keep last 100 entries) - // snarkos_node_bft::helpers::cleanup_old_entries(100); #[cfg(feature = "telemetry")] // Fetch the latest committee let latest_committee = self.ledger.current_committee()?; From 3300b1eb9e92dc45df0dbd3b430fb38ef7fc0e91 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Sun, 19 Oct 2025 21:38:53 +0200 Subject: [PATCH 03/10] Add SubdagProcessing, remove is_local --- node/bft/src/bft.rs | 9 ++++++++- node/bft/src/helpers/timing.rs | 34 ++++++++++++++++++++-------------- node/bft/src/primary.rs | 4 ++-- node/consensus/src/lib.rs | 10 ++++++++-- 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/node/bft/src/bft.rs b/node/bft/src/bft.rs index 1c365d9046..821cd0b705 100644 --- a/node/bft/src/bft.rs +++ b/node/bft/src/bft.rs @@ -481,7 +481,7 @@ impl BFT { self.dag.write().insert(certificate); #[cfg(feature = "test_network")] - crate::helpers::record_event(certificate_round, crate::helpers::ConsensusStage::CertificateAdded, None); + crate::helpers::record_event(certificate_round, crate::helpers::ConsensusStage::CertificateAdded); // Get the previous round number. let commit_round = certificate_round.saturating_sub(1); @@ -565,6 +565,13 @@ impl BFT { ) -> Result<()> { // Fetch the leader round. let latest_leader_round = leader_certificate.round(); + + #[cfg(feature = "test_network")] + crate::helpers::start_subdag_stage( + latest_leader_round.saturating_sub(2), + latest_leader_round, + crate::helpers::SubdagStage::SubdagProcessing, + ); // Determine the list of all previous leader certificates since the last committed round. // The order of the leader certificates is from **newest** to **oldest**. let mut leader_certificates = vec![leader_certificate.clone()]; diff --git a/node/bft/src/helpers/timing.rs b/node/bft/src/helpers/timing.rs index ddab83ccc5..b81074efd4 100644 --- a/node/bft/src/helpers/timing.rs +++ b/node/bft/src/helpers/timing.rs @@ -42,6 +42,7 @@ pub enum ConsensusStage { #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum SubdagStage { SubdagProcessing, + PrepareAdvanceToNextQuorumBlock, CheckNextBlock, AdvanceToNextBlock, } @@ -52,7 +53,6 @@ pub struct TimingEvent { pub round: u64, pub timestamp: SystemTime, pub event_type: String, - pub is_local: Option, // Some(true) for local events, Some(false) for peer events, None for unknown } /// Timing data for round-based events @@ -70,6 +70,7 @@ pub struct SubdagTimings { pub lowest_round: u64, pub highest_round: u64, pub subdag_processing: Option<(SystemTime, Option)>, + pub prepare_advance_to_next_quorum_block: Option<(SystemTime, Option)>, pub check_next_block: Option<(SystemTime, Option)>, pub advance_to_next_block: Option<(SystemTime, Option)>, } @@ -87,7 +88,7 @@ impl RoundEvents { Self { round, proposal_seen: Vec::new(), proposal_created: Vec::new(), certificate_added: Vec::new() } } - fn add_event(&mut self, stage: ConsensusStage, timestamp: SystemTime, is_local: Option) { + fn add_event(&mut self, stage: ConsensusStage, timestamp: SystemTime) { let event = TimingEvent { round: self.round, timestamp, @@ -96,7 +97,6 @@ impl RoundEvents { ConsensusStage::ProposalCreated => "proposal_created".to_string(), ConsensusStage::CertificateAdded => "certificate_added".to_string(), }, - is_local, }; match stage { @@ -113,6 +113,7 @@ impl SubdagTimings { lowest_round, highest_round, subdag_processing: None, + prepare_advance_to_next_quorum_block: None, check_next_block: None, advance_to_next_block: None, } @@ -124,6 +125,9 @@ impl SubdagTimings { SubdagStage::SubdagProcessing => { self.subdag_processing = Some((now, None)); } + SubdagStage::PrepareAdvanceToNextQuorumBlock => { + self.prepare_advance_to_next_quorum_block = Some((now, None)); + } SubdagStage::CheckNextBlock => { self.check_next_block = Some((now, None)); } @@ -141,6 +145,11 @@ impl SubdagTimings { self.subdag_processing = Some((start, Some(now))); } } + SubdagStage::PrepareAdvanceToNextQuorumBlock => { + if let Some((start, _)) = self.prepare_advance_to_next_quorum_block { + self.prepare_advance_to_next_quorum_block = Some((start, Some(now))); + } + } SubdagStage::CheckNextBlock => { if let Some((start, _)) = self.check_next_block { self.check_next_block = Some((start, Some(now))); @@ -156,18 +165,18 @@ impl SubdagTimings { } /// Record a consensus event for a specific round -pub fn record_event(round: u64, stage: ConsensusStage, is_local: Option) { +pub fn record_event(round: u64, stage: ConsensusStage) { let now = SystemTime::now(); let mut round_events = ROUND_EVENTS.write(); let round_event = round_events.entry(round).or_insert_with(|| RoundEvents::new(round)); - round_event.add_event(stage, now, is_local); + round_event.add_event(stage, now); } /// Record a consensus event with custom timestamp for a specific round -pub fn record_event_with_timestamp(round: u64, stage: ConsensusStage, timestamp: SystemTime, is_local: Option) { +pub fn record_event_with_timestamp(round: u64, stage: ConsensusStage, timestamp: SystemTime) { let mut events = ROUND_EVENTS.write(); let round_events = events.entry(round).or_insert_with(|| RoundEvents::new(round)); - round_events.add_event(stage, timestamp, is_local); + round_events.add_event(stage, timestamp); } /// Record the start of a subdag processing stage @@ -230,16 +239,13 @@ mod tests { fn test_event_recording() { let round = 12345; - record_event(round, ConsensusStage::ProposalCreated, Some(true)); - record_event(round, ConsensusStage::ProposalSeen, Some(false)); + record_event(round, ConsensusStage::ProposalCreated); + record_event(round, ConsensusStage::ProposalSeen); let events = get_round_events(round).unwrap(); assert_eq!(events.proposal_created.len(), 1); assert_eq!(events.proposal_seen.len(), 1); assert_eq!(events.certificate_added.len(), 0); - - assert_eq!(events.proposal_created[0].is_local, Some(true)); - assert_eq!(events.proposal_seen[0].is_local, Some(false)); } #[test] @@ -266,9 +272,9 @@ mod tests { let (low, high) = (200, 210); // Add some timing data - record_event(round, ConsensusStage::ProposalCreated, None); + record_event(round, ConsensusStage::ProposalCreated); thread::sleep(Duration::from_millis(5)); - record_event(round, ConsensusStage::ProposalCreated, None); + record_event(round, ConsensusStage::ProposalCreated); start_subdag_stage(low, high, SubdagStage::SubdagProcessing); thread::sleep(Duration::from_millis(5)); diff --git a/node/bft/src/primary.rs b/node/bft/src/primary.rs index 5d9d4d548e..5d5796eb7d 100644 --- a/node/bft/src/primary.rs +++ b/node/bft/src/primary.rs @@ -696,7 +696,7 @@ impl Primary { })?; #[cfg(feature = "test_network")] - crate::helpers::record_event(round, crate::helpers::ConsensusStage::ProposalCreated, Some(true)); + crate::helpers::record_event(round, crate::helpers::ConsensusStage::ProposalCreated); // Broadcast the batch to all validators for signing. self.gateway.broadcast(Event::BatchPropose(batch_header.into())); @@ -766,7 +766,7 @@ impl Primary { } #[cfg(feature = "test_network")] - crate::helpers::record_event(batch_round, crate::helpers::ConsensusStage::ProposalSeen, Some(false)); + crate::helpers::record_event(batch_round, crate::helpers::ConsensusStage::ProposalSeen); // Retrieve the cached round and batch ID for this validator. if let Some((signed_round, signed_batch_id, signature)) = diff --git a/node/consensus/src/lib.rs b/node/consensus/src/lib.rs index 94c4a6dd05..1f3152f9bc 100644 --- a/node/consensus/src/lib.rs +++ b/node/consensus/src/lib.rs @@ -529,12 +529,18 @@ impl Consensus { let _lowest_round = rounds.iter().min().copied().unwrap_or(0); let _highest_round = rounds.iter().max().copied().unwrap_or(0); + #[cfg(feature = "test_network")] + snarkos_node_bft::helpers::end_subdag_stage( + _highest_round.saturating_sub(2), + _highest_round, + snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, + ); // Create the candidate next block. #[cfg(feature = "test_network")] snarkos_node_bft::helpers::start_subdag_stage( _lowest_round, _highest_round, - snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, + snarkos_node_bft::helpers::SubdagStage::PrepareAdvanceToNextQuorumBlock, ); let next_block = self.ledger.prepare_advance_to_next_quorum_block(subdag, transmissions)?; let _next_block_height = next_block.height(); @@ -542,7 +548,7 @@ impl Consensus { snarkos_node_bft::helpers::end_subdag_stage( _lowest_round, _highest_round, - snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, + snarkos_node_bft::helpers::SubdagStage::PrepareAdvanceToNextQuorumBlock, ); // Check that the block is well-formed. #[cfg(feature = "test_network")] From d9492d025af474d210742fedc0167f729f08b719 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Sun, 19 Oct 2025 21:55:10 +0200 Subject: [PATCH 04/10] Add useful warnings --- node/bft/src/helpers/timing.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/node/bft/src/helpers/timing.rs b/node/bft/src/helpers/timing.rs index b81074efd4..ca837bdd75 100644 --- a/node/bft/src/helpers/timing.rs +++ b/node/bft/src/helpers/timing.rs @@ -143,21 +143,29 @@ impl SubdagTimings { SubdagStage::SubdagProcessing => { if let Some((start, _)) = self.subdag_processing { self.subdag_processing = Some((start, Some(now))); + } else { + warn!("SubdagProcessing stage not started"); } } SubdagStage::PrepareAdvanceToNextQuorumBlock => { if let Some((start, _)) = self.prepare_advance_to_next_quorum_block { self.prepare_advance_to_next_quorum_block = Some((start, Some(now))); + } else { + warn!("PrepareAdvanceToNextQuorumBlock stage not started"); } } SubdagStage::CheckNextBlock => { if let Some((start, _)) = self.check_next_block { self.check_next_block = Some((start, Some(now))); + } else { + warn!("CheckNextBlock stage not started"); } } SubdagStage::AdvanceToNextBlock => { if let Some((start, _)) = self.advance_to_next_block { self.advance_to_next_block = Some((start, Some(now))); + } else { + warn!("AdvanceToNextBlock stage not started"); } } } From a72a7bd0c95d66c79ea5f45c48a40c7992f70c51 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Fri, 24 Oct 2025 14:26:32 +0200 Subject: [PATCH 05/10] Introduce test_consensus_tracking feature flag Using test_network for consensus_tracking could be inefficient for long-running dev networks. Merging it with production metrics would take a lot more work. --- Cargo.toml | 3 ++- node/Cargo.toml | 2 +- node/bft/Cargo.toml | 2 +- node/bft/src/bft.rs | 4 ++-- node/bft/src/helpers/mod.rs | 4 ++-- node/bft/src/primary.rs | 4 ++-- node/consensus/Cargo.toml | 2 +- node/consensus/src/lib.rs | 16 ++++++++-------- 8 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ccf6a0f646..252060f791 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -274,7 +274,8 @@ locktick = [ serial = [ "snarkos-cli/serial" ] test_targets = [ "snarkos-cli/test_targets" ] test_consensus_heights = [ "snarkos-cli/test_consensus_heights" ] -test_network = [ "snarkos-cli/test_network", "snarkos-node/test_network" ] +test_network = [ "snarkos-cli/test_network" ] +test_consensus_tracking = [ "snarkos-node/test_consensus_tracking" ] tokio_console = [ "snarkos-cli/tokio_console" ] [dependencies.clap] diff --git a/node/Cargo.toml b/node/Cargo.toml index a089e7b5db..f4c4e7af29 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -50,7 +50,7 @@ cuda = [ "snarkos-node-sync/cuda" ] serial = [ "snarkos-node-bft/serial" ] -test_network = [ "snarkos-node-bft/test_network", "snarkos-node-consensus/test_network" ] +test_consensus_tracking = [ "snarkos-node-bft/test_consensus_tracking", "snarkos-node-consensus/test_consensus_tracking" ] [dependencies.aleo-std] workspace = true diff --git a/node/bft/Cargo.toml b/node/bft/Cargo.toml index a030e79544..52bf4a2f66 100644 --- a/node/bft/Cargo.toml +++ b/node/bft/Cargo.toml @@ -44,7 +44,7 @@ test = [ "snarkos-node-bft-ledger-service/test", "snarkos-node-bft-storage-service/test" ] -test_network = [ ] +test_consensus_tracking = [ ] serial = [ "snarkos-node-bft-ledger-service/serial" ] [dependencies.aleo-std] diff --git a/node/bft/src/bft.rs b/node/bft/src/bft.rs index 821cd0b705..6e2f342d63 100644 --- a/node/bft/src/bft.rs +++ b/node/bft/src/bft.rs @@ -480,7 +480,7 @@ impl BFT { // Insert the certificate into the DAG. self.dag.write().insert(certificate); - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] crate::helpers::record_event(certificate_round, crate::helpers::ConsensusStage::CertificateAdded); // Get the previous round number. @@ -566,7 +566,7 @@ impl BFT { // Fetch the leader round. let latest_leader_round = leader_certificate.round(); - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] crate::helpers::start_subdag_stage( latest_leader_round.saturating_sub(2), latest_leader_round, diff --git a/node/bft/src/helpers/mod.rs b/node/bft/src/helpers/mod.rs index 1458957d33..e644e556f8 100644 --- a/node/bft/src/helpers/mod.rs +++ b/node/bft/src/helpers/mod.rs @@ -51,9 +51,9 @@ pub use telemetry::*; pub mod timestamp; pub use timestamp::*; -#[cfg(feature = "test_network")] +#[cfg(feature = "test_consensus_tracking")] pub mod timing; -#[cfg(feature = "test_network")] +#[cfg(feature = "test_consensus_tracking")] pub use timing::*; /// Formats an ID into a truncated identifier (for logging purposes). diff --git a/node/bft/src/primary.rs b/node/bft/src/primary.rs index a1309cba79..4278e3548b 100644 --- a/node/bft/src/primary.rs +++ b/node/bft/src/primary.rs @@ -695,7 +695,7 @@ impl Primary { } })?; - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] crate::helpers::record_event(round, crate::helpers::ConsensusStage::ProposalCreated); // Broadcast the batch to all validators for signing. @@ -765,7 +765,7 @@ impl Primary { ); } - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] crate::helpers::record_event(batch_round, crate::helpers::ConsensusStage::ProposalSeen); // Retrieve the cached round and batch ID for this validator. diff --git a/node/consensus/Cargo.toml b/node/consensus/Cargo.toml index 29da6c355e..7114fcadb2 100644 --- a/node/consensus/Cargo.toml +++ b/node/consensus/Cargo.toml @@ -29,7 +29,7 @@ metrics = [ "dep:snarkos-node-metrics" ] telemetry = [ "snarkos-node-bft/telemetry" ] cuda = [ "snarkvm/cuda", "snarkos-account/cuda", "snarkos-node-bft-ledger-service/cuda" ] serial = [ "snarkos-node-bft-ledger-service/serial" ] -test_network = [ ] +test_consensus_tracking = [ ] [dependencies.aleo-std] diff --git a/node/consensus/src/lib.rs b/node/consensus/src/lib.rs index 1f3152f9bc..63e5e96bb1 100644 --- a/node/consensus/src/lib.rs +++ b/node/consensus/src/lib.rs @@ -529,14 +529,14 @@ impl Consensus { let _lowest_round = rounds.iter().min().copied().unwrap_or(0); let _highest_round = rounds.iter().max().copied().unwrap_or(0); - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] snarkos_node_bft::helpers::end_subdag_stage( _highest_round.saturating_sub(2), _highest_round, snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, ); // Create the candidate next block. - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] snarkos_node_bft::helpers::start_subdag_stage( _lowest_round, _highest_round, @@ -544,35 +544,35 @@ impl Consensus { ); let next_block = self.ledger.prepare_advance_to_next_quorum_block(subdag, transmissions)?; let _next_block_height = next_block.height(); - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] snarkos_node_bft::helpers::end_subdag_stage( _lowest_round, _highest_round, snarkos_node_bft::helpers::SubdagStage::PrepareAdvanceToNextQuorumBlock, ); // Check that the block is well-formed. - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] snarkos_node_bft::helpers::start_subdag_stage( _lowest_round, _highest_round, snarkos_node_bft::helpers::SubdagStage::CheckNextBlock, ); self.ledger.check_next_block(&next_block)?; - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] snarkos_node_bft::helpers::end_subdag_stage( _lowest_round, _highest_round, snarkos_node_bft::helpers::SubdagStage::CheckNextBlock, ); // Advance to the next block. - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] snarkos_node_bft::helpers::start_subdag_stage( _lowest_round, _highest_round, snarkos_node_bft::helpers::SubdagStage::AdvanceToNextBlock, ); self.ledger.advance_to_next_block(&next_block)?; - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] snarkos_node_bft::helpers::end_subdag_stage( _lowest_round, _highest_round, @@ -580,7 +580,7 @@ impl Consensus { ); // Export timing data to JSON after block generation - #[cfg(feature = "test_network")] + #[cfg(feature = "test_consensus_tracking")] { let dev_index = self.bft().primary().gateway().dev().unwrap_or_default(); let json_filename = format!("consensus_timing_block_{dev_index}.json"); From 62d3f7bcccc9fca679b68a316b6750e4b6337bd5 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Fri, 24 Oct 2025 17:11:39 +0200 Subject: [PATCH 06/10] Update Cargo.lock --- Cargo.lock | 6990 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 6990 insertions(+) create mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000000..2617f84a04 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,6990 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aleo-std" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "869be259eeb00852087ad36e9a68c67959c2811dc8fc6c680fcac98948c4f172" +dependencies = [ + "aleo-std-cpu", + "aleo-std-profiler", + "aleo-std-storage", + "aleo-std-time", + "aleo-std-timed", + "aleo-std-timer", + "walkdir", +] + +[[package]] +name = "aleo-std-cpu" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9881417111e9266cf47bb2fec0e7ef32454fa2ac05763a48f25c1d50f260e1b9" + +[[package]] +name = "aleo-std-profiler" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d53500befe6ecd23f8fc11ccf510b680516b3a6aff08d60f12e1dda00b77787" + +[[package]] +name = "aleo-std-storage" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46f6571ae16ee20c1e9a95b6ba685ca7156d519400f597c5e59f53b641637225" +dependencies = [ + "dirs", + "tempfile", +] + +[[package]] +name = "aleo-std-time" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9ebd144c81671193ed85aa2db9bb5e183421843e0485de8fffc07e5cf50e18a" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 1.0.109", +] + +[[package]] +name = "aleo-std-timed" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f6ff9e4c36858fa2c29e5284b77527b5a7466743976e1ba1f5824e16683545" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 1.0.109", +] + +[[package]] +name = "aleo-std-timer" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12aca1021aef2c476bad30d2f681e891b2be4f07dbc230a96df09cb693bfb3cb" +dependencies = [ + "colored 2.2.0", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +dependencies = [ + "backtrace", +] + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core 0.4.5", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "itoa", + "matchit 0.7.3", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" +dependencies = [ + "axum-core 0.5.5", + "bytes", + "form_urlencoded", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-util", + "itoa", + "matchit 0.8.4", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower 0.5.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-extra" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" +dependencies = [ + "axum 0.8.6", + "axum-core 0.5.5", + "bytes", + "futures-util", + "headers", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "serde_core", + "serde_json", + "tower-layer", + "tower-service", + "tracing", + "typed-json", +] + +[[package]] +name = "backtrace" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-link 0.2.1", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote 1.0.41", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.108", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e90f7deecfac93095eb874a40febd69427776e24e1bd7f87f33ac62d6f0174df" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blst" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "built" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" +dependencies = [ + "git2", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "bzip2-sys" +version = "0.1.13+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "castaway" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" +dependencies = [ + "rustversion", +] + +[[package]] +name = "cc" +version = "1.2.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "ci_info" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f638c70e8c5753795cc9a8c07c44da91554a09e4cf11a7326e8161b0a3c45e" +dependencies = [ + "envmnt", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "4.5.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +dependencies = [ + "heck", + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "clap_lex" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + +[[package]] +name = "colored" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "compact_str" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "console-api" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" +dependencies = [ + "futures-core", + "prost", + "prost-types", + "tonic", + "tracing-core", +] + +[[package]] +name = "console-subscriber" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" +dependencies = [ + "console-api", + "crossbeam-channel", + "crossbeam-utils", + "futures-task", + "hdrhistogram", + "humantime", + "hyper-util", + "prost", + "prost-types", + "serde", + "serde_json", + "thread_local", + "tokio", + "tokio-stream", + "tonic", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "convert_case" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc4bff745c9b4c7fb1e97b25d13153da2bc7796260141df62378998d070207f" +dependencies = [ + "cookie", + "document-features", + "idna", + "indexmap 2.12.0", + "log", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +dependencies = [ + "bitflags 2.10.0", + "crossterm_winapi", + "mio", + "parking_lot", + "rustix 0.38.44", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.10.0", + "crossterm_winapi", + "derive_more", + "document-features", + "mio", + "parking_lot", + "rustix 1.1.2", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "curl" +version = "0.4.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79fc3b6dd0b87ba36e565715bf9a2ced221311db47bd18011676f24a6066edbc" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.6.1", + "windows-sys 0.59.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.83+curl-8.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5830daf304027db10c82632a464879d46a3f7c4ba17a31592657ad16c719b483" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.59.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote 1.0.41", + "strsim", + "syn 2.0.108", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote 1.0.41", + "strsim", + "syn 2.0.108", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "deadline" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7db8ae923a3ef13540aebacb892fc62405343ed1971f70e7c0da079eb16d38f" +dependencies = [ + "tokio", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derive-ex" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bba95f299f6b9cd47f68a847eca2ae9060a2713af532dc35c342065544845407" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "structmeta 0.3.0", + "syn 2.0.108", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "convert_case", + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "serde", + "sha2", + "signature", + "subtle", + "zeroize", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-iterator" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4549325971814bda7a44061bf3fe7e487d447cba01e4220a4b454d630d7a016" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "enum_index" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5532bdea562e7be83060c36185eecccba82fe16729d2eaad2891d65417656dd" + +[[package]] +name = "enum_index_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ab22c8085548bf06190113dca556e149ecdbb05ae5b972a2b9899f26b944ee4" +dependencies = [ + "quote 0.3.15", + "syn 0.11.11", +] + +[[package]] +name = "env_home" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" + +[[package]] +name = "envmnt" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d328fc287c61314c4a61af7cfdcbd7e678e39778488c7cb13ec133ce0f4059" +dependencies = [ + "fsio", + "indexmap 1.9.3", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "flate2" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "forwarded-header-value" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" +dependencies = [ + "nonempty", + "thiserror 1.0.69", +] + +[[package]] +name = "fragile" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" + +[[package]] +name = "fsio" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fd087255f739f4f1aeea69f11b72f8080e9c2e7645cd06955dad4a178a49e3" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getopts" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" +dependencies = [ + "unicode-width 0.2.0", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + +[[package]] +name = "git2" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2deb07a133b1520dc1a5690e9bd08950108873d7ed5de38dcc74d3b5ebffa110" +dependencies = [ + "bitflags 2.10.0", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "governor" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" +dependencies = [ + "cfg-if", + "dashmap", + "futures-sink", + "futures-timer", + "futures-util", + "getrandom 0.3.4", + "no-std-compat", + "nonzero_ext", + "parking_lot", + "portable-atomic", + "quanta", + "rand 0.9.2", + "smallvec", + "spinning_top", + "web-time", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap 2.12.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] + +[[package]] +name = "hdrhistogram" +version = "7.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +dependencies = [ + "base64 0.21.7", + "byteorder", + "flate2", + "nom", + "num-traits", +] + +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64 0.22.1", + "bytes", + "headers-core", + "http 1.3.1", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.3.1", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http 1.3.1", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http 1.3.1", + "hyper 1.7.0", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper 1.7.0", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.32", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.7.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "hyper 1.7.0", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.1", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", + "rayon", + "serde", + "serde_core", +] + +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "unicode-width 0.2.0", + "web-time", +] + +[[package]] +name = "indoc" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] + +[[package]] +name = "instability" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" +dependencies = [ + "darling 0.20.11", + "indoc", + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +dependencies = [ + "base64 0.22.1", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "sha2", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libgit2-sys" +version = "0.18.2+1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c42fe03df2bd3c53a3a9c7317ad91d80c81cd1fb0caec8d7cc4cd2bfa10c222" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.1", +] + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags 2.10.0", + "libc", +] + +[[package]] +name = "librocksdb-sys" +version = "0.11.0+8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "lz4-sys", +] + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "locktick" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a4a7c4b9459e549968abf200cb77c6faf0bdedc87df5065f73ca95031795050" +dependencies = [ + "backtrace", + "parking_lot", + "simple_moving_average", + "tokio", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "lru" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" +dependencies = [ + "hashbrown 0.16.0", +] + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "lz4-sys" +version = "1.11.1+lz4-1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "metrics" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d05972e8cbac2671e85aa9d04d9160d193f8bebd1a5c1a2f4542c62e65d1d0" +dependencies = [ + "ahash", + "portable-atomic", +] + +[[package]] +name = "metrics-exporter-prometheus" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf4e7146e30ad172c42c39b3246864bd2d3c6396780711a1baf749cfe423e21" +dependencies = [ + "base64 0.21.7", + "hyper 0.14.32", + "hyper-tls 0.5.0", + "indexmap 2.12.0", + "ipnet", + "metrics", + "metrics-util", + "quanta", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "metrics-util" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b07a5eb561b8cbc16be2d216faf7757f9baf3bfb94dbb0fae3df8387a5bb47f" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown 0.14.5", + "metrics", + "num_cpus", + "quanta", + "sketches-ddsketch", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.59.0", +] + +[[package]] +name = "mockall" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39a6bfcc6c8c7eed5ee98b9c3e33adc726054389233e201c95dab2d41a3839d2" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ca3004c2efe9011bd4e461bd8256445052b9615405b4f7ea43fc8ca5c20898" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nias" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab250442c86f1850815b5d268639dff018c0627022bc1940eb2d642ca1ce12f0" + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "nonzero_ext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +dependencies = [ + "parking_lot_core", +] + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "open" +version = "5.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "openssl" +version = "0.10.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.110" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "pea2pea" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "908db9c51d2d2a4c379bce9395cac8305a464780b0c809969001501743207191" +dependencies = [ + "bytes", + "futures-util", + "parking_lot", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "peak_alloc" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c4e8e2dd832fd76346468f822e4e600d30ba4e5aa545a128abf12cfae7ea3e" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "predicates" +version = "3.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +dependencies = [ + "anstyle", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" + +[[package]] +name = "predicates-tree" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.108", +] + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.10.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.8", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "prost-types" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +dependencies = [ + "prost", +] + +[[package]] +name = "quanta" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi", + "web-sys", + "winapi", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-xml" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", +] + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.1", + "rustls", + "socket2 0.6.1", + "thiserror 2.0.17", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash 2.1.1", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.17", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.6.1", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "ratatui" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" +dependencies = [ + "bitflags 2.10.0", + "cassowary", + "compact_str", + "crossterm 0.28.1", + "indoc", + "instability", + "itertools 0.13.0", + "lru 0.12.5", + "paste", + "strum", + "unicode-segmentation", + "unicode-truncate", + "unicode-width 0.2.0", +] + +[[package]] +name = "raw-cpuid" +version = "11.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +dependencies = [ + "bitflags 2.10.0", +] + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.10.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.13", + "regex-syntax 0.8.8", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.8", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "reqwest" +version = "0.12.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-rustls", + "hyper-tls 0.6.0", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tower 0.5.2", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rpassword" +version = "7.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d4c8b64f049c6721ec8ccec37ddfc3d641c4a7fca57e8f2a89de509c73df39" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.59.0", +] + +[[package]] +name = "rtoolbox" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cc970b249fbe527d6e02e0a227762c9108b2f49d81094fe357ffc6d14d7f6f" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "rusty-fork" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "rusty-hook" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96cee9be61be7e1cbadd851e58ed7449c29c620f00b23df937cb9cbc04ac21a3" +dependencies = [ + "ci_info", + "getopts", + "nias", + "toml 0.5.11", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.10.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "self-replace" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03ec815b5eab420ab893f63393878d89c90fdd94c0bcc44c07abb8ad95552fb7" +dependencies = [ + "fastrand", + "tempfile", + "windows-sys 0.52.0", +] + +[[package]] +name = "self_update" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d832c086ece0dacc29fb2947bb4219b8f6e12fe9e40b7108f9e57c4224e47b5c" +dependencies = [ + "hyper 1.7.0", + "indicatif", + "log", + "quick-xml", + "regex", + "reqwest", + "self-replace", + "semver", + "serde_json", + "tempfile", + "urlencoding", + "zip", + "zipsign-api", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + +[[package]] +name = "seq-macro" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "indexmap 2.12.0", + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + +[[package]] +name = "serde_spanned" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.12.0", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" +dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simple_asn1" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.17", + "time", +] + +[[package]] +name = "simple_moving_average" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a4b144ad185430cd033299e2c93e465d5a7e65fbb858593dc57181fa13cd310" +dependencies = [ + "num-traits", +] + +[[package]] +name = "sketches-ddsketch" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + +[[package]] +name = "snarkos" +version = "4.2.2" +dependencies = [ + "built", + "clap", + "locktick", + "rusty-hook", + "snarkos-account", + "snarkos-cli", + "snarkos-node", + "snarkos-node-bft", + "snarkos-node-cdn", + "snarkos-node-consensus", + "snarkos-node-metrics", + "snarkos-node-rest", + "snarkos-node-router", + "snarkos-node-sync", + "snarkos-node-tcp", + "snarkvm", + "tikv-jemallocator", + "toml 0.9.8", + "tracing", + "walkdir", +] + +[[package]] +name = "snarkos-account" +version = "4.2.2" +dependencies = [ + "colored 3.0.0", + "snarkvm", +] + +[[package]] +name = "snarkos-cli" +version = "4.2.2" +dependencies = [ + "aleo-std", + "anstyle", + "anyhow", + "base64 0.22.1", + "clap", + "colored 3.0.0", + "console-subscriber", + "crossterm 0.29.0", + "indexmap 2.12.0", + "locktick", + "nix", + "num_cpus", + "parking_lot", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "rpassword", + "self_update", + "serde", + "serde_json", + "snarkos-account", + "snarkos-display", + "snarkos-node", + "snarkos-node-cdn", + "snarkos-node-metrics", + "snarkos-node-rest", + "snarkvm", + "sys-info", + "tempfile", + "thiserror 2.0.17", + "time", + "tokio", + "tracing", + "tracing-subscriber", + "ureq", + "zeroize", +] + +[[package]] +name = "snarkos-display" +version = "4.2.2" +dependencies = [ + "anyhow", + "crossterm 0.29.0", + "ratatui", + "snarkos-node", + "snarkvm", + "tokio", +] + +[[package]] +name = "snarkos-node" +version = "4.2.2" +dependencies = [ + "aleo-std", + "anyhow", + "async-trait", + "bytes", + "colored 3.0.0", + "deadline", + "futures-util", + "http 1.3.1", + "indexmap 2.12.0", + "locktick", + "lru 0.16.2", + "num_cpus", + "once_cell", + "parking_lot", + "paste", + "pea2pea", + "rand 0.8.5", + "rand_chacha 0.3.1", + "reqwest", + "serde_json", + "snarkos-account", + "snarkos-node-bft", + "snarkos-node-cdn", + "snarkos-node-consensus", + "snarkos-node-network", + "snarkos-node-rest", + "snarkos-node-router", + "snarkos-node-sync", + "snarkos-node-tcp", + "snarkvm", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "snarkos-node-bft" +version = "4.2.2" +dependencies = [ + "aleo-std", + "anyhow", + "async-recursion", + "async-trait", + "axum 0.8.6", + "axum-extra", + "bytes", + "clap", + "colored 3.0.0", + "deadline", + "futures", + "indexmap 2.12.0", + "itertools 0.14.0", + "locktick", + "lru 0.16.2", + "mockall", + "once_cell", + "open", + "parking_lot", + "paste", + "pea2pea", + "proptest", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "rayon", + "serde", + "serde_json", + "sha2", + "snarkos-account", + "snarkos-node-bft", + "snarkos-node-bft-events", + "snarkos-node-bft-ledger-service", + "snarkos-node-bft-storage-service", + "snarkos-node-metrics", + "snarkos-node-network", + "snarkos-node-sync", + "snarkos-node-tcp", + "snarkvm", + "test-strategy 0.4.3", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tower-http", + "tracing", + "tracing-subscriber", + "tracing-test", +] + +[[package]] +name = "snarkos-node-bft-events" +version = "4.2.2" +dependencies = [ + "anyhow", + "bytes", + "indexmap 2.12.0", + "proptest", + "serde", + "snarkos-node-sync-locators", + "snarkvm", + "test-strategy 0.4.3", + "time", + "tokio-util", + "tracing", +] + +[[package]] +name = "snarkos-node-bft-ledger-service" +version = "4.2.2" +dependencies = [ + "anyhow", + "async-trait", + "indexmap 2.12.0", + "locktick", + "parking_lot", + "rand 0.8.5", + "rayon", + "snarkos-node-metrics", + "snarkvm", + "tokio", + "tracing", +] + +[[package]] +name = "snarkos-node-bft-storage-service" +version = "4.2.2" +dependencies = [ + "aleo-std", + "anyhow", + "indexmap 2.12.0", + "locktick", + "lru 0.16.2", + "parking_lot", + "snarkvm", + "tracing", +] + +[[package]] +name = "snarkos-node-cdn" +version = "4.2.2" +dependencies = [ + "anyhow", + "bincode", + "colored 3.0.0", + "http 1.3.1", + "locktick", + "parking_lot", + "rayon", + "reqwest", + "serde", + "serde_json", + "snarkos-node-metrics", + "snarkvm", + "tokio", + "tokio-test", + "tracing", +] + +[[package]] +name = "snarkos-node-consensus" +version = "4.2.2" +dependencies = [ + "aleo-std", + "anyhow", + "colored 3.0.0", + "indexmap 2.12.0", + "itertools 0.14.0", + "locktick", + "lru 0.16.2", + "once_cell", + "parking_lot", + "snarkos-account", + "snarkos-node-bft", + "snarkos-node-bft-ledger-service", + "snarkos-node-bft-storage-service", + "snarkos-node-metrics", + "snarkos-node-sync", + "snarkvm", + "tokio", + "tracing", + "tracing-test", +] + +[[package]] +name = "snarkos-node-metrics" +version = "4.2.2" +dependencies = [ + "locktick", + "metrics-exporter-prometheus", + "parking_lot", + "rayon", + "snarkvm", + "time", +] + +[[package]] +name = "snarkos-node-network" +version = "4.2.2" +dependencies = [ + "aleo-std", + "anyhow", + "locktick", + "parking_lot", + "serde", + "snarkos-node-network", + "snarkos-node-tcp", + "snarkvm", + "tokio", + "tracing", +] + +[[package]] +name = "snarkos-node-rest" +version = "4.2.2" +dependencies = [ + "anyhow", + "axum 0.8.6", + "axum-extra", + "base64 0.22.1", + "built", + "http 1.3.1", + "indexmap 2.12.0", + "jsonwebtoken", + "locktick", + "once_cell", + "parking_lot", + "rand 0.8.5", + "rayon", + "serde", + "serde_json", + "serde_with", + "snarkos-node-cdn", + "snarkos-node-consensus", + "snarkos-node-network", + "snarkos-node-router", + "snarkos-node-sync", + "snarkvm", + "time", + "tokio", + "tower 0.4.13", + "tower-http", + "tower_governor", + "tracing", +] + +[[package]] +name = "snarkos-node-router" +version = "4.2.2" +dependencies = [ + "aleo-std", + "anyhow", + "async-trait", + "colored 3.0.0", + "deadline", + "futures", + "futures-util", + "linked-hash-map", + "locktick", + "parking_lot", + "peak_alloc", + "rand 0.8.5", + "rayon", + "snarkos-account", + "snarkos-node-bft-ledger-service", + "snarkos-node-metrics", + "snarkos-node-network", + "snarkos-node-router", + "snarkos-node-router-messages", + "snarkos-node-sync", + "snarkos-node-sync-communication-service", + "snarkos-node-sync-locators", + "snarkos-node-tcp", + "snarkvm", + "time", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "snarkos-node-router-messages" +version = "4.2.2" +dependencies = [ + "bytes", + "proptest", + "snarkos-node-bft-events", + "snarkos-node-network", + "snarkos-node-sync-locators", + "snarkvm", + "test-strategy 0.4.3", + "tokio-util", + "tracing", +] + +[[package]] +name = "snarkos-node-sync" +version = "4.2.2" +dependencies = [ + "anyhow", + "futures", + "indexmap 2.12.0", + "itertools 0.14.0", + "locktick", + "parking_lot", + "rand 0.8.5", + "serde", + "snarkos-node-bft-ledger-service", + "snarkos-node-metrics", + "snarkos-node-network", + "snarkos-node-router", + "snarkos-node-sync-communication-service", + "snarkos-node-sync-locators", + "snarkos-node-tcp", + "snarkvm", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "snarkos-node-sync-communication-service" +version = "4.2.2" +dependencies = [ + "async-trait", + "tokio", +] + +[[package]] +name = "snarkos-node-sync-locators" +version = "4.2.2" +dependencies = [ + "anyhow", + "indexmap 2.12.0", + "serde", + "snarkvm", + "tracing", +] + +[[package]] +name = "snarkos-node-tcp" +version = "4.2.2" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "locktick", + "once_cell", + "parking_lot", + "snarkos-node-metrics", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "snarkvm" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "anyhow", + "dotenvy", + "rand 0.8.5", + "serde_json", + "snarkvm-algorithms", + "snarkvm-circuit", + "snarkvm-console", + "snarkvm-curves", + "snarkvm-fields", + "snarkvm-ledger", + "snarkvm-metrics", + "snarkvm-parameters", + "snarkvm-synthesizer", + "snarkvm-utilities", + "ureq", + "walkdir", +] + +[[package]] +name = "snarkvm-algorithms" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "blake2", + "cfg-if", + "fxhash", + "hashbrown 0.15.5", + "hex", + "indexmap 2.12.0", + "itertools 0.14.0", + "num-traits", + "rand 0.8.5", + "rayon", + "serde", + "sha2", + "smallvec", + "snarkvm-algorithms-cuda", + "snarkvm-curves", + "snarkvm-fields", + "snarkvm-parameters", + "snarkvm-utilities", + "thiserror 2.0.17", +] + +[[package]] +name = "snarkvm-algorithms-cuda" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "blst", + "cc", + "sppark", + "which 8.0.0", +] + +[[package]] +name = "snarkvm-circuit" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-account", + "snarkvm-circuit-algorithms", + "snarkvm-circuit-collections", + "snarkvm-circuit-environment", + "snarkvm-circuit-network", + "snarkvm-circuit-program", + "snarkvm-circuit-types", +] + +[[package]] +name = "snarkvm-circuit-account" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-network", + "snarkvm-circuit-types", + "snarkvm-console-account", +] + +[[package]] +name = "snarkvm-circuit-algorithms" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-types", + "snarkvm-console-algorithms", + "snarkvm-fields", +] + +[[package]] +name = "snarkvm-circuit-collections" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-algorithms", + "snarkvm-circuit-types", + "snarkvm-console-collections", +] + +[[package]] +name = "snarkvm-circuit-environment" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "indexmap 2.12.0", + "itertools 0.14.0", + "nom", + "num-traits", + "smallvec", + "snarkvm-algorithms", + "snarkvm-circuit-environment-witness", + "snarkvm-console-network", + "snarkvm-curves", + "snarkvm-fields", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-circuit-environment-witness" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" + +[[package]] +name = "snarkvm-circuit-network" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-algorithms", + "snarkvm-circuit-collections", + "snarkvm-circuit-types", + "snarkvm-console-network", +] + +[[package]] +name = "snarkvm-circuit-program" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-account", + "snarkvm-circuit-algorithms", + "snarkvm-circuit-collections", + "snarkvm-circuit-network", + "snarkvm-circuit-types", + "snarkvm-console-program", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-circuit-types" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-environment", + "snarkvm-circuit-types-address", + "snarkvm-circuit-types-boolean", + "snarkvm-circuit-types-field", + "snarkvm-circuit-types-group", + "snarkvm-circuit-types-integers", + "snarkvm-circuit-types-scalar", + "snarkvm-circuit-types-string", +] + +[[package]] +name = "snarkvm-circuit-types-address" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-environment", + "snarkvm-circuit-types-boolean", + "snarkvm-circuit-types-field", + "snarkvm-circuit-types-group", + "snarkvm-circuit-types-scalar", + "snarkvm-console-types-address", +] + +[[package]] +name = "snarkvm-circuit-types-boolean" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-environment", + "snarkvm-console-types-boolean", +] + +[[package]] +name = "snarkvm-circuit-types-field" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-environment", + "snarkvm-circuit-types-boolean", + "snarkvm-console-types-field", +] + +[[package]] +name = "snarkvm-circuit-types-group" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-environment", + "snarkvm-circuit-types-boolean", + "snarkvm-circuit-types-field", + "snarkvm-circuit-types-scalar", + "snarkvm-console-types-group", +] + +[[package]] +name = "snarkvm-circuit-types-integers" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-environment", + "snarkvm-circuit-types-boolean", + "snarkvm-circuit-types-field", + "snarkvm-circuit-types-scalar", + "snarkvm-console-types-integers", +] + +[[package]] +name = "snarkvm-circuit-types-scalar" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-environment", + "snarkvm-circuit-types-boolean", + "snarkvm-circuit-types-field", + "snarkvm-console-types-scalar", +] + +[[package]] +name = "snarkvm-circuit-types-string" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-circuit-environment", + "snarkvm-circuit-types-boolean", + "snarkvm-circuit-types-field", + "snarkvm-circuit-types-integers", + "snarkvm-console-types-string", +] + +[[package]] +name = "snarkvm-console" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-account", + "snarkvm-console-algorithms", + "snarkvm-console-collections", + "snarkvm-console-network", + "snarkvm-console-program", + "snarkvm-console-types", +] + +[[package]] +name = "snarkvm-console-account" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "bs58", + "snarkvm-console-network", + "snarkvm-console-types", + "zeroize", +] + +[[package]] +name = "snarkvm-console-algorithms" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "blake2s_simd", + "hex", + "k256", + "smallvec", + "snarkvm-console-types", + "snarkvm-fields", + "snarkvm-utilities", + "tiny-keccak", +] + +[[package]] +name = "snarkvm-console-collections" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "rayon", + "snarkvm-console-algorithms", + "snarkvm-console-types", +] + +[[package]] +name = "snarkvm-console-network" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "anyhow", + "enum-iterator", + "indexmap 2.12.0", + "lazy_static", + "paste", + "serde", + "snarkvm-algorithms", + "snarkvm-console-algorithms", + "snarkvm-console-collections", + "snarkvm-console-network-environment", + "snarkvm-console-types", + "snarkvm-curves", + "snarkvm-parameters", +] + +[[package]] +name = "snarkvm-console-network-environment" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "anyhow", + "bech32", + "itertools 0.14.0", + "nom", + "num-traits", + "rand 0.8.5", + "serde", + "snarkvm-curves", + "snarkvm-fields", + "snarkvm-utilities", + "zeroize", +] + +[[package]] +name = "snarkvm-console-program" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "enum-iterator", + "enum_index", + "enum_index_derive", + "indexmap 2.12.0", + "num-derive", + "num-traits", + "seq-macro", + "serde_json", + "snarkvm-console-account", + "snarkvm-console-algorithms", + "snarkvm-console-collections", + "snarkvm-console-network", + "snarkvm-console-types", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-console-types" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-network-environment", + "snarkvm-console-types-address", + "snarkvm-console-types-boolean", + "snarkvm-console-types-field", + "snarkvm-console-types-group", + "snarkvm-console-types-integers", + "snarkvm-console-types-scalar", + "snarkvm-console-types-string", +] + +[[package]] +name = "snarkvm-console-types-address" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-network-environment", + "snarkvm-console-types-boolean", + "snarkvm-console-types-field", + "snarkvm-console-types-group", +] + +[[package]] +name = "snarkvm-console-types-boolean" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-network-environment", +] + +[[package]] +name = "snarkvm-console-types-field" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-network-environment", + "snarkvm-console-types-boolean", + "zeroize", +] + +[[package]] +name = "snarkvm-console-types-group" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-network-environment", + "snarkvm-console-types-boolean", + "snarkvm-console-types-field", + "snarkvm-console-types-scalar", +] + +[[package]] +name = "snarkvm-console-types-integers" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-network-environment", + "snarkvm-console-types-boolean", + "snarkvm-console-types-field", + "snarkvm-console-types-scalar", +] + +[[package]] +name = "snarkvm-console-types-scalar" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-network-environment", + "snarkvm-console-types-boolean", + "snarkvm-console-types-field", + "zeroize", +] + +[[package]] +name = "snarkvm-console-types-string" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console-network-environment", + "snarkvm-console-types-boolean", + "snarkvm-console-types-field", + "snarkvm-console-types-integers", +] + +[[package]] +name = "snarkvm-curves" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "rand 0.8.5", + "rayon", + "rustc_version", + "serde", + "snarkvm-fields", + "snarkvm-utilities", + "thiserror 2.0.17", +] + +[[package]] +name = "snarkvm-fields" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "itertools 0.14.0", + "num-traits", + "rand 0.8.5", + "rayon", + "serde", + "snarkvm-utilities", + "thiserror 2.0.17", + "zeroize", +] + +[[package]] +name = "snarkvm-ledger" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "indexmap 2.12.0", + "locktick", + "lru 0.16.2", + "parking_lot", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "snarkvm-circuit", + "snarkvm-console", + "snarkvm-ledger-authority", + "snarkvm-ledger-block", + "snarkvm-ledger-committee", + "snarkvm-ledger-narwhal", + "snarkvm-ledger-puzzle", + "snarkvm-ledger-query", + "snarkvm-ledger-store", + "snarkvm-ledger-test-helpers", + "snarkvm-synthesizer", + "snarkvm-utilities", + "time", + "tracing", +] + +[[package]] +name = "snarkvm-ledger-authority" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "anyhow", + "rand 0.8.5", + "serde_json", + "snarkvm-console", + "snarkvm-ledger-narwhal-subdag", +] + +[[package]] +name = "snarkvm-ledger-block" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "anyhow", + "indexmap 2.12.0", + "rayon", + "serde_json", + "snarkvm-console", + "snarkvm-ledger-authority", + "snarkvm-ledger-committee", + "snarkvm-ledger-narwhal-batch-header", + "snarkvm-ledger-narwhal-data", + "snarkvm-ledger-narwhal-subdag", + "snarkvm-ledger-narwhal-transmission-id", + "snarkvm-ledger-puzzle", + "snarkvm-synthesizer-program", + "snarkvm-synthesizer-snark", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-ledger-committee" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "anyhow", + "indexmap 2.12.0", + "proptest", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_distr", + "rayon", + "serde_json", + "snarkvm-console", + "snarkvm-ledger-narwhal-batch-header", + "snarkvm-metrics", + "test-strategy 0.3.1", +] + +[[package]] +name = "snarkvm-ledger-narwhal" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-ledger-narwhal-batch-certificate", + "snarkvm-ledger-narwhal-batch-header", + "snarkvm-ledger-narwhal-data", + "snarkvm-ledger-narwhal-subdag", + "snarkvm-ledger-narwhal-transmission", + "snarkvm-ledger-narwhal-transmission-id", +] + +[[package]] +name = "snarkvm-ledger-narwhal-batch-certificate" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "indexmap 2.12.0", + "rayon", + "serde_json", + "snarkvm-console", + "snarkvm-ledger-narwhal-batch-header", + "snarkvm-ledger-narwhal-transmission-id", +] + +[[package]] +name = "snarkvm-ledger-narwhal-batch-header" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "indexmap 2.12.0", + "rayon", + "serde_json", + "snarkvm-console", + "snarkvm-ledger-narwhal-transmission-id", + "time", +] + +[[package]] +name = "snarkvm-ledger-narwhal-data" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "bytes", + "serde_json", + "snarkvm-console", + "tokio", +] + +[[package]] +name = "snarkvm-ledger-narwhal-subdag" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "indexmap 2.12.0", + "rayon", + "serde_json", + "snarkvm-console", + "snarkvm-ledger-committee", + "snarkvm-ledger-narwhal-batch-certificate", + "snarkvm-ledger-narwhal-batch-header", + "snarkvm-ledger-narwhal-transmission-id", +] + +[[package]] +name = "snarkvm-ledger-narwhal-transmission" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "bytes", + "serde_json", + "snarkvm-console", + "snarkvm-ledger-block", + "snarkvm-ledger-narwhal-data", + "snarkvm-ledger-puzzle", +] + +[[package]] +name = "snarkvm-ledger-narwhal-transmission-id" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "snarkvm-console", + "snarkvm-ledger-puzzle", +] + +[[package]] +name = "snarkvm-ledger-puzzle" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "bincode", + "indexmap 2.12.0", + "locktick", + "lru 0.16.2", + "parking_lot", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "serde_json", + "snarkvm-algorithms", + "snarkvm-console", +] + +[[package]] +name = "snarkvm-ledger-puzzle-epoch" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "colored 3.0.0", + "indexmap 2.12.0", + "locktick", + "lru 0.16.2", + "parking_lot", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "snarkvm-circuit", + "snarkvm-console", + "snarkvm-ledger-puzzle", + "snarkvm-synthesizer-process", + "snarkvm-synthesizer-program", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-ledger-query" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "anyhow", + "async-trait", + "reqwest", + "serde", + "serde_json", + "snarkvm-console", + "snarkvm-ledger-block", + "snarkvm-ledger-store", + "snarkvm-synthesizer-program", + "ureq", +] + +[[package]] +name = "snarkvm-ledger-store" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std-storage", + "anyhow", + "bincode", + "indexmap 2.12.0", + "locktick", + "parking_lot", + "rayon", + "rocksdb", + "serde", + "serde_json", + "smallvec", + "snarkvm-console", + "snarkvm-ledger-authority", + "snarkvm-ledger-block", + "snarkvm-ledger-committee", + "snarkvm-ledger-narwhal-batch-certificate", + "snarkvm-ledger-puzzle", + "snarkvm-synthesizer-program", + "snarkvm-synthesizer-snark", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-ledger-test-helpers" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "snarkvm-algorithms", + "snarkvm-circuit", + "snarkvm-console", + "snarkvm-ledger-block", + "snarkvm-ledger-query", + "snarkvm-ledger-store", + "snarkvm-synthesizer-process", + "snarkvm-synthesizer-program", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-metrics" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "metrics", +] + +[[package]] +name = "snarkvm-parameters" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "cfg-if", + "colored 3.0.0", + "curl", + "hex", + "lazy_static", + "locktick", + "parking_lot", + "paste", + "rand 0.8.5", + "serde_json", + "sha2", + "snarkvm-curves", + "snarkvm-utilities", + "thiserror 2.0.17", +] + +[[package]] +name = "snarkvm-synthesizer" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "indexmap 2.12.0", + "itertools 0.14.0", + "locktick", + "lru 0.16.2", + "parking_lot", + "rand 0.8.5", + "rayon", + "serde", + "serde_json", + "snarkvm-algorithms", + "snarkvm-circuit", + "snarkvm-console", + "snarkvm-ledger-block", + "snarkvm-ledger-committee", + "snarkvm-ledger-narwhal-data", + "snarkvm-ledger-puzzle", + "snarkvm-ledger-puzzle-epoch", + "snarkvm-ledger-query", + "snarkvm-ledger-store", + "snarkvm-synthesizer-process", + "snarkvm-synthesizer-program", + "snarkvm-synthesizer-snark", + "snarkvm-utilities", + "tracing", +] + +[[package]] +name = "snarkvm-synthesizer-process" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "colored 3.0.0", + "indexmap 2.12.0", + "locktick", + "parking_lot", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "serde_json", + "snarkvm-algorithms", + "snarkvm-circuit", + "snarkvm-console", + "snarkvm-ledger-block", + "snarkvm-ledger-query", + "snarkvm-ledger-store", + "snarkvm-synthesizer-program", + "snarkvm-synthesizer-snark", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-synthesizer-program" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "enum-iterator", + "indexmap 2.12.0", + "paste", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "serde_json", + "snarkvm-circuit", + "snarkvm-console", + "snarkvm-synthesizer-snark", + "snarkvm-utilities", + "tiny-keccak", +] + +[[package]] +name = "snarkvm-synthesizer-snark" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "bincode", + "serde_json", + "snarkvm-algorithms", + "snarkvm-circuit", + "snarkvm-console", + "snarkvm-utilities", +] + +[[package]] +name = "snarkvm-utilities" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "aleo-std", + "anyhow", + "bincode", + "num-bigint", + "num_cpus", + "rand 0.8.5", + "rand_xorshift", + "rayon", + "serde", + "serde_json", + "smol_str", + "snarkvm-utilities-derives", + "thiserror 2.0.17", + "tracing", + "zeroize", +] + +[[package]] +name = "snarkvm-utilities-derives" +version = "4.2.1" +source = "git+https://github.com/ProvableHQ/snarkVM.git?rev=31fcaaca#31fcaaca8ee708b6196762b82e571456b43e7287" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "spinning_top" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sppark" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c900139f3f6fdc8db217881a946adf00e935102fdd82b0e1bc19bacbffa311" +dependencies = [ + "cc", + "which 4.4.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "structmeta" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ad9e09554f0456d67a69c1584c9798ba733a5b50349a6c0d0948710523922d" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "structmeta-derive 0.2.0", + "syn 2.0.108", +] + +[[package]] +name = "structmeta" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "structmeta-derive 0.3.0", + "syn 2.0.108", +] + +[[package]] +name = "structmeta-derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "structmeta-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote 1.0.41", + "rustversion", + "syn 2.0.108", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" +dependencies = [ + "quote 0.3.15", + "synom", + "unicode-xid", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synom" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "sys-info" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.10.0", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix 1.1.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "termtree" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" + +[[package]] +name = "test-strategy" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8361c808554228ad09bfed70f5c823caf8a3450b6881cc3a38eb57e8c08c1d9" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "structmeta 0.2.0", + "syn 2.0.108", +] + +[[package]] +name = "test-strategy" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b12f9683de37f9980e485167ee624bfaa0b6b04da661e98e25ef9c2669bc1b" +dependencies = [ + "derive-ex", + "proc-macro2", + "quote 1.0.41", + "structmeta 0.3.0", + "syn 2.0.108", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" +dependencies = [ + "libc", + "tikv-jemalloc-sys", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.1", + "tokio-macros", + "tracing", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-test" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +dependencies = [ + "indexmap 2.12.0", + "serde_core", + "serde_spanned", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", +] + +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_writer" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" + +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.7.9", + "base64 0.22.1", + "bytes", + "h2", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.7.0", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "socket2 0.5.10", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.10.0", + "bytes", + "futures-core", + "futures-util", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "http-range-header", + "httpdate", + "iri-string", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower 0.5.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tower_governor" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84e6672c7510df74859726427edea641674dad1aeeb30057b87335b1ba23b843" +dependencies = [ + "axum 0.8.6", + "forwarded-header-value", + "governor", + "http 1.3.1", + "pin-project", + "thiserror 2.0.17", + "tower 0.5.2", + "tracing", +] + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typed-json" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6024a8d0025400b3f6b189366e9aa92012cf9c4fe1cd2620848dd61425c49eed" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-ident" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-truncate" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" +dependencies = [ + "itertools 0.13.0", + "unicode-segmentation", + "unicode-width 0.1.14", +] + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + +[[package]] +name = "unicode-xid" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ba1025f18a4a3fc3e9b48c868e9beb4f24f4b4b1a325bada26bd4119f46537" +dependencies = [ + "base64 0.22.1", + "cookie_store", + "flate2", + "log", + "percent-encoding", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "ureq-proto", + "utf-8", + "webpki-roots", +] + +[[package]] +name = "ureq-proto" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b4531c118335662134346048ddb0e54cc86bd7e81866757873055f0e38f5d2" +dependencies = [ + "base64 0.22.1", + "http 1.3.1", + "httparse", + "log", +] + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote 1.0.41", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.44", +] + +[[package]] +name = "which" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" +dependencies = [ + "env_home", + "rustix 1.1.2", + "winsafe", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" + +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "zip" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", + "flate2", + "indexmap 2.12.0", + "memchr", + "thiserror 2.0.17", + "time", + "zopfli", +] + +[[package]] +name = "zipsign-api" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba6063ff82cdbd9a765add16d369abe81e520f836054e997c2db217ceca40c0" +dependencies = [ + "ed25519-dalek", + "thiserror 2.0.17", +] + +[[package]] +name = "zopfli" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] From 0f89bbcd87203edd6e39e04c2f36658c949a4189 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Thu, 27 Nov 2025 14:04:52 +0100 Subject: [PATCH 07/10] Fix style nits --- node/bft/src/helpers/timing.rs | 5 ++--- node/consensus/src/lib.rs | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/node/bft/src/helpers/timing.rs b/node/bft/src/helpers/timing.rs index ca837bdd75..203ec73d26 100644 --- a/node/bft/src/helpers/timing.rs +++ b/node/bft/src/helpers/timing.rs @@ -24,11 +24,10 @@ use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; /// Global storage for round-based event data -static ROUND_EVENTS: Lazy>>> = Lazy::new(|| Arc::new(RwLock::new(HashMap::new()))); +static ROUND_EVENTS: Lazy>>> = Lazy::new(Default::default); /// Global storage for subdag-based timing data (using lowest/highest rounds from subdag) -static SUBDAG_TIMINGS: Lazy>>> = - Lazy::new(|| Arc::new(RwLock::new(HashMap::new()))); +static SUBDAG_TIMINGS: Lazy>>> = Lazy::new(Default::default); /// Consensus stages that occur per round #[derive(Debug, Clone, Copy, PartialEq, Eq)] diff --git a/node/consensus/src/lib.rs b/node/consensus/src/lib.rs index 59e8964e4f..3a0fbb8ed0 100644 --- a/node/consensus/src/lib.rs +++ b/node/consensus/src/lib.rs @@ -525,9 +525,8 @@ impl Consensus { let current_block_timestamp = self.ledger.latest_block().header().metadata().timestamp(); // Extract lowest and highest rounds from the subdag - let rounds: Vec = subdag.keys().copied().collect(); - let _lowest_round = rounds.iter().min().copied().unwrap_or(0); - let _highest_round = rounds.iter().max().copied().unwrap_or(0); + let _lowest_round = subdag.first_key_value().map(|(k, _)| *k).unwrap_or(0); + let _highest_round = subdag.last_key_value().map(|(k, _)| *k).unwrap_or(0); #[cfg(feature = "test_consensus_tracking")] snarkos_node_bft::helpers::end_subdag_stage( From ae03884584ed6d233d40bff8cfbb607008c02db6 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Thu, 27 Nov 2025 14:30:08 +0100 Subject: [PATCH 08/10] Document build features --- Cargo.toml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b061b142ae..20bff0759b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -278,11 +278,15 @@ locktick = [ "snarkvm/locktick" ] serial = [ "snarkos-cli/serial" ] +tokio_console = [ "snarkos-cli/tokio_console" ] +# Set low puzzle targets for easier testing. test_targets = [ "snarkos-cli/test_targets" ] +# Set custom consensus heights for easier testing. test_consensus_heights = [ "snarkos-cli/test_consensus_heights" ] +# Set low puzzle targets and custom consensus heights for easier testing. test_network = [ "snarkos-cli/test_network" ] +# Track duration of consensus stages. test_consensus_tracking = [ "snarkos-node/test_consensus_tracking" ] -tokio_console = [ "snarkos-cli/tokio_console" ] [dependencies.clap] workspace = true From 5da19d5b20b79d19ad3474992d700688087a2508 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Thu, 27 Nov 2025 14:30:24 +0100 Subject: [PATCH 09/10] Clean up consensus tracking --- node/bft/src/bft.rs | 12 +++---- node/bft/src/primary.rs | 6 ++-- node/consensus/src/lib.rs | 72 ++++++++++++++++----------------------- 3 files changed, 39 insertions(+), 51 deletions(-) diff --git a/node/bft/src/bft.rs b/node/bft/src/bft.rs index 6e2f342d63..54ce04aec4 100644 --- a/node/bft/src/bft.rs +++ b/node/bft/src/bft.rs @@ -19,13 +19,17 @@ use crate::{ helpers::{ BFTReceiver, ConsensusSender, + ConsensusStage, DAG, PrimaryReceiver, PrimarySender, Storage, + SubdagStage, fmt_id, init_bft_channels, now, + record_event, + start_subdag_stage, }, }; use snarkos_account::Account; @@ -481,7 +485,7 @@ impl BFT { self.dag.write().insert(certificate); #[cfg(feature = "test_consensus_tracking")] - crate::helpers::record_event(certificate_round, crate::helpers::ConsensusStage::CertificateAdded); + record_event(certificate_round, ConsensusStage::CertificateAdded); // Get the previous round number. let commit_round = certificate_round.saturating_sub(1); @@ -567,11 +571,7 @@ impl BFT { let latest_leader_round = leader_certificate.round(); #[cfg(feature = "test_consensus_tracking")] - crate::helpers::start_subdag_stage( - latest_leader_round.saturating_sub(2), - latest_leader_round, - crate::helpers::SubdagStage::SubdagProcessing, - ); + start_subdag_stage(latest_leader_round.saturating_sub(2), latest_leader_round, SubdagStage::SubdagProcessing); // Determine the list of all previous leader certificates since the last committed round. // The order of the leader certificates is from **newest** to **oldest**. let mut leader_certificates = vec![leader_certificate.clone()]; diff --git a/node/bft/src/primary.rs b/node/bft/src/primary.rs index af3b47732a..18186b6167 100644 --- a/node/bft/src/primary.rs +++ b/node/bft/src/primary.rs @@ -26,6 +26,7 @@ use crate::{ events::{BatchPropose, BatchSignature, Event}, helpers::{ BFTSender, + ConsensusStage, PrimaryReceiver, PrimarySender, Proposal, @@ -38,6 +39,7 @@ use crate::{ init_sync_channels, init_worker_channels, now, + record_event, }, spawn_blocking, }; @@ -696,7 +698,7 @@ impl Primary { })?; #[cfg(feature = "test_consensus_tracking")] - crate::helpers::record_event(round, crate::helpers::ConsensusStage::ProposalCreated); + record_event(round, ConsensusStage::ProposalCreated); // Broadcast the batch to all validators for signing. self.gateway.broadcast(Event::BatchPropose(batch_header.into())); @@ -766,7 +768,7 @@ impl Primary { } #[cfg(feature = "test_consensus_tracking")] - crate::helpers::record_event(batch_round, crate::helpers::ConsensusStage::ProposalSeen); + record_event(batch_round, ConsensusStage::ProposalSeen); // Retrieve the cached round and batch ID for this validator. if let Some((signed_round, signed_batch_id, signature)) = diff --git a/node/consensus/src/lib.rs b/node/consensus/src/lib.rs index 3a0fbb8ed0..170f2c0e98 100644 --- a/node/consensus/src/lib.rs +++ b/node/consensus/src/lib.rs @@ -33,9 +33,12 @@ use snarkos_node_bft::{ ConsensusReceiver, PrimarySender, Storage as NarwhalStorage, + SubdagStage::*, + end_subdag_stage, fmt_id, init_consensus_channels, init_primary_channels, + start_subdag_stage, }, spawn_blocking, }; @@ -529,60 +532,43 @@ impl Consensus { let _highest_round = subdag.last_key_value().map(|(k, _)| *k).unwrap_or(0); #[cfg(feature = "test_consensus_tracking")] - snarkos_node_bft::helpers::end_subdag_stage( - _highest_round.saturating_sub(2), - _highest_round, - snarkos_node_bft::helpers::SubdagStage::SubdagProcessing, - ); + { + // NOTE: we use `_highest_round.saturating_sub(2)` because this is + // the only information available to us at the respective + // start_subdag_stage. + end_subdag_stage(_highest_round.saturating_sub(2), _highest_round, SubdagProcessing); + start_subdag_stage(_lowest_round, _highest_round, PrepareAdvanceToNextQuorumBlock); + } + // Create the candidate next block. - #[cfg(feature = "test_consensus_tracking")] - snarkos_node_bft::helpers::start_subdag_stage( - _lowest_round, - _highest_round, - snarkos_node_bft::helpers::SubdagStage::PrepareAdvanceToNextQuorumBlock, - ); let next_block = self.ledger.prepare_advance_to_next_quorum_block(subdag, transmissions)?; - let _next_block_height = next_block.height(); + #[cfg(feature = "test_consensus_tracking")] - snarkos_node_bft::helpers::end_subdag_stage( - _lowest_round, - _highest_round, - snarkos_node_bft::helpers::SubdagStage::PrepareAdvanceToNextQuorumBlock, - ); + { + end_subdag_stage(_lowest_round, _highest_round, PrepareAdvanceToNextQuorumBlock); + start_subdag_stage(_lowest_round, _highest_round, CheckNextBlock); + } + // Check that the block is well-formed. - #[cfg(feature = "test_consensus_tracking")] - snarkos_node_bft::helpers::start_subdag_stage( - _lowest_round, - _highest_round, - snarkos_node_bft::helpers::SubdagStage::CheckNextBlock, - ); self.ledger.check_next_block(&next_block)?; + #[cfg(feature = "test_consensus_tracking")] - snarkos_node_bft::helpers::end_subdag_stage( - _lowest_round, - _highest_round, - snarkos_node_bft::helpers::SubdagStage::CheckNextBlock, - ); + { + end_subdag_stage(_lowest_round, _highest_round, CheckNextBlock); + start_subdag_stage(_lowest_round, _highest_round, AdvanceToNextBlock); + } + // Advance to the next block. - #[cfg(feature = "test_consensus_tracking")] - snarkos_node_bft::helpers::start_subdag_stage( - _lowest_round, - _highest_round, - snarkos_node_bft::helpers::SubdagStage::AdvanceToNextBlock, - ); self.ledger.advance_to_next_block(&next_block)?; - #[cfg(feature = "test_consensus_tracking")] - snarkos_node_bft::helpers::end_subdag_stage( - _lowest_round, - _highest_round, - snarkos_node_bft::helpers::SubdagStage::AdvanceToNextBlock, - ); - // Export timing data to JSON after block generation + // Finalize subdag stage tracking and export timing data to JSON after block generation #[cfg(feature = "test_consensus_tracking")] { - let dev_index = self.bft().primary().gateway().dev().unwrap_or_default(); - let json_filename = format!("consensus_timing_block_{dev_index}.json"); + end_subdag_stage(_lowest_round, _highest_round, AdvanceToNextBlock); + let json_filename = match self.bft().primary().gateway().dev() { + Some(dev) => format!("consensus_timing_block_{dev}.json"), + None => "consensus_timing_block_prod.json".to_string(), + }; if let Err(e) = snarkos_node_bft::helpers::export_to_json(&json_filename) { warn!("Failed to export timing data to {}: {}", json_filename, e); } else { From cebf4bed83510b9ca6b87a32ce78392605ebcf14 Mon Sep 17 00:00:00 2001 From: Victor Sint Nicolaas Date: Thu, 27 Nov 2025 14:40:48 +0100 Subject: [PATCH 10/10] Fix build --- node/bft/src/bft.rs | 6 ++---- node/bft/src/primary.rs | 4 ++-- node/consensus/src/lib.rs | 19 +++++++++---------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/node/bft/src/bft.rs b/node/bft/src/bft.rs index 54ce04aec4..a377367c3a 100644 --- a/node/bft/src/bft.rs +++ b/node/bft/src/bft.rs @@ -19,19 +19,17 @@ use crate::{ helpers::{ BFTReceiver, ConsensusSender, - ConsensusStage, DAG, PrimaryReceiver, PrimarySender, Storage, - SubdagStage, fmt_id, init_bft_channels, now, - record_event, - start_subdag_stage, }, }; +#[cfg(feature = "test_consensus_tracking")] +use crate::helpers::{ConsensusStage, SubdagStage, record_event, start_subdag_stage}; use snarkos_account::Account; use snarkos_node_bft_ledger_service::LedgerService; use snarkos_node_sync::{BlockSync, Ping}; diff --git a/node/bft/src/primary.rs b/node/bft/src/primary.rs index 18186b6167..9324dc835b 100644 --- a/node/bft/src/primary.rs +++ b/node/bft/src/primary.rs @@ -26,7 +26,6 @@ use crate::{ events::{BatchPropose, BatchSignature, Event}, helpers::{ BFTSender, - ConsensusStage, PrimaryReceiver, PrimarySender, Proposal, @@ -39,10 +38,11 @@ use crate::{ init_sync_channels, init_worker_channels, now, - record_event, }, spawn_blocking, }; +#[cfg(feature = "test_consensus_tracking")] +use crate::helpers::{ConsensusStage, record_event}; use snarkos_account::Account; use snarkos_node_bft_events::PrimaryPing; use snarkos_node_bft_ledger_service::LedgerService; diff --git a/node/consensus/src/lib.rs b/node/consensus/src/lib.rs index 170f2c0e98..29f0c8ec51 100644 --- a/node/consensus/src/lib.rs +++ b/node/consensus/src/lib.rs @@ -33,15 +33,14 @@ use snarkos_node_bft::{ ConsensusReceiver, PrimarySender, Storage as NarwhalStorage, - SubdagStage::*, - end_subdag_stage, fmt_id, init_consensus_channels, init_primary_channels, - start_subdag_stage, }, spawn_blocking, }; +#[cfg(feature = "test_consensus_tracking")] +use snarkos_node_bft::helpers::{SubdagStage, end_subdag_stage, start_subdag_stage}; use snarkos_node_bft_ledger_service::LedgerService; use snarkos_node_bft_storage_service::BFTPersistentStorage; use snarkos_node_sync::{BlockSync, Ping}; @@ -536,8 +535,8 @@ impl Consensus { // NOTE: we use `_highest_round.saturating_sub(2)` because this is // the only information available to us at the respective // start_subdag_stage. - end_subdag_stage(_highest_round.saturating_sub(2), _highest_round, SubdagProcessing); - start_subdag_stage(_lowest_round, _highest_round, PrepareAdvanceToNextQuorumBlock); + end_subdag_stage(_highest_round.saturating_sub(2), _highest_round, SubdagStage::SubdagProcessing); + start_subdag_stage(_lowest_round, _highest_round, SubdagStage::PrepareAdvanceToNextQuorumBlock); } // Create the candidate next block. @@ -545,8 +544,8 @@ impl Consensus { #[cfg(feature = "test_consensus_tracking")] { - end_subdag_stage(_lowest_round, _highest_round, PrepareAdvanceToNextQuorumBlock); - start_subdag_stage(_lowest_round, _highest_round, CheckNextBlock); + end_subdag_stage(_lowest_round, _highest_round, SubdagStage::PrepareAdvanceToNextQuorumBlock); + start_subdag_stage(_lowest_round, _highest_round, SubdagStage::CheckNextBlock); } // Check that the block is well-formed. @@ -554,8 +553,8 @@ impl Consensus { #[cfg(feature = "test_consensus_tracking")] { - end_subdag_stage(_lowest_round, _highest_round, CheckNextBlock); - start_subdag_stage(_lowest_round, _highest_round, AdvanceToNextBlock); + end_subdag_stage(_lowest_round, _highest_round, SubdagStage::CheckNextBlock); + start_subdag_stage(_lowest_round, _highest_round, SubdagStage::AdvanceToNextBlock); } // Advance to the next block. @@ -564,7 +563,7 @@ impl Consensus { // Finalize subdag stage tracking and export timing data to JSON after block generation #[cfg(feature = "test_consensus_tracking")] { - end_subdag_stage(_lowest_round, _highest_round, AdvanceToNextBlock); + end_subdag_stage(_lowest_round, _highest_round, SubdagStage::AdvanceToNextBlock); let json_filename = match self.bft().primary().gateway().dev() { Some(dev) => format!("consensus_timing_block_{dev}.json"), None => "consensus_timing_block_prod.json".to_string(),