Skip to content

Commit 3f4cacd

Browse files
blockifier: create runnable compiled class for testing instance (#10435)
1 parent 65a38ad commit 3f4cacd

File tree

7 files changed

+85
-70
lines changed

7 files changed

+85
-70
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/apollo_gateway/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ blockifier.workspace = true
3535
blockifier_test_utils = { workspace = true, optional = true }
3636
cairo-lang-starknet-classes.workspace = true
3737
clap.workspace = true
38-
lazy_static.workspace = true
3938
mempool_test_utils.workspace = true
4039
num-rational.workspace = true
4140
reqwest.workspace = true

crates/apollo_gateway/src/state_reader_test.rs

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::sync::Arc;
1+
use std::sync::{Arc, LazyLock};
22

33
use apollo_class_manager_types::{
44
ClassManagerClientResult,
@@ -21,7 +21,6 @@ use blockifier::state::state_api::{StateReader, StateResult};
2121
use blockifier::state::state_api_test_utils::assert_eq_state_result;
2222
use blockifier::state::state_reader_and_contract_manager::StateReaderAndContractManager;
2323
use blockifier::test_utils::initial_test_state::state_reader_and_contract_manager_for_testing;
24-
use lazy_static::lazy_static;
2524
use mockall::predicate;
2625
use rstest::rstest;
2726
use starknet_api::block::{
@@ -43,6 +42,8 @@ use starknet_api::{class_hash, contract_address, felt, nonce, storage_key};
4342
use crate::state_reader::{GatewayStateReaderWithCompiledClasses, MempoolStateReader};
4443
use crate::sync_state_reader::SyncStateReader;
4544

45+
static DUMMY_CLASS_HASH: LazyLock<ClassHash> = LazyLock::new(|| class_hash!(2_u32));
46+
4647
fn sync_state_reader_and_contract_manager(
4748
state_sync_client: SharedStateSyncClient,
4849
class_manager_client: SharedClassManagerClient,
@@ -150,28 +151,28 @@ const CACHED_EXPECTATION: GetCompiledClassTestExpectation = GetCompiledClassTest
150151
fn cairo_1_declared_scenario() -> GetCompiledClassTestScenario {
151152
GetCompiledClassTestScenario {
152153
expectations: GetCompiledClassTestExpectation {
153-
get_executable_result: Ok(Some(DUMMY_CONTRACT_CLASS.clone())),
154+
get_executable_result: Ok(Some(ContractClass::test_casm_contract_class())),
154155
n_calls_to_get_executable: 1,
155156
get_sierra_result: Ok(Some(SierraContractClass::default())),
156157
n_calls_to_get_sierra: 1,
157158
is_class_declared_at_result: Some(Ok(true)),
158159
is_cairo_1_class_declared_at_result: None,
159160
},
160-
expected_result: Ok(DUMMY_COMPILED_CLASS.clone()),
161+
expected_result: Ok(RunnableCompiledClass::test_casm_contract_class()),
161162
}
162163
}
163164

164165
fn cairo_0_declared_scenario() -> GetCompiledClassTestScenario {
165166
GetCompiledClassTestScenario {
166167
expectations: GetCompiledClassTestExpectation {
167-
get_executable_result: Ok(Some(DUMMY_CONTRACT_CLASS_V0.clone())),
168+
get_executable_result: Ok(Some(ContractClass::test_deprecated_casm_contract_class())),
168169
n_calls_to_get_executable: 1,
169170
get_sierra_result: Ok(None), // Cairo 0 doesn't use Sierra.
170171
n_calls_to_get_sierra: 0,
171172
is_class_declared_at_result: Some(Ok(true)),
172173
is_cairo_1_class_declared_at_result: None,
173174
},
174-
expected_result: Ok(DUMMY_COMPILED_CLASS_V0.clone()),
175+
expected_result: Ok(RunnableCompiledClass::test_deprecated_casm_contract_class()),
175176
}
176177
}
177178

@@ -195,7 +196,7 @@ fn cached_cairo_1_declared_scenario() -> GetCompiledClassTestScenario {
195196
is_cairo_1_class_declared_at_result: Some(Ok(true)), // Verification call.
196197
..CACHED_EXPECTATION
197198
},
198-
expected_result: Ok(DUMMY_COMPILED_CLASS.clone()),
199+
expected_result: Ok(RunnableCompiledClass::test_casm_contract_class()),
199200
}
200201
}
201202

@@ -205,7 +206,7 @@ fn cached_cairo_0_declared_scenario() -> GetCompiledClassTestScenario {
205206
is_cairo_1_class_declared_at_result: None, // Not called for Cairo 0.
206207
..CACHED_EXPECTATION
207208
},
208-
expected_result: Ok(DUMMY_COMPILED_CLASS_V0.clone()),
209+
expected_result: Ok(RunnableCompiledClass::test_deprecated_casm_contract_class()),
209210
}
210211
}
211212

