iota_execution/
lib.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5// DO NOT MODIFY, Generated by ./scripts/execution-layer
6
7use 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}