sui_types/
transaction_executor.rs1use crate::base_types::ObjectID;
5use crate::effects::TransactionEffects;
6use crate::effects::TransactionEvents;
7use crate::error::ExecutionError;
8use crate::error::SuiError;
9use crate::execution::ExecutionResult;
10use crate::full_checkpoint_content::ObjectSet;
11use crate::quorum_driver_types::ExecuteTransactionRequestV3;
12use crate::quorum_driver_types::ExecuteTransactionResponseV3;
13use crate::quorum_driver_types::QuorumDriverError;
14use crate::storage::ObjectKey;
15use crate::transaction::TransactionData;
16
17#[async_trait::async_trait]
20pub trait TransactionExecutor: Send + Sync {
21 async fn execute_transaction(
22 &self,
23 request: ExecuteTransactionRequestV3,
24 client_addr: Option<std::net::SocketAddr>,
25 ) -> Result<ExecuteTransactionResponseV3, QuorumDriverError>;
26
27 fn simulate_transaction(
28 &self,
29 transaction: TransactionData,
30 checks: TransactionChecks,
31 ) -> Result<SimulateTransactionResult, SuiError>;
32}
33
34pub struct SimulateTransactionResult {
35 pub effects: TransactionEffects,
36 pub events: Option<TransactionEvents>,
37 pub objects: ObjectSet,
38 pub execution_result: Result<Vec<ExecutionResult>, ExecutionError>,
39 pub mock_gas_id: Option<ObjectID>,
40 pub unchanged_loaded_runtime_objects: Vec<ObjectKey>,
41}
42
43#[derive(Default, Debug, Copy, Clone)]
44pub enum TransactionChecks {
45 #[default]
46 Enabled,
47 Disabled,
48}
49
50impl TransactionChecks {
51 pub fn disabled(self) -> bool {
52 matches!(self, Self::Disabled)
53 }
54
55 pub fn enabled(self) -> bool {
56 matches!(self, Self::Enabled)
57 }
58}