miden_testing/mock_chain/
proven_tx_ext.rs

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