Skip to content

Commit 36d662e

Browse files
chore(blockifier): fn execute_txs_sequentially return state_diff
1 parent 91889fd commit 36d662e

File tree

3 files changed

+20
-11
lines changed

3 files changed

+20
-11
lines changed

crates/blockifier/src/blockifier/transaction_executor.rs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::blockifier::config::TransactionExecutorConfig;
1111
use crate::bouncer::{Bouncer, BouncerWeights};
1212
use crate::concurrency::worker_logic::WorkerExecutor;
1313
use crate::context::BlockContext;
14-
use crate::state::cached_state::{CachedState, CommitmentStateDiff, TransactionalState};
14+
use crate::state::cached_state::{CachedState, CommitmentStateDiff, StateMaps, TransactionalState};
1515
use crate::state::errors::StateError;
1616
use crate::state::state_api::{StateReader, StateResult};
1717
use crate::state::stateful_compression::{allocate_aliases_in_storage, compress, CompressionError};
@@ -27,6 +27,8 @@ pub mod transaction_executor_test;
2727
pub const BLOCK_STATE_ACCESS_ERR: &str = "Error: The block state should be `Some`.";
2828
pub const DEFAULT_STACK_SIZE: usize = 60 * 1024 * 1024;
2929

30+
pub type TransactionExecutionOutput = (TransactionExecutionInfo, StateMaps);
31+
3032
#[derive(Debug, Error)]
3133
pub enum TransactionExecutorError {
3234
#[error("Transaction cannot be added to the current block, block capacity reached.")]
@@ -103,7 +105,7 @@ impl<S: StateReader> TransactionExecutor<S> {
103105
pub fn execute(
104106
&mut self,
105107
tx: &Transaction,
106-
) -> TransactionExecutorResult<TransactionExecutionInfo> {
108+
) -> TransactionExecutorResult<TransactionExecutionOutput> {
107109
let mut transactional_state = TransactionalState::create_transactional(
108110
self.block_state.as_mut().expect(BLOCK_STATE_ACCESS_ERR),
109111
);
@@ -116,14 +118,16 @@ impl<S: StateReader> TransactionExecutor<S> {
116118
Ok(tx_execution_info) => {
117119
let tx_state_changes_keys =
118120
transactional_state.get_actual_state_changes()?.state_maps.into_keys();
121+
let state_diff = transactional_state.to_state_diff()?.state_maps;
119122
self.bouncer.try_update(
120123
&transactional_state,
121124
&tx_state_changes_keys,
122125
&tx_execution_info.summarize(&self.block_context.versioned_constants),
123126
&tx_execution_info.receipt.resources,
124127
)?;
125128
transactional_state.commit();
126-
Ok(tx_execution_info)
129+
130+
Ok((tx_execution_info, state_diff))
127131
}
128132
Err(error) => {
129133
transactional_state.abort();
@@ -132,14 +136,16 @@ impl<S: StateReader> TransactionExecutor<S> {
132136
}
133137
}
134138

135-
pub fn execute_txs_sequentially_inner(
139+
fn execute_txs_sequentially_inner(
136140
&mut self,
137141
txs: &[Transaction],
138-
) -> Vec<TransactionExecutorResult<TransactionExecutionInfo>> {
142+
) -> Vec<TransactionExecutorResult<TransactionExecutionOutput>> {
139143
let mut results = Vec::new();
140144
for tx in txs {
141145
match self.execute(tx) {
142-
Ok(tx_execution_info) => results.push(Ok(tx_execution_info)),
146+
Ok((tx_execution_info, state_diff)) => {
147+
results.push(Ok((tx_execution_info, state_diff)))
148+
}
143149
Err(TransactionExecutorError::BlockFull) => break,
144150
Err(error) => results.push(Err(error)),
145151
}
@@ -196,6 +202,9 @@ impl<S: StateReader + Send + Sync> TransactionExecutor<S> {
196202
if !self.config.concurrency_config.enabled {
197203
log::debug!("Executing transactions sequentially.");
198204
self.execute_txs_sequentially(txs)
205+
.into_iter()
206+
.map(|result| result.map(|(info, _)| info))
207+
.collect()
199208
} else {
200209
log::debug!("Executing transactions concurrently.");
201210
let chunk_size = self.config.concurrency_config.chunk_size;
@@ -228,10 +237,10 @@ impl<S: StateReader + Send + Sync> TransactionExecutor<S> {
228237
}
229238
}
230239

231-
pub fn execute_txs_sequentially(
240+
fn execute_txs_sequentially(
232241
&mut self,
233242
txs: &[Transaction],
234-
) -> Vec<TransactionExecutorResult<TransactionExecutionInfo>> {
243+
) -> Vec<TransactionExecutorResult<TransactionExecutionOutput>> {
235244
#[cfg(not(feature = "cairo_native"))]
236245
return self.execute_txs_sequentially_inner(txs);
237246
#[cfg(feature = "cairo_native")]
@@ -261,7 +270,7 @@ impl<S: StateReader + Send + Sync> TransactionExecutor<S> {
261270
}
262271
}
263272

264-
pub fn execute_chunk(
273+
fn execute_chunk(
265274
&mut self,
266275
chunk: &[Transaction],
267276
) -> Vec<TransactionExecutorResult<TransactionExecutionInfo>> {

crates/blockifier/src/blockifier/transaction_executor_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ fn tx_executor_test_body<S: StateReader>(
5959
// TODO(Arni, 30/03/2024): Consider adding a test for the transaction execution info. If A test
6060
// should not be added, rename the test to `test_bouncer_info`.
6161
// TODO(Arni, 30/03/2024): Test all bouncer weights.
62-
let _tx_execution_info = tx_executor.execute(&tx).unwrap();
62+
let (_tx_execution_info, _state_diff) = tx_executor.execute(&tx).unwrap();
6363
let bouncer_weights = tx_executor.bouncer.get_accumulated_weights();
6464
assert_eq!(bouncer_weights.state_diff_size, expected_bouncer_weights.state_diff_size);
6565
assert_eq!(

crates/native_blockifier/src/py_block_executor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ impl PyBlockExecutor {
197197
optional_py_class_info: Option<PyClassInfo>,
198198
) -> NativeBlockifierResult<Py<PyBytes>> {
199199
let tx: Transaction = py_tx(tx, optional_py_class_info).expect(PY_TX_PARSING_ERR);
200-
let tx_execution_info = self.tx_executor().execute(&tx)?;
200+
let (tx_execution_info, _state_diff) = self.tx_executor().execute(&tx)?;
201201
let thin_tx_execution_info =
202202
ThinTransactionExecutionInfo::from_tx_execution_info(tx_execution_info);
203203

0 commit comments

Comments
 (0)