1+ use std:: collections:: HashSet ;
2+
13use blockifier:: blockifier:: config:: TransactionExecutorConfig ;
24use blockifier:: blockifier:: transaction_executor:: {
35 TransactionExecutionOutput ,
@@ -14,7 +16,7 @@ use blockifier::transaction::account_transaction::ExecutionFlags;
1416use blockifier:: transaction:: transaction_execution:: Transaction as BlockifierTransaction ;
1517use blockifier_reexecution:: state_reader:: rpc_state_reader:: RpcStateReader ;
1618use starknet_api:: block:: BlockNumber ;
17- use starknet_api:: core:: ChainId ;
19+ use starknet_api:: core:: { ChainId , ClassHash } ;
1820use starknet_api:: transaction:: fields:: Fee ;
1921use starknet_api:: transaction:: { Transaction , TransactionHash } ;
2022
@@ -32,6 +34,8 @@ pub struct VirtualBlockExecutionData {
3234 pub block_context : BlockContext ,
3335 /// The initial state reads (accessed state) during execution.
3436 pub initial_reads : StateMaps ,
37+ /// The class hashes of all contracts executed in the virtual block.
38+ pub executed_class_hashes : HashSet < ClassHash > ,
3539}
3640
3741/// Executes a virtual block of transactions.
@@ -117,7 +121,18 @@ pub trait VirtualBlockExecutor {
117121 . get_initial_reads ( )
118122 . map_err ( |e| VirtualBlockExecutorError :: ReexecutionError ( Box :: new ( e. into ( ) ) ) ) ?;
119123
120- Ok ( VirtualBlockExecutionData { execution_outputs, block_context, initial_reads } )
124+ let executed_class_hashes = transaction_executor
125+ . bouncer
126+ . lock ( )
127+ . expect ( "Bouncer lock failed." )
128+ . get_executed_class_hashes ( ) ;
129+
130+ Ok ( VirtualBlockExecutionData {
131+ execution_outputs,
132+ block_context,
133+ initial_reads,
134+ executed_class_hashes,
135+ } )
121136 }
122137
123138 /// Converts Invoke transactions to blockifier transactions.
0 commit comments