iota_types/
transaction_executor.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use std::collections::BTreeMap;
6
7use crate::{
8    base_types::ObjectID,
9    effects::{TransactionEffects, TransactionEvents},
10    error::IotaError,
11    object::Object,
12    quorum_driver_types::{
13        ExecuteTransactionRequestV1, ExecuteTransactionResponseV1, QuorumDriverError,
14    },
15    transaction::TransactionData,
16};
17
18/// Trait to define the interface for how the REST service interacts with a a
19/// QuorumDriver or a simulated transaction executor.
20#[async_trait::async_trait]
21pub trait TransactionExecutor: Send + Sync {
22    async fn execute_transaction(
23        &self,
24        request: ExecuteTransactionRequestV1,
25        client_addr: Option<std::net::SocketAddr>,
26    ) -> Result<ExecuteTransactionResponseV1, QuorumDriverError>;
27
28    fn simulate_transaction(
29        &self,
30        transaction: TransactionData,
31    ) -> Result<SimulateTransactionResult, IotaError>;
32}
33
34pub struct SimulateTransactionResult {
35    pub effects: TransactionEffects,
36    pub events: Option<TransactionEvents>,
37    pub input_objects: BTreeMap<ObjectID, Object>,
38    pub output_objects: BTreeMap<ObjectID, Object>,
39    pub mock_gas_id: Option<ObjectID>,
40}