Start version guards for the ED loop (#2678)

This commit is contained in:
Serban Iorga
2023-11-14 09:28:10 +02:00
committed by Bastian Köcher
parent 2718ed2709
commit 1c2b6b21da
15 changed files with 33 additions and 145 deletions
@@ -21,12 +21,10 @@ use crate::cli::bridge::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use relay_substrate_client::{AccountKeyPairOf, Client};
use substrate_relay_helper::{ use substrate_relay_helper::{
equivocation::SubstrateEquivocationDetectionPipeline, equivocation::SubstrateEquivocationDetectionPipeline,
finality::SubstrateFinalitySyncPipeline, finality::SubstrateFinalitySyncPipeline,
finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline}, finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline},
TransactionParams,
}; };
/// Description of Kusama -> PolkadotBridgeHub finalized headers bridge. /// Description of Kusama -> PolkadotBridgeHub finalized headers bridge.
@@ -58,20 +56,6 @@ impl SubstrateFinalityPipeline for KusamaFinalityToBridgeHubPolkadot {
#[async_trait] #[async_trait]
impl SubstrateFinalitySyncPipeline for KusamaFinalityToBridgeHubPolkadot { impl SubstrateFinalitySyncPipeline for KusamaFinalityToBridgeHubPolkadot {
type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder; type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder;
async fn start_relay_guards(
target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
#[async_trait] #[async_trait]
@@ -21,12 +21,10 @@ use crate::cli::bridge::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use relay_substrate_client::{AccountKeyPairOf, Client};
use substrate_relay_helper::{ use substrate_relay_helper::{
equivocation::SubstrateEquivocationDetectionPipeline, equivocation::SubstrateEquivocationDetectionPipeline,
finality::SubstrateFinalitySyncPipeline, finality::SubstrateFinalitySyncPipeline,
finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline}, finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline},
TransactionParams,
}; };
/// Description of Polkadot -> KusamaBridgeHub finalized headers bridge. /// Description of Polkadot -> KusamaBridgeHub finalized headers bridge.
@@ -58,20 +56,6 @@ impl SubstrateFinalityPipeline for PolkadotFinalityToBridgeHubKusama {
#[async_trait] #[async_trait]
impl SubstrateFinalitySyncPipeline for PolkadotFinalityToBridgeHubKusama { impl SubstrateFinalitySyncPipeline for PolkadotFinalityToBridgeHubKusama {
type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder; type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder;
async fn start_relay_guards(
target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
#[async_trait] #[async_trait]
@@ -22,12 +22,10 @@ use crate::cli::bridge::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use relay_substrate_client::{AccountKeyPairOf, Client};
use substrate_relay_helper::{ use substrate_relay_helper::{
equivocation::SubstrateEquivocationDetectionPipeline, equivocation::SubstrateEquivocationDetectionPipeline,
finality::SubstrateFinalitySyncPipeline, finality::SubstrateFinalitySyncPipeline,
finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline}, finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline},
TransactionParams,
}; };
/// Description of `PolkadotBulletin` -> `PolkadotBridgeHub` finalized headers bridge. /// Description of `PolkadotBulletin` -> `PolkadotBridgeHub` finalized headers bridge.
@@ -59,20 +57,6 @@ impl SubstrateFinalityPipeline for PolkadotBulletinFinalityToBridgeHubPolkadot {
#[async_trait] #[async_trait]
impl SubstrateFinalitySyncPipeline for PolkadotBulletinFinalityToBridgeHubPolkadot { impl SubstrateFinalitySyncPipeline for PolkadotBulletinFinalityToBridgeHubPolkadot {
type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder; type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder;
async fn start_relay_guards(
target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
#[async_trait] #[async_trait]
@@ -21,12 +21,10 @@ use crate::cli::bridge::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use relay_substrate_client::{AccountKeyPairOf, Client};
use substrate_relay_helper::{ use substrate_relay_helper::{
equivocation::SubstrateEquivocationDetectionPipeline, equivocation::SubstrateEquivocationDetectionPipeline,
finality::SubstrateFinalitySyncPipeline, finality::SubstrateFinalitySyncPipeline,
finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline}, finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline},
TransactionParams,
}; };
/// Description of Polkadot -> `PolkadotBulletin` finalized headers bridge. /// Description of Polkadot -> `PolkadotBulletin` finalized headers bridge.
@@ -58,20 +56,6 @@ impl SubstrateFinalityPipeline for PolkadotFinalityToPolkadotBulletin {
#[async_trait] #[async_trait]
impl SubstrateFinalitySyncPipeline for PolkadotFinalityToPolkadotBulletin { impl SubstrateFinalitySyncPipeline for PolkadotFinalityToPolkadotBulletin {
type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder; type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder;
async fn start_relay_guards(
target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
#[async_trait] #[async_trait]
@@ -21,12 +21,10 @@ use crate::cli::bridge::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use relay_substrate_client::{AccountKeyPairOf, Client};
use substrate_relay_helper::{ use substrate_relay_helper::{
equivocation::SubstrateEquivocationDetectionPipeline, equivocation::SubstrateEquivocationDetectionPipeline,
finality::SubstrateFinalitySyncPipeline, finality::SubstrateFinalitySyncPipeline,
finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline}, finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline},
TransactionParams,
}; };
/// Description of Rococo -> Westend finalized headers bridge. /// Description of Rococo -> Westend finalized headers bridge.
@@ -58,20 +56,6 @@ impl SubstrateFinalityPipeline for RococoFinalityToBridgeHubWestend {
#[async_trait] #[async_trait]
impl SubstrateFinalitySyncPipeline for RococoFinalityToBridgeHubWestend { impl SubstrateFinalitySyncPipeline for RococoFinalityToBridgeHubWestend {
type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder; type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder;
async fn start_relay_guards(
target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
#[async_trait] #[async_trait]
@@ -21,12 +21,10 @@ use crate::cli::bridge::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use relay_substrate_client::{AccountKeyPairOf, Client};
use substrate_relay_helper::{ use substrate_relay_helper::{
equivocation::SubstrateEquivocationDetectionPipeline, equivocation::SubstrateEquivocationDetectionPipeline,
finality::SubstrateFinalitySyncPipeline, finality::SubstrateFinalitySyncPipeline,
finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline}, finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline},
TransactionParams,
}; };
/// Description of Westend -> Rococo finalized headers bridge. /// Description of Westend -> Rococo finalized headers bridge.
@@ -58,20 +56,6 @@ impl SubstrateFinalityPipeline for WestendFinalityToBridgeHubRococo {
#[async_trait] #[async_trait]
impl SubstrateFinalitySyncPipeline for WestendFinalityToBridgeHubRococo { impl SubstrateFinalitySyncPipeline for WestendFinalityToBridgeHubRococo {
type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder; type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder;
async fn start_relay_guards(
target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
#[async_trait] #[async_trait]
@@ -21,12 +21,10 @@ use crate::cli::bridge::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use relay_substrate_client::{AccountKeyPairOf, Client};
use substrate_relay_helper::{ use substrate_relay_helper::{
equivocation::SubstrateEquivocationDetectionPipeline, equivocation::SubstrateEquivocationDetectionPipeline,
finality::SubstrateFinalitySyncPipeline, finality::SubstrateFinalitySyncPipeline,
finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline}, finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline},
TransactionParams,
}; };
/// Description of Rococo -> Wococo finalized headers bridge. /// Description of Rococo -> Wococo finalized headers bridge.
@@ -58,20 +56,6 @@ impl SubstrateFinalityPipeline for RococoFinalityToBridgeHubWococo {
#[async_trait] #[async_trait]
impl SubstrateFinalitySyncPipeline for RococoFinalityToBridgeHubWococo { impl SubstrateFinalitySyncPipeline for RococoFinalityToBridgeHubWococo {
type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder; type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder;
async fn start_relay_guards(
target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
#[async_trait] #[async_trait]
@@ -21,12 +21,10 @@ use crate::cli::bridge::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use relay_substrate_client::{AccountKeyPairOf, Client};
use substrate_relay_helper::{ use substrate_relay_helper::{
equivocation::SubstrateEquivocationDetectionPipeline, equivocation::SubstrateEquivocationDetectionPipeline,
finality::SubstrateFinalitySyncPipeline, finality::SubstrateFinalitySyncPipeline,
finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline}, finality_base::{engine::Grandpa as GrandpaFinalityEngine, SubstrateFinalityPipeline},
TransactionParams,
}; };
/// Description of Wococo -> Rococo finalized headers bridge. /// Description of Wococo -> Rococo finalized headers bridge.
@@ -58,20 +56,6 @@ impl SubstrateFinalityPipeline for WococoFinalityToBridgeHubRococo {
#[async_trait] #[async_trait]
impl SubstrateFinalitySyncPipeline for WococoFinalityToBridgeHubRococo { impl SubstrateFinalitySyncPipeline for WococoFinalityToBridgeHubRococo {
type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder; type SubmitFinalityProofCallBuilder = SubmitFinalityProofCallBuilder;
async fn start_relay_guards(
target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
#[async_trait] #[async_trait]
@@ -37,7 +37,7 @@ use async_trait::async_trait;
use relay_substrate_client::ChainWithTransactions; use relay_substrate_client::ChainWithTransactions;
use structopt::StructOpt; use structopt::StructOpt;
use strum::{EnumString, EnumVariantNames, VariantNames}; use strum::{EnumString, EnumVariantNames, VariantNames};
use substrate_relay_helper::equivocation; use substrate_relay_helper::{equivocation, equivocation::SubstrateEquivocationDetectionPipeline};
/// Start equivocation detection loop. /// Start equivocation detection loop.
#[derive(StructOpt)] #[derive(StructOpt)]
@@ -73,8 +73,15 @@ where
Self::Source: ChainWithTransactions, Self::Source: ChainWithTransactions,
{ {
async fn start(data: DetectEquivocations) -> anyhow::Result<()> { async fn start(data: DetectEquivocations) -> anyhow::Result<()> {
let source_client = data.source.into_client::<Self::Source>().await?;
Self::Equivocation::start_relay_guards(
&source_client,
source_client.can_start_version_guard(),
)
.await?;
equivocation::run::<Self::Equivocation>( equivocation::run::<Self::Equivocation>(
data.source.into_client::<Self::Source>().await?, source_client,
data.target.into_client::<Self::Target>().await?, data.target.into_client::<Self::Target>().await?,
data.source_sign.transaction_params::<Self::Source>()?, data.source_sign.transaction_params::<Self::Source>()?,
data.prometheus_params.into_metrics_params()?, data.prometheus_params.into_metrics_params()?,
@@ -96,11 +96,7 @@ trait HeadersRelayer: RelayToRelayHeadersCliBridge {
signer: target_sign, signer: target_sign,
mortality: target_transactions_mortality, mortality: target_transactions_mortality,
}; };
Self::Finality::start_relay_guards( Self::Finality::start_relay_guards(&target_client, target_client.can_start_version_guard())
&target_client,
&target_transactions_params,
target_client.can_start_version_guard(),
)
.await?; .await?;
substrate_relay_helper::finality::run::<Self::Finality>( substrate_relay_helper::finality::run::<Self::Finality>(
@@ -218,13 +218,11 @@ where
<L2R as ParachainToRelayHeadersCliBridge>::RelayFinality::start_relay_guards( <L2R as ParachainToRelayHeadersCliBridge>::RelayFinality::start_relay_guards(
&self.common.right.client, &self.common.right.client,
&self.left_headers_to_right_transaction_params,
self.common.right.client.can_start_version_guard(), self.common.right.client.can_start_version_guard(),
) )
.await?; .await?;
<R2L as ParachainToRelayHeadersCliBridge>::RelayFinality::start_relay_guards( <R2L as ParachainToRelayHeadersCliBridge>::RelayFinality::start_relay_guards(
&self.common.left.client, &self.common.left.client,
&self.right_headers_to_left_transaction_params,
self.common.left.client.can_start_version_guard(), self.common.left.client.can_start_version_guard(),
) )
.await?; .await?;
@@ -200,13 +200,11 @@ where
<L2R as RelayToRelayHeadersCliBridge>::Finality::start_relay_guards( <L2R as RelayToRelayHeadersCliBridge>::Finality::start_relay_guards(
&self.common.right.client, &self.common.right.client,
&self.left_headers_to_right_transaction_params,
self.common.right.client.can_start_version_guard(), self.common.right.client.can_start_version_guard(),
) )
.await?; .await?;
<R2L as ParachainToRelayHeadersCliBridge>::RelayFinality::start_relay_guards( <R2L as ParachainToRelayHeadersCliBridge>::RelayFinality::start_relay_guards(
&self.common.left.client, &self.common.left.client,
&self.right_headers_to_left_transaction_params,
self.common.left.client.can_start_version_guard(), self.common.left.client.can_start_version_guard(),
) )
.await?; .await?;
@@ -156,13 +156,11 @@ where
<L2R as RelayToRelayHeadersCliBridge>::Finality::start_relay_guards( <L2R as RelayToRelayHeadersCliBridge>::Finality::start_relay_guards(
&self.common.right.client, &self.common.right.client,
&self.left_to_right_transaction_params,
self.common.right.client.can_start_version_guard(), self.common.right.client.can_start_version_guard(),
) )
.await?; .await?;
<R2L as RelayToRelayHeadersCliBridge>::Finality::start_relay_guards( <R2L as RelayToRelayHeadersCliBridge>::Finality::start_relay_guards(
&self.common.left.client, &self.common.left.client,
&self.right_to_left_transaction_params,
self.common.left.client.can_start_version_guard(), self.common.left.client.can_start_version_guard(),
) )
.await?; .await?;
@@ -66,6 +66,20 @@ pub trait SubstrateEquivocationDetectionPipeline:
{ {
/// How the `report_equivocation` call is built ? /// How the `report_equivocation` call is built ?
type ReportEquivocationCallBuilder: ReportEquivocationCallBuilder<Self>; type ReportEquivocationCallBuilder: ReportEquivocationCallBuilder<Self>;
/// Add relay guards if required.
async fn start_relay_guards(
source_client: &Client<Self::SourceChain>,
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
source_client.clone(),
source_client.simple_runtime_version().await?.spec_version,
);
}
Ok(())
}
} }
type FinalityProoffOf<P> = <<P as SubstrateFinalityPipeline>::FinalityEngine as Engine< type FinalityProoffOf<P> = <<P as SubstrateFinalityPipeline>::FinalityEngine as Engine<
@@ -75,10 +75,15 @@ pub trait SubstrateFinalitySyncPipeline: BaseSubstrateFinalitySyncPipeline {
/// Add relay guards if required. /// Add relay guards if required.
async fn start_relay_guards( async fn start_relay_guards(
_target_client: &Client<Self::TargetChain>, target_client: &Client<Self::TargetChain>,
_transaction_params: &TransactionParams<AccountKeyPairOf<Self::TargetChain>>, enable_version_guard: bool,
_enable_version_guard: bool,
) -> relay_substrate_client::Result<()> { ) -> relay_substrate_client::Result<()> {
if enable_version_guard {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
target_client.simple_runtime_version().await?.spec_version,
);
}
Ok(()) Ok(())
} }
} }