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 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
27pub trait Executor {
29 fn execute_transaction_to_effects(
30 &self,
31 store: &dyn BackingStore,
32 protocol_config: &ProtocolConfig,
34 metrics: Arc<ExecutionMetrics>,
35 enable_expensive_checks: bool,
36 execution_params: ExecutionOrEarlyError,
37 epoch_id: &EpochId,
39 epoch_timestamp_ms: u64,
40 input_objects: CheckedInputObjects,
42 system_object_versions: SystemObjectVersions,
44 unsettled_object_funds: &dyn UnsettledObjectFundsRead,
45 gas: GasData,
47 gas_status: SuiGasStatus,
48 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 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 protocol_config: &ProtocolConfig,
96 metrics: Arc<ExecutionMetrics>,
97 enable_expensive_checks: bool,
98 execution_params: ExecutionOrEarlyError,
99 epoch_id: &EpochId,
101 epoch_timestamp_ms: u64,
102 input_objects: CheckedInputObjects,
104 system_object_versions: SystemObjectVersions,
105 gas: GasData,
107 gas_status: SuiGasStatus,
108 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 protocol_config: &ProtocolConfig,
126 metrics: Arc<ExecutionMetrics>,
127 epoch_id: EpochId,
129 epoch_timestamp_ms: u64,
130 transaction_digest: &TransactionDigest,
132 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}