@@ -68,6 +68,44 @@ use graph::blockchain::block_stream::{
6868/// Celo Mainnet: 42220, Testnet Alfajores: 44787, Testnet Baklava: 62320
6969const CELO_CHAIN_IDS : [ u64 ; 3 ] = [ 42220 , 44787 , 62320 ] ;
7070
71+ /// Resolved per-chain settings. Populated at chain initialisation from the config file (with
72+ /// ENV_VAR fallbacks) and stored on [`Chain`] and [`crate::EthereumAdapter`].
73+ #[ derive( Clone , Debug ) ]
74+ pub struct ChainSettings {
75+ pub polling_interval : Duration ,
76+ pub json_rpc_timeout : Duration ,
77+ pub request_retries : usize ,
78+ pub max_block_range_size : BlockNumber ,
79+ pub block_batch_size : usize ,
80+ pub block_ptr_batch_size : usize ,
81+ pub max_event_only_range : BlockNumber ,
82+ pub target_triggers_per_block_range : u64 ,
83+ pub get_logs_max_contracts : usize ,
84+ pub block_ingestor_max_concurrent_json_rpc_calls : usize ,
85+ pub genesis_block_number : u64 ,
86+ }
87+
88+ impl ChainSettings {
89+ /// Constructs a [`ChainSettings`] from environment variable defaults.
90+ /// Used in tests and for firehose-only chains that have no RPC config.
91+ pub fn from_env_defaults ( ) -> Self {
92+ ChainSettings {
93+ polling_interval : graph:: env:: ENV_VARS . ingestor_polling_interval ,
94+ json_rpc_timeout : ENV_VARS . json_rpc_timeout ,
95+ request_retries : ENV_VARS . request_retries ,
96+ max_block_range_size : ENV_VARS . max_block_range_size ,
97+ block_batch_size : ENV_VARS . block_batch_size ,
98+ block_ptr_batch_size : ENV_VARS . block_ptr_batch_size ,
99+ max_event_only_range : ENV_VARS . max_event_only_range ,
100+ target_triggers_per_block_range : ENV_VARS . target_triggers_per_block_range ,
101+ get_logs_max_contracts : ENV_VARS . get_logs_max_contracts ,
102+ block_ingestor_max_concurrent_json_rpc_calls : ENV_VARS
103+ . block_ingestor_max_concurrent_json_rpc_calls ,
104+ genesis_block_number : ENV_VARS . genesis_block_number ,
105+ }
106+ }
107+ }
108+
71109pub struct EthereumStreamBuilder { }
72110
73111#[ async_trait]
@@ -192,9 +230,9 @@ impl BlockStreamBuilder<Chain> for EthereumStreamBuilder {
192230 } ;
193231
194232 let max_block_range_size = if is_using_subgraph_composition {
195- ENV_VARS . max_block_range_size * 10
233+ chain . settings . max_block_range_size * 10
196234 } else {
197- ENV_VARS . max_block_range_size
235+ chain . settings . max_block_range_size
198236 } ;
199237
200238 Ok ( Box :: new ( PollingBlockStream :: new (
@@ -206,7 +244,7 @@ impl BlockStreamBuilder<Chain> for EthereumStreamBuilder {
206244 reorg_threshold,
207245 logger,
208246 max_block_range_size,
209- ENV_VARS . target_triggers_per_block_range ,
247+ chain . settings . target_triggers_per_block_range ,
210248 unified_api_version,
211249 subgraph_current_block,
212250 ) ) )
@@ -325,13 +363,13 @@ pub struct Chain {
325363 call_cache : Arc < dyn EthereumCallCache > ,
326364 chain_head_update_listener : Arc < dyn ChainHeadUpdateListener > ,
327365 reorg_threshold : BlockNumber ,
328- polling_ingestor_interval : Duration ,
329366 pub is_ingestible : bool ,
330367 block_stream_builder : Arc < dyn BlockStreamBuilder < Self > > ,
331368 block_refetcher : Arc < dyn BlockRefetcher < Self > > ,
332369 adapter_selector : Arc < dyn TriggersAdapterSelector < Self > > ,
333370 runtime_adapter_builder : Arc < dyn RuntimeAdapterBuilder > ,
334371 eth_adapters : Arc < EthereumNetworkAdapters > ,
372+ pub settings : Arc < ChainSettings > ,
335373}
336374
337375impl std:: fmt:: Debug for Chain {
@@ -388,8 +426,8 @@ impl Chain {
388426 runtime_adapter_builder : Arc < dyn RuntimeAdapterBuilder > ,
389427 eth_adapters : Arc < EthereumNetworkAdapters > ,
390428 reorg_threshold : BlockNumber ,
391- polling_ingestor_interval : Duration ,
392429 is_ingestible : bool ,
430+ settings : Arc < ChainSettings > ,
393431 ) -> Self {
394432 Chain {
395433 logger_factory,
@@ -406,7 +444,7 @@ impl Chain {
406444 eth_adapters,
407445 reorg_threshold,
408446 is_ingestible,
409- polling_ingestor_interval ,
447+ settings ,
410448 }
411449 }
412450
@@ -637,7 +675,7 @@ impl Blockchain for Chain {
637675 graph:: env:: ENV_VARS . reorg_threshold ( ) ,
638676 self . chain_client ( ) ,
639677 self . chain_store . cheap_clone ( ) ,
640- self . polling_ingestor_interval ,
678+ self . settings . polling_interval ,
641679 self . name . clone ( ) ,
642680 ) ?)
643681 }
0 commit comments