Skip to content

Commit

Permalink
feat(starknet_state_sync): implement sync state reader get nonce at
Browse files Browse the repository at this point in the history
  • Loading branch information
noamsp-starkware committed Dec 19, 2024
1 parent cbd9226 commit 954e82f
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 5 deletions.
7 changes: 5 additions & 2 deletions crates/starknet_gateway/src/sync_state_reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,11 @@ impl BlockifierStateReader for SyncStateReader {
Ok(res.unwrap_or_default())
}

fn get_nonce_at(&self, _contract_address: ContractAddress) -> StateResult<Nonce> {
todo!()
fn get_nonce_at(&self, contract_address: ContractAddress) -> StateResult<Nonce> {
let res =
block_on(self.state_sync_client.get_nonce_at(self.block_number, contract_address))?;

Ok(res.unwrap_or_default())
}

fn get_compiled_class(&self, _class_hash: ClassHash) -> StateResult<RunnableCompiledClass> {
Expand Down
22 changes: 21 additions & 1 deletion crates/starknet_state_sync/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use papyrus_storage::db::TransactionKind;
use papyrus_storage::state::StateStorageReader;
use papyrus_storage::{StorageReader, StorageTxn};
use starknet_api::block::BlockNumber;
use starknet_api::core::{ContractAddress, BLOCK_HASH_TABLE_ADDRESS};
use starknet_api::core::{ContractAddress, Nonce, BLOCK_HASH_TABLE_ADDRESS};
use starknet_api::state::{StateNumber, StorageKey};
use starknet_sequencer_infra::component_definitions::{ComponentRequestHandler, ComponentStarter};
use starknet_sequencer_infra::component_server::{LocalComponentServer, RemoteComponentServer};
Expand Down Expand Up @@ -51,6 +51,9 @@ impl ComponentRequestHandler<StateSyncRequest, StateSyncResponse> for StateSync
storage_key,
))
}
StateSyncRequest::GetNonceAt(block_number, contract_address) => {
StateSyncResponse::GetNonceAt(self.get_nonce_at(block_number, contract_address))
}
}
}
}
Expand Down Expand Up @@ -97,6 +100,23 @@ impl StateSync {

Ok(Some(res))
}

fn get_nonce_at(
&self,
block_number: BlockNumber,
contract_address: ContractAddress,
) -> StateSyncResult<Option<Nonce>> {
let txn = self.storage_reader.begin_ro_txn()?;
verify_block_number(&txn, block_number)?;

let state_number = StateNumber::unchecked_right_after_block(block_number);
let state_reader = txn.get_state_reader()?;
let res = state_reader
.get_nonce_at(state_number, &contract_address)?
.ok_or(StateSyncError::ContractAddressNotFoundError(contract_address))?;

Ok(Some(res))
}
}

fn verify_block_number<Mode: TransactionKind>(
Expand Down
41 changes: 39 additions & 2 deletions crates/starknet_state_sync_types/src/communication.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use async_trait::async_trait;
use papyrus_proc_macros::handle_response_variants;
use serde::{Deserialize, Serialize};
use starknet_api::block::BlockNumber;
use starknet_api::core::ContractAddress;
use starknet_api::core::{ContractAddress, Nonce};
use starknet_api::state::StorageKey;
use starknet_sequencer_infra::component_client::{
ClientError,
Expand Down Expand Up @@ -44,7 +44,12 @@ pub trait StateSyncClient: Send + Sync {
storage_key: StorageKey,
) -> StateSyncClientResult<Option<Felt>>;

// TODO: Add get_nonce_at for StateSyncReader
async fn get_nonce_at(
&self,
block_number: BlockNumber,
contract_address: ContractAddress,
) -> StateSyncClientResult<Option<Nonce>>;

// TODO: Add get_compiled_class for StateSyncReader
// TODO: Add get_class_hash_at for StateSyncReader
// TODO: Add get_compiled_class_hash for StateSyncReader
Expand Down Expand Up @@ -73,13 +78,15 @@ pub enum StateSyncRequest {
GetBlock(BlockNumber),
AddNewBlock(BlockNumber, SyncBlock),
GetStorageAt(BlockNumber, ContractAddress, StorageKey),
GetNonceAt(BlockNumber, ContractAddress),
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum StateSyncResponse {
GetBlock(StateSyncResult<Option<SyncBlock>>),
AddNewBlock(StateSyncResult<()>),
GetStorageAt(StateSyncResult<Option<Felt>>),
GetNonceAt(StateSyncResult<Option<Nonce>>),
}

#[async_trait]
Expand Down Expand Up @@ -123,6 +130,21 @@ impl StateSyncClient for LocalStateSyncClient {
StateSyncError
)
}

async fn get_nonce_at(
&self,
block_number: BlockNumber,
contract_address: ContractAddress,
) -> StateSyncClientResult<Option<Nonce>> {
let request = StateSyncRequest::GetNonceAt(block_number, contract_address);
let response = self.send(request).await;
handle_response_variants!(
StateSyncResponse,
GetNonceAt,
StateSyncClientError,
StateSyncError
)
}
}

#[async_trait]
Expand Down Expand Up @@ -166,4 +188,19 @@ impl StateSyncClient for RemoteStateSyncClient {
StateSyncError
)
}

async fn get_nonce_at(
&self,
block_number: BlockNumber,
contract_address: ContractAddress,
) -> StateSyncClientResult<Option<Nonce>> {
let request = StateSyncRequest::GetNonceAt(block_number, contract_address);
let response = self.send(request).await;
handle_response_variants!(
StateSyncResponse,
GetNonceAt,
StateSyncClientError,
StateSyncError
)
}
}

0 comments on commit 954e82f

Please sign in to comment.