Skip to content

Commit 5417c9c

Browse files
committed
trivial: resolve unsafe directive
1 parent 91f0386 commit 5417c9c

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

crates/libzkp/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub fn checkout_chunk_task(
2626
}
2727

2828
/// Generate required staff for proving tasks
29+
/// return (pi_hash, metadata, task)
2930
pub fn gen_universal_task(
3031
task_type: i32,
3132
task_json: &str,
@@ -106,7 +107,7 @@ pub fn verifier_init(config: &str) -> eyre::Result<()> {
106107
pub fn verify_proof(proof: Vec<u8>, fork_name: &str, task_type: TaskType) -> eyre::Result<bool> {
107108
let verifier = verifier::get_verifier(fork_name)?;
108109

109-
let ret = verifier.verify(task_type, proof)?;
110+
let ret = verifier.lock().unwrap().verify(task_type, proof)?;
110111

111112
Ok(ret)
112113
}
@@ -115,7 +116,7 @@ pub fn verify_proof(proof: Vec<u8>, fork_name: &str, task_type: TaskType) -> eyr
115116
pub fn dump_vk(fork_name: &str, file: &str) -> eyre::Result<()> {
116117
let verifier = verifier::get_verifier(fork_name)?;
117118

118-
verifier.dump_vk(Path::new(file));
119+
verifier.lock().unwrap().dump_vk(Path::new(file));
119120

120121
Ok(())
121122
}

crates/libzkp/src/verifier.rs

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ mod euclidv2;
44
use euclidv2::EuclidV2Verifier;
55
use eyre::Result;
66
use serde::{Deserialize, Serialize};
7-
use std::{cell::OnceCell, path::Path, rc::Rc};
7+
use std::{sync::{OnceLock, Arc, Mutex}, path::Path};
88

99
#[derive(Debug, Clone, Copy, PartialEq)]
1010
pub enum TaskType {
@@ -48,31 +48,39 @@ pub struct VerifierConfig {
4848

4949
type HardForkName = String;
5050

51-
struct VerifierPair(HardForkName, Rc<Box<dyn ProofVerifier>>);
52-
static mut VERIFIER_HIGH: OnceCell<VerifierPair> = OnceCell::new();
51+
struct VerifierPair(HardForkName, Arc<Mutex<dyn ProofVerifier + Send>>);
52+
static VERIFIER_HIGH: OnceLock<VerifierPair> = OnceLock::new();
5353

5454
pub fn init(config: VerifierConfig) {
5555
let verifier = EuclidV2Verifier::new(&config.high_version_circuit.assets_path);
56-
unsafe {
57-
VERIFIER_HIGH
58-
.set(VerifierPair(
59-
config.high_version_circuit.fork_name,
60-
Rc::new(Box::new(verifier)),
61-
))
62-
.unwrap_unchecked();
63-
}
56+
57+
let ret = VERIFIER_HIGH
58+
.set(VerifierPair(
59+
config.high_version_circuit.fork_name.to_lowercase(),
60+
Arc::new(Mutex::new(verifier)),
61+
))
62+
.is_ok();
63+
64+
assert!(ret);
65+
6466
}
6567

66-
pub fn get_verifier(fork_name: &str) -> Result<Rc<Box<dyn ProofVerifier>>> {
67-
unsafe {
68-
if let Some(verifier) = VERIFIER_HIGH.get() {
69-
if verifier.0 == fork_name {
70-
return Ok(verifier.1.clone());
71-
}
68+
pub fn get_verifier(fork_name: &str) -> Result<Arc<Mutex<dyn ProofVerifier>>> {
69+
70+
if let Some(verifier) = VERIFIER_HIGH.get() {
71+
if verifier.0 == fork_name {
72+
return Ok(verifier.1.clone());
7273
}
74+
Err(eyre::eyre!(
75+
"failed to get verifier, key not found: {}, expected {}",
76+
fork_name, verifier.0,
77+
))
78+
79+
} else {
80+
Err(eyre::eyre!(
81+
"failed to get verifier, not inited {}",
82+
fork_name
83+
))
7384
}
74-
Err(eyre::eyre!(
75-
"failed to get verifier, key not found, {}",
76-
fork_name
77-
))
85+
7886
}

0 commit comments

Comments
 (0)