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,
19    execution_status::ExecutionFailure,
20    gas::GasUsageReport,
21    inner_temporary_store::InnerTemporaryStore,
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        unsettled_object_funds: &dyn UnsettledObjectFundsRead,
44        // Gas related
45        gas: GasData,
46        reference_gas_price: u64,
47        // Transaction
48        transaction_kind: TransactionKind,
49        rewritten_inputs: Option<Vec<bool>>,
50        transaction_signer: SuiAddress,
51        transaction_digest: TransactionDigest,
52        trace_builder_opt: &mut Option<MoveTraceBuilder>,
53    ) -> (
54        InnerTemporaryStore,
55        GasUsageReport,
56        TransactionEffects,
57        Vec<ExecutionTiming>,
58        Result<(), ExecutionFailure>,
59    );
60
61    /// Execution mode returns greater error information, primarily used in fullnode execution
62    /// as opposed to `execute_transaction_to_effects` which only includes basic `ExecutionFailure` error.
63    fn execute_transaction_to_effects_and_execution_error(
64        &self,
65        store: &dyn BackingStore,
66        protocol_config: &ProtocolConfig,
67        metrics: Arc<ExecutionMetrics>,
68        enable_expensive_checks: bool,
69        execution_params: ExecutionOrEarlyError,
70        epoch_id: &EpochId,
71        epoch_timestamp_ms: u64,
72        input_objects: CheckedInputObjects,
73        system_object_versions: SystemObjectVersions,
74        unsettled_object_funds: &dyn UnsettledObjectFundsRead,
75        gas: GasData,
76        reference_gas_price: u64,
77        transaction_kind: TransactionKind,
78        _rewritten_inputs: Option<Vec<bool>>,
79        transaction_signer: SuiAddress,
80        transaction_digest: TransactionDigest,
81        trace_builder_opt: &mut Option<MoveTraceBuilder>,
82    ) -> (
83        InnerTemporaryStore,
84        GasUsageReport,
85        TransactionEffects,
86        Vec<ExecutionTiming>,
87        Result<(), ExecutionError>,
88    );
89
90    fn dev_inspect_transaction(
91        &self,
92        store: &dyn BackingStore,
93        // Configuration
94        protocol_config: &ProtocolConfig,
95        metrics: Arc<ExecutionMetrics>,
96        enable_expensive_checks: bool,
97        execution_params: ExecutionOrEarlyError,
98        // Epoch
99        epoch_id: &EpochId,
100        epoch_timestamp_ms: u64,
101        // Transaction Inputs
102        input_objects: CheckedInputObjects,
103        system_object_versions: SystemObjectVersions,
104        // Gas related
105        gas: GasData,
106        reference_gas_price: u64,
107        // Transaction
108        transaction_kind: TransactionKind,
109        rewritten_inputs: Option<Vec<bool>>,
110        transaction_signer: SuiAddress,
111        transaction_digest: TransactionDigest,
112        skip_all_checks: bool,
113    ) -> (
114        InnerTemporaryStore,
115        GasUsageReport,
116        TransactionEffects,
117        Result<Vec<ExecutionResult>, ExecutionError>,
118    );
119
120    fn update_genesis_state(
121        &self,
122        store: &dyn BackingStore,
123        // Configuration
124        protocol_config: &ProtocolConfig,
125        metrics: Arc<ExecutionMetrics>,
126        // Epoch
127        epoch_id: EpochId,
128        epoch_timestamp_ms: u64,
129        // Genesis Digest
130        transaction_digest: &TransactionDigest,
131        // Transaction
132        input_objects: CheckedInputObjects,
133        pt: ProgrammableTransaction,
134    ) -> Result<InnerTemporaryStore, ExecutionError>;
135}