11#![ cfg( target_family = "wasm" ) ]
22
3- use :: node:: transition_frontier:: genesis:: GenesisConfig ;
3+ use :: node:: { core :: log , transition_frontier:: genesis:: GenesisConfig } ;
44pub use mina_node_common:: * ;
55
66mod rayon;
@@ -28,7 +28,7 @@ fn main() {
2828 thread:: main_thread_init ( ) ;
2929 wasm_bindgen_futures:: spawn_local ( async {
3030 console_error_panic_hook:: set_once ( ) ;
31- tracing:: initialize ( tracing:: Level :: INFO ) ;
31+ tracing:: initialize ( tracing:: Level :: DEBUG ) ;
3232
3333 init_rayon ( ) . await . unwrap ( ) ;
3434 } ) ;
@@ -77,15 +77,22 @@ fn parse_bp_key(key: JsValue) -> Option<AccountSecretKey> {
7777#[ wasm_bindgen]
7878pub async fn run (
7979 block_producer : JsValue ,
80- seed_nodes_url : Option < String > ,
80+ seed_nodes_urls : Option < Vec < String > > ,
81+ seed_nodes_fixed : Option < Vec < String > > ,
8182 genesis_config_url : Option < String > ,
8283) -> RpcSender {
8384 let block_producer = parse_bp_key ( block_producer) ;
8485
8586 let ( rpc_sender_tx, rpc_sender_rx) = :: node:: core:: channels:: oneshot:: channel ( ) ;
8687 let _ = thread:: spawn ( move || {
8788 wasm_bindgen_futures:: spawn_local ( async move {
88- let mut node = setup_node ( block_producer, seed_nodes_url, genesis_config_url) . await ;
89+ let mut node = setup_node (
90+ block_producer,
91+ seed_nodes_urls,
92+ seed_nodes_fixed,
93+ genesis_config_url,
94+ )
95+ . await ;
8996 let _ = rpc_sender_tx. send ( node. rpc ( ) ) ;
9097 node. run_forever ( ) . await ;
9198 } ) ;
@@ -98,7 +105,8 @@ pub async fn run(
98105
99106async fn setup_node (
100107 block_producer : Option < AccountSecretKey > ,
101- seed_nodes_url : Option < String > ,
108+ seed_nodes_urls : Option < Vec < String > > ,
109+ seed_nodes_fixed : Option < Vec < String > > ,
102110 genesis_config_url : Option < String > ,
103111) -> mina_node_common:: Node < NodeService > {
104112 let block_verifier_index = BlockVerifier :: make ( ) . await ;
@@ -119,18 +127,34 @@ async fn setup_node(
119127 . work_verifier_index ( work_verifier_index. clone ( ) ) ;
120128
121129 // TODO(binier): refactor
122- if let Some ( seed_nodes_url) = seed_nodes_url {
123- let peers = :: node:: core:: http:: get_bytes ( & seed_nodes_url)
124- . await
125- . expect ( "failed to fetch seed nodes" ) ;
126- node_builder. initial_peers (
127- String :: from_utf8_lossy ( & peers)
128- . split ( "\n " )
129- . filter ( |s| !s. trim ( ) . is_empty ( ) )
130- . map ( |s| s. trim ( ) . parse ( ) . expect ( "failed to parse seed node addr" ) ) ,
131- ) ;
130+ let mut all_raw_peers = seed_nodes_fixed. unwrap_or_default ( ) ;
131+ if let Some ( seed_nodes_urls) = seed_nodes_urls {
132+ for seed_nodes_url in seed_nodes_urls {
133+ let peers = :: node:: core:: http:: get_bytes ( & seed_nodes_url) . await ;
134+ match peers {
135+ Ok ( s) => {
136+ log:: info!( "Successfully fetched peers from {seed_nodes_url}" ) ;
137+ all_raw_peers. extend ( String :: from_utf8_lossy ( & s) . split ( "\n " ) . map ( String :: from) ) ;
138+ }
139+ Err ( e) => {
140+ log:: error!( "Failed to fetch peers from {seed_nodes_url}: {e}" ) ;
141+ }
142+ }
143+ }
132144 }
133145
146+ node_builder. initial_peers (
147+ all_raw_peers
148+ . iter ( )
149+ . map ( |s| s. trim ( ) )
150+ . filter ( |s| !s. is_empty ( ) )
151+ . flat_map ( |s| s. parse ( ) . ok ( ) )
152+ . map ( |p| {
153+ log:: debug!( "Using peer: {p:?}" ) ;
154+ p
155+ } ) ,
156+ ) ;
157+
134158 if let Some ( bp_key) = block_producer {
135159 thread:: spawn ( move || {
136160 BlockProver :: make ( Some ( block_verifier_index) , Some ( work_verifier_index) ) ;
0 commit comments