do not start spec_version guard when version mode is set to auto (#1278)

This commit is contained in:
Svyatoslav Nikolsky
2022-01-12 10:19:46 +03:00
committed by Bastian Köcher
parent a7fa7a491f
commit c4837d2368
12 changed files with 153 additions and 61 deletions
+1
View File
@@ -8,6 +8,7 @@ license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
[dependencies]
anyhow = "1.0"
async-std = "1.9.0"
async-trait = "0.1.42"
codec = { package = "parity-scale-codec", version = "2.2.0" }
futures = "0.3.12"
hex = "0.4"
@@ -16,7 +16,8 @@
//! Kusama-to-Polkadot headers sync entrypoint.
use sp_core::Pair;
use async_trait::async_trait;
use relay_polkadot_client::Polkadot;
use substrate_relay_helper::{finality_pipeline::SubstrateFinalitySyncPipeline, TransactionParams};
/// Maximal saturating difference between `balance(now)` and `balance(now-24h)` to treat
@@ -36,26 +37,26 @@ substrate_relay_helper::generate_mocked_submit_finality_proof_call_builder!(
relay_polkadot_client::runtime::BridgeKusamaGrandpaCall::submit_finality_proof
);
#[async_trait]
impl SubstrateFinalitySyncPipeline for KusamaFinalityToPolkadot {
type SourceChain = relay_kusama_client::Kusama;
type TargetChain = relay_polkadot_client::Polkadot;
type TargetChain = Polkadot;
type SubmitFinalityProofCallBuilder = KusamaFinalityToPolkadotCallBuilder;
type TransactionSignScheme = relay_polkadot_client::Polkadot;
type TransactionSignScheme = Polkadot;
fn start_relay_guards(
target_client: &relay_substrate_client::Client<relay_polkadot_client::Polkadot>,
async fn start_relay_guards(
target_client: &relay_substrate_client::Client<Polkadot>,
transaction_params: &TransactionParams<sp_core::sr25519::Pair>,
) {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
bp_polkadot::VERSION.spec_version,
);
relay_substrate_client::guard::abort_when_account_balance_decreased(
target_client.clone(),
transaction_params.signer.public().into(),
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
substrate_relay_helper::finality_guards::start::<Polkadot, Polkadot>(
target_client,
transaction_params,
enable_version_guard,
MAXIMAL_BALANCE_DECREASE_PER_DAY,
);
)
.await
}
}
@@ -16,7 +16,8 @@
//! Polkadot-to-Kusama headers sync entrypoint.
use sp_core::Pair;
use async_trait::async_trait;
use relay_kusama_client::Kusama;
use substrate_relay_helper::{finality_pipeline::SubstrateFinalitySyncPipeline, TransactionParams};
/// Maximal saturating difference between `balance(now)` and `balance(now-24h)` to treat
@@ -36,26 +37,26 @@ substrate_relay_helper::generate_mocked_submit_finality_proof_call_builder!(
relay_kusama_client::runtime::BridgePolkadotGrandpaCall::submit_finality_proof
);
#[async_trait]
impl SubstrateFinalitySyncPipeline for PolkadotFinalityToKusama {
type SourceChain = relay_polkadot_client::Polkadot;
type TargetChain = relay_kusama_client::Kusama;
type TargetChain = Kusama;
type SubmitFinalityProofCallBuilder = PolkadotFinalityToKusamaCallBuilder;
type TransactionSignScheme = relay_kusama_client::Kusama;
type TransactionSignScheme = Kusama;
fn start_relay_guards(
target_client: &relay_substrate_client::Client<relay_kusama_client::Kusama>,
async fn start_relay_guards(
target_client: &relay_substrate_client::Client<Kusama>,
transaction_params: &TransactionParams<sp_core::sr25519::Pair>,
) {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
bp_kusama::VERSION.spec_version,
);
relay_substrate_client::guard::abort_when_account_balance_decreased(
target_client.clone(),
transaction_params.signer.public().into(),
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
substrate_relay_helper::finality_guards::start::<Kusama, Kusama>(
target_client,
transaction_params,
enable_version_guard,
MAXIMAL_BALANCE_DECREASE_PER_DAY,
);
)
.await
}
}
@@ -18,7 +18,8 @@
use crate::chains::wococo_headers_to_rococo::MAXIMAL_BALANCE_DECREASE_PER_DAY;
use sp_core::Pair;
use async_trait::async_trait;
use relay_wococo_client::Wococo;
use substrate_relay_helper::{finality_pipeline::SubstrateFinalitySyncPipeline, TransactionParams};
/// Description of Rococo -> Wococo finalized headers bridge.
@@ -31,25 +32,25 @@ substrate_relay_helper::generate_mocked_submit_finality_proof_call_builder!(
relay_wococo_client::runtime::BridgeGrandpaRococoCall::submit_finality_proof
);
#[async_trait]
impl SubstrateFinalitySyncPipeline for RococoFinalityToWococo {
type SourceChain = relay_rococo_client::Rococo;
type TargetChain = relay_wococo_client::Wococo;
type TargetChain = Wococo;
type SubmitFinalityProofCallBuilder = RococoFinalityToWococoCallBuilder;
type TransactionSignScheme = relay_wococo_client::Wococo;
type TransactionSignScheme = Wococo;
fn start_relay_guards(
target_client: &relay_substrate_client::Client<relay_wococo_client::Wococo>,
async fn start_relay_guards(
target_client: &relay_substrate_client::Client<Wococo>,
transaction_params: &TransactionParams<sp_core::sr25519::Pair>,
) {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
bp_wococo::VERSION.spec_version,
);
relay_substrate_client::guard::abort_when_account_balance_decreased(
target_client.clone(),
transaction_params.signer.public().into(),
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
substrate_relay_helper::finality_guards::start::<Wococo, Wococo>(
target_client,
transaction_params,
enable_version_guard,
MAXIMAL_BALANCE_DECREASE_PER_DAY,
);
)
.await
}
}
@@ -16,7 +16,8 @@
//! Wococo-to-Rococo headers sync entrypoint.
use sp_core::Pair;
use async_trait::async_trait;
use relay_rococo_client::Rococo;
use substrate_relay_helper::{finality_pipeline::SubstrateFinalitySyncPipeline, TransactionParams};
/// Maximal saturating difference between `balance(now)` and `balance(now-24h)` to treat
@@ -36,26 +37,26 @@ substrate_relay_helper::generate_mocked_submit_finality_proof_call_builder!(
relay_rococo_client::runtime::BridgeGrandpaWococoCall::submit_finality_proof
);
#[async_trait]
impl SubstrateFinalitySyncPipeline for WococoFinalityToRococo {
type SourceChain = relay_wococo_client::Wococo;
type TargetChain = relay_rococo_client::Rococo;
type TargetChain = Rococo;
type SubmitFinalityProofCallBuilder = WococoFinalityToRococoCallBuilder;
type TransactionSignScheme = relay_rococo_client::Rococo;
type TransactionSignScheme = Rococo;
fn start_relay_guards(
target_client: &relay_substrate_client::Client<relay_rococo_client::Rococo>,
async fn start_relay_guards(
target_client: &relay_substrate_client::Client<Rococo>,
transaction_params: &TransactionParams<sp_core::sr25519::Pair>,
) {
relay_substrate_client::guard::abort_on_spec_version_change(
target_client.clone(),
bp_rococo::VERSION.spec_version,
);
relay_substrate_client::guard::abort_when_account_balance_decreased(
target_client.clone(),
transaction_params.signer.public().into(),
enable_version_guard: bool,
) -> relay_substrate_client::Result<()> {
substrate_relay_helper::finality_guards::start::<Rococo, Rococo>(
target_client,
transaction_params,
enable_version_guard,
MAXIMAL_BALANCE_DECREASE_PER_DAY,
);
)
.await
}
}
@@ -528,6 +528,16 @@ macro_rules! declare_chain_options {
}
impl [<$chain ConnectionParams>] {
/// Returns `true` if version guard can be started.
///
/// There's no reason to run version guard when version mode is set to `Auto`. It can
/// lead to relay shutdown when chain is upgraded, even though we have explicitly
/// said that we don't want to shutdown.
#[allow(dead_code)]
pub fn can_start_version_guard(&self) -> bool {
self.[<$chain_prefix _runtime_version>].[<$chain_prefix _version_mode>] != RuntimeVersionType::Auto
}
/// Convert connection params into Substrate client.
pub async fn to_client<Chain: CliChain>(
&self,
@@ -157,7 +157,12 @@ impl RelayHeaders {
signer: target_sign,
mortality: target_transactions_mortality,
};
Finality::start_relay_guards(&target_client, &target_transactions_params);
Finality::start_relay_guards(
&target_client,
&target_transactions_params,
self.target.can_start_version_guard(),
)
.await?;
substrate_relay_helper::finality_pipeline::run::<Finality>(
source_client,
@@ -512,11 +512,15 @@ impl RelayHeadersAndMessages {
LeftToRightFinality::start_relay_guards(
&right_client,
&left_to_right_transaction_params,
);
params.right.can_start_version_guard(),
)
.await?;
RightToLeftFinality::start_relay_guards(
&left_client,
&right_to_left_transaction_params,
);
params.left.can_start_version_guard(),
)
.await?;
let left_to_right_on_demand_headers = OnDemandHeadersRelay::new::<LeftToRightFinality>(
left_client.clone(),
right_client.clone(),