diff --git a/bridges/relays/bin-substrate/src/headers_initialize.rs b/bridges/relays/bin-substrate/src/headers_initialize.rs index c2eab1bd35..39d8ae7069 100644 --- a/bridges/relays/bin-substrate/src/headers_initialize.rs +++ b/bridges/relays/bin-substrate/src/headers_initialize.rs @@ -108,12 +108,18 @@ async fn prepare_initialization_data( .map_err(|err| format!("Failed to subscribe to {} justifications: {:?}", SourceChain::NAME, err))?; // Read next justification - the header that it finalizes will be used as initial header. - let justification = justifications.next().await.ok_or_else(|| { - format!( - "Failed to read {} justification from the stream: stream has ended unexpectedly", - SourceChain::NAME, - ) - })?; + let justification = justifications + .next() + .await + .map_err(|err| err.to_string()) + .and_then(|justification| justification.ok_or_else(|| "stream has ended unexpectedly".into())) + .map_err(|err| { + format!( + "Failed to read {} justification from the stream: {}", + SourceChain::NAME, + err, + ) + })?; // Read initial header. let justification: GrandpaJustification = Decode::decode(&mut &justification.0[..]) diff --git a/bridges/relays/client-ethereum/Cargo.toml b/bridges/relays/client-ethereum/Cargo.toml index 7e2b86a22d..8ed3cc76f0 100644 --- a/bridges/relays/client-ethereum/Cargo.toml +++ b/bridges/relays/client-ethereum/Cargo.toml @@ -11,8 +11,8 @@ bp-eth-poa = { path = "../../primitives/ethereum-poa" } codec = { package = "parity-scale-codec", version = "2.2.0" } headers-relay = { path = "../headers" } hex-literal = "0.3" -jsonrpsee-proc-macros = "=0.2.0-alpha.6" -jsonrpsee-ws-client = "=0.2.0-alpha.6" +jsonrpsee-proc-macros = "0.2" +jsonrpsee-ws-client = "0.2" libsecp256k1 = { version = "0.3.4", default-features = false, features = ["hmac"] } log = "0.4.11" relay-utils = { path = "../utils" } diff --git a/bridges/relays/client-ethereum/src/error.rs b/bridges/relays/client-ethereum/src/error.rs index bcd8edc3f3..e01cdf1bf5 100644 --- a/bridges/relays/client-ethereum/src/error.rs +++ b/bridges/relays/client-ethereum/src/error.rs @@ -57,10 +57,9 @@ impl MaybeConnectionError for Error { fn is_connection_error(&self) -> bool { matches!( *self, - Error::RpcError(RpcError::TransportError(_)) - // right now if connection to the ws server is dropped (after it is already established), - // we're getting this error + Error::RpcError(RpcError::Transport(_)) | Error::RpcError(RpcError::Internal(_)) + | Error::RpcError(RpcError::RestartNeeded(_)) | Error::ClientNotSynced(_), ) } diff --git a/bridges/relays/client-substrate/Cargo.toml b/bridges/relays/client-substrate/Cargo.toml index 85e4636cb7..7c3e381259 100644 --- a/bridges/relays/client-substrate/Cargo.toml +++ b/bridges/relays/client-substrate/Cargo.toml @@ -9,8 +9,8 @@ license = "GPL-3.0-or-later WITH Classpath-exception-2.0" async-std = { version = "1.6.5", features = ["attributes"] } async-trait = "0.1.40" codec = { package = "parity-scale-codec", version = "2.2.0" } -jsonrpsee-proc-macros = "=0.2.0-alpha.6" -jsonrpsee-ws-client = "=0.2.0-alpha.6" +jsonrpsee-proc-macros = "0.2" +jsonrpsee-ws-client = "0.2" log = "0.4.11" num-traits = "0.2" rand = "0.7" diff --git a/bridges/relays/client-substrate/src/error.rs b/bridges/relays/client-substrate/src/error.rs index 304229ede1..f553d6867e 100644 --- a/bridges/relays/client-substrate/src/error.rs +++ b/bridges/relays/client-substrate/src/error.rs @@ -71,9 +71,7 @@ impl MaybeConnectionError for Error { fn is_connection_error(&self) -> bool { matches!( *self, - Error::RpcError(RpcError::TransportError(_)) - // right now if connection to the ws server is dropped (after it is already established), - // we're getting this error + Error::RpcError(RpcError::Transport(_)) | Error::RpcError(RpcError::Internal(_)) | Error::RpcError(RpcError::RestartNeeded(_)) | Error::ClientNotSynced(_), diff --git a/bridges/relays/client-substrate/src/finality_source.rs b/bridges/relays/client-substrate/src/finality_source.rs index 72a11ae990..546a3ede3e 100644 --- a/bridges/relays/client-substrate/src/finality_source.rs +++ b/bridges/relays/client-substrate/src/finality_source.rs @@ -134,20 +134,27 @@ where self.client.clone().subscribe_justifications().await?, move |mut subscription| async move { loop { - let next_justification = subscription.next().await?; + let log_error = |err| { + log::error!( + target: "bridge", + "Failed to read justification target from the {} justifications stream: {:?}", + P::SOURCE_NAME, + err, + ); + }; + + let next_justification = subscription + .next() + .await + .map_err(|err| log_error(err.to_string())) + .ok()??; let decoded_justification = GrandpaJustification::::decode(&mut &next_justification.0[..]); let justification = match decoded_justification { Ok(j) => j, Err(err) => { - log::error!( - target: "bridge", - "Failed to decode justification target from the {} justifications stream: {:?}", - P::SOURCE_NAME, - err, - ); - + log_error(format!("decode failed with error {:?}", err)); continue; } };