1+ use std:: sync:: Arc ;
2+
13use apollo_gateway_config:: config:: StatefulTransactionValidatorConfig ;
24use apollo_gateway_types:: deprecated_gateway_error:: {
35 KnownStarknetErrorCode ,
@@ -7,6 +9,7 @@ use apollo_gateway_types::deprecated_gateway_error::{
79use apollo_gateway_types:: errors:: GatewaySpecError ;
810use apollo_mempool_types:: communication:: SharedMempoolClient ;
911use apollo_proc_macros:: sequencer_latency_histogram;
12+ use async_trait:: async_trait;
1013use blockifier:: blockifier:: stateful_validator:: {
1114 StatefulValidator ,
1215 StatefulValidatorTrait as BlockifierStatefulValidatorTrait ,
@@ -46,12 +49,12 @@ type BlockifierStatefulValidator = StatefulValidator<
4649 StateReaderAndContractManager < Box < dyn GatewayStateReaderWithCompiledClasses > > ,
4750> ;
4851
52+ #[ async_trait]
4953#[ cfg_attr( test, mockall:: automock) ]
5054pub trait StatefulTransactionValidatorFactoryTrait : Send + Sync {
51- fn instantiate_validator (
55+ async fn instantiate_validator (
5256 & self ,
53- state_reader_factory : & dyn StateReaderFactory ,
54- runtime : tokio:: runtime:: Handle ,
57+ state_reader_factory : Arc < dyn StateReaderFactory > ,
5558 ) -> StatefulTransactionValidatorResult < Box < dyn StatefulTransactionValidatorTrait > > ;
5659}
5760pub struct StatefulTransactionValidatorFactory {
@@ -60,17 +63,18 @@ pub struct StatefulTransactionValidatorFactory {
6063 pub contract_class_manager : ContractClassManager ,
6164}
6265
66+ #[ async_trait]
6367impl StatefulTransactionValidatorFactoryTrait for StatefulTransactionValidatorFactory {
6468 // TODO(Ayelet): Move state_reader_factory and chain_info to the struct.
65- fn instantiate_validator (
69+ async fn instantiate_validator (
6670 & self ,
67- state_reader_factory : & dyn StateReaderFactory ,
68- runtime : tokio:: runtime:: Handle ,
71+ state_reader_factory : Arc < dyn StateReaderFactory > ,
6972 ) -> StatefulTransactionValidatorResult < Box < dyn StatefulTransactionValidatorTrait > > {
7073 // TODO(yael 6/5/2024): consider storing the block_info as part of the
7174 // StatefulTransactionValidator and update it only once a new block is created.
72- let state_reader = runtime
73- . block_on ( state_reader_factory. get_state_reader_from_latest_block ( ) )
75+ let state_reader = state_reader_factory
76+ . get_state_reader_from_latest_block ( )
77+ . await
7478 . map_err ( |err| GatewaySpecError :: UnexpectedError {
7579 data : format ! ( "Internal server error: {err}" ) ,
7680 } )
@@ -80,7 +84,7 @@ impl StatefulTransactionValidatorFactoryTrait for StatefulTransactionValidatorFa
8084 e,
8185 )
8286 } ) ?;
83- let latest_block_info = runtime . block_on ( get_latest_block_info ( & state_reader) ) ?;
87+ let latest_block_info = get_latest_block_info ( & state_reader) . await ?;
8488
8589 let state_reader_and_contract_manager = StateReaderAndContractManager {
8690 state_reader,
0 commit comments