Skip to content

Commit

Permalink
fix(starknet_state_sync): latest block marker is checked as min of st…
Browse files Browse the repository at this point in the history
…ate and body markers (#3252)
  • Loading branch information
noamsp-starkware authored Jan 12, 2025
1 parent 9b1c4c3 commit 3104720
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
22 changes: 20 additions & 2 deletions crates/starknet_state_sync/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ pub mod runner;
#[cfg(test)]
mod test;

use std::cmp::min;

use async_trait::async_trait;
use futures::channel::mpsc::{channel, Sender};
use futures::SinkExt;
Expand Down Expand Up @@ -191,7 +193,7 @@ impl StateSync {

fn get_latest_block_number(&self) -> StateSyncResult<Option<BlockNumber>> {
let txn = self.storage_reader.begin_ro_txn()?;
let latest_block_number = txn.get_state_marker()?.prev();
let latest_block_number = latest_synced_block(&txn)?;
Ok(latest_block_number)
}
}
Expand All @@ -200,7 +202,7 @@ fn verify_synced_up_to<Mode: TransactionKind>(
txn: &StorageTxn<'_, Mode>,
block_number: BlockNumber,
) -> Result<(), StateSyncError> {
if let Some(latest_block_number) = txn.get_state_marker()?.prev() {
if let Some(latest_block_number) = latest_synced_block(txn)? {
if latest_block_number >= block_number {
return Ok(());
}
Expand All @@ -209,6 +211,22 @@ fn verify_synced_up_to<Mode: TransactionKind>(
Err(StateSyncError::BlockNotFound(block_number))
}

fn latest_synced_block<Mode: TransactionKind>(
txn: &StorageTxn<'_, Mode>,
) -> StateSyncResult<Option<BlockNumber>> {
let latest_state_block_number = txn.get_state_marker()?.prev();
if latest_state_block_number.is_none() {
return Ok(None);
}

let latest_transaction_block_number = txn.get_body_marker()?.prev();
if latest_transaction_block_number.is_none() {
return Ok(None);
}

Ok(min(latest_state_block_number, latest_transaction_block_number))
}

fn verify_contract_deployed<Mode: TransactionKind>(
state_reader: &StateReader<'_, Mode>,
state_number: StateNumber,
Expand Down
10 changes: 10 additions & 0 deletions crates/starknet_state_sync/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ async fn test_get_storage_at() {
.unwrap()
.append_state_diff(header.block_header_without_hash.block_number, diff.clone())
.unwrap()
.append_body(header.block_header_without_hash.block_number, Default::default())
.unwrap()
.commit()
.unwrap();

Expand Down Expand Up @@ -125,6 +127,8 @@ async fn test_get_nonce_at() {
.unwrap()
.append_state_diff(header.block_header_without_hash.block_number, diff.clone())
.unwrap()
.append_body(header.block_header_without_hash.block_number, Default::default())
.unwrap()
.commit()
.unwrap();

Expand Down Expand Up @@ -161,6 +165,8 @@ async fn get_class_hash_at() {
.unwrap()
.append_state_diff(header.block_header_without_hash.block_number, diff.clone())
.unwrap()
.append_body(header.block_header_without_hash.block_number, Default::default())
.unwrap()
.commit()
.unwrap();

Expand Down Expand Up @@ -214,6 +220,8 @@ async fn test_get_compiled_class_deprecated() {
&[(cairo0_class_hash, &cairo0_contract_class)],
)
.unwrap()
.append_body(block_number, Default::default())
.unwrap()
.commit()
.unwrap();

Expand Down Expand Up @@ -323,6 +331,8 @@ async fn test_contract_not_found() {
.unwrap()
.append_state_diff(header.block_header_without_hash.block_number, diff)
.unwrap()
.append_body(header.block_header_without_hash.block_number, Default::default())
.unwrap()
.commit()
.unwrap();

Expand Down

0 comments on commit 3104720

Please sign in to comment.