Skip to content

Commit c08f568

Browse files
apollo_gateway: thread native classes whitelist into instantiate validator (#13092)
1 parent 6061c5a commit c08f568

4 files changed

Lines changed: 19 additions & 10 deletions

File tree

crates/apollo_gateway/src/gateway.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ impl<
227227

228228
let mut stateful_transaction_validator = self
229229
.stateful_tx_validator_factory
230-
.instantiate_validator()
230+
.instantiate_validator(self.config.dynamic_config.native_classes_whitelist.clone())
231231
.await
232232
.inspect_err(|e| metric_counters.record_add_tx_failure(e))?;
233233

crates/apollo_gateway/src/gateway_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,7 @@ async fn add_tx_returns_error_when_extract_state_nonce_and_run_validations_fails
730730

731731
mock_stateful_transaction_validator_factory
732732
.expect_instantiate_validator()
733-
.return_once(|| Ok(Box::new(mock_stateful_transaction_validator)));
733+
.return_once(|_| Ok(Box::new(mock_stateful_transaction_validator)));
734734

735735
let tx_args = invoke_args();
736736
setup_transaction_converter_mock(&mut mock_dependencies.mock_transaction_converter, &tx_args);
@@ -787,7 +787,7 @@ async fn add_tx_returns_error_when_instantiating_validator_fails(
787787
};
788788
mock_stateful_transaction_validator_factory
789789
.expect_instantiate_validator()
790-
.return_once(|| Err(expected_error));
790+
.return_once(|_| Err(expected_error));
791791

792792
let tx_args = invoke_args();
793793
setup_transaction_converter_mock(&mut mock_dependencies.mock_transaction_converter, &tx_args);

crates/apollo_gateway/src/stateful_transaction_validator.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use apollo_mempool_types::communication::SharedMempoolClient;
1111
use apollo_mempool_types::mempool_types::ValidationArgs;
1212
use apollo_proc_macros::sequencer_latency_histogram;
1313
use async_trait::async_trait;
14+
use blockifier::blockifier::config::NativeClassesWhitelist;
1415
use blockifier::blockifier::stateful_validator::{StatefulValidator, StatefulValidatorTrait};
1516
use blockifier::blockifier_versioned_constants::VersionedConstants;
1617
use blockifier::bouncer::BouncerConfig;
@@ -46,6 +47,7 @@ pub trait StatefulTransactionValidatorFactoryTrait: Send + Sync {
4647

4748
async fn instantiate_validator(
4849
&self,
50+
native_classes_whitelist: NativeClassesWhitelist,
4951
) -> StatefulTransactionValidatorResult<Box<Self::Validator>>;
5052
}
5153

@@ -59,6 +61,7 @@ mockall::mock! {
5961

6062
async fn instantiate_validator(
6163
&self,
64+
native_classes_whitelist: NativeClassesWhitelist,
6265
) -> StatefulTransactionValidatorResult<Box<MockStatefulTransactionValidatorTrait>>;
6366
}
6467
}
@@ -82,6 +85,7 @@ impl<TStateReaderFactory: StateReaderFactory> StatefulTransactionValidatorFactor
8285

8386
async fn instantiate_validator(
8487
&self,
88+
native_classes_whitelist: NativeClassesWhitelist,
8589
) -> StatefulTransactionValidatorResult<Box<Self::Validator>> {
8690
// TODO(yael 6/5/2024): consider storing the block_info as part of the
8791
// StatefulTransactionValidator and update it only once a new block is created.
@@ -98,11 +102,13 @@ impl<TStateReaderFactory: StateReaderFactory> StatefulTransactionValidatorFactor
98102
e,
99103
)
100104
})?;
101-
let state_reader_and_contract_manager = StateReaderAndContractManager::new(
102-
blockifier_state_reader,
103-
self.contract_class_manager.clone(),
104-
Some(GATEWAY_CLASS_CACHE_METRICS),
105-
);
105+
let state_reader_and_contract_manager =
106+
StateReaderAndContractManager::new_with_native_classes_whitelist(
107+
blockifier_state_reader,
108+
self.contract_class_manager.clone(),
109+
native_classes_whitelist,
110+
Some(GATEWAY_CLASS_CACHE_METRICS),
111+
);
106112

107113
Ok(Box::new(StatefulTransactionValidator::new(
108114
self.config.clone(),

crates/apollo_gateway/src/stateful_transaction_validator_test.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use apollo_gateway_types::deprecated_gateway_error::{
77
StarknetErrorCode,
88
};
99
use apollo_mempool_types::communication::MockMempoolClient;
10-
use blockifier::blockifier::config::ContractClassManagerConfig;
10+
use blockifier::blockifier::config::{ContractClassManagerConfig, NativeClassesWhitelist};
1111
use blockifier::context::ChainInfo;
1212
use blockifier::state::contract_class_manager::ContractClassManager;
1313
use blockifier::test_utils::contracts::FeatureContractTrait;
@@ -140,8 +140,11 @@ async fn test_instantiate_validator() {
140140
state_reader_factory: Arc::new(state_reader_factory),
141141
contract_class_manager: ContractClassManager::start(ContractClassManagerConfig::default()),
142142
};
143+
// The whitelist is irrelevant for the test.
144+
let native_classes_whitelist = NativeClassesWhitelist::All;
143145

144-
let validator = stateful_validator_factory.instantiate_validator().await;
146+
let validator =
147+
stateful_validator_factory.instantiate_validator(native_classes_whitelist).await;
145148
assert!(validator.is_ok());
146149
}
147150

0 commit comments

Comments
 (0)