Skip to content

Commit 3d7c600

Browse files
apollo_gateway: split instantiate_validator
1 parent 6f8b1a1 commit 3d7c600

File tree

3 files changed

+35
-12
lines changed

3 files changed

+35
-12
lines changed

crates/apollo_gateway/src/gateway.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,8 @@ impl ProcessTxBlockingTask {
257257

258258
fn process_tx(self) -> GatewayResult<Nonce> {
259259
let mut stateful_transaction_validator = self.runtime.block_on(
260-
self.stateful_tx_validator_factory.instantiate_validator(self.state_reader_factory),
260+
self.stateful_tx_validator_factory
261+
.instantiate_validator(self.state_reader_factory.as_ref()),
261262
)?;
262263

263264
let nonce = stateful_transaction_validator.extract_state_nonce_and_run_validations(

crates/apollo_gateway/src/stateful_transaction_validator.rs

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::sync::Arc;
2-
31
use apollo_gateway_config::config::StatefulTransactionValidatorConfig;
42
use apollo_gateway_types::deprecated_gateway_error::{
53
KnownStarknetErrorCode,
@@ -54,7 +52,17 @@ type BlockifierStatefulValidator = StatefulValidator<
5452
pub trait StatefulTransactionValidatorFactoryTrait: Send + Sync {
5553
async fn instantiate_validator(
5654
&self,
57-
state_reader_factory: Arc<dyn StateReaderFactory>,
55+
state_reader_factory: &dyn StateReaderFactory,
56+
) -> StatefulTransactionValidatorResult<Box<dyn StatefulTransactionValidatorTrait>>;
57+
58+
async fn get_state_reader_for_validation(
59+
&self,
60+
state_reader_factory: &dyn StateReaderFactory,
61+
) -> StatefulTransactionValidatorResult<Box<dyn GatewayStateReaderWithCompiledClasses>>;
62+
63+
async fn create_validator_from_state_reader(
64+
&self,
65+
state_reader: Box<dyn GatewayStateReaderWithCompiledClasses>,
5866
) -> StatefulTransactionValidatorResult<Box<dyn StatefulTransactionValidatorTrait>>;
5967
}
6068
pub struct StatefulTransactionValidatorFactory {
@@ -68,11 +76,18 @@ impl StatefulTransactionValidatorFactoryTrait for StatefulTransactionValidatorFa
6876
// TODO(Ayelet): Move state_reader_factory and chain_info to the struct.
6977
async fn instantiate_validator(
7078
&self,
71-
state_reader_factory: Arc<dyn StateReaderFactory>,
79+
state_reader_factory: &dyn StateReaderFactory,
7280
) -> StatefulTransactionValidatorResult<Box<dyn StatefulTransactionValidatorTrait>> {
73-
// TODO(yael 6/5/2024): consider storing the block_info as part of the
74-
// StatefulTransactionValidator and update it only once a new block is created.
75-
let state_reader = state_reader_factory
81+
// Compose the split API to preserve original behavior.
82+
let state_reader = self.get_state_reader_for_validation(state_reader_factory).await?;
83+
self.create_validator_from_state_reader(state_reader).await
84+
}
85+
86+
async fn get_state_reader_for_validation(
87+
&self,
88+
state_reader_factory: &dyn StateReaderFactory,
89+
) -> StatefulTransactionValidatorResult<Box<dyn GatewayStateReaderWithCompiledClasses>> {
90+
state_reader_factory
7691
.get_state_reader_from_latest_block()
7792
.await
7893
.map_err(|err| GatewaySpecError::UnexpectedError {
@@ -83,8 +98,16 @@ impl StatefulTransactionValidatorFactoryTrait for StatefulTransactionValidatorFa
8398
"Failed to get state reader from latest block",
8499
e,
85100
)
86-
})?;
87-
let latest_block_info = get_latest_block_info(&state_reader).await?;
101+
})
102+
}
103+
104+
async fn create_validator_from_state_reader(
105+
&self,
106+
state_reader: Box<dyn GatewayStateReaderWithCompiledClasses>,
107+
) -> StatefulTransactionValidatorResult<Box<dyn StatefulTransactionValidatorTrait>> {
108+
// TODO(yael 6/5/2024): consider storing the block_info as part of the
109+
// StatefulTransactionValidator and update it only once a new block is created.
110+
let latest_block_info = get_latest_block_info(state_reader.as_ref()).await?;
88111

89112
let state_reader_and_contract_manager = StateReaderAndContractManager {
90113
state_reader,

crates/apollo_gateway/src/stateful_transaction_validator_test.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,7 @@ async fn test_instantiate_validator() {
165165
let state_reader_factory =
166166
local_test_state_reader_factory(CairoVersion::Cairo1(RunnableCairo1::Casm), false);
167167

168-
let validator =
169-
stateful_validator_factory.instantiate_validator(Arc::new(state_reader_factory)).await;
168+
let validator = stateful_validator_factory.instantiate_validator(&state_reader_factory).await;
170169

171170
assert!(validator.is_ok());
172171
}

0 commit comments

Comments
 (0)