Skip to content

Commit 47c7439

Browse files
committed
apollo_central_sync: use starknet version table to determine if class is bc
1 parent aef45c2 commit 47c7439

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

crates/apollo_central_sync/src/sources/central/state_update_stream.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use apollo_starknet_client::reader::{
99
StarknetReader,
1010
StateUpdate,
1111
};
12-
use apollo_storage::class_manager::ClassManagerStorageReader;
12+
use apollo_storage::header::HeaderStorageReader;
1313
use apollo_storage::state::StateStorageReader;
1414
use apollo_storage::StorageReader;
1515
use cairo_lang_starknet_classes::casm_contract_class::CasmContractClass;
@@ -382,8 +382,9 @@ async fn download_class_if_necessary<TStarknetClient: StarknetReader>(
382382
let txn = storage_reader.begin_ro_txn()?;
383383
let state_reader = txn.get_state_reader()?;
384384
let state_number = StateNumber::unchecked_right_after_block(block_number);
385-
let compiler_backward_compatibility_marker =
386-
txn.get_compiler_backward_compatibility_marker()?;
385+
let starknet_version = txn
386+
.get_starknet_version(block_number)?
387+
.expect("State sync should only process blocks with existing headers.");
387388

388389
// Check declared classes.
389390
if let Ok(Some(class)) = state_reader.get_class_definition_at(state_number, &class_hash) {
@@ -424,7 +425,7 @@ async fn download_class_if_necessary<TStarknetClient: StarknetReader>(
424425
Ok((Some(ApiContractClass::DeprecatedContractClass(class)), None))
425426
}
426427
GenericContractClass::Cairo1ContractClass(class) => {
427-
let casm = if compiler_backward_compatibility_marker > block_number {
428+
let casm = if starknet_version < crate::STARKNET_VERSION_TO_COMPILE_FROM {
428429
apollo_starknet_client
429430
.compiled_class_by_hash(class_hash)
430431
.await

crates/apollo_central_sync/src/sources/central_test.rs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use apollo_starknet_client::reader::{
1616
StorageEntry,
1717
};
1818
use apollo_starknet_client::ClientError;
19-
use apollo_storage::class_manager::ClassManagerStorageWriter;
19+
use apollo_storage::header::HeaderStorageWriter;
2020
use apollo_storage::test_utils::get_test_storage;
2121
use apollo_test_utils::{get_rng, GetTestInstance};
2222
use assert_matches::assert_matches;
@@ -28,7 +28,14 @@ use mockall::predicate;
2828
use papyrus_common::state::MigratedCompiledClassHashEntry;
2929
use pretty_assertions::assert_eq;
3030
use reqwest::StatusCode;
31-
use starknet_api::block::{BlockHash, BlockHashAndNumber, BlockNumber};
31+
use starknet_api::block::{
32+
BlockHash,
33+
BlockHashAndNumber,
34+
BlockHeader,
35+
BlockHeaderWithoutHash,
36+
BlockNumber,
37+
StarknetVersion,
38+
};
3239
use starknet_api::core::{ClassHash, CompiledClassHash, GlobalRoot, Nonce, SequencerPublicKey};
3340
use starknet_api::crypto::utils::PublicKey;
3441
use starknet_api::deprecated_contract_class::ContractClass as DeprecatedContractClass;
@@ -40,6 +47,7 @@ use tokio_stream::StreamExt;
4047
use super::state_update_stream::StateUpdateStreamConfig;
4148
use super::ApiContractClass;
4249
use crate::sources::central::{CentralError, CentralSourceTrait, GenericCentralSource};
50+
use crate::STARKNET_VERSION_TO_COMPILE_FROM;
4351

4452
const TEST_CONCURRENT_REQUESTS: usize = 300;
4553

@@ -395,13 +403,26 @@ async fn stream_state_updates() {
395403
Ok(Some(GenericContractClass::Cairo0ContractClass(contract_class3_clone.clone())))
396404
});
397405
let ((reader, mut writer), _temp_dir) = get_test_storage();
398-
writer
399-
.begin_rw_txn()
400-
.unwrap()
401-
.update_compiler_backward_compatibility_marker(&FIRST_BACKWARD_COMPATIBLE_BLOCK_NUMBER)
402-
.unwrap()
403-
.commit()
404-
.unwrap();
406+
let mut txn = writer.begin_rw_txn().unwrap();
407+
for block_number in 0..END_BLOCK_NUMBER {
408+
let block_number = BlockNumber(block_number);
409+
let starknet_version = if block_number < FIRST_BACKWARD_COMPATIBLE_BLOCK_NUMBER {
410+
StarknetVersion::PreV0_9_1
411+
} else {
412+
STARKNET_VERSION_TO_COMPILE_FROM
413+
};
414+
let header = BlockHeader {
415+
block_hash: BlockHash(StarkHash::from(block_number.0 + 1)),
416+
block_header_without_hash: BlockHeaderWithoutHash {
417+
block_number,
418+
starknet_version,
419+
..Default::default()
420+
},
421+
..Default::default()
422+
};
423+
txn = txn.append_header(block_number, &header).unwrap();
424+
}
425+
txn.commit().unwrap();
405426
let mut state_update_stream_config = state_update_stream_config_for_test();
406427
// Ensure all state updates can be scheduled together.
407428
state_update_stream_config.max_state_updates_to_download =

0 commit comments

Comments
 (0)