@@ -222,8 +223,8 @@ fn cached_but_verification_failed_after_reorg_scenario() -> GetCompiledClassTest
222223
fn not_declared_but_in_manager_scenario() -> GetCompiledClassTestScenario {
223224
GetCompiledClassTestScenario {
224225
expectations: GetCompiledClassTestExpectation {
225-
get_executable_result: Ok(Some(DUMMY_CONTRACT_CLASS.clone())), /* In manager but not
226-
* declared. */
226+
get_executable_result: Ok(Some(ContractClass::test_casm_contract_class())), /* In manager but not
227+
* declared. */
227228
n_calls_to_get_executable: 0, // Not called since not declared.
228229
get_sierra_result: Ok(Some(SierraContractClass::default())),
229230
n_calls_to_get_sierra: 0, // Not called since not declared.
@@ -420,17 +421,6 @@ async fn test_get_class_hash_at() {
420421
assert_eq!(result, expected_result);
421422
}
422423

423-
lazy_static! {
424-
static ref DUMMY_CLASS_HASH: ClassHash = class_hash!("0x2");
425-
static ref DUMMY_CONTRACT_CLASS: ContractClass = ContractClass::test_casm_contract_class();
426-
static ref DUMMY_CONTRACT_CLASS_V0: ContractClass =
427-
ContractClass::test_deprecated_casm_contract_class();
428-
static ref DUMMY_COMPILED_CLASS: RunnableCompiledClass =
429-
DUMMY_CONTRACT_CLASS.clone().try_into().unwrap();
430-
static ref DUMMY_COMPILED_CLASS_V0: RunnableCompiledClass =
431-
DUMMY_CONTRACT_CLASS_V0.clone().try_into().unwrap();
432-
}
433-
434424
// TODO(Arni): Check if any test cases here should move to the tests of
435425
// `StateReaderAndContractManager`.
436426
#[rstest]

crates/apollo_gateway/src/sync_state_reader_test.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::sync::Arc;
1+
use std::sync::{Arc, LazyLock};
22

33
use apollo_class_manager_types::{
44
ClassManagerClientResult,
@@ -12,7 +12,6 @@ use blockifier::execution::contract_class::RunnableCompiledClass;
1212
use blockifier::state::errors::StateError;
1313
use blockifier::state::state_api::{StateReader, StateResult};
1414
use blockifier::state::state_api_test_utils::assert_eq_state_result;
15-
use lazy_static::lazy_static;
1615
use mockall::predicate;
1716
use rstest::rstest;
1817
use starknet_api::block::{
@@ -33,6 +32,8 @@ use starknet_api::{class_hash, contract_address, felt, nonce, storage_key};
3332
use crate::state_reader::MempoolStateReader;
3433
use crate::sync_state_reader::SyncStateReader;
3534

35+
static DUMMY_CLASS_HASH: LazyLock<ClassHash> = LazyLock::new(|| class_hash!(2_u32));
36+
3637
#[tokio::test]
3738
async fn test_get_block_info() {
3839
let mut mock_state_sync_client = MockStateSyncClient::new();
@@ -196,21 +197,16 @@ async fn test_get_class_hash_at() {
196197
assert_eq!(result, expected_result);
197198
}
198199

199-
lazy_static! {
200-
static ref DUMMY_CLASS_HASH: ClassHash = class_hash!("0x2");
201-
static ref DUMMY_CONTRACT_CLASS: ContractClass = ContractClass::test_casm_contract_class();
202-
}
203-
204200
#[rstest]
205201
#[case::class_declared(
206-
Ok(Some(DUMMY_CONTRACT_CLASS.clone())),
202+
Ok(Some(ContractClass::test_casm_contract_class())),
207203
1,
208204
Ok(true),
209-
Ok(DUMMY_CONTRACT_CLASS.clone().try_into().unwrap()),
205+
Ok(RunnableCompiledClass::test_casm_contract_class()),
210206
*DUMMY_CLASS_HASH,
211207
)]
212208
#[case::class_not_declared_but_in_class_manager(
213-
Ok(Some(DUMMY_CONTRACT_CLASS.clone())),
209+
Ok(Some(ContractClass::test_casm_contract_class())),
214210
0,
215211
Ok(false),
216212
Err(StateError::UndeclaredClassHash(*DUMMY_CLASS_HASH)),

crates/blockifier/src/test_utils.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub mod contracts;
22
pub mod dict_state_reader;
3+
pub mod execution;
34
pub mod initial_test_state;
45
pub mod l1_handler;
56
pub mod prices;
@@ -8,6 +9,7 @@ pub mod syscall;
89
#[cfg(test)]
910
pub mod test_templates;
1011
pub mod transfers_generator;
12+
1113
use std::collections::HashMap;
1214
use std::slice::Iter;
1315
use std::sync::LazyLock;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use std::sync::LazyLock;
2+
3+
use starknet_api::contract_class::ContractClass;
4+
5+
use crate::execution::contract_class::RunnableCompiledClass;
6+
7+
static TEST_CASM_CONTRACT_CLASS: LazyLock<RunnableCompiledClass> =
8+
LazyLock::new(|| ContractClass::test_casm_contract_class().try_into().unwrap());
9+
10+
static TEST_DEPRECATED_CASM_CONTRACT_CLASS: LazyLock<RunnableCompiledClass> =
11+
LazyLock::new(|| ContractClass::test_deprecated_casm_contract_class().try_into().unwrap());
12+
13+
impl RunnableCompiledClass {
14+
pub fn test_casm_contract_class() -> Self {
15+
TEST_CASM_CONTRACT_CLASS.clone()
16+
}
17+
18+
pub fn test_deprecated_casm_contract_class() -> Self {
19+
TEST_DEPRECATED_CASM_CONTRACT_CLASS.clone()
20+
}
21+
}

crates/starknet_api/src/test_utils.rs

Lines changed: 45 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -234,47 +234,55 @@ pub trait TestingTxArgs {
234234
fn get_executable_tx(&self) -> AccountTransaction;
235235
}
236236

237+
static TEST_CASM_CONTRACT_CLASS: LazyLock<ContractClass> = LazyLock::new(|| {
238+
let default_casm = CasmContractClass {
239+
prime: Default::default(),
240+
compiler_version: Default::default(),
241+
bytecode: vec![
242+
BigUintAsHex { value: BigUint::from(1_u8) },
243+
BigUintAsHex { value: BigUint::from(1_u8) },
244+
BigUintAsHex { value: BigUint::from(1_u8) },
245+
],
246+
bytecode_segment_lengths: Default::default(),
247+
hints: Default::default(),
248+
pythonic_hints: Default::default(),
249+
entry_points_by_type: Default::default(),
250+
};
251+
ContractClass::V1((default_casm, SierraVersion::default()))
252+
});
253+
254+
static TEST_DEPRECATED_CASM_CONTRACT_CLASS: LazyLock<ContractClass> = LazyLock::new(|| {
255+
let default_deprecated_casm = DeprecatedContractClass {
256+
abi: None,
257+
program: Program {
258+
attributes: serde_json::Value::Null,
259+
builtins: serde_json::Value::Array(vec![]),
260+
compiler_version: serde_json::Value::Null,
261+
data: serde_json::Value::Array(vec![]),
262+
debug_info: serde_json::Value::Null,
263+
hints: serde_json::Value::Object(serde_json::Map::new()),
264+
identifiers: serde_json::Value::Object(serde_json::Map::new()),
265+
main_scope: serde_json::Value::String("__main__".to_string()),
266+
prime: serde_json::Value::String(
267+
"0x800000000000011000000000000000000000000000000000000000000000001".to_string(),
268+
),
269+
reference_manager: serde_json::Value::Object({
270+
let mut map = serde_json::Map::new();
271+
map.insert("references".to_string(), serde_json::Value::Array(vec![]));
272+
map
273+
}),
274+
},
275+
entry_points_by_type: Default::default(),
276+
};
277+
ContractClass::V0(default_deprecated_casm)
278+
});
279+
237280
impl ContractClass {
238281
pub fn test_casm_contract_class() -> Self {
239-
let default_casm = CasmContractClass {
240-
prime: Default::default(),
241-
compiler_version: Default::default(),
242-
bytecode: vec![
243-
BigUintAsHex { value: BigUint::from(1_u8) },
244-
BigUintAsHex { value: BigUint::from(1_u8) },
245-
BigUintAsHex { value: BigUint::from(1_u8) },
246-
],
247-
bytecode_segment_lengths: Default::default(),
248-
hints: Default::default(),
249-
pythonic_hints: Default::default(),
250-
entry_points_by_type: Default::default(),
251-
};
252-
ContractClass::V1((default_casm, SierraVersion::default()))
282+
TEST_CASM_CONTRACT_CLASS.clone()
253283
}
254284

255285
pub fn test_deprecated_casm_contract_class() -> Self {
256-
let default_deprecated_casm = DeprecatedContractClass {
257-
abi: None,
258-
program: Program {
259-
attributes: serde_json::Value::Null,
260-
builtins: serde_json::Value::Array(vec![]),
261-
compiler_version: serde_json::Value::Null,
262-
data: serde_json::Value::Array(vec![]),
263-
debug_info: serde_json::Value::Null,
264-
hints: serde_json::Value::Object(serde_json::Map::new()),
265-
identifiers: serde_json::Value::Object(serde_json::Map::new()),
266-
main_scope: serde_json::Value::String("__main__".to_string()),
267-
prime: serde_json::Value::String(
268-
"0x800000000000011000000000000000000000000000000000000000000000001".to_string(),
269-
),
270-
reference_manager: serde_json::Value::Object({
271-
let mut map = serde_json::Map::new();
272-
map.insert("references".to_string(), serde_json::Value::Array(vec![]));
273-
map
274-
}),
275-
},
276-
entry_points_by_type: Default::default(),
277-
};
278-
ContractClass::V0(default_deprecated_casm)
286+
TEST_DEPRECATED_CASM_CONTRACT_CLASS.clone()
279287
}
280288
}

0 commit comments

Comments
 (0)