Skip to content

Commit 2933b90

Browse files
apollo_storage: implement contract storage query in storage reader (#11225)
1 parent ee7eff7 commit 2933b90

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

crates/apollo_storage/src/state/mod.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,27 @@ impl<'env, Mode: TransactionKind> StateReader<'env, Mode> {
352352
}
353353
}
354354

355+
/// Returns the storage value for a given contract address, storage key, and block number using
356+
/// direct key-value lookup.
357+
///
358+
/// # Arguments
359+
/// * address - contract address to search for.
360+
/// * key - storage key to search for.
361+
/// * block_number - block number to search at.
362+
///
363+
/// # Errors
364+
/// Returns [`StorageError`] if there was an error searching the table.
365+
pub fn get_storage_by_key(
366+
&self,
367+
address: ContractAddress,
368+
key: StorageKey,
369+
block_number: BlockNumber,
370+
) -> StorageResult<Option<Felt>> {
371+
let db_key = ((address, key), block_number);
372+
let value = self.storage_table.get(self.txn, &db_key)?;
373+
Ok(value)
374+
}
375+
355376
/// Returns the class definition at a given state number.
356377
///
357378
/// If class_hash is not found, returns `None`.

crates/apollo_storage/src/storage_reader_types.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ impl StorageReaderServerHandler<StorageReaderRequest, StorageReaderResponse>
176176
request: StorageReaderRequest,
177177
) -> Result<StorageReaderResponse, StorageError> {
178178
let txn = storage_reader.begin_ro_txn()?;
179+
let state_reader = txn.get_state_reader()?;
179180
match request {
180181
// ============ State-Related Requests ============
181182
StorageReaderRequest::StateDiffsLocation(block_number) => {
@@ -190,8 +191,11 @@ impl StorageReaderServerHandler<StorageReaderRequest, StorageReaderResponse>
190191
let state_diff = txn.get_state_diff_from_location(location)?;
191192
Ok(StorageReaderResponse::StateDiffsFromLocation(state_diff))
192193
}
193-
StorageReaderRequest::ContractStorage(_key, _block_number) => {
194-
unimplemented!()
194+
StorageReaderRequest::ContractStorage((address, key), block_number) => {
195+
let value = state_reader
196+
.get_storage_by_key(address, key, block_number)?
197+
.unwrap_or_default();
198+
Ok(StorageReaderResponse::ContractStorage(value))
195199
}
196200
StorageReaderRequest::Nonces(_address, _block_number) => {
197201
unimplemented!()

0 commit comments

Comments
 (0)