iota_types/
transaction_executor.rs1use std::{collections::BTreeMap, time::Duration};
6
7use crate::{
8 base_types::ObjectID,
9 digests::TransactionDigest,
10 effects::{TransactionEffects, TransactionEvents},
11 error::{ExecutionError, IotaError},
12 execution::ExecutionResult,
13 messages_checkpoint::CheckpointSequenceNumber,
14 object::Object,
15 quorum_driver_types::{
16 ExecuteTransactionRequestV1, ExecuteTransactionResponseV1, QuorumDriverError,
17 },
18 transaction::TransactionData,
19};
20
21#[async_trait::async_trait]
24pub trait TransactionExecutor: Send + Sync {
25 async fn execute_transaction(
26 &self,
27 request: ExecuteTransactionRequestV1,
28 client_addr: Option<std::net::SocketAddr>,
29 ) -> Result<ExecuteTransactionResponseV1, QuorumDriverError>;
30
31 fn simulate_transaction(
32 &self,
33 transaction: TransactionData,
34 checks: VmChecks,
35 ) -> Result<SimulateTransactionResult, IotaError>;
36
37 async fn wait_for_checkpoint_inclusion(
44 &self,
45 digests: &[TransactionDigest],
46 timeout: Duration,
47 ) -> Result<BTreeMap<TransactionDigest, (CheckpointSequenceNumber, u64)>, IotaError>;
48}
49
50pub struct SimulateTransactionResult {
51 pub effects: TransactionEffects,
52 pub events: Option<TransactionEvents>,
53 pub input_objects: BTreeMap<ObjectID, Object>,
54 pub output_objects: BTreeMap<ObjectID, Object>,
55 pub execution_result: Result<Vec<ExecutionResult>, ExecutionError>,
56 pub mock_gas_id: Option<ObjectID>,
57 pub suggested_gas_price: Option<u64>,
58}
59
60#[derive(Default, Debug, Copy, Clone)]
61pub enum VmChecks {
62 #[default]
63 Enabled,
64 Disabled,
65}
66
67impl VmChecks {
68 pub fn disabled(self) -> bool {
69 matches!(self, Self::Disabled)
70 }
71
72 pub fn enabled(self) -> bool {
73 matches!(self, Self::Enabled)
74 }
75}