sui_types/
transaction_executor.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use 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/// Trait to define the interface for how the gRPC service interacts with a  QuorumDriver or a
18/// simulated transaction executor.
19#[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}