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