diff --git a/bridges/relays/bin-substrate/src/chains/rococo_headers_to_wococo.rs b/bridges/relays/bin-substrate/src/chains/rococo_headers_to_wococo.rs index 5247c6068b5ec..4dfe800b2b6cd 100644 --- a/bridges/relays/bin-substrate/src/chains/rococo_headers_to_wococo.rs +++ b/bridges/relays/bin-substrate/src/chains/rococo_headers_to_wococo.rs @@ -21,7 +21,7 @@ use crate::finality_pipeline::{SubstrateFinalitySyncPipeline, SubstrateFinalityT use bp_header_chain::justification::GrandpaJustification; use codec::Encode; use relay_rococo_client::{Rococo, SyncHeader as RococoSyncHeader}; -use relay_substrate_client::{Chain, TransactionSignScheme}; +use relay_substrate_client::{Chain, Client, TransactionSignScheme}; use relay_utils::metrics::MetricsParams; use relay_wococo_client::{SigningParams as WococoSigningParams, Wococo}; use sp_core::{Bytes, Pair}; @@ -38,6 +38,13 @@ impl SubstrateFinalitySyncPipeline for RococoFinalityToWococo { crate::chains::add_polkadot_kusama_price_metrics::(params) } + fn start_relay_guards(target_client: &Client) { + relay_substrate_client::guard::abort_on_spec_version_change( + target_client.clone(), + bp_wococo::VERSION.spec_version, + ) + } + fn transactions_author(&self) -> bp_wococo::AccountId { (*self.target_sign.public().as_array_ref()).into() } diff --git a/bridges/relays/bin-substrate/src/chains/wococo_headers_to_rococo.rs b/bridges/relays/bin-substrate/src/chains/wococo_headers_to_rococo.rs index 9dfae5294e292..3b6a478269a97 100644 --- a/bridges/relays/bin-substrate/src/chains/wococo_headers_to_rococo.rs +++ b/bridges/relays/bin-substrate/src/chains/wococo_headers_to_rococo.rs @@ -21,7 +21,7 @@ use crate::finality_pipeline::{SubstrateFinalitySyncPipeline, SubstrateFinalityT use bp_header_chain::justification::GrandpaJustification; use codec::Encode; use relay_rococo_client::{Rococo, SigningParams as RococoSigningParams}; -use relay_substrate_client::{Chain, TransactionSignScheme}; +use relay_substrate_client::{Chain, Client, TransactionSignScheme}; use relay_utils::metrics::MetricsParams; use relay_wococo_client::{SyncHeader as WococoSyncHeader, Wococo}; use sp_core::{Bytes, Pair}; @@ -38,6 +38,13 @@ impl SubstrateFinalitySyncPipeline for WococoFinalityToRococo { crate::chains::add_polkadot_kusama_price_metrics::(params) } + fn start_relay_guards(target_client: &Client) { + relay_substrate_client::guard::abort_on_spec_version_change( + target_client.clone(), + bp_rococo::VERSION.spec_version, + ) + } + fn transactions_author(&self) -> bp_rococo::AccountId { (*self.target_sign.public().as_array_ref()).into() } diff --git a/bridges/relays/bin-substrate/src/cli/relay_headers.rs b/bridges/relays/bin-substrate/src/cli/relay_headers.rs index e8459b58bf605..c0d80f80d36be 100644 --- a/bridges/relays/bin-substrate/src/cli/relay_headers.rs +++ b/bridges/relays/bin-substrate/src/cli/relay_headers.rs @@ -97,6 +97,7 @@ impl RelayHeaders { let target_client = self.target.to_client::().await?; let target_sign = self.target_sign.to_keypair::()?; let metrics_params = Finality::customize_metrics(self.prometheus_params.into())?; + Finality::start_relay_guards(&target_client); crate::finality_pipeline::run( Finality::new(target_client.clone(), target_sign), diff --git a/bridges/relays/bin-substrate/src/finality_pipeline.rs b/bridges/relays/bin-substrate/src/finality_pipeline.rs index dad69b1576b0e..f1c72184cc080 100644 --- a/bridges/relays/bin-substrate/src/finality_pipeline.rs +++ b/bridges/relays/bin-substrate/src/finality_pipeline.rs @@ -46,6 +46,13 @@ pub trait SubstrateFinalitySyncPipeline: FinalitySyncPipeline { Ok(params) } + /// Start finality relay guards. + /// + /// Different finality bridges may have different set of guards - e.g. on ephemeral chains we + /// don't need version guards, on test chains we don't care that much about relayer account + /// balance, ... So the implementation is left to the specific bridges. + fn start_relay_guards(_target_client: &Client) {} + /// Returns id of account that we're using to sign transactions at target chain. fn transactions_author(&self) -> ::AccountId;