Skip to content

Commit 64c2ca0

Browse files
authored
feat: Parallelize header validation with rayon (#243)
1 parent 62ce45d commit 64c2ca0

File tree

4 files changed

+87
-504
lines changed

4 files changed

+87
-504
lines changed

dash-spv/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ rand = "0.8"
4646
hex = "0.4"
4747
indexmap = "2.0"
4848

49+
# Parallelization
50+
rayon = "1.11"
51+
4952
# Terminal UI (optional)
5053
crossterm = { version = "0.27", optional = true }
5154

dash-spv/src/client/sync_coordinator.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use crate::network::NetworkManager;
1919
use crate::storage::StorageManager;
2020
use crate::sync::headers::validate_headers;
2121
use crate::types::{CachedHeader, DetailedSyncProgress, SyncProgress};
22-
use crate::ValidationMode;
2322
use key_wallet_manager::wallet_interface::WalletInterface;
2423
use std::time::{Duration, Instant, SystemTime};
2524
use tokio::sync::mpsc::UnboundedReceiver;
@@ -947,7 +946,7 @@ impl<
947946
// come from storage.
948947
let cached_headers =
949948
headers.iter().map(|h| CachedHeader::new(*h)).collect::<Vec<CachedHeader>>();
950-
if let Err(e) = validate_headers(&cached_headers, ValidationMode::Basic) {
949+
if let Err(e) = validate_headers(&cached_headers) {
951950
tracing::error!(
952951
"Header validation failed for range {}..{}: {:?}",
953952
current_height,

dash-spv/src/sync/headers/manager.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use crate::storage::StorageManager;
1515
use crate::sync::headers::validate_headers;
1616
use crate::sync::headers2::Headers2StateManager;
1717
use crate::types::{CachedHeader, ChainState};
18+
use crate::ValidationMode;
1819
use std::sync::Arc;
1920
use tokio::sync::RwLock;
2021

@@ -203,11 +204,13 @@ impl<S: StorageManager + Send + Sync + 'static, N: NetworkManager + Send + Sync
203204
}
204205
}
205206

206-
validate_headers(&cached_headers, self.config.validation_mode).map_err(|e| {
207-
let error = format!("Header validation failed: {}", e);
208-
tracing::error!(error);
209-
SyncError::Validation(error)
210-
})?;
207+
if self.config.validation_mode != ValidationMode::None {
208+
validate_headers(&cached_headers).map_err(|e| {
209+
let error = format!("Header validation failed: {}", e);
210+
tracing::error!(error);
211+
SyncError::Validation(error)
212+
})?;
213+
}
211214

212215
self.last_sync_progress = std::time::Instant::now();
213216

0 commit comments

Comments
 (0)