@@ -2,7 +2,7 @@ use std::ops::Range;
2
2
3
3
use criterion:: { criterion_group, criterion_main, BenchmarkId , Criterion } ;
4
4
use mithril_common:: {
5
- crypto_helper:: { MKMap , MKMapNode , MKMapProof , MKMapValue , MKTree } ,
5
+ crypto_helper:: { MKMap , MKMapNode , MKMapProof , MKMapValue , MKTree , MKTreeNode } ,
6
6
entities:: BlockRange ,
7
7
} ;
8
8
@@ -23,6 +23,7 @@ const TOTAL_TRANSACTIONS_BENCHES: &[u64] = &[
23
23
] ;
24
24
const BLOCK_RANGE_LENGTH_BENCH : u64 = 15 ;
25
25
const TOTAL_TRANSACTIONS_PER_BLOCK : u64 = 50 ;
26
+ const MAX_TRANSACTIONS_PER_PROOF_BENCH : u64 = 100 ;
26
27
27
28
fn generate_block_ranges_nodes_iterator (
28
29
total_transactions : u64 ,
@@ -32,6 +33,10 @@ fn generate_block_ranges_nodes_iterator(
32
33
) -> impl Iterator < Item = ( BlockRange , MKMapNode < BlockRange > ) > {
33
34
let total_block_ranges =
34
35
total_transactions / ( total_transactions_per_block * block_range_length) ;
36
+ assert ! (
37
+ total_block_ranges > 0 ,
38
+ "total_block_ranges should be strictly greater than 0"
39
+ ) ;
35
40
( 0 ..total_block_ranges) . map ( move |block_range_index| {
36
41
let block_range = BlockRange :: new (
37
42
block_range_index * total_transactions_per_block * block_range_length,
@@ -55,15 +60,15 @@ fn generate_merkle_map_compressed(
55
60
block_ranges_nodes_iterator : impl Iterator < Item = ( BlockRange , MKMapNode < BlockRange > ) > ,
56
61
) -> MKMap < BlockRange , MKMapNode < BlockRange > > {
57
62
let mut mk_map = MKMap :: new ( & [ ] ) . unwrap ( ) ;
58
- for ( block_range, mk_tree ) in block_ranges_nodes_iterator {
63
+ for ( block_range, mk_map_node ) in block_ranges_nodes_iterator {
59
64
mk_map
60
- . insert ( block_range, mk_tree . compute_root ( ) . unwrap ( ) . into ( ) )
65
+ . insert ( block_range, mk_map_node . compute_root ( ) . unwrap ( ) . into ( ) )
61
66
. unwrap ( ) ;
62
67
}
63
68
mk_map
64
69
}
65
70
66
- fn generate_merkle_map_proof (
71
+ fn generate_merkle_map_root (
67
72
block_ranges_nodes_iterator : impl Iterator < Item = ( BlockRange , MKMapNode < BlockRange > ) > ,
68
73
mk_map_compressed : & MKMap < BlockRange , MKMapNode < BlockRange > > ,
69
74
) -> MKMapProof < BlockRange > {
@@ -72,7 +77,7 @@ fn generate_merkle_map_proof(
72
77
let mktree_to_prove = if let MKMapNode :: Tree ( mktree_to_prove) = mk_map_node_to_prove {
73
78
mktree_to_prove
74
79
} else {
75
- panic ! ( "Expected MKMapNode::TreeNode " ) ;
80
+ panic ! ( "Expected MKMapNode::Tree " ) ;
76
81
} ;
77
82
let leaves_to_prove = mktree_to_prove
78
83
. leaves ( )
@@ -89,9 +94,43 @@ fn generate_merkle_map_proof(
89
94
mk_map_compressed. compute_proof ( & leaves_to_prove) . unwrap ( )
90
95
}
91
96
92
- fn create_merkle_map_compressed_benches ( c : & mut Criterion ) {
97
+ fn generate_merkle_map_proof (
98
+ block_ranges_nodes_iterator : impl Iterator < Item = ( BlockRange , MKMapNode < BlockRange > ) > ,
99
+ mk_map_compressed : & MKMap < BlockRange , MKMapNode < BlockRange > > ,
100
+ total_proofs : u64 ,
101
+ ) -> MKMapProof < BlockRange > {
102
+ let mut leaves_to_prove_all: Vec < MKTreeNode > = vec ! [ ] ;
103
+ let mut mk_map_compressed = mk_map_compressed. clone ( ) ;
104
+ for ( mk_map_key_to_prove, mk_map_node_to_prove) in & block_ranges_nodes_iterator
105
+ . take ( total_proofs as usize )
106
+ . collect :: < Vec < _ > > ( )
107
+ {
108
+ let mktree_to_prove = if let MKMapNode :: Tree ( mktree_to_prove) = mk_map_node_to_prove {
109
+ mktree_to_prove
110
+ } else {
111
+ panic ! ( "Expected MKMapNode::Tree" ) ;
112
+ } ;
113
+ let leaves_to_prove = mktree_to_prove
114
+ . leaves ( )
115
+ . into_iter ( )
116
+ . take ( 1 )
117
+ . collect :: < Vec < _ > > ( ) ;
118
+ leaves_to_prove_all. extend ( leaves_to_prove) ;
119
+ mk_map_compressed
120
+ . insert (
121
+ mk_map_key_to_prove. to_owned ( ) ,
122
+ mk_map_node_to_prove. to_owned ( ) ,
123
+ )
124
+ . unwrap ( ) ;
125
+ }
126
+ mk_map_compressed
127
+ . compute_proof ( & leaves_to_prove_all)
128
+ . unwrap ( )
129
+ }
130
+
131
+ fn create_merkle_map_root_benches ( c : & mut Criterion ) {
93
132
let mut group = c. benchmark_group ( format ! (
94
- "create_merkle_map_compressed (blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK})"
133
+ "create_merkle_map_root (blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK})"
95
134
) ) ;
96
135
for total_leaves in TOTAL_TRANSACTIONS_BENCHES . iter ( ) {
97
136
let mk_trees_by_block_range_iterator = generate_block_ranges_nodes_iterator (
@@ -106,8 +145,13 @@ fn create_merkle_map_compressed_benches(c: &mut Criterion) {
106
145
total_leaves,
107
146
|b, & _total_leaves| {
108
147
b. iter ( || {
109
- let mk_map_compressed_clone = mk_map_compressed. clone ( ) ;
110
- mk_map_compressed_clone. compute_root ( ) . unwrap ( ) ;
148
+ let mk_trees_by_block_range_iterator = generate_block_ranges_nodes_iterator (
149
+ * total_leaves,
150
+ TOTAL_TRANSACTIONS_PER_BLOCK ,
151
+ BLOCK_RANGE_LENGTH_BENCH ,
152
+ 1 ,
153
+ ) ;
154
+ generate_merkle_map_root ( mk_trees_by_block_range_iterator, & mk_map_compressed) ;
111
155
} ) ;
112
156
} ,
113
157
) ;
@@ -117,14 +161,14 @@ fn create_merkle_map_compressed_benches(c: &mut Criterion) {
117
161
118
162
fn create_merkle_map_proof_benches ( c : & mut Criterion ) {
119
163
let mut group = c. benchmark_group ( format ! (
120
- "create_merkle_map_proof_(blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK})"
164
+ "create_merkle_map_proof_(blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK},txs_per_proof={MAX_TRANSACTIONS_PER_PROOF_BENCH} )"
121
165
) ) ;
122
166
for total_leaves in TOTAL_TRANSACTIONS_BENCHES . iter ( ) {
123
167
let mk_trees_by_block_range_iterator = generate_block_ranges_nodes_iterator (
124
168
* total_leaves,
125
169
TOTAL_TRANSACTIONS_PER_BLOCK ,
126
170
BLOCK_RANGE_LENGTH_BENCH ,
127
- 1 ,
171
+ MAX_TRANSACTIONS_PER_PROOF_BENCH ,
128
172
) ;
129
173
let mk_map_compressed = generate_merkle_map_compressed ( mk_trees_by_block_range_iterator) ;
130
174
@@ -137,9 +181,13 @@ fn create_merkle_map_proof_benches(c: &mut Criterion) {
137
181
* total_leaves,
138
182
TOTAL_TRANSACTIONS_PER_BLOCK ,
139
183
BLOCK_RANGE_LENGTH_BENCH ,
140
- 1 ,
184
+ MAX_TRANSACTIONS_PER_PROOF_BENCH ,
185
+ ) ;
186
+ generate_merkle_map_proof (
187
+ mk_trees_by_block_range_iterator,
188
+ & mk_map_compressed,
189
+ MAX_TRANSACTIONS_PER_PROOF_BENCH ,
141
190
) ;
142
- generate_merkle_map_proof ( mk_trees_by_block_range_iterator, & mk_map_compressed) ;
143
191
} ) ;
144
192
} ,
145
193
) ;
@@ -149,7 +197,7 @@ fn create_merkle_map_proof_benches(c: &mut Criterion) {
149
197
150
198
fn verify_merkle_map_proof_benches ( c : & mut Criterion ) {
151
199
let mut group = c. benchmark_group ( format ! (
152
- "verify_merkle_map_proof_(blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK})"
200
+ "verify_merkle_map_proof_(blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK},txs_per_proof={MAX_TRANSACTIONS_PER_PROOF_BENCH} )"
153
201
) ) ;
154
202
for total_leaves in TOTAL_TRANSACTIONS_BENCHES . iter ( ) {
155
203
let mk_trees_by_block_range_iterator = generate_block_ranges_nodes_iterator (
@@ -163,10 +211,13 @@ fn verify_merkle_map_proof_benches(c: &mut Criterion) {
163
211
* total_leaves,
164
212
TOTAL_TRANSACTIONS_PER_BLOCK ,
165
213
BLOCK_RANGE_LENGTH_BENCH ,
166
- 1 ,
214
+ MAX_TRANSACTIONS_PER_PROOF_BENCH ,
215
+ ) ;
216
+ let mk_map_proof = generate_merkle_map_proof (
217
+ mk_trees_by_block_range_iterator,
218
+ & mk_map_compressed,
219
+ MAX_TRANSACTIONS_PER_PROOF_BENCH ,
167
220
) ;
168
- let mk_map_proof =
169
- generate_merkle_map_proof ( mk_trees_by_block_range_iterator, & mk_map_compressed) ;
170
221
171
222
group. bench_with_input (
172
223
BenchmarkId :: from_parameter ( total_leaves) ,
@@ -183,7 +234,7 @@ criterion_group!(
183
234
name = benches;
184
235
config = Criterion :: default ( ) . sample_size( 10 ) ;
185
236
targets =
186
- create_merkle_map_compressed_benches ,
237
+ create_merkle_map_root_benches ,
187
238
create_merkle_map_proof_benches,
188
239
verify_merkle_map_proof_benches
189
240
) ;
0 commit comments