iota_execution/
executor.rs1use std::{collections::HashSet, sync::Arc};
6
7use iota_protocol_config::ProtocolConfig;
8use iota_types::{
9 base_types::{IotaAddress, ObjectRef, TxContext},
10 committee::EpochId,
11 digests::TransactionDigest,
12 effects::TransactionEffects,
13 error::ExecutionError,
14 execution::{ExecutionResult, TypeLayoutStore},
15 gas::IotaGasStatus,
16 inner_temporary_store::InnerTemporaryStore,
17 layout_resolver::LayoutResolver,
18 metrics::LimitsMetrics,
19 storage::BackingStore,
20 transaction::{CheckedInputObjects, ProgrammableTransaction, TransactionKind},
21};
22use move_trace_format::format::MoveTraceBuilder;
23
24pub trait Executor {
26 fn execute_transaction_to_effects(
27 &self,
28 store: &dyn BackingStore,
29 protocol_config: &ProtocolConfig,
31 metrics: Arc<LimitsMetrics>,
32 enable_expensive_checks: bool,
33 certificate_deny_set: &HashSet<TransactionDigest>,
34 epoch_id: &EpochId,
36 epoch_timestamp_ms: u64,
37 input_objects: CheckedInputObjects,
39 gas_coins: Vec<ObjectRef>,
41 gas_status: IotaGasStatus,
42 transaction_kind: TransactionKind,
44 transaction_signer: IotaAddress,
45 transaction_digest: TransactionDigest,
46 trace_builder_opt: &mut Option<MoveTraceBuilder>,
47 ) -> (
48 InnerTemporaryStore,
49 IotaGasStatus,
50 TransactionEffects,
51 Result<(), ExecutionError>,
52 );
53
54 fn dev_inspect_transaction(
55 &self,
56 store: &dyn BackingStore,
57 protocol_config: &ProtocolConfig,
59 metrics: Arc<LimitsMetrics>,
60 enable_expensive_checks: bool,
61 certificate_deny_set: &HashSet<TransactionDigest>,
62 epoch_id: &EpochId,
64 epoch_timestamp_ms: u64,
65 input_objects: CheckedInputObjects,
67 gas_coins: Vec<ObjectRef>,
69 gas_status: IotaGasStatus,
70 transaction_kind: TransactionKind,
72 transaction_signer: IotaAddress,
73 transaction_digest: TransactionDigest,
74 skip_all_checks: bool,
75 ) -> (
76 InnerTemporaryStore,
77 IotaGasStatus,
78 TransactionEffects,
79 Result<Vec<ExecutionResult>, ExecutionError>,
80 );
81
82 fn update_genesis_state(
83 &self,
84 store: &dyn BackingStore,
85 protocol_config: &ProtocolConfig,
87 metrics: Arc<LimitsMetrics>,
88 tx_context: &mut TxContext,
90 input_objects: CheckedInputObjects,
92 pt: ProgrammableTransaction,
93 ) -> Result<InnerTemporaryStore, ExecutionError>;
94
95 fn type_layout_resolver<'r, 'vm: 'r, 'store: 'r>(
96 &'vm self,
97 store: Box<dyn TypeLayoutStore + 'store>,
98 ) -> Box<dyn LayoutResolver + 'r>;
99}