@@ -7,7 +7,10 @@ use ethereum::{
7
7
use git_testament:: { git_testament, render_testament} ;
8
8
use graph:: blockchain:: client:: ChainClient ;
9
9
use graph:: blockchain:: firehose_block_ingestor:: { FirehoseBlockIngestor , Transforms } ;
10
- use graph:: blockchain:: { Block as BlockchainBlock , Blockchain , BlockchainKind , BlockchainMap } ;
10
+ use graph:: blockchain:: {
11
+ BasicBlockchainBuilder , Block as BlockchainBlock , Blockchain , BlockchainBuilder ,
12
+ BlockchainKind , BlockchainMap ,
13
+ } ;
11
14
use graph:: components:: store:: BlockStore ;
12
15
use graph:: data:: graphql:: effort:: LoadManager ;
13
16
use graph:: env:: EnvVars ;
@@ -40,7 +43,6 @@ use graph_server_json_rpc::JsonRpcServer;
40
43
use graph_server_metrics:: PrometheusMetricsServer ;
41
44
use graph_server_websocket:: SubscriptionServer as GraphQLSubscriptionServer ;
42
45
use graph_store_postgres:: { register_jobs as register_store_jobs, ChainHeadUpdateListener , Store } ;
43
- use near:: NearStreamBuilder ;
44
46
use std:: collections:: BTreeMap ;
45
47
use std:: io:: { BufRead , BufReader } ;
46
48
use std:: path:: Path ;
@@ -297,7 +299,7 @@ async fn main() {
297
299
298
300
let network_store = store_builder. network_store ( network_identifiers) ;
299
301
300
- let arweave_chains = arweave_networks_as_chains (
302
+ let arweave_chains = networks_as_chains :: < arweave :: Chain > (
301
303
& mut blockchain_map,
302
304
& logger,
303
305
& arweave_networks,
@@ -320,7 +322,7 @@ async fn main() {
320
322
metrics_registry. clone ( ) ,
321
323
) ;
322
324
323
- let near_chains = near_networks_as_chains (
325
+ let near_chains = networks_as_chains :: < near :: Chain > (
324
326
& mut blockchain_map,
325
327
& logger,
326
328
& near_networks,
@@ -329,7 +331,7 @@ async fn main() {
329
331
metrics_registry. clone ( ) ,
330
332
) ;
331
333
332
- let cosmos_chains = cosmos_networks_as_chains (
334
+ let cosmos_chains = networks_as_chains :: < cosmos :: Chain > (
333
335
& mut blockchain_map,
334
336
& logger,
335
337
& cosmos_networks,
@@ -613,15 +615,19 @@ async fn main() {
613
615
futures:: future:: pending :: < ( ) > ( ) . await ;
614
616
}
615
617
616
- /// Return the hashmap of Arweave chains and also add them to `blockchain_map`.
617
- fn arweave_networks_as_chains (
618
+ /// Return the hashmap of chains and also add them to `blockchain_map`.
619
+ fn networks_as_chains < C > (
618
620
blockchain_map : & mut BlockchainMap ,
619
621
logger : & Logger ,
620
622
firehose_networks : & FirehoseNetworks ,
621
623
store : & Store ,
622
624
logger_factory : & LoggerFactory ,
623
625
metrics_registry : Arc < MetricsRegistry > ,
624
- ) -> HashMap < String , FirehoseChain < arweave:: Chain > > {
626
+ ) -> HashMap < String , FirehoseChain < C > >
627
+ where
628
+ C : Blockchain ,
629
+ BasicBlockchainBuilder : BlockchainBuilder < C > ,
630
+ {
625
631
let chains: Vec < _ > = firehose_networks
626
632
. networks
627
633
. iter ( )
@@ -633,7 +639,9 @@ fn arweave_networks_as_chains(
633
639
. or_else ( || {
634
640
error ! (
635
641
logger,
636
- "No store configured for Arweave chain {}; ignoring this chain" , chain_id
642
+ "No store configured for {} chain {}; ignoring this chain" ,
643
+ C :: KIND ,
644
+ chain_id
637
645
) ;
638
646
None
639
647
} )
@@ -642,21 +650,24 @@ fn arweave_networks_as_chains(
642
650
(
643
651
chain_id. clone ( ) ,
644
652
FirehoseChain {
645
- chain : Arc :: new ( arweave:: Chain :: new (
646
- logger_factory. clone ( ) ,
647
- chain_id. clone ( ) ,
648
- chain_store,
649
- endpoints. clone ( ) ,
650
- metrics_registry. clone ( ) ,
651
- ) ) ,
653
+ chain : Arc :: new (
654
+ BasicBlockchainBuilder {
655
+ logger_factory : logger_factory. clone ( ) ,
656
+ name : chain_id. clone ( ) ,
657
+ chain_store,
658
+ firehose_endpoints : endpoints. clone ( ) ,
659
+ metrics_registry : metrics_registry. clone ( ) ,
660
+ }
661
+ . build ( ) ,
662
+ ) ,
652
663
firehose_endpoints : endpoints. clone ( ) ,
653
664
} ,
654
665
)
655
666
} )
656
667
. collect ( ) ;
657
668
658
669
for ( chain_id, firehose_chain) in chains. iter ( ) {
659
- blockchain_map. insert :: < arweave :: Chain > ( chain_id. clone ( ) , firehose_chain. chain . clone ( ) )
670
+ blockchain_map. insert :: < C > ( chain_id. clone ( ) , firehose_chain. chain . clone ( ) )
660
671
}
661
672
662
673
HashMap :: from_iter ( chains)
@@ -764,106 +775,6 @@ fn ethereum_networks_as_chains(
764
775
HashMap :: from_iter ( chains)
765
776
}
766
777
767
- fn cosmos_networks_as_chains (
768
- blockchain_map : & mut BlockchainMap ,
769
- logger : & Logger ,
770
- firehose_networks : & FirehoseNetworks ,
771
- store : & Store ,
772
- logger_factory : & LoggerFactory ,
773
- metrics_registry : Arc < MetricsRegistry > ,
774
- ) -> HashMap < String , FirehoseChain < cosmos:: Chain > > {
775
- let chains: Vec < _ > = firehose_networks
776
- . networks
777
- . iter ( )
778
- . filter_map ( |( network_name, firehose_endpoints) | {
779
- store
780
- . block_store ( )
781
- . chain_store ( network_name)
782
- . map ( |chain_store| ( network_name, chain_store, firehose_endpoints) )
783
- . or_else ( || {
784
- error ! (
785
- logger,
786
- "No store configured for Cosmos chain {}; ignoring this chain" ,
787
- network_name
788
- ) ;
789
- None
790
- } )
791
- } )
792
- . map ( |( network_name, chain_store, firehose_endpoints) | {
793
- (
794
- network_name. clone ( ) ,
795
- FirehoseChain {
796
- chain : Arc :: new ( cosmos:: Chain :: new (
797
- logger_factory. clone ( ) ,
798
- network_name. clone ( ) ,
799
- chain_store,
800
- firehose_endpoints. clone ( ) ,
801
- metrics_registry. clone ( ) ,
802
- ) ) ,
803
- firehose_endpoints : firehose_endpoints. clone ( ) ,
804
- } ,
805
- )
806
- } )
807
- . collect ( ) ;
808
-
809
- for ( network_name, firehose_chain) in chains. iter ( ) {
810
- blockchain_map. insert :: < cosmos:: Chain > ( network_name. clone ( ) , firehose_chain. chain . clone ( ) )
811
- }
812
-
813
- HashMap :: from_iter ( chains)
814
- }
815
-
816
- /// Return the hashmap of NEAR chains and also add them to `blockchain_map`.
817
- fn near_networks_as_chains (
818
- blockchain_map : & mut BlockchainMap ,
819
- logger : & Logger ,
820
- firehose_networks : & FirehoseNetworks ,
821
- store : & Store ,
822
- logger_factory : & LoggerFactory ,
823
- metrics_registry : Arc < MetricsRegistry > ,
824
- ) -> HashMap < String , FirehoseChain < near:: Chain > > {
825
- let chains: Vec < _ > = firehose_networks
826
- . networks
827
- . iter ( )
828
- . filter_map ( |( chain_id, endpoints) | {
829
- store
830
- . block_store ( )
831
- . chain_store ( chain_id)
832
- . map ( |chain_store| ( chain_id, chain_store, endpoints) )
833
- . or_else ( || {
834
- error ! (
835
- logger,
836
- "No store configured for NEAR chain {}; ignoring this chain" , chain_id
837
- ) ;
838
- None
839
- } )
840
- } )
841
- . map ( |( chain_id, chain_store, endpoints) | {
842
- (
843
- chain_id. clone ( ) ,
844
- FirehoseChain {
845
- chain : Arc :: new ( near:: Chain :: new (
846
- logger_factory. clone ( ) ,
847
- chain_id. clone ( ) ,
848
- chain_store,
849
- endpoints. clone ( ) ,
850
- metrics_registry. clone ( ) ,
851
- Arc :: new ( NearStreamBuilder { } ) ,
852
- ) ) ,
853
- firehose_endpoints : endpoints. clone ( ) ,
854
- } ,
855
- )
856
- } )
857
- . collect ( ) ;
858
-
859
- for ( chain_id, firehose_chain) in chains. iter ( ) {
860
- blockchain_map
861
- . insert :: < graph_chain_near:: Chain > ( chain_id. clone ( ) , firehose_chain. chain . clone ( ) )
862
- }
863
-
864
- HashMap :: from_iter ( chains)
865
- }
866
-
867
778
fn start_block_ingestor (
868
779
logger : & Logger ,
869
780
logger_factory : & LoggerFactory ,
0 commit comments