@@ -128,9 +128,15 @@ pub(crate) async fn filter_disabled_verifiers(
128128
129129#[ cfg( test) ]
130130mod test {
131+ use crate :: {
132+ types:: batch_queue:: { BatchQueue , BatchQueueEntry , BatchQueueEntryPriority } ,
133+ zk_utils:: filter_disabled_verifiers,
134+ } ;
135+
131136 use super :: is_verifier_disabled;
132137 use aligned_sdk:: core:: types:: { ProvingSystemId , VerificationData } ;
133- use ethers:: types:: Address ;
138+ use ethers:: types:: { Address , U256 } ;
139+ use tokio:: sync:: Mutex ;
134140
135141 fn get_all_verifiers ( ) -> Vec < ProvingSystemId > {
136142 let verifiers = vec ! [
@@ -224,4 +230,124 @@ mod test {
224230 }
225231 }
226232 }
233+
234+ #[ tokio:: test]
235+ async fn test_remove_disabled_verifiers_from_queue ( ) {
236+ // Disabling SP1 verifier.
237+ let disabled_verifiers = Mutex :: new ( U256 :: from ( 8 ) ) ;
238+
239+ let mut batch_queue = BatchQueue :: new ( ) ;
240+ let entry_with_sp1_sender_0 =
241+ BatchQueueEntry :: new_for_test ( ProvingSystemId :: SP1 , Address :: zero ( ) ) . await ;
242+ let entry_with_risc0_sender_1 =
243+ BatchQueueEntry :: new_for_test ( ProvingSystemId :: Risc0 , Address :: from_slice ( & [ 1 ; 20 ] ) )
244+ . await ;
245+ batch_queue. push (
246+ entry_with_sp1_sender_0,
247+ BatchQueueEntryPriority :: new ( 0 . into ( ) , 0 . into ( ) ) ,
248+ ) ;
249+ batch_queue. push (
250+ entry_with_risc0_sender_1,
251+ BatchQueueEntryPriority :: new ( 0 . into ( ) , 0 . into ( ) ) ,
252+ ) ;
253+
254+ assert_eq ! ( batch_queue. len( ) , 2 ) ;
255+ let filtered_queue =
256+ filter_disabled_verifiers ( batch_queue, disabled_verifiers. lock ( ) . await ) . await ;
257+ assert_eq ! ( filtered_queue. len( ) , 1 ) ;
258+ let entry = filtered_queue. peek ( ) . unwrap ( ) . 0 . clone ( ) ;
259+ assert_eq ! (
260+ entry
261+ . nonced_verification_data
262+ . verification_data
263+ . proving_system,
264+ aligned_sdk:: core:: types:: ProvingSystemId :: Risc0
265+ ) ;
266+ }
267+
268+ #[ tokio:: test]
269+ async fn test_remove_new_data_from_user_with_disabled_verifier ( ) {
270+ // Disabling SP1 verifier.
271+ let disabled_verifiers = Mutex :: new ( U256 :: from ( 8 ) ) ;
272+ let mut batch_queue = BatchQueue :: new ( ) ;
273+
274+ let entry_with_sp1_sender_0 =
275+ BatchQueueEntry :: new_for_test ( ProvingSystemId :: SP1 , Address :: zero ( ) ) . await ;
276+ let entry_with_risc0_sender_1 =
277+ BatchQueueEntry :: new_for_test ( ProvingSystemId :: Risc0 , Address :: from_slice ( & [ 1 ; 20 ] ) )
278+ . await ;
279+ let mut another_entry_sp1_sender_0 =
280+ BatchQueueEntry :: new_for_test ( ProvingSystemId :: SP1 , Address :: zero ( ) ) . await ;
281+ another_entry_sp1_sender_0. nonced_verification_data . nonce = U256 :: from ( 1 ) ;
282+
283+ batch_queue. push (
284+ entry_with_sp1_sender_0,
285+ BatchQueueEntryPriority :: new ( 0 . into ( ) , 0 . into ( ) ) ,
286+ ) ;
287+ batch_queue. push (
288+ entry_with_risc0_sender_1,
289+ BatchQueueEntryPriority :: new ( 0 . into ( ) , 0 . into ( ) ) ,
290+ ) ;
291+ batch_queue. push (
292+ another_entry_sp1_sender_0,
293+ BatchQueueEntryPriority :: new ( 0 . into ( ) , 1 . into ( ) ) ,
294+ ) ;
295+ assert_eq ! ( batch_queue. len( ) , 3 ) ;
296+ let filtered_batch_queue =
297+ filter_disabled_verifiers ( batch_queue. clone ( ) , disabled_verifiers. lock ( ) . await ) . await ;
298+ assert_eq ! ( filtered_batch_queue. len( ) , 1 ) ;
299+
300+ let entry = filtered_batch_queue. peek ( ) . unwrap ( ) . 0 . clone ( ) ;
301+ assert_eq ! (
302+ entry
303+ . nonced_verification_data
304+ . verification_data
305+ . proving_system,
306+ aligned_sdk:: core:: types:: ProvingSystemId :: Risc0
307+ ) ;
308+ }
309+
310+ #[ tokio:: test]
311+ async fn test_keep_old_proofs_for_user_with_new_invalid ( ) {
312+ // Disabling SP1 verifier.
313+ let disabled_verifiers = Mutex :: new ( U256 :: from ( 8 ) ) ;
314+ let mut batch_queue = BatchQueue :: new ( ) ;
315+
316+ let entry_risc0_sender_0 =
317+ BatchQueueEntry :: new_for_test ( ProvingSystemId :: Risc0 , Address :: zero ( ) ) . await ;
318+ let mut entry_sp1_sender_0 =
319+ BatchQueueEntry :: new_for_test ( ProvingSystemId :: SP1 , Address :: zero ( ) ) . await ;
320+ entry_sp1_sender_0. nonced_verification_data . nonce = U256 :: from ( 1 ) ;
321+ let mut another_entry_risc0_sender_0 =
322+ BatchQueueEntry :: new_for_test ( ProvingSystemId :: Risc0 , Address :: zero ( ) ) . await ;
323+ another_entry_risc0_sender_0. nonced_verification_data . nonce = U256 :: from ( 2 ) ;
324+
325+ batch_queue. push (
326+ entry_risc0_sender_0,
327+ BatchQueueEntryPriority :: new ( 0 . into ( ) , 0 . into ( ) ) ,
328+ ) ;
329+ batch_queue. push (
330+ entry_sp1_sender_0,
331+ BatchQueueEntryPriority :: new ( 0 . into ( ) , 1 . into ( ) ) ,
332+ ) ;
333+ batch_queue. push (
334+ another_entry_risc0_sender_0,
335+ BatchQueueEntryPriority :: new ( 0 . into ( ) , 2 . into ( ) ) ,
336+ ) ;
337+ assert_eq ! ( batch_queue. len( ) , 3 ) ;
338+
339+ let filtered_batch_queue =
340+ filter_disabled_verifiers ( batch_queue. clone ( ) , disabled_verifiers. lock ( ) . await ) . await ;
341+ assert_eq ! ( filtered_batch_queue. len( ) , 1 ) ;
342+
343+ let entry = filtered_batch_queue. peek ( ) . unwrap ( ) . 0 . clone ( ) ;
344+ assert_eq ! (
345+ entry
346+ . nonced_verification_data
347+ . verification_data
348+ . proving_system,
349+ aligned_sdk:: core:: types:: ProvingSystemId :: Risc0
350+ ) ;
351+ assert_eq ! ( entry. nonced_verification_data. nonce, U256 :: zero( ) ) ;
352+ }
227353}
0 commit comments