sui_adapter_latest/static_programmable_transactions/
mod.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use 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
22// TODO we might replace this with a new one
23pub 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}