sui_adapter_latest/static_programmable_transactions/
mod.rs

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