Skip to main content

sui_execution/
executor.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use move_trace_format::format::MoveTraceBuilder;
5use std::sync::Arc;
6use sui_protocol_config::ProtocolConfig;
7use sui_types::execution::ExecutionTiming;
8use sui_types::execution_params::ExecutionOrEarlyError;
9use sui_types::storage::BackingStore;
10use sui_types::transaction::GasData;
11use sui_types::{
12    accumulator_root::UnsettledObjectFundsRead,
13    base_types::{SuiAddress, SystemObjectVersions},
14    committee::EpochId,
15    digests::TransactionDigest,
16    effects::TransactionEffects,
17    error::ExecutionError,
18    execution::{ExecutionResult, TypeLayoutStore},
19    execution_status::ExecutionFailure,
20    gas::SuiGasStatus,
21    inner_temporary_store::InnerTemporaryStore,
22    layout_resolver::LayoutResolver,
23    metrics::ExecutionMetrics,
24    transaction::{CheckedInputObjects, ProgrammableTransaction, TransactionKind},
25};
26
27/// Abstracts over access to the VM across versions of the execution layer.
28pub trait Executor {
29    fn execute_transaction_to_effects(
30        &self,
31        store: &dyn BackingStore,
32        // Configuration
33        protocol_config: &ProtocolConfig,
34        metrics: Arc<ExecutionMetrics>,
35        enable_expensive_checks: bool,
36        execution_params: ExecutionOrEarlyError,
37        // Epoch
38        epoch_id: &EpochId,
39        epoch_timestamp_ms: u64,
40        // Transaction Inputs
41        input_objects: CheckedInputObjects,
42        // Versions of system objects this transaction may read.
43        system_object_versions: SystemObjectVersions,
44        unsettled_object_funds: &dyn UnsettledObjectFundsRead,
45        // Gas related
46        gas: GasData,
47        gas_status: SuiGasStatus,
48        // Transaction
49        transaction_kind: TransactionKind,
50        rewritten_inputs: Option<Vec<bool>>,
51        transaction_signer: SuiAddress,
52        transaction_digest: TransactionDigest,
53        trace_builder_opt: &mut Option<MoveTraceBuilder>,
54    ) -> (
55        InnerTemporaryStore,
56        SuiGasStatus,
57        TransactionEffects,
58        Vec<ExecutionTiming>,
59        Result<(), ExecutionFailure>,
60    );
61
62    /// Execution mode returns greater error information, primarily used in fullnode execution
63    /// as opposed to `execute_transaction_to_effects` which only includes basic `ExecutionFailure` error.
64    fn execute_transaction_to_effects_and_execution_error(
65        &self,
66        store: &dyn BackingStore,
67        protocol_config: &ProtocolConfig,
68        metrics: Arc<ExecutionMetrics>,
69        enable_expensive_checks: bool,
70        execution_params: ExecutionOrEarlyError,
71        epoch_id: &EpochId,
72        epoch_timestamp_ms: u64,
73        input_objects: CheckedInputObjects,
74        system_object_versions: SystemObjectVersions,
75        unsettled_object_funds: &dyn UnsettledObjectFundsRead,
76        gas: GasData,
77        gas_status: SuiGasStatus,
78        transaction_kind: TransactionKind,
79        _rewritten_inputs: Option<Vec<bool>>,
80        transaction_signer: SuiAddress,
81        transaction_digest: TransactionDigest,
82        trace_builder_opt: &mut Option<MoveTraceBuilder>,
83    ) -> (
84        InnerTemporaryStore,
85        SuiGasStatus,
86        TransactionEffects,
87        Vec<ExecutionTiming>,
88        Result<(), ExecutionError>,
89    );
90
91    fn dev_inspect_transaction(
92        &self,
93        store: &dyn BackingStore,
94        // Configuration
95        protocol_config: &ProtocolConfig,
96        metrics: Arc<ExecutionMetrics>,
97        enable_expensive_checks: bool,
98        execution_params: ExecutionOrEarlyError,
99        // Epoch
100        epoch_id: &EpochId,
101        epoch_timestamp_ms: u64,
102        // Transaction Inputs
103        input_objects: CheckedInputObjects,
104        system_object_versions: SystemObjectVersions,
105        // Gas related
106        gas: GasData,
107        gas_status: SuiGasStatus,
108        // Transaction
109        transaction_kind: TransactionKind,
110        rewritten_inputs: Option<Vec<bool>>,
111        transaction_signer: SuiAddress,
112        transaction_digest: TransactionDigest,
113        skip_all_checks: bool,
114    ) -> (
115        InnerTemporaryStore,
116        SuiGasStatus,
117        TransactionEffects,
118        Result<Vec<ExecutionResult>, ExecutionError>,
119    );
120
121    fn update_genesis_state(
122        &self,
123        store: &dyn BackingStore,
124        // Configuration
125        protocol_config: &ProtocolConfig,
126        metrics: Arc<ExecutionMetrics>,
127        // Epoch
128        epoch_id: EpochId,
129        epoch_timestamp_ms: u64,
130        // Genesis Digest
131        transaction_digest: &TransactionDigest,
132        // Transaction
133        input_objects: CheckedInputObjects,
134        pt: ProgrammableTransaction,
135    ) -> Result<InnerTemporaryStore, ExecutionError>;
136
137    fn type_layout_resolver<'r, 'vm: 'r, 'store: 'r>(
138        &'vm self,
139        protocol_config: &'vm ProtocolConfig,
140        store: Box<dyn TypeLayoutStore + 'store>,
141    ) -> Box<dyn LayoutResolver + 'r>;
142}