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,
19 execution_status::ExecutionFailure,
20 gas::GasUsageReport,
21 inner_temporary_store::InnerTemporaryStore,
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 unsettled_object_funds: &dyn UnsettledObjectFundsRead,
44 gas: GasData,
46 reference_gas_price: u64,
47 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 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 protocol_config: &ProtocolConfig,
95 metrics: Arc<ExecutionMetrics>,
96 enable_expensive_checks: bool,
97 execution_params: ExecutionOrEarlyError,
98 epoch_id: &EpochId,
100 epoch_timestamp_ms: u64,
101 input_objects: CheckedInputObjects,
103 system_object_versions: SystemObjectVersions,
104 gas: GasData,
106 reference_gas_price: u64,
107 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 protocol_config: &ProtocolConfig,
125 metrics: Arc<ExecutionMetrics>,
126 epoch_id: EpochId,
128 epoch_timestamp_ms: u64,
129 transaction_digest: &TransactionDigest,
131 input_objects: CheckedInputObjects,
133 pt: ProgrammableTransaction,
134 ) -> Result<InnerTemporaryStore, ExecutionError>;
135}