1use 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
26pub trait Executor {
28 fn execute_transaction_to_effects(
29 &self,
30 store: &dyn BackingStore,
31 protocol_config: &ProtocolConfig,
33 metrics: Arc<ExecutionMetrics>,
34 enable_expensive_checks: bool,
35 execution_params: ExecutionOrEarlyError,
36 epoch_id: &EpochId,
38 epoch_timestamp_ms: u64,
39 input_objects: CheckedInputObjects,
41 system_object_versions: SystemObjectVersions,
43 gas: GasData,
45 gas_status: SuiGasStatus,
46 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 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 protocol_config: &ProtocolConfig,
93 metrics: Arc<ExecutionMetrics>,
94 enable_expensive_checks: bool,
95 execution_params: ExecutionOrEarlyError,
96 epoch_id: &EpochId,
98 epoch_timestamp_ms: u64,
99 input_objects: CheckedInputObjects,
101 system_object_versions: SystemObjectVersions,
102 gas: GasData,
104 gas_status: SuiGasStatus,
105 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 protocol_config: &ProtocolConfig,
123 metrics: Arc<ExecutionMetrics>,
124 epoch_id: EpochId,
126 epoch_timestamp_ms: u64,
127 transaction_digest: &TransactionDigest,
129 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}