@@ -1151,22 +1151,34 @@ async fn login_with_password(
11511151 } ,
11521152 } ;
11531153
1154- let provider = Arc :: new ( register:: connect_to_provider_from_config ( & eth_provider_config) . await ) ;
1155-
1156- register:: assign_routing (
1157- & mut our,
1158- provider,
1159- match ws_networking. 0 {
1160- Some ( listener) => ( listener. local_addr ( ) . unwrap ( ) . port ( ) , ws_networking. 1 ) ,
1161- None => ( 0 , ws_networking. 1 ) ,
1162- } ,
1163- match tcp_networking. 0 {
1164- Some ( listener) => ( listener. local_addr ( ) . unwrap ( ) . port ( ) , tcp_networking. 1 ) ,
1165- None => ( 0 , tcp_networking. 1 ) ,
1166- } ,
1167- )
1168- . await
1169- . expect ( "information used to boot does not match information onchain" ) ;
1154+ let providers = register:: connect_to_providers ( & eth_provider_config) . await ;
1155+
1156+ let ws_port = match ws_networking. 0 {
1157+ Some ( listener) => ( listener. local_addr ( ) . unwrap ( ) . port ( ) , ws_networking. 1 ) ,
1158+ None => ( 0 , ws_networking. 1 ) ,
1159+ } ;
1160+ let tcp_port = match tcp_networking. 0 {
1161+ Some ( listener) => ( listener. local_addr ( ) . unwrap ( ) . port ( ) , tcp_networking. 1 ) ,
1162+ None => ( 0 , tcp_networking. 1 ) ,
1163+ } ;
1164+
1165+ // Try each provider until one succeeds
1166+ let mut last_error = None ;
1167+ for provider in providers. iter ( ) {
1168+ match register:: assign_routing ( & mut our, provider, ws_port, tcp_port) . await {
1169+ Ok ( ( ) ) => {
1170+ last_error = None ;
1171+ break ;
1172+ }
1173+ Err ( e) => {
1174+ last_error = Some ( e) ;
1175+ continue ;
1176+ }
1177+ }
1178+ }
1179+ if let Some ( e) = last_error {
1180+ panic ! ( "information used to boot does not match information onchain: {e}" ) ;
1181+ }
11701182
11711183 tokio:: fs:: write ( home_directory_path. join ( ".keys" ) , & disk_keyfile)
11721184 . await
0 commit comments