@@ -8,7 +8,7 @@ use starknet_api::block::BlockNumber;
88use starknet_api:: core:: { ClassHash , ContractAddress , Nonce } ;
99use starknet_api:: deprecated_contract_class:: ContractClass as DeprecatedContractClass ;
1010use starknet_api:: hash:: StarkHash ;
11- use starknet_api:: state:: { SierraContractClass , StateNumber , ThinStateDiff } ;
11+ use starknet_api:: state:: { SierraContractClass , StateNumber , StorageKey , ThinStateDiff } ;
1212use starknet_api:: { class_hash, compiled_class_hash, contract_address, felt, storage_key} ;
1313use starknet_types_core:: felt:: Felt ;
1414
@@ -1062,3 +1062,37 @@ scan_cases!(
10621062 ) ;
10631063 }
10641064) ;
1065+
1066+ scan_cases ! (
1067+ key_macro = storage_key,
1068+ value_macro = felt,
1069+ fn test_scan_storage_keys_for_contract(
1070+ #[ case] start: StorageKey ,
1071+ #[ case] end: StorageKey ,
1072+ #[ case] synced_block: BlockNumber ,
1073+ #[ case] limit: usize ,
1074+ #[ case] expected: Vec <( StorageKey , Felt ) >,
1075+ ) {
1076+ let addr = contract_address!( "0x1" ) ;
1077+ let ( ( reader, mut writer) , _temp_dir) = get_test_storage( ) ;
1078+ write_two_block_state_diffs(
1079+ & mut writer,
1080+ ThinStateDiff {
1081+ storage_diffs: IndexMap :: from( [ ( addr, block_0_entries!( ) ) ] ) ,
1082+ ..Default :: default ( )
1083+ } ,
1084+ ThinStateDiff {
1085+ storage_diffs: IndexMap :: from( [ ( addr, block_1_entries!( ) ) ] ) ,
1086+ ..Default :: default ( )
1087+ } ,
1088+ ) ;
1089+ let txn = reader. begin_ro_txn( ) . unwrap( ) ;
1090+ let state_reader = txn. get_state_reader( ) . unwrap( ) ;
1091+ assert_eq!(
1092+ state_reader
1093+ . scan_storage_keys_for_contract( addr, start, end, synced_block, limit)
1094+ . unwrap( ) ,
1095+ expected,
1096+ ) ;
1097+ }
1098+ ) ;
0 commit comments