sui_adapter_latest/static_programmable_transactions/
mod.rs1use crate::{
5 data_store::cached_package_store::CachedPackageStore,
6 execution_mode::ExecutionMode,
7 execution_value::ExecutionState,
8 gas_charger::GasCharger,
9 static_programmable_transactions::{
10 env::Env, linkage::analysis::LinkageAnalyzer, metering::translation_meter,
11 },
12};
13use move_trace_format::format::MoveTraceBuilder;
14use move_vm_runtime::move_vm::MoveVM;
15use std::{cell::RefCell, rc::Rc, sync::Arc};
16use sui_protocol_config::ProtocolConfig;
17use sui_types::{
18 base_types::TxContext, error::ExecutionError, execution::ResultWithTimings,
19 metrics::LimitsMetrics, storage::BackingPackageStore, transaction::ProgrammableTransaction,
20};
21
22pub use crate::data_store::legacy::linkage_view::LinkageView;
24
25pub mod env;
26pub mod execution;
27pub mod linkage;
28pub mod loading;
29pub mod metering;
30pub mod spanned;
31pub mod typing;
32
33pub fn execute<Mode: ExecutionMode>(
34 protocol_config: &ProtocolConfig,
35 metrics: Arc<LimitsMetrics>,
36 vm: &MoveVM,
37 state_view: &mut dyn ExecutionState,
38 package_store: &dyn BackingPackageStore,
39 tx_context: Rc<RefCell<TxContext>>,
40 gas_charger: &mut GasCharger,
41 txn: ProgrammableTransaction,
42 trace_builder_opt: &mut Option<MoveTraceBuilder>,
43) -> ResultWithTimings<Mode::ExecutionResults, ExecutionError> {
44 let package_store = CachedPackageStore::new(Box::new(package_store));
45 let linkage_analysis =
46 LinkageAnalyzer::new::<Mode>(protocol_config).map_err(|e| (e, vec![]))?;
47
48 let mut env = Env::new(
49 protocol_config,
50 vm,
51 state_view,
52 &package_store,
53 &linkage_analysis,
54 );
55 let mut translation_meter =
56 translation_meter::TranslationMeter::new(protocol_config, gas_charger);
57
58 let txn = loading::translate::transaction(&mut translation_meter, &env, txn)
59 .map_err(|e| (e, vec![]))?;
60 let txn = typing::translate_and_verify::<Mode>(&mut translation_meter, &env, txn)
61 .map_err(|e| (e, vec![]))?;
62 execution::interpreter::execute::<Mode>(
63 &mut env,
64 metrics,
65 tx_context,
66 gas_charger,
67 txn,
68 trace_builder_opt,
69 )
70}