radix_engine/transaction/
preview_executor.rs1use crate::transaction::TransactionReceipt;
2use crate::transaction::*;
3use crate::vm::VmInitialize;
4use radix_common::network::NetworkDefinition;
5use radix_substate_store_interface::interface::*;
6use radix_transactions::errors::TransactionValidationError;
7use radix_transactions::model::PreviewIntentV1;
8use radix_transactions::validation::*;
9
10#[derive(Debug, Clone, PartialEq, Eq)]
11pub enum PreviewError {
12 TransactionValidationError(TransactionValidationError),
13}
14
15impl From<TransactionValidationError> for PreviewError {
16 fn from(value: TransactionValidationError) -> Self {
17 Self::TransactionValidationError(value)
18 }
19}
20
21pub fn execute_preview(
22 substate_db: &impl SubstateDatabase,
23 vm_modules: &impl VmInitialize,
24 network: &NetworkDefinition,
25 preview_intent: PreviewIntentV1,
26 with_kernel_trace: bool,
27) -> Result<TransactionReceipt, PreviewError> {
28 let validator = TransactionValidator::new(substate_db, network);
29
30 let mut execution_config = if preview_intent.flags.disable_auth {
31 ExecutionConfig::for_preview_no_auth(network.clone())
32 } else {
33 ExecutionConfig::for_preview(network.clone())
34 };
35 execution_config = execution_config.with_kernel_trace(with_kernel_trace);
36
37 let validated = validator.validate_preview_intent_v1(preview_intent)?;
38
39 Ok(execute_transaction(
40 substate_db,
41 vm_modules,
42 &execution_config,
43 validated.create_executable(),
44 ))
45}