Skip to main content

sui_execution/
lib.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4// DO NOT MODIFY, Generated by ./scripts/execution-layer
5
6use std::sync::Arc;
7
8use sui_protocol_config::ProtocolConfig;
9use sui_types::{error::SuiResult, metrics::BytecodeVerifierMetrics};
10
11pub use executor::Executor;
12pub use verifier::Verifier;
13
14pub mod executor;
15pub mod verifier;
16
17mod latest;
18mod v0;
19mod v1;
20mod v2;
21mod v3;
22
23#[cfg(test)]
24mod tests;
25
26pub fn executor(
27    protocol_config: &ProtocolConfig,
28    silent: bool,
29) -> SuiResult<Arc<dyn Executor + Send + Sync>> {
30    let version = protocol_config.execution_version_as_option().unwrap_or(0);
31    Ok(match version {
32        0 => Arc::new(v0::Executor::new(protocol_config, silent)?),
33
34        1 => Arc::new(v1::Executor::new(protocol_config, silent)?),
35
36        2 => Arc::new(v2::Executor::new(protocol_config, silent)?),
37
38        3 => Arc::new(v3::Executor::new(protocol_config, silent)?),
39
40        4 => Arc::new(latest::Executor::new(protocol_config, silent)?),
41
42        v => panic!("Unsupported execution version {v}"),
43    })
44}
45
46pub fn verifier<'m>(
47    protocol_config: &ProtocolConfig,
48    signing_limits: Option<(usize, usize, usize)>,
49    metrics: &'m Arc<BytecodeVerifierMetrics>,
50) -> Box<dyn Verifier + 'm> {
51    let version = protocol_config.execution_version_as_option().unwrap_or(0);
52    let config = protocol_config.verifier_config(signing_limits);
53    match version {
54        0 => Box::new(v0::Verifier::new(config, metrics)),
55        1 => Box::new(v1::Verifier::new(config, metrics)),
56        2 => Box::new(v2::Verifier::new(config, metrics)),
57        3 => Box::new(v3::Verifier::new(config, metrics)),
58        4 => Box::new(latest::Verifier::new(config, metrics)),
59        v => panic!("Unsupported execution version {v}"),
60    }
61}