From 1847b2f3bc2bd0778a3c292a235b897932898e69 Mon Sep 17 00:00:00 2001 From: Warm Beer Date: Sun, 14 Jun 2026 21:11:03 +0200 Subject: [PATCH 1/3] feat(client): use witnessed SNP quote selection --- Cargo.lock | 17 +- ant-core/Cargo.toml | 13 +- ant-core/src/data/client/payment.rs | 15 +- ant-core/src/data/client/quote.rs | 236 ++++++++++++++++++++++++---- ant-core/src/data/network.rs | 26 ++- ant-core/tests/support/mod.rs | 1 + 6 files changed, 264 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b3cb5177..7db54f76 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -892,8 +892,8 @@ dependencies = [ [[package]] name = "ant-node" -version = "0.12.1-rc.1" -source = "git+https://github.com/WithAutonomi/ant-node?branch=rc-2026.6.2#8f941b84751b1f3743be7ea915ab269378063e2d" +version = "0.12.1-rc.4" +source = "git+https://github.com/mickvandijke/saorsa-node.git?branch=snp-witnessed-close-group#d037b1ef2f609c92fa3c3af9cf0fc8fa80cc2a10" dependencies = [ "ant-protocol", "blake3", @@ -941,8 +941,8 @@ dependencies = [ [[package]] name = "ant-protocol" -version = "2.1.3-rc.1" -source = "git+https://github.com/WithAutonomi/ant-protocol?branch=rc-2026.6.2#053be60ced998c6a4c0833b4560f1ddb89a86514" +version = "2.1.3" +source = "git+https://github.com/WithAutonomi/ant-protocol?branch=snp-witnessed-close-group#0cb92b50d980cff3547ba49706a03ff2d3ac8217" dependencies = [ "blake3", "bytes", @@ -5248,8 +5248,8 @@ dependencies = [ [[package]] name = "saorsa-core" -version = "0.25.0-rc.1" -source = "git+https://github.com/saorsa-labs/saorsa-core?branch=rc-2026.6.2#088c3552bf7257ee10b5a670cd4990d1c0e7b8af" +version = "0.25.0" +source = "git+https://github.com/mickvandijke/saorsa-core.git?branch=snp-witnessed-close-group#354a9d7d4d4f44edaa61a6fbf2393535df607019" dependencies = [ "anyhow", "async-trait", @@ -5362,8 +5362,9 @@ dependencies = [ [[package]] name = "saorsa-transport" -version = "0.35.0-rc.1" -source = "git+https://github.com/saorsa-labs/saorsa-transport?branch=rc-2026.6.2#48b0874adaefcf26650634a5f93a9618715518ca" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "621d0a207914a8fd6453f25e4bcc369914cbfaf59a2857e898c079b95f52f5bb" dependencies = [ "anyhow", "async-trait", diff --git a/ant-core/Cargo.toml b/ant-core/Cargo.toml index 259b0323..6d8a58ef 100644 --- a/ant-core/Cargo.toml +++ b/ant-core/Cargo.toml @@ -37,7 +37,7 @@ tower-http = { version = "0.6.8", features = ["cors"] } # under `ant_protocol::{evm, transport, pqc}`. This is the ONE pin for # those three deps — do not add direct evmlib/saorsa-core/saorsa-pqc # deps here or the version can skew between ant-client and ant-node. -ant-protocol = { git = "https://github.com/WithAutonomi/ant-protocol", branch = "rc-2026.6.2" } +ant-protocol = { git = "https://github.com/WithAutonomi/ant-protocol", branch = "snp-witnessed-close-group" } xor_name = "5" self_encryption = "0.36" futures = "0.3" @@ -61,11 +61,10 @@ sysinfo = { version = "0.32", default-features = false, features = ["system"] } # Must track the same `saorsa-core` / `ant-protocol` line as the # `ant-protocol` pin above — a version skew pulls a second copy of # `saorsa-core` into the graph and makes `ant_node`'s and `ant_protocol`'s -# `MultiAddr` mutually incompatible in `node/devnet.rs`. During an RC the -# runtime `ant-protocol` pin above points at a git rc branch, so this -# ant-node must point at the matching ant-node rc branch (carrying the same -# saorsa-core / ant-protocol lineage) rather than a released version. -ant-node = { git = "https://github.com/WithAutonomi/ant-node", branch = "rc-2026.6.2", optional = true } +# `MultiAddr` mutually incompatible in `node/devnet.rs`. While the witnessed +# close-group PR stack is open, this ant-node pin tracks the matching node +# branch carrying the same saorsa-core / ant-protocol lineage. +ant-node = { git = "https://github.com/mickvandijke/saorsa-node.git", branch = "snp-witnessed-close-group", optional = true } tracing-subscriber = { version = "0.3", features = ["env-filter"] } [target.'cfg(unix)'.dependencies] @@ -93,7 +92,7 @@ devnet = ["dep:ant-node"] # always compile even without the `devnet` feature. Pinned to the same # version as the runtime dep so there is a single ant-node / # saorsa-core version across the whole graph. -ant-node = { git = "https://github.com/WithAutonomi/ant-node", branch = "rc-2026.6.2" } +ant-node = { git = "https://github.com/mickvandijke/saorsa-node.git", branch = "snp-witnessed-close-group" } serial_test = "3" anyhow = "1" alloy = { version = "1.6", features = ["node-bindings"] } diff --git a/ant-core/src/data/client/payment.rs b/ant-core/src/data/client/payment.rs index 014f8bd8..6f734e04 100644 --- a/ant-core/src/data/client/payment.rs +++ b/ant-core/src/data/client/payment.rs @@ -3,6 +3,7 @@ //! Connects quote collection, on-chain EVM payment, and proof serialization. //! Every PUT to the network requires a valid payment proof. +use crate::data::client::quote::median_paid_quote_issuer; use crate::data::client::Client; use crate::data::error::{Error, Result}; use ant_protocol::evm::{EncodedPeerId, ProofOfPayment, Wallet}; @@ -22,7 +23,7 @@ impl Client { /// Pay for storage and return the serialized payment proof bytes. /// /// This orchestrates the full payment flow: - /// 1. Collect `CLOSE_GROUP_SIZE` quotes from closest peers + /// 1. Collect `CLOSE_GROUP_SIZE` quotes from the witnessed close group /// 2. Build `SingleNodePayment` using node-reported prices (median 3x, others 0) /// 3. Pay on-chain via the wallet /// 4. Serialize `PaymentProof` with transaction hashes @@ -48,6 +49,12 @@ impl Client { // 1. Collect quotes from network let quotes_with_peers = self.get_store_quotes(address, data_size, data_type).await?; + let median_quote_issuer = + median_paid_quote_issuer("es_with_peers).ok_or_else(|| { + Error::Payment( + "Failed to select median quote issuer from witnessed quotes".to_string(), + ) + })?; // Capture all quoted peers for replication by the caller. let quoted_peers: Vec<(PeerId, Vec)> = quotes_with_peers @@ -70,6 +77,12 @@ impl Client { let payment = SingleNodePayment::from_quotes(quotes_for_payment) .map_err(|e| Error::Payment(format!("Failed to create payment: {e}")))?; + info!( + "Selected SNP median paid quote issuer {} for address {} (median price: {})", + median_quote_issuer.0, + hex::encode(address), + median_quote_issuer.1 + ); info!("Payment total: {} atto", payment.total_amount()); // 4. Pay on-chain diff --git a/ant-core/src/data/client/quote.rs b/ant-core/src/data/client/quote.rs index 502cc7d6..6d89eca2 100644 --- a/ant-core/src/data/client/quote.rs +++ b/ant-core/src/data/client/quote.rs @@ -7,7 +7,7 @@ use crate::data::client::peer_xor_distance; use crate::data::client::Client; use crate::data::error::{Error, Result}; use ant_protocol::evm::{Amount, PaymentQuote}; -use ant_protocol::transport::{MultiAddr, PeerId}; +use ant_protocol::transport::{MultiAddr, PeerId, WitnessedCloseGroup}; use ant_protocol::{ compute_address, send_and_await_chunk_response, ChunkMessage, ChunkMessageBody, ChunkQuoteRequest, ChunkQuoteResponse, CLOSE_GROUP_MAJORITY, CLOSE_GROUP_SIZE, @@ -22,6 +22,15 @@ use tracing::{debug, info, warn}; /// ask only the actual close group. const FAULT_TOLERANT_QUOTE_QUERY_MULTIPLIER: usize = 2; +/// Witnessed close-group quorum as a fraction of the initial close group. +/// For today's `CLOSE_GROUP_SIZE = 7`, this yields the requested 5-of-7 +/// quorum. +const WITNESSED_QUORUM_NUMERATOR: usize = 2; +const WITNESSED_QUORUM_DENOMINATOR: usize = 3; + +/// Index of the paid median quote after sorting by quoted price. +const MEDIAN_QUOTE_INDEX: usize = CLOSE_GROUP_SIZE / 2; + /// Overall timeout for collecting quote responses. Must accommodate /// connect_with_fallback cascade (direct 5s + hole-punch 15s×3 + relay 30s ≈ /// 80s) plus the per-peer quote timeout. @@ -153,12 +162,112 @@ fn fault_tolerant_quote_query_count() -> usize { CLOSE_GROUP_SIZE * FAULT_TOLERANT_QUOTE_QUERY_MULTIPLIER } +fn witnessed_close_group_quorum() -> usize { + (CLOSE_GROUP_SIZE * WITNESSED_QUORUM_NUMERATOR).div_ceil(WITNESSED_QUORUM_DENOMINATOR) +} + +fn peer_list(peers: &[PeerId]) -> Vec { + peers.iter().map(ToString::to_string).collect() +} + +fn witnessed_initial_peers(witnessed: &WitnessedCloseGroup) -> Vec { + witnessed + .initial_closest + .iter() + .map(|node| node.peer_id.to_string()) + .collect() +} + +fn witnessed_responder_views(witnessed: &WitnessedCloseGroup) -> Vec { + witnessed + .responder_views + .iter() + .map(|view| format!("{}=>{:?}", view.responder, peer_list(&view.closest))) + .collect() +} + +fn witnessed_vote_counts(witnessed: &WitnessedCloseGroup) -> Vec { + witnessed + .vote_counts + .iter() + .map(|(peer_id, votes)| format!("{peer_id}:{votes}")) + .collect() +} + +fn witnessed_consensus(witnessed: &WitnessedCloseGroup) -> Vec { + witnessed + .consensus + .iter() + .map(|node| format!("{}:{}", node.node.peer_id, node.votes)) + .collect() +} + +fn witnessed_close_group_diagnostics( + address: &[u8; 32], + witnessed: &WitnessedCloseGroup, +) -> String { + format!( + "target={}, initial={:?}, responder_views={:?}, vote_counts={:?}, quorum={}, final={:?}", + hex::encode(address), + witnessed_initial_peers(witnessed), + witnessed_responder_views(witnessed), + witnessed_vote_counts(witnessed), + witnessed.quorum, + witnessed_consensus(witnessed) + ) +} + +fn witnessed_quote_peers_or_error( + address: &[u8; 32], + witnessed: &WitnessedCloseGroup, + required: usize, +) -> Result)>> { + if witnessed.consensus.len() < required { + return Err(Error::InsufficientPeers(format!( + "Witnessed close group inconclusive before payment: got {}/{} quorum-recognised peers. {}", + witnessed.consensus.len(), + required, + witnessed_close_group_diagnostics(address, witnessed) + ))); + } + + Ok(witnessed + .consensus + .iter() + .take(required) + .map(|candidate| { + ( + candidate.node.peer_id, + candidate.node.addresses_by_priority(), + ) + }) + .collect()) +} + +pub(crate) fn median_paid_quote_issuer( + quotes: &[(PeerId, Vec, PaymentQuote, Amount)], +) -> Option<(PeerId, Amount)> { + if quotes.len() <= MEDIAN_QUOTE_INDEX { + return None; + } + + let mut by_price: Vec<(usize, PeerId, Amount)> = quotes + .iter() + .enumerate() + .map(|(index, (peer_id, _, _, price))| (index, *peer_id, *price)) + .collect(); + by_price.sort_by_key(|(index, _, price)| (*price, *index)); + by_price + .get(MEDIAN_QUOTE_INDEX) + .map(|(_, peer_id, price)| (*peer_id, *price)) +} + impl Client { /// Get storage quotes from the closest peers for a given address. /// - /// Queries exactly `CLOSE_GROUP_SIZE` peers from the DHT, requests quotes - /// from all of them concurrently, and returns those responders sorted by - /// XOR distance. + /// Builds a quorum-witnessed close group of exactly `CLOSE_GROUP_SIZE` + /// peers, requests quotes from all of them concurrently, and returns those + /// responders sorted by XOR distance. /// /// Returns `Error::AlreadyStored` early if `CLOSE_GROUP_MAJORITY` peers /// report the chunk is already stored. @@ -172,13 +281,9 @@ impl Client { data_size: u64, data_type: u32, ) -> Result, PaymentQuote, Amount)>> { - self.get_store_quotes_from_peers( - address, - data_size, - data_type, - single_node_quote_query_count(), - ) - .await + let remote_peers = self.select_witnessed_quote_peers(address).await?; + self.collect_store_quotes_from_remote_peers(address, data_size, data_type, remote_peers) + .await } /// Get storage quotes with the previous over-query behaviour. @@ -193,24 +298,55 @@ impl Client { data_size: u64, data_type: u32, ) -> Result, PaymentQuote, Amount)>> { - self.get_store_quotes_from_peers( - address, - data_size, - data_type, - fault_tolerant_quote_query_count(), - ) - .await + let peer_query_count = fault_tolerant_quote_query_count(); + let remote_peers = self + .network() + .find_closest_peers(address, peer_query_count) + .await?; + + self.collect_store_quotes_from_remote_peers(address, data_size, data_type, remote_peers) + .await + } + + async fn select_witnessed_quote_peers( + &self, + address: &[u8; 32], + ) -> Result)>> { + let required = single_node_quote_query_count(); + let quorum = witnessed_close_group_quorum(); + let witnessed = self + .network() + .find_witnessed_close_group(address, required, quorum) + .await + .map_err(|e| { + Error::InsufficientPeers(format!( + "Witnessed close group lookup failed before payment for target {}: {e}", + hex::encode(address) + )) + })?; + + debug!( + target = %hex::encode(address), + quorum = witnessed.quorum, + initial = ?witnessed_initial_peers(&witnessed), + responder_views = ?witnessed_responder_views(&witnessed), + vote_counts = ?witnessed_vote_counts(&witnessed), + final_witnessed_set = ?witnessed_consensus(&witnessed), + "Witnessed close group selected for SNP quote collection" + ); + + witnessed_quote_peers_or_error(address, &witnessed, required) } #[allow(clippy::too_many_lines)] - async fn get_store_quotes_from_peers( + async fn collect_store_quotes_from_remote_peers( &self, address: &[u8; 32], data_size: u64, data_type: u32, - peer_query_count: usize, + remote_peers: Vec<(PeerId, Vec)>, ) -> Result, PaymentQuote, Amount)>> { - debug_assert!(peer_query_count >= CLOSE_GROUP_SIZE); + let peer_query_count = remote_peers.len(); let node = self.network().node(); @@ -219,17 +355,13 @@ impl Client { hex::encode(address) ); - let remote_peers = self - .network() - .find_closest_peers(address, peer_query_count) - .await?; - if remote_peers.len() < CLOSE_GROUP_SIZE { return Err(Error::InsufficientPeers(format!( "Found {} peers, need {CLOSE_GROUP_SIZE}", remote_peers.len() ))); } + debug_assert!(peer_query_count >= CLOSE_GROUP_SIZE); let per_peer_timeout = Duration::from_secs(self.config().quote_timeout_secs); let overall_timeout = Duration::from_secs(QUOTE_COLLECTION_TIMEOUT_SECS); @@ -443,7 +575,9 @@ mod tests { use super::*; use ant_protocol::evm::RewardsAddress; use ant_protocol::pqc::ops::{MlDsaOperations, MlDsaPublicKey}; - use ant_protocol::transport::MlDsa65; + use ant_protocol::transport::{ + ConsensusNode, DHTNode, MlDsa65, ResponderView, WitnessedCloseGroup, + }; use std::time::SystemTime; use xor_name::XorName; @@ -499,6 +633,20 @@ mod tests { (claimed.peer_id, Vec::new(), quote, Amount::ZERO) } + fn witnessed_test_node(seed: u8) -> DHTNode { + DHTNode { + peer_id: PeerId::from_bytes([seed; 32]), + addresses: Vec::new(), + address_types: Vec::new(), + distance: None, + reliability: 1.0, + } + } + + fn witnessed_test_nodes(seeds: &[u8]) -> Vec { + seeds.iter().copied().map(witnessed_test_node).collect() + } + /// Independent re-implementation of the storer-side binding spec /// (`ant-node/src/payment/verifier.rs::validate_peer_bindings` + /// `peer_id_from_public_key_bytes`): @@ -583,6 +731,7 @@ mod tests { #[test] fn quote_query_counts_keep_single_node_close_group_only() { assert_eq!(single_node_quote_query_count(), CLOSE_GROUP_SIZE); + assert_eq!(witnessed_close_group_quorum(), 5); assert_eq!( fault_tolerant_quote_query_count(), CLOSE_GROUP_SIZE * FAULT_TOLERANT_QUOTE_QUERY_MULTIPLIER @@ -590,6 +739,39 @@ mod tests { assert!(fault_tolerant_quote_query_count() > single_node_quote_query_count()); } + #[test] + fn witnessed_quote_peers_error_is_typed_and_pre_payment_when_consensus_is_short() { + let address = [0u8; 32]; + let consensus: Vec = witnessed_test_nodes(&[1, 2, 3, 4, 5, 6]) + .into_iter() + .map(|node| ConsensusNode { node, votes: 5 }) + .collect(); + let witnessed = WitnessedCloseGroup { + target: address, + k: CLOSE_GROUP_SIZE, + quorum: witnessed_close_group_quorum(), + initial_closest: witnessed_test_nodes(&[1, 2, 3, 4, 5, 6, 7]), + responder_views: vec![ResponderView { + responder: PeerId::from_bytes([1; 32]), + closest: vec![PeerId::from_bytes([1; 32])], + }], + vote_counts: vec![(PeerId::from_bytes([1; 32]), 5)], + consensus, + }; + + let err = witnessed_quote_peers_or_error(&address, &witnessed, CLOSE_GROUP_SIZE) + .expect_err("short witnessed consensus must fail before payment"); + + match err { + Error::InsufficientPeers(message) => { + assert!(message.contains("before payment")); + assert!(message.contains("vote_counts")); + assert!(message.contains("quorum")); + } + other => panic!("expected typed InsufficientPeers error, got {other:?}"), + } + } + #[test] fn filter_drops_only_bad_bindings_and_leaves_storer_acceptable_quotes() { let mut quotes = vec![ diff --git a/ant-core/src/data/network.rs b/ant-core/src/data/network.rs index dc370ef0..ab52c3a5 100644 --- a/ant-core/src/data/network.rs +++ b/ant-core/src/data/network.rs @@ -5,7 +5,7 @@ use crate::data::error::{Error, Result}; use ant_protocol::transport::{ - CoreNodeConfig, IPDiversityConfig, MultiAddr, NodeMode, P2PNode, PeerId, + CoreNodeConfig, IPDiversityConfig, MultiAddr, NodeMode, P2PNode, PeerId, WitnessedCloseGroup, }; use ant_protocol::MAX_WIRE_MESSAGE_SIZE; use std::net::SocketAddr; @@ -131,6 +131,30 @@ impl Network { .collect()) } + /// Find a quorum-witnessed close group for a target address. + /// + /// The underlying DHT method returns the initial client K, each responder's + /// self-inclusive closest-K view, vote counts, and the final + /// quorum-recognised set ordered by pure XOR distance. + /// + /// # Errors + /// + /// Returns an error if the DHT lookup itself fails. The returned witnessed + /// group may still be inconclusive; callers should check + /// `WitnessedCloseGroup::is_complete`. + pub async fn find_witnessed_close_group( + &self, + target: &[u8; 32], + count: usize, + quorum: usize, + ) -> Result { + self.node + .dht() + .find_witnessed_close_group(target, count, quorum) + .await + .map_err(|e| Error::Network(format!("DHT witnessed close-group lookup failed: {e}"))) + } + /// Get all currently connected peers. pub async fn connected_peers(&self) -> Vec { self.node.connected_peers().await diff --git a/ant-core/tests/support/mod.rs b/ant-core/tests/support/mod.rs index f053e0b1..3731843a 100644 --- a/ant-core/tests/support/mod.rs +++ b/ant-core/tests/support/mod.rs @@ -286,6 +286,7 @@ impl MiniTestnet { network: evm_network.clone(), }, cache_capacity: 1000, + close_group_size: CLOSE_GROUP_SIZE, local_rewards_address: rewards_address, }; let payment_verifier = Arc::new(PaymentVerifier::new(payment_config)); From 8ca230ca2321606ef8904fde0b86e6aac297d602 Mon Sep 17 00:00:00 2001 From: Warm Beer Date: Sun, 14 Jun 2026 22:16:30 +0200 Subject: [PATCH 2/3] chore: refresh witnessed dependency stack --- Cargo.lock | 220 ++++++----------------------------------------------- 1 file changed, 22 insertions(+), 198 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7db54f76..a5d31536 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -893,7 +893,7 @@ dependencies = [ [[package]] name = "ant-node" version = "0.12.1-rc.4" -source = "git+https://github.com/mickvandijke/saorsa-node.git?branch=snp-witnessed-close-group#d037b1ef2f609c92fa3c3af9cf0fc8fa80cc2a10" +source = "git+https://github.com/mickvandijke/saorsa-node.git?branch=snp-witnessed-close-group#3b0966b462ed13801771052d683c34126d516610" dependencies = [ "ant-protocol", "blake3", @@ -942,7 +942,7 @@ dependencies = [ [[package]] name = "ant-protocol" version = "2.1.3" -source = "git+https://github.com/WithAutonomi/ant-protocol?branch=snp-witnessed-close-group#0cb92b50d980cff3547ba49706a03ff2d3ac8217" +source = "git+https://github.com/WithAutonomi/ant-protocol?branch=snp-witnessed-close-group#b1b0067946d304008113a30eec6d4021b88fb405" dependencies = [ "blake3", "bytes", @@ -1827,7 +1827,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2323,7 +2323,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2522,7 +2522,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -3239,7 +3239,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.4", + "socket2 0.5.10", "system-configuration 0.7.0", "tokio", "tower-service", @@ -3259,7 +3259,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core 0.57.0", ] [[package]] @@ -3538,36 +3538,6 @@ dependencies = [ "windows-sys 0.45.0", ] -[[package]] -name = "jni" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" -dependencies = [ - "cfg-if", - "combine", - "jni-macros", - "jni-sys 0.4.1", - "log", - "simd_cesu8", - "thiserror 2.0.18", - "walkdir", - "windows-link", -] - -[[package]] -name = "jni-macros" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version 0.4.1", - "simd_cesu8", - "syn 2.0.117", -] - [[package]] name = "jni-sys" version = "0.3.1" @@ -3940,7 +3910,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4568,7 +4538,7 @@ dependencies = [ "quinn-udp 0.5.14", "rustc-hash", "rustls", - "socket2 0.6.4", + "socket2 0.5.10", "thiserror 2.0.18", "tokio", "tracing", @@ -4606,9 +4576,9 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.4", + "socket2 0.5.10", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.59.0", ] [[package]] @@ -4619,9 +4589,9 @@ checksum = "76150b617afc75e6e21ac5f39bc196e80b65415ae48d62dbef8e2519d040ce42" dependencies = [ "cfg_aliases", "libc", - "socket2 0.6.4", + "socket2 0.5.10", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4927,7 +4897,7 @@ dependencies = [ "quinn", "rustls", "rustls-pki-types", - "rustls-platform-verifier 0.7.0", + "rustls-platform-verifier", "serde", "serde_json", "sync_wrapper", @@ -5084,7 +5054,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5141,28 +5111,7 @@ checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", - "jni 0.21.1", - "log", - "once_cell", - "rustls", - "rustls-native-certs", - "rustls-platform-verifier-android", - "rustls-webpki", - "security-framework", - "security-framework-sys", - "webpki-root-certs", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls-platform-verifier" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" -dependencies = [ - "core-foundation 0.10.1", - "core-foundation-sys", - "jni 0.22.4", + "jni", "log", "once_cell", "rustls", @@ -5172,7 +5121,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5249,7 +5198,7 @@ dependencies = [ [[package]] name = "saorsa-core" version = "0.25.0" -source = "git+https://github.com/mickvandijke/saorsa-core.git?branch=snp-witnessed-close-group#354a9d7d4d4f44edaa61a6fbf2393535df607019" +source = "git+https://github.com/mickvandijke/saorsa-core.git?branch=snp-witnessed-close-group#348c47595fe5290db7b918a98470b268bfd7c071" dependencies = [ "anyhow", "async-trait", @@ -5397,7 +5346,7 @@ dependencies = [ "rustls", "rustls-native-certs", "rustls-pemfile", - "rustls-platform-verifier 0.6.2", + "rustls-platform-verifier", "rustls-post-quantum", "saorsa-pqc 0.4.2", "serde", @@ -5852,22 +5801,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" -[[package]] -name = "simd_cesu8" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" -dependencies = [ - "rustc_version 0.4.1", - "simdutf8", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "siphasher" version = "1.0.3" @@ -6114,7 +6047,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -6933,7 +6866,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -6987,19 +6920,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", - "windows-link", - "windows-result 0.4.1", - "windows-strings 0.5.1", -] - [[package]] name = "windows-implement" version = "0.57.0" @@ -7022,17 +6942,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "windows-interface" version = "0.57.0" @@ -7055,17 +6964,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "windows-link" version = "0.2.1" @@ -7165,15 +7063,6 @@ 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" @@ -7222,30 +7111,13 @@ 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_gnullvm", "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", - "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.42.2" @@ -7264,12 +7136,6 @@ 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.42.2" @@ -7288,12 +7154,6 @@ 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.42.2" @@ -7312,24 +7172,12 @@ 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.42.2" @@ -7348,12 +7196,6 @@ 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.42.2" @@ -7372,12 +7214,6 @@ 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.42.2" @@ -7396,12 +7232,6 @@ 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.42.2" @@ -7420,12 +7250,6 @@ 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.15" From 77937aa2b42905e427d31cb3b04822a58573a9ed Mon Sep 17 00:00:00 2001 From: Warm Beer Date: Sun, 14 Jun 2026 22:28:36 +0200 Subject: [PATCH 3/3] chore: refresh witnessed dependency stack --- Cargo.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a5d31536..26bc1af2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -893,7 +893,7 @@ dependencies = [ [[package]] name = "ant-node" version = "0.12.1-rc.4" -source = "git+https://github.com/mickvandijke/saorsa-node.git?branch=snp-witnessed-close-group#3b0966b462ed13801771052d683c34126d516610" +source = "git+https://github.com/mickvandijke/saorsa-node.git?branch=snp-witnessed-close-group#87154dca4bba2b1af73ebdd427af84593dc2a96c" dependencies = [ "ant-protocol", "blake3", @@ -942,7 +942,7 @@ dependencies = [ [[package]] name = "ant-protocol" version = "2.1.3" -source = "git+https://github.com/WithAutonomi/ant-protocol?branch=snp-witnessed-close-group#b1b0067946d304008113a30eec6d4021b88fb405" +source = "git+https://github.com/WithAutonomi/ant-protocol?branch=snp-witnessed-close-group#a9c0255b1125a4d6abafe36f5e0d9a931429bc14" dependencies = [ "blake3", "bytes", @@ -1827,7 +1827,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2323,7 +2323,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2522,7 +2522,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3239,7 +3239,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.5.10", + "socket2 0.6.4", "system-configuration 0.7.0", "tokio", "tower-service", @@ -3259,7 +3259,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.57.0", + "windows-core 0.58.0", ] [[package]] @@ -3910,7 +3910,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4538,7 +4538,7 @@ dependencies = [ "quinn-udp 0.5.14", "rustc-hash", "rustls", - "socket2 0.5.10", + "socket2 0.6.4", "thiserror 2.0.18", "tokio", "tracing", @@ -4576,7 +4576,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2 0.6.4", "tracing", "windows-sys 0.59.0", ] @@ -4589,9 +4589,9 @@ checksum = "76150b617afc75e6e21ac5f39bc196e80b65415ae48d62dbef8e2519d040ce42" dependencies = [ "cfg_aliases", "libc", - "socket2 0.5.10", + "socket2 0.6.4", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5054,7 +5054,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5121,7 +5121,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5197,8 +5197,8 @@ dependencies = [ [[package]] name = "saorsa-core" -version = "0.25.0" -source = "git+https://github.com/mickvandijke/saorsa-core.git?branch=snp-witnessed-close-group#348c47595fe5290db7b918a98470b268bfd7c071" +version = "0.25.1-rc.1" +source = "git+https://github.com/mickvandijke/saorsa-core.git?branch=snp-witnessed-close-group#9344c3a5f95810ab2ac1ec64922ed902fb24f165" dependencies = [ "anyhow", "async-trait", @@ -6047,7 +6047,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6866,7 +6866,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]]