diff --git a/bridges/relays/client-substrate/src/error.rs b/bridges/relays/client-substrate/src/error.rs index 797af5cc5d..016ec774be 100644 --- a/bridges/relays/client-substrate/src/error.rs +++ b/bridges/relays/client-substrate/src/error.rs @@ -54,6 +54,9 @@ pub enum Error { /// The bridge pallet is halted and all transactions will be rejected. #[error("Bridge pallet is halted.")] BridgePalletIsHalted, + /// The bridge pallet is not yet initialized and all transactions will be rejected. + #[error("Bridge pallet is not initialized.")] + BridgePalletIsNotInitialized, /// An error has happened when we have tried to parse storage proof. #[error("Error when parsing storage proof: {0:?}.")] StorageProofError(bp_runtime::StorageProofError), diff --git a/bridges/relays/lib-substrate-relay/src/finality/initialize.rs b/bridges/relays/lib-substrate-relay/src/finality/initialize.rs index 58a0fc499f..2fc9302d90 100644 --- a/bridges/relays/lib-substrate-relay/src/finality/initialize.rs +++ b/bridges/relays/lib-substrate-relay/src/finality/initialize.rs @@ -110,7 +110,11 @@ where } /// Returns `Ok(true)` if bridge has already been initialized. -async fn is_initialized, SourceChain: Chain, TargetChain: Chain>( +pub(crate) async fn is_initialized< + E: Engine, + SourceChain: Chain, + TargetChain: Chain, +>( target_client: &Client, ) -> Result, BlockNumberOf>> { Ok(target_client diff --git a/bridges/relays/lib-substrate-relay/src/finality/target.rs b/bridges/relays/lib-substrate-relay/src/finality/target.rs index 6ca6be631a..12098a7479 100644 --- a/bridges/relays/lib-substrate-relay/src/finality/target.rs +++ b/bridges/relays/lib-substrate-relay/src/finality/target.rs @@ -53,10 +53,20 @@ impl SubstrateFinalityTarget

{ pub async fn ensure_pallet_active(&self) -> Result<(), Error> { let is_halted = self.client.storage_value(P::FinalityEngine::is_halted_key(), None).await?; if is_halted.unwrap_or(false) { - Err(Error::BridgePalletIsHalted) - } else { - Ok(()) + return Err(Error::BridgePalletIsHalted) } + + let is_initialized = + super::initialize::is_initialized::( + &self.client, + ) + .await + .map_err(|e| Error::Custom(e.to_string()))?; + if !is_initialized { + return Err(Error::BridgePalletIsNotInitialized) + } + + Ok(()) } }