miden_testing/mock_chain/
proven_tx_ext.rs1use 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
10pub trait ProvenTransactionExt {
13 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}