11use anyhow:: { anyhow, bail} ;
22use graph:: blockchain:: ChainIdentifier ;
3- use graph:: components:: adapter:: { ChainId , NetIdentifiable , ProviderManager , ProviderName } ;
3+ use graph:: components:: network_provider:: ChainName ;
4+ use graph:: components:: network_provider:: NetworkDetails ;
5+ use graph:: components:: network_provider:: ProviderManager ;
6+ use graph:: components:: network_provider:: ProviderName ;
47use graph:: endpoint:: EndpointMetrics ;
58use graph:: firehose:: { AvailableCapacity , SubgraphLimit } ;
69use graph:: prelude:: rand:: seq:: IteratorRandom ;
710use graph:: prelude:: rand:: { self , Rng } ;
11+ use itertools:: Itertools ;
812use std:: sync:: Arc ;
913
1014pub use graph:: impl_slog_value;
@@ -29,13 +33,18 @@ pub struct EthereumNetworkAdapter {
2933}
3034
3135#[ async_trait]
32- impl NetIdentifiable for EthereumNetworkAdapter {
33- async fn net_identifiers ( & self ) -> Result < ChainIdentifier , anyhow:: Error > {
34- self . adapter . net_identifiers ( ) . await
35- }
36+ impl NetworkDetails for EthereumNetworkAdapter {
3637 fn provider_name ( & self ) -> ProviderName {
3738 self . adapter . provider ( ) . into ( )
3839 }
40+
41+ async fn chain_identifier ( & self ) -> Result < ChainIdentifier , Error > {
42+ self . adapter . net_identifiers ( ) . await
43+ }
44+
45+ async fn provides_extended_blocks ( & self ) -> Result < bool , Error > {
46+ Ok ( true )
47+ }
3948}
4049
4150impl EthereumNetworkAdapter {
@@ -72,7 +81,7 @@ impl EthereumNetworkAdapter {
7281
7382#[ derive( Debug , Clone ) ]
7483pub struct EthereumNetworkAdapters {
75- chain_id : ChainId ,
84+ chain_id : ChainName ,
7685 manager : ProviderManager < EthereumNetworkAdapter > ,
7786 call_only_adapters : Vec < EthereumNetworkAdapter > ,
7887 // Percentage of request that should be used to retest errored adapters.
@@ -96,10 +105,10 @@ impl EthereumNetworkAdapters {
96105 ) -> Self {
97106 use std:: cmp:: Ordering ;
98107
108+ use graph:: components:: network_provider:: ProviderCheckStrategy ;
99109 use graph:: slog:: { o, Discard , Logger } ;
100110
101- use graph:: components:: adapter:: NoopIdentValidator ;
102- let chain_id: ChainId = "testing" . into ( ) ;
111+ let chain_id: ChainName = "testing" . into ( ) ;
103112 adapters. sort_by ( |a, b| {
104113 a. capabilities
105114 . partial_cmp ( & b. capabilities )
@@ -109,15 +118,14 @@ impl EthereumNetworkAdapters {
109118 let provider = ProviderManager :: new (
110119 Logger :: root ( Discard , o ! ( ) ) ,
111120 vec ! [ ( chain_id. clone( ) , adapters) ] . into_iter ( ) ,
112- Arc :: new ( NoopIdentValidator ) ,
121+ ProviderCheckStrategy :: MarkAsValid ,
113122 ) ;
114- provider. mark_all_valid ( ) . await ;
115123
116124 Self :: new ( chain_id, provider, call_only, None )
117125 }
118126
119127 pub fn new (
120- chain_id : ChainId ,
128+ chain_id : ChainName ,
121129 manager : ProviderManager < EthereumNetworkAdapter > ,
122130 call_only_adapters : Vec < EthereumNetworkAdapter > ,
123131 retest_percent : Option < f64 > ,
@@ -159,8 +167,9 @@ impl EthereumNetworkAdapters {
159167 ) -> impl Iterator < Item = & EthereumNetworkAdapter > + ' _ {
160168 let all = self
161169 . manager
162- . get_all ( & self . chain_id )
170+ . providers ( & self . chain_id )
163171 . await
172+ . map ( |adapters| adapters. collect_vec ( ) )
164173 . unwrap_or_default ( ) ;
165174
166175 Self :: available_with_capabilities ( all, required_capabilities)
@@ -172,7 +181,10 @@ impl EthereumNetworkAdapters {
172181 & self ,
173182 required_capabilities : & NodeCapabilities ,
174183 ) -> impl Iterator < Item = & EthereumNetworkAdapter > + ' _ {
175- let all = self . manager . get_all_unverified ( & self . chain_id ) ;
184+ let all = self
185+ . manager
186+ . providers_unchecked ( & self . chain_id )
187+ . collect_vec ( ) ;
176188
177189 Self :: available_with_capabilities ( all, required_capabilities)
178190 }
@@ -242,10 +254,10 @@ impl EthereumNetworkAdapters {
242254 // EthereumAdapters are sorted by their NodeCapabilities when the EthereumNetworks
243255 // struct is instantiated so they do not need to be sorted here
244256 self . manager
245- . get_all ( & self . chain_id )
257+ . providers ( & self . chain_id )
246258 . await
259+ . map ( |mut adapters| adapters. next ( ) )
247260 . unwrap_or_default ( )
248- . first ( )
249261 . map ( |ethereum_network_adapter| ethereum_network_adapter. adapter . clone ( ) )
250262 }
251263
@@ -299,7 +311,9 @@ impl EthereumNetworkAdapters {
299311#[ cfg( test) ]
300312mod tests {
301313 use graph:: cheap_clone:: CheapClone ;
302- use graph:: components:: adapter:: { NoopIdentValidator , ProviderManager , ProviderName } ;
314+ use graph:: components:: network_provider:: ProviderCheckStrategy ;
315+ use graph:: components:: network_provider:: ProviderManager ;
316+ use graph:: components:: network_provider:: ProviderName ;
303317 use graph:: data:: value:: Word ;
304318 use graph:: http:: HeaderMap ;
305319 use graph:: {
@@ -746,18 +760,14 @@ mod tests {
746760 . collect( ) ,
747761 ) ]
748762 . into_iter ( ) ,
749- Arc :: new ( NoopIdentValidator ) ,
763+ ProviderCheckStrategy :: MarkAsValid ,
750764 ) ;
751- manager. mark_all_valid ( ) . await ;
752765
753- let no_retest_adapters = EthereumNetworkAdapters :: new (
754- chain_id. clone ( ) ,
755- manager. cheap_clone ( ) ,
756- vec ! [ ] ,
757- Some ( 0f64 ) ,
758- ) ;
766+ let no_retest_adapters =
767+ EthereumNetworkAdapters :: new ( chain_id. clone ( ) , manager. clone ( ) , vec ! [ ] , Some ( 0f64 ) ) ;
768+
759769 let always_retest_adapters =
760- EthereumNetworkAdapters :: new ( chain_id, manager. cheap_clone ( ) , vec ! [ ] , Some ( 1f64 ) ) ;
770+ EthereumNetworkAdapters :: new ( chain_id, manager. clone ( ) , vec ! [ ] , Some ( 1f64 ) ) ;
761771
762772 assert_eq ! (
763773 no_retest_adapters
@@ -842,16 +852,12 @@ mod tests {
842852 . iter ( )
843853 . cloned ( )
844854 . map ( |a| ( chain_id. clone ( ) , vec ! [ a] ) ) ,
845- Arc :: new ( NoopIdentValidator ) ,
855+ ProviderCheckStrategy :: MarkAsValid ,
846856 ) ;
847- manager. mark_all_valid ( ) . await ;
848857
849- let always_retest_adapters = EthereumNetworkAdapters :: new (
850- chain_id. clone ( ) ,
851- manager. cheap_clone ( ) ,
852- vec ! [ ] ,
853- Some ( 1f64 ) ,
854- ) ;
858+ let always_retest_adapters =
859+ EthereumNetworkAdapters :: new ( chain_id. clone ( ) , manager. clone ( ) , vec ! [ ] , Some ( 1f64 ) ) ;
860+
855861 assert_eq ! (
856862 always_retest_adapters
857863 . cheapest_with( & NodeCapabilities {
@@ -870,9 +876,8 @@ mod tests {
870876 . iter ( )
871877 . cloned ( )
872878 . map ( |a| ( chain_id. clone ( ) , vec ! [ a] ) ) ,
873- Arc :: new ( NoopIdentValidator ) ,
879+ ProviderCheckStrategy :: MarkAsValid ,
874880 ) ;
875- manager. mark_all_valid ( ) . await ;
876881
877882 let no_retest_adapters =
878883 EthereumNetworkAdapters :: new ( chain_id. clone ( ) , manager, vec ! [ ] , Some ( 0f64 ) ) ;
@@ -912,9 +917,8 @@ mod tests {
912917 no_available_adapter. iter( ) . cloned( ) . collect( ) ,
913918 ) ]
914919 . into_iter ( ) ,
915- Arc :: new ( NoopIdentValidator ) ,
920+ ProviderCheckStrategy :: MarkAsValid ,
916921 ) ;
917- manager. mark_all_valid ( ) . await ;
918922
919923 let no_available_adapter = EthereumNetworkAdapters :: new ( chain_id, manager, vec ! [ ] , None ) ;
920924 let res = no_available_adapter
0 commit comments