Skip to content

Commit 5891a2b

Browse files
committed
perf: make prover able to certify more than 5 transactions
Some SQL query was too complex because depended on the number of block ranges to retrieve in the prover. The query is now made indiviudally on each block range.
1 parent adec324 commit 5891a2b

File tree

2 files changed

+56
-38
lines changed

2 files changed

+56
-38
lines changed

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,7 @@ impl DependenciesBuilder {
13771377
Ok(self.message_service.as_ref().cloned().unwrap())
13781378
}
13791379

1380-
/// build Prover service
1380+
/// Build Prover service
13811381
pub async fn build_prover_service(&mut self) -> Result<Arc<dyn ProverService>> {
13821382
let mk_map_pool_size = self
13831383
.configuration

mithril-aggregator/src/services/prover.rs

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,14 @@ impl MithrilProverService {
9999
block_ranges: &[BlockRange],
100100
) -> StdResult<HashMap<BlockRange, Vec<CardanoTransaction>>> {
101101
let mut block_ranges_map = HashMap::new();
102-
let transactions = self
103-
.transaction_retriever
104-
.get_by_block_ranges(block_ranges.to_vec())
105-
.await?;
102+
let mut transactions = vec![];
103+
for block_range in block_ranges {
104+
let block_range_transactions = self
105+
.transaction_retriever
106+
.get_by_block_ranges(vec![block_range.clone()])
107+
.await?;
108+
transactions.extend(block_range_transactions);
109+
}
106110
for transaction in transactions {
107111
let block_range = BlockRange::from_block_number(transaction.block_number);
108112
let block_range_transactions: &mut Vec<_> =
@@ -374,21 +378,24 @@ mod tests {
374378
test_data::filter_transactions_for_indices(&[1, 2, 4], &transactions);
375379
let test_data = test_data::build_test_data(&transactions_to_prove, &transactions);
376380
let prover = build_prover(
377-
|retriever_mock| {
381+
|transaction_retriever_mock| {
378382
let transaction_hashes_to_prove = test_data.transaction_hashes_to_prove.clone();
379383
let transactions_to_prove = transactions_to_prove.clone();
380-
retriever_mock
384+
transaction_retriever_mock
381385
.expect_get_by_hashes()
382386
.with(eq(transaction_hashes_to_prove))
383387
.return_once(move |_| Ok(transactions_to_prove));
384388

385389
let block_ranges_to_prove = test_data.block_ranges_to_prove.clone();
386-
let all_transactions_in_block_ranges_to_prove =
387-
test_data.all_transactions_in_block_ranges_to_prove.clone();
388-
retriever_mock
389-
.expect_get_by_block_ranges()
390-
.with(eq(block_ranges_to_prove))
391-
.return_once(move |_| Ok(all_transactions_in_block_ranges_to_prove));
390+
for block_range_to_prove in block_ranges_to_prove {
391+
let block_ranges = vec![block_range_to_prove.clone()];
392+
let transactions_in_block_range_to_prove =
393+
test_data.block_ranges_map[&block_range_to_prove].clone();
394+
transaction_retriever_mock
395+
.expect_get_by_block_ranges()
396+
.with(eq(block_ranges))
397+
.return_once(move |_| Ok(transactions_in_block_range_to_prove));
398+
}
392399
},
393400
|block_range_root_retriever_mock| {
394401
let block_ranges_map = test_data.block_ranges_map.clone();
@@ -428,21 +435,24 @@ mod tests {
428435
let mut test_data = test_data::build_test_data(&transactions_to_prove, &transactions);
429436
test_data.transaction_hashes_to_prove = vec!["tx-unknown-123".to_string()];
430437
let prover = build_prover(
431-
|retriever_mock| {
438+
|transaction_retriever_mock| {
432439
let transaction_hashes_to_prove = test_data.transaction_hashes_to_prove.clone();
433440
let transactions_to_prove = transactions_to_prove.clone();
434-
retriever_mock
441+
transaction_retriever_mock
435442
.expect_get_by_hashes()
436443
.with(eq(transaction_hashes_to_prove))
437444
.return_once(move |_| Ok(transactions_to_prove));
438445

439446
let block_ranges_to_prove = test_data.block_ranges_to_prove.clone();
440-
let all_transactions_in_block_ranges_to_prove =
441-
test_data.all_transactions_in_block_ranges_to_prove.clone();
442-
retriever_mock
443-
.expect_get_by_block_ranges()
444-
.with(eq(block_ranges_to_prove))
445-
.return_once(move |_| Ok(all_transactions_in_block_ranges_to_prove));
447+
for block_range_to_prove in block_ranges_to_prove {
448+
let block_ranges = vec![block_range_to_prove.clone()];
449+
let transactions_in_block_range_to_prove =
450+
test_data.block_ranges_map[&block_range_to_prove].clone();
451+
transaction_retriever_mock
452+
.expect_get_by_block_ranges()
453+
.with(eq(block_ranges))
454+
.return_once(move |_| Ok(transactions_in_block_range_to_prove));
455+
}
446456
},
447457
|block_range_root_retriever_mock| {
448458
let block_ranges_map = test_data.block_ranges_map.clone();
@@ -485,21 +495,24 @@ mod tests {
485495
]
486496
.concat();
487497
let prover = build_prover(
488-
|retriever_mock| {
498+
|transaction_retriever_mock| {
489499
let transaction_hashes_to_prove = test_data.transaction_hashes_to_prove.clone();
490500
let transactions_to_prove = transactions_to_prove.clone();
491-
retriever_mock
501+
transaction_retriever_mock
492502
.expect_get_by_hashes()
493503
.with(eq(transaction_hashes_to_prove))
494504
.return_once(move |_| Ok(transactions_to_prove));
495505

496506
let block_ranges_to_prove = test_data.block_ranges_to_prove.clone();
497-
let all_transactions_in_block_ranges_to_prove =
498-
test_data.all_transactions_in_block_ranges_to_prove.clone();
499-
retriever_mock
500-
.expect_get_by_block_ranges()
501-
.with(eq(block_ranges_to_prove))
502-
.return_once(move |_| Ok(all_transactions_in_block_ranges_to_prove));
507+
for block_range_to_prove in block_ranges_to_prove {
508+
let block_ranges = vec![block_range_to_prove.clone()];
509+
let transactions_in_block_range_to_prove =
510+
test_data.block_ranges_map[&block_range_to_prove].clone();
511+
transaction_retriever_mock
512+
.expect_get_by_block_ranges()
513+
.with(eq(block_ranges))
514+
.return_once(move |_| Ok(transactions_in_block_range_to_prove));
515+
}
503516
},
504517
|block_range_root_retriever_mock| {
505518
let block_ranges_map = test_data.block_ranges_map.clone();
@@ -539,8 +552,8 @@ mod tests {
539552
test_data::filter_transactions_for_indices(&[1, 2, 4], &transactions);
540553
let test_data = test_data::build_test_data(&transactions_to_prove, &transactions);
541554
let prover = build_prover(
542-
|retriever_mock| {
543-
retriever_mock
555+
|transaction_retriever_mock| {
556+
transaction_retriever_mock
544557
.expect_get_by_hashes()
545558
.returning(|_| Err(anyhow!("Error")));
546559
},
@@ -570,17 +583,22 @@ mod tests {
570583
test_data::filter_transactions_for_indices(&[1, 2, 4], &transactions);
571584
let test_data = test_data::build_test_data(&transactions_to_prove, &transactions);
572585
let prover = build_prover(
573-
|retriever_mock| {
586+
|transaction_retriever_mock| {
574587
let transactions_to_prove = transactions_to_prove.clone();
575-
retriever_mock
588+
transaction_retriever_mock
576589
.expect_get_by_hashes()
577590
.return_once(move |_| Ok(transactions_to_prove));
578591

579-
let all_transactions_in_block_ranges_to_prove =
580-
test_data.all_transactions_in_block_ranges_to_prove.clone();
581-
retriever_mock
582-
.expect_get_by_block_ranges()
583-
.return_once(move |_| Ok(all_transactions_in_block_ranges_to_prove));
592+
let block_ranges_to_prove = test_data.block_ranges_to_prove.clone();
593+
for block_range_to_prove in block_ranges_to_prove {
594+
let block_ranges = vec![block_range_to_prove.clone()];
595+
let transactions_in_block_range_to_prove =
596+
test_data.block_ranges_map[&block_range_to_prove].clone();
597+
transaction_retriever_mock
598+
.expect_get_by_block_ranges()
599+
.with(eq(block_ranges))
600+
.return_once(move |_| Ok(transactions_in_block_range_to_prove));
601+
}
584602
},
585603
|block_range_root_retriever_mock| {
586604
block_range_root_retriever_mock

0 commit comments

Comments
 (0)