miden_testing/mock_chain/
proven_tx_ext.rs

1use miden_objects::account::delta::AccountUpdateDetails;
2use miden_objects::transaction::{
3    ExecutedTransaction,
4    ProvenTransaction,
5    ProvenTransactionBuilder,
6};
7use miden_objects::vm::ExecutionProof;
8use winterfell::Proof;
9
10/// Extension trait to convert an [`ExecutedTransaction`] into a [`ProvenTransaction`] with a dummy
11/// proof for testing purposes.
12pub trait ProvenTransactionExt {
13    /// Converts the transaction into a proven transaction with a dummy proof.
14    fn from_executed_transaction_mocked(executed_tx: ExecutedTransaction) -> ProvenTransaction;
15}
16
17impl ProvenTransactionExt for ProvenTransaction {
18    fn from_executed_transaction_mocked(executed_tx: ExecutedTransaction) -> ProvenTransaction {
19        let block_reference = executed_tx.block_header();
20        let account_delta = executed_tx.account_delta().clone();
21        let initial_account = executed_tx.initial_account().clone();
22
23        let account_update_details = if initial_account.is_onchain() {
24            if initial_account.is_new() {
25                let mut account = initial_account;
26                account.apply_delta(&account_delta).expect("account delta should be applicable");
27
28                AccountUpdateDetails::New(account)
29            } else {
30                AccountUpdateDetails::Delta(account_delta)
31            }
32        } else {
33            AccountUpdateDetails::Private
34        };
35
36        ProvenTransactionBuilder::new(
37            executed_tx.account_id(),
38            executed_tx.initial_account().init_commitment(),
39            executed_tx.final_account().commitment(),
40            executed_tx.account_delta().to_commitment(),
41            block_reference.block_num(),
42            block_reference.commitment(),
43            executed_tx.fee(),
44            executed_tx.expiration_block_num(),
45            ExecutionProof::new(Proof::new_dummy(), Default::default()),
46        )
47        .add_input_notes(executed_tx.input_notes())
48        .add_output_notes(executed_tx.output_notes().iter().cloned())
49        .account_update_details(account_update_details)
50        .build()
51        .unwrap()
52    }
53}