mirror of
https://github.com/Cuprate/cuprate.git
synced 2025-01-26 20:36:00 +00:00
Boog900
07f61bdb9c
Some checks failed
CI / fmt (push) Waiting to run
CI / typo (push) Waiting to run
CI / ci (macos-latest, stable, bash) (push) Waiting to run
CI / ci (ubuntu-latest, stable, bash) (push) Waiting to run
CI / ci (windows-latest, stable-x86_64-pc-windows-gnu, msys2 {0}) (push) Waiting to run
Audit / audit (push) Has been cancelled
Deny / audit (push) Has been cancelled
* fix panic in batch verifier * docs * review comments * Update consensus/rules/src/batch_verifier.rs Co-authored-by: hinto-janai <hinto.janai@protonmail.com> --------- Co-authored-by: hinto-janai <hinto.janai@protonmail.com>
42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
use std::{cell::RefCell, ops::DerefMut};
|
|
|
|
use multiexp::BatchVerifier as InternalBatchVerifier;
|
|
use rayon::prelude::*;
|
|
use thread_local::ThreadLocal;
|
|
|
|
/// A multithreaded batch verifier.
|
|
pub struct MultiThreadedBatchVerifier {
|
|
internal: ThreadLocal<RefCell<InternalBatchVerifier<(), dalek_ff_group::EdwardsPoint>>>,
|
|
}
|
|
|
|
impl MultiThreadedBatchVerifier {
|
|
/// Create a new multithreaded batch verifier,
|
|
pub fn new(numb_threads: usize) -> MultiThreadedBatchVerifier {
|
|
MultiThreadedBatchVerifier {
|
|
internal: ThreadLocal::with_capacity(numb_threads),
|
|
}
|
|
}
|
|
|
|
pub fn verify(self) -> bool {
|
|
self.internal
|
|
.into_iter()
|
|
.map(RefCell::into_inner)
|
|
.par_bridge()
|
|
.find_any(|batch_verifier| !batch_verifier.verify_vartime())
|
|
.is_none()
|
|
}
|
|
}
|
|
|
|
impl cuprate_consensus_rules::batch_verifier::BatchVerifier for &'_ MultiThreadedBatchVerifier {
|
|
fn queue_statement<R>(
|
|
&mut self,
|
|
stmt: impl FnOnce(&mut InternalBatchVerifier<(), dalek_ff_group::EdwardsPoint>) -> R,
|
|
) -> R {
|
|
let mut verifier = self
|
|
.internal
|
|
.get_or(|| RefCell::new(InternalBatchVerifier::new(32)))
|
|
.borrow_mut();
|
|
|
|
stmt(verifier.deref_mut())
|
|
}
|
|
}
|