Skip to content

Commit a3223dc

Browse files
committed
chore: unit tests for queue filtering function
1 parent 097f4b4 commit a3223dc

File tree

4 files changed

+170
-2
lines changed

4 files changed

+170
-2
lines changed

batcher/aligned-batcher/src/lib.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ pub mod sp1;
4747
pub mod types;
4848
mod zk_utils;
4949

50+
#[cfg(test)]
51+
mod testonly;
52+
5053
const AGGREGATOR_GAS_COST: u128 = 400_000;
5154
const BATCHER_SUBMISSION_BASE_GAS_COST: u128 = 125_000;
5255
pub(crate) const ADDITIONAL_SUBMISSION_GAS_COST_PER_PROOF: u128 = 13_000;
@@ -426,7 +429,9 @@ impl Batcher {
426429
);
427430
send_message(
428431
ws_conn_sink.clone(),
429-
ValidityResponseMessage::InvalidProof(ProofInvalidReason::DisabledVerifier),
432+
ValidityResponseMessage::InvalidProof(ProofInvalidReason::DisabledVerifier(
433+
verification_data.proving_system,
434+
)),
430435
)
431436
.await;
432437
return Ok(());
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod queue_entry;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use aligned_sdk::core::types::{
2+
NoncedVerificationData, ProvingSystemId, VerificationData, VerificationDataCommitment,
3+
};
4+
use ethers::types::{Address, Signature, U256};
5+
6+
use crate::types::batch_queue::BatchQueueEntry;
7+
8+
impl BatchQueueEntry {
9+
pub async fn new_for_test(proving_system: ProvingSystemId, sender: Address) -> Self {
10+
let dummy_signature = Signature {
11+
r: U256::from(1),
12+
s: U256::from(2),
13+
v: 3,
14+
};
15+
BatchQueueEntry {
16+
sender,
17+
messaging_sink: None,
18+
verification_data_commitment: VerificationDataCommitment::default(),
19+
nonced_verification_data: NoncedVerificationData {
20+
verification_data: VerificationData {
21+
proving_system,
22+
proof: vec![],
23+
pub_input: None,
24+
verification_key: None,
25+
vm_program_code: None,
26+
proof_generator_addr: Address::default(),
27+
},
28+
nonce: U256::zero(),
29+
max_fee: Default::default(),
30+
chain_id: Default::default(),
31+
payment_service_addr: Default::default(),
32+
},
33+
signature: dummy_signature,
34+
}
35+
}
36+
}

batcher/aligned-batcher/src/zk_utils/mod.rs

Lines changed: 127 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,15 @@ pub(crate) async fn filter_disabled_verifiers(
128128

129129
#[cfg(test)]
130130
mod 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

Comments
 (0)