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