1use std::{path::PathBuf, sync::Arc};
8
9pub use executor::Executor;
10use iota_protocol_config::ProtocolConfig;
11use iota_types::{error::IotaResult, metrics::BytecodeVerifierMetrics};
12pub use verifier::Verifier;
13
14pub mod executor;
15pub mod verifier;
16
17mod latest;
18
19#[cfg(test)]
20mod tests;
21
22pub fn executor(
23 protocol_config: &ProtocolConfig,
24 silent: bool,
25 enable_profiler: Option<PathBuf>,
26) -> IotaResult<Arc<dyn Executor + Send + Sync>> {
27 let version = protocol_config.execution_version_as_option().unwrap_or(1);
28 Ok(match version {
29 1 => Arc::new(latest::Executor::new(
30 protocol_config,
31 silent,
32 enable_profiler,
33 )?),
34
35 v => panic!("Unsupported execution version {v}"),
36 })
37}
38
39pub fn verifier<'m>(
40 protocol_config: &ProtocolConfig,
41 signing_limits: Option<(usize, usize)>,
42 metrics: &'m Arc<BytecodeVerifierMetrics>,
43) -> Box<dyn Verifier + 'm> {
44 let version = protocol_config.execution_version_as_option().unwrap_or(1);
45 let config = protocol_config.verifier_config(signing_limits);
46 match version {
47 1 => Box::new(latest::Verifier::new(config, metrics)),
48 v => panic!("Unsupported execution version {v}"),
49 }
50}