miden_testing/mock_chain/
proven_tx_ext.rs1use miden_objects::{
2 account::delta::AccountUpdateDetails,
3 transaction::{ExecutedTransaction, ProvenTransaction, ProvenTransactionBuilder},
4 vm::ExecutionProof,
5};
6use winterfell::Proof;
7
8pub trait ProvenTransactionExt {
11 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}