Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions crates/starknet_os_runner/src/virtual_block_executor.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::collections::HashSet;

use blockifier::blockifier::config::TransactionExecutorConfig;
use blockifier::blockifier::transaction_executor::{
TransactionExecutionOutput,
Expand All @@ -14,7 +16,7 @@ use blockifier::transaction::account_transaction::ExecutionFlags;
use blockifier::transaction::transaction_execution::Transaction as BlockifierTransaction;
use blockifier_reexecution::state_reader::rpc_state_reader::RpcStateReader;
use starknet_api::block::BlockNumber;
use starknet_api::core::ChainId;
use starknet_api::core::{ChainId, ClassHash};
use starknet_api::transaction::fields::Fee;
use starknet_api::transaction::{Transaction, TransactionHash};

Expand All @@ -32,6 +34,8 @@ pub struct VirtualBlockExecutionData {
pub block_context: BlockContext,
/// The initial state reads (accessed state) during execution.
pub initial_reads: StateMaps,
/// The class hashes of all contracts executed in the virtual block.
pub executed_class_hashes: HashSet<ClassHash>,
}

/// Executes a virtual block of transactions.
Expand Down Expand Up @@ -117,7 +121,18 @@ pub trait VirtualBlockExecutor {
.get_initial_reads()
.map_err(|e| VirtualBlockExecutorError::ReexecutionError(Box::new(e.into())))?;

Ok(VirtualBlockExecutionData { execution_outputs, block_context, initial_reads })
let executed_class_hashes = transaction_executor
.bouncer
.lock()
.expect("Bouncer lock failed.")
.get_executed_class_hashes();

Ok(VirtualBlockExecutionData {
execution_outputs,
block_context,
initial_reads,
executed_class_hashes,
})
}

/// Converts Invoke transactions to blockifier transactions.
Expand Down
3 changes: 3 additions & 0 deletions crates/starknet_os_runner/src/virtual_block_executor_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,9 @@ fn test_execute_constructed_balance_of_transaction() {
"initial_reads.storage should be non-empty (balance storage was read)"
);

// Verify executed class hashes were captured.
assert!(!result.executed_class_hashes.is_empty(), "executed_class_hashes should be non-empty");

// Verify the specific ERC20 balance storage key was read.
// ERC20 contracts store balances in "ERC20_balances" mapping keyed by address.
let strk_token = ContractAddress::try_from(felt!(STRK_TOKEN_ADDRESS)).unwrap();
Expand Down