1use 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}