@@ -4,7 +4,7 @@ mod euclidv2;
44use euclidv2:: EuclidV2Verifier ;
55use eyre:: Result ;
66use 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 ) ]
1010pub enum TaskType {
@@ -48,31 +48,39 @@ pub struct VerifierConfig {
4848
4949type 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
5454pub 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