Skip to content

Commit 67d1e33

Browse files
starknet_os_flow_tests: migrate test_data_gas_accounts
1 parent 45d738b commit 67d1e33

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

crates/starknet_os_flow_tests/src/special_contracts.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ pub(crate) static V1_BOUND_CAIRO1_CONTRACT_CASM: LazyLock<CasmContractClass> =
2323
.unwrap()
2424
});
2525

26-
#[allow(dead_code)]
2726
pub(crate) static DATA_GAS_ACCOUNT_CONTRACT_SIERRA: LazyLock<SierraContractClass> =
2827
LazyLock::new(|| {
2928
let compiler_contract_class: cairo_lang_starknet_classes::contract_class::ContractClass =
@@ -32,7 +31,6 @@ pub(crate) static DATA_GAS_ACCOUNT_CONTRACT_SIERRA: LazyLock<SierraContractClass
3231
SierraContractClass::from(compiler_contract_class)
3332
});
3433

35-
#[allow(dead_code)]
3634
pub(crate) static DATA_GAS_ACCOUNT_CONTRACT_CASM: LazyLock<CasmContractClass> =
3735
LazyLock::new(|| {
3836
serde_json::from_str(include_str!("../resources/data_gas_account.casm.json")).unwrap()

crates/starknet_os_flow_tests/src/tests.rs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::collections::{HashMap, HashSet};
22
use std::sync::{Arc, LazyLock};
33

4+
use assert_matches::assert_matches;
45
use blockifier::abi::constants::STORED_BLOCK_HASH_BUFFER;
56
use blockifier::blockifier_versioned_constants::VersionedConstants;
67
use blockifier::test_utils::contracts::FeatureContractTrait;
@@ -90,6 +91,8 @@ use crate::initial_state::{
9091
get_deploy_contract_tx_and_address_with_salt,
9192
};
9293
use crate::special_contracts::{
94+
DATA_GAS_ACCOUNT_CONTRACT_CASM,
95+
DATA_GAS_ACCOUNT_CONTRACT_SIERRA,
9396
V1_BOUND_CAIRO0_CONTRACT,
9497
V1_BOUND_CAIRO1_CONTRACT_CASM,
9598
V1_BOUND_CAIRO1_CONTRACT_SIERRA,
@@ -2326,3 +2329,66 @@ async fn test_resources_type() {
23262329
test_output.assert_storage_diff_eq(cairo_steps_contract_address, HashMap::default());
23272330
test_output.assert_storage_diff_eq(sierra_gas_contract_address, expected_storage_updates);
23282331
}
2332+
2333+
/// Runs the OS test for data gas Cairo1 accounts.
2334+
#[rstest]
2335+
#[tokio::test]
2336+
async fn test_data_gas_accounts() {
2337+
let test_contract_sierra = &DATA_GAS_ACCOUNT_CONTRACT_SIERRA;
2338+
let test_contract_casm = &DATA_GAS_ACCOUNT_CONTRACT_CASM;
2339+
let class_hash = test_contract_sierra.calculate_class_hash();
2340+
let compiled_class_hash = test_contract_casm.hash(&HashVersion::V2);
2341+
assert!(
2342+
VersionedConstants::latest_constants().os_constants.data_gas_accounts.contains(&class_hash)
2343+
);
2344+
let (mut test_manager, _) =
2345+
TestManager::<DictStateReader>::new_with_default_initial_state([]).await;
2346+
2347+
// Declare the data gas account.
2348+
let declare_args = declare_tx_args! {
2349+
sender_address: *FUNDED_ACCOUNT_ADDRESS,
2350+
nonce: test_manager.next_nonce(*FUNDED_ACCOUNT_ADDRESS),
2351+
class_hash,
2352+
compiled_class_hash,
2353+
resource_bounds: *NON_TRIVIAL_RESOURCE_BOUNDS,
2354+
};
2355+
let account_declare_tx = declare_tx(declare_args);
2356+
let sierra_version = test_contract_sierra.get_sierra_version().unwrap();
2357+
let class_info = ClassInfo {
2358+
contract_class: ContractClass::V1(((**test_contract_casm).clone(), sierra_version.clone())),
2359+
sierra_program_length: test_contract_sierra.sierra_program.len(),
2360+
abi_length: test_contract_sierra.abi.len(),
2361+
sierra_version,
2362+
};
2363+
let tx =
2364+
DeclareTransaction::create(account_declare_tx, class_info, &CHAIN_ID_FOR_TESTS).unwrap();
2365+
test_manager.add_cairo1_declare_tx(tx, test_contract_sierra);
2366+
2367+
// Deploy it (from funded account).
2368+
let salt = ContractAddressSalt(Felt::ZERO);
2369+
let (deploy_tx, data_gas_account_address) = get_deploy_contract_tx_and_address_with_salt(
2370+
class_hash,
2371+
calldata![],
2372+
test_manager.next_nonce(*FUNDED_ACCOUNT_ADDRESS),
2373+
*NON_TRIVIAL_RESOURCE_BOUNDS,
2374+
salt,
2375+
);
2376+
test_manager.add_invoke_tx(deploy_tx, None);
2377+
2378+
// Create and run an invoke tx.
2379+
let invoke_args = invoke_tx_args! {
2380+
sender_address: *FUNDED_ACCOUNT_ADDRESS,
2381+
nonce: test_manager.next_nonce(*FUNDED_ACCOUNT_ADDRESS),
2382+
calldata: create_calldata(data_gas_account_address, "test_resource_bounds", &[]),
2383+
resource_bounds: *NON_TRIVIAL_RESOURCE_BOUNDS,
2384+
};
2385+
let tx = InvokeTransaction::create(invoke_tx(invoke_args), &CHAIN_ID_FOR_TESTS).unwrap();
2386+
assert_eq!(tx.version(), TransactionVersion::THREE);
2387+
assert_matches!(tx.resource_bounds(), ValidResourceBounds::AllResources(_));
2388+
test_manager.add_invoke_tx(tx, None);
2389+
2390+
// Run test.
2391+
let test_output =
2392+
test_manager.execute_test_with_default_block_contexts(&TestParameters::default()).await;
2393+
test_output.perform_default_validations();
2394+
}

0 commit comments

Comments
 (0)