Skip to content

Commit 2d72a66

Browse files
committed
committer: add cli for committer benchmark
1 parent 40922cc commit 2d72a66

File tree

3 files changed

+53
-4
lines changed

3 files changed

+53
-4
lines changed

crates/starknet_committer/src/block_committer/input.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ impl Default for ConfigImpl {
101101
}
102102
}
103103

104-
#[derive(Debug, Eq, PartialEq)]
104+
#[derive(Debug, Default, Eq, PartialEq)]
105105
pub struct Input<C: Config> {
106106
/// All relevant information for the state diff commitment.
107107
pub state_diff: StateDiff,

crates/starknet_committer_and_os_cli/src/committer_cli/commands.rs

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1+
use std::collections::HashMap;
2+
use std::time::Instant;
3+
4+
use rand::rngs::StdRng;
5+
use rand::SeedableRng;
16
use starknet_committer::block_committer::commit::commit_block;
2-
use starknet_committer::block_committer::input::Config;
3-
use starknet_patricia_storage::map_storage::MapStorage;
7+
use starknet_committer::block_committer::input::{Config, ConfigImpl};
8+
use starknet_committer::block_committer::state_diff_generator::generate_random_state_diff;
9+
use starknet_patricia::hash::hash_trait::HashOutput;
10+
use starknet_patricia_storage::map_storage::{BorrowedMapStorage, MapStorage};
411
use tracing::info;
512
use tracing::level_filters::LevelFilter;
613
use tracing_subscriber::reload::Handle;
@@ -43,3 +50,40 @@ pub async fn commit(input: InputImpl, output_path: String, storage: MapStorage)
4350
output.contract_storage_root_hash, output.compiled_class_root_hash,
4451
);
4552
}
53+
54+
pub async fn run_storage_benchmark() {
55+
let n_iterations = 10;
56+
let seed = 42_u64; // Constant seed for reproducibility
57+
58+
let mut rng = StdRng::seed_from_u64(seed);
59+
let mut total_time = 0;
60+
61+
let mut storage = MapStorage::new();
62+
let mut contracts_trie_root_hash = HashOutput::default();
63+
let mut classes_trie_root_hash = HashOutput::default();
64+
65+
for i in 0..n_iterations {
66+
info!("Committer storage benchmark iteration {}/{}", i + 1, n_iterations);
67+
let input = InputImpl {
68+
state_diff: generate_random_state_diff(&mut rng),
69+
contracts_trie_root_hash,
70+
classes_trie_root_hash,
71+
config: ConfigImpl::default(),
72+
};
73+
74+
// commit block and write to storage
75+
let start = Instant::now();
76+
let serialized_filled_forest = SerializedForest(
77+
commit_block(input, &mut storage).await.expect("Failed to commit the given block."),
78+
);
79+
serialized_filled_forest.0.write_to_storage(&mut storage);
80+
let duration = start.elapsed();
81+
total_time += duration.as_millis();
82+
83+
contracts_trie_root_hash = serialized_filled_forest.0.get_contract_root_hash();
84+
classes_trie_root_hash = serialized_filled_forest.0.get_compiled_class_root_hash();
85+
}
86+
87+
let avg_millis = total_time as f64 / n_iterations as f64;
88+
info!("Average time: {:.2} milliseconds", avg_millis);
89+
}

crates/starknet_committer_and_os_cli/src/committer_cli/run_committer_cli.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use tracing::level_filters::LevelFilter;
44
use tracing_subscriber::reload::Handle;
55
use tracing_subscriber::Registry;
66

7-
use crate::committer_cli::commands::parse_and_commit;
7+
use crate::committer_cli::commands::{parse_and_commit, run_storage_benchmark};
88
use crate::committer_cli::tests::python_tests::CommitterPythonTestRunner;
99
use crate::shared_utils::types::{run_python_test, IoArgs, PythonTestArg};
1010

@@ -22,6 +22,8 @@ enum Command {
2222
io_args: IoArgs,
2323
},
2424
PythonTest(PythonTestArg),
25+
/// Run the committer on random data with owned storage.
26+
StorageBenchmark,
2527
}
2628

2729
pub async fn run_committer_cli(
@@ -37,5 +39,8 @@ pub async fn run_committer_cli(
3739
Command::PythonTest(python_test_arg) => {
3840
run_python_test::<CommitterPythonTestRunner>(python_test_arg).await;
3941
}
42+
Command::StorageBenchmark => {
43+
run_storage_benchmark().await;
44+
}
4045
}
4146
}

0 commit comments

Comments
 (0)