@@ -50,7 +50,7 @@ impl MithrilProverService {
50
50
51
51
fn compute_merkle_map_from_transactions (
52
52
& self ,
53
- transactions : & [ CardanoTransaction ] ,
53
+ transactions : Vec < CardanoTransaction > ,
54
54
) -> StdResult < MKMap < BlockRange , MKMapNode < BlockRange > > > {
55
55
let mut transactions_by_block_ranges: HashMap < BlockRange , Vec < TransactionHash > > =
56
56
HashMap :: new ( ) ;
@@ -59,7 +59,7 @@ impl MithrilProverService {
59
59
transactions_by_block_ranges
60
60
. entry ( block_range)
61
61
. or_default ( )
62
- . push ( transaction. transaction_hash . to_owned ( ) ) ;
62
+ . push ( transaction. transaction_hash ) ;
63
63
}
64
64
let mk_hash_map = MKMap :: new (
65
65
transactions_by_block_ranges
@@ -87,16 +87,22 @@ impl ProverService for MithrilProverService {
87
87
transaction_hashes : & [ TransactionHash ] ,
88
88
) -> StdResult < Vec < CardanoTransactionsSetProof > > {
89
89
let transactions = self . transaction_retriever . get_up_to ( up_to) . await ?;
90
- let mk_map = self . compute_merkle_map_from_transactions ( & transactions) ?;
90
+
91
+ // 1 - Get transactions to prove per block range
91
92
let transactions_to_prove = transactions
92
93
. iter ( )
93
94
. filter_map ( |transaction| {
94
95
let block_range = BlockRange :: from_block_number ( transaction. block_number ) ;
95
96
transaction_hashes
96
97
. contains ( & transaction. transaction_hash )
97
- . then ( || ( block_range, transaction. to_owned ( ) ) )
98
+ . then_some ( ( block_range, transaction. clone ( ) ) )
98
99
} )
99
100
. collect :: < Vec < _ > > ( ) ;
101
+
102
+ // 2 - Compute Transactions Merkle Tree
103
+ let mk_map = self . compute_merkle_map_from_transactions ( transactions) ?;
104
+
105
+ // 3 - Compute proof for each transaction to prove
100
106
let mut transaction_hashes_certified = vec ! [ ] ;
101
107
for ( _block_range, transaction) in transactions_to_prove {
102
108
let mk_tree_node_transaction_hash: MKTreeNode =
@@ -105,9 +111,10 @@ impl ProverService for MithrilProverService {
105
111
. compute_proof ( & [ mk_tree_node_transaction_hash] )
106
112
. is_ok ( )
107
113
{
108
- transaction_hashes_certified. push ( transaction. transaction_hash . to_string ( ) ) ;
114
+ transaction_hashes_certified. push ( transaction. transaction_hash ) ;
109
115
}
110
116
}
117
+
111
118
if !transaction_hashes_certified. is_empty ( ) {
112
119
let mk_leaves: Vec < MKTreeNode > = transaction_hashes_certified
113
120
. iter ( )
0 commit comments