From 117dd572942ddb13a72f8505943328eb7f9ef785 Mon Sep 17 00:00:00 2001 From: Serban Iorga Date: Tue, 10 Jan 2023 17:32:22 +0200 Subject: [PATCH 1/2] Define SimpleRuntimeVersion --- relays/bin-substrate/src/chains/millau.rs | 5 ++- relays/bin-substrate/src/chains/rialto.rs | 5 ++- .../src/chains/rialto_parachain.rs | 5 +-- relays/bin-substrate/src/chains/rococo.rs | 6 +-- .../rococo_headers_to_bridge_hub_wococo.rs | 2 +- relays/bin-substrate/src/chains/westend.rs | 6 +-- relays/bin-substrate/src/chains/wococo.rs | 6 +-- .../wococo_headers_to_bridge_hub_rococo.rs | 2 +- relays/bin-substrate/src/cli/chain_schema.rs | 19 ++++----- relays/bin-substrate/src/cli/mod.rs | 3 +- .../src/cli/resubmit_transactions.rs | 10 ++--- relays/client-substrate/src/client.rs | 41 +++++++++++++------ relays/client-substrate/src/lib.rs | 4 +- .../src/finality/guards.rs | 2 +- 14 files changed, 66 insertions(+), 50 deletions(-) diff --git a/relays/bin-substrate/src/chains/millau.rs b/relays/bin-substrate/src/chains/millau.rs index f318274750d..ca9a32a48a5 100644 --- a/relays/bin-substrate/src/chains/millau.rs +++ b/relays/bin-substrate/src/chains/millau.rs @@ -20,7 +20,7 @@ use crate::cli::{bridge, encode_message::CliEncodeMessage, CliChain}; use bp_rialto_parachain::RIALTO_PARACHAIN_ID; use bp_runtime::EncodedOrDecodedCall; use relay_millau_client::Millau; -use sp_version::RuntimeVersion; +use relay_substrate_client::SimpleRuntimeVersion; use xcm::latest::prelude::*; impl CliEncodeMessage for Millau { @@ -53,5 +53,6 @@ impl CliEncodeMessage for Millau { } impl CliChain for Millau { - const RUNTIME_VERSION: Option = Some(millau_runtime::VERSION); + const RUNTIME_VERSION: Option = + Some(SimpleRuntimeVersion::from_runtime_version(&millau_runtime::VERSION)); } diff --git a/relays/bin-substrate/src/chains/rialto.rs b/relays/bin-substrate/src/chains/rialto.rs index 8a473dc303c..e9e2d0b3eaf 100644 --- a/relays/bin-substrate/src/chains/rialto.rs +++ b/relays/bin-substrate/src/chains/rialto.rs @@ -19,7 +19,7 @@ use crate::cli::{bridge, encode_message::CliEncodeMessage, CliChain}; use bp_runtime::EncodedOrDecodedCall; use relay_rialto_client::Rialto; -use sp_version::RuntimeVersion; +use relay_substrate_client::SimpleRuntimeVersion; use xcm::latest::prelude::*; impl CliEncodeMessage for Rialto { @@ -45,5 +45,6 @@ impl CliEncodeMessage for Rialto { } impl CliChain for Rialto { - const RUNTIME_VERSION: Option = Some(rialto_runtime::VERSION); + const RUNTIME_VERSION: Option = + Some(SimpleRuntimeVersion::from_runtime_version(&rialto_runtime::VERSION)); } diff --git a/relays/bin-substrate/src/chains/rialto_parachain.rs b/relays/bin-substrate/src/chains/rialto_parachain.rs index 4d1e1b02e37..54704e72947 100644 --- a/relays/bin-substrate/src/chains/rialto_parachain.rs +++ b/relays/bin-substrate/src/chains/rialto_parachain.rs @@ -20,8 +20,7 @@ use crate::cli::{bridge, encode_message::CliEncodeMessage, CliChain}; use bp_runtime::EncodedOrDecodedCall; use bridge_runtime_common::CustomNetworkId; use relay_rialto_parachain_client::RialtoParachain; -use relay_substrate_client::calls::XcmCall; -use sp_version::RuntimeVersion; +use relay_substrate_client::{calls::XcmCall, SimpleRuntimeVersion}; use xcm::latest::prelude::*; impl CliEncodeMessage for RialtoParachain { @@ -45,5 +44,5 @@ impl CliEncodeMessage for RialtoParachain { } impl CliChain for RialtoParachain { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = None; } diff --git a/relays/bin-substrate/src/chains/rococo.rs b/relays/bin-substrate/src/chains/rococo.rs index 6805c021a21..3cfe950b07f 100644 --- a/relays/bin-substrate/src/chains/rococo.rs +++ b/relays/bin-substrate/src/chains/rococo.rs @@ -19,12 +19,12 @@ use crate::cli::CliChain; use relay_bridge_hub_rococo_client::BridgeHubRococo; use relay_rococo_client::Rococo; -use sp_version::RuntimeVersion; +use relay_substrate_client::SimpleRuntimeVersion; impl CliChain for Rococo { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = None; } impl CliChain for BridgeHubRococo { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = None; } diff --git a/relays/bin-substrate/src/chains/rococo_headers_to_bridge_hub_wococo.rs b/relays/bin-substrate/src/chains/rococo_headers_to_bridge_hub_wococo.rs index 6cdae2b212b..0de1fd9396a 100644 --- a/relays/bin-substrate/src/chains/rococo_headers_to_bridge_hub_wococo.rs +++ b/relays/bin-substrate/src/chains/rococo_headers_to_bridge_hub_wococo.rs @@ -52,7 +52,7 @@ impl SubstrateFinalitySyncPipeline for RococoFinalityToBridgeHubWococo { if enable_version_guard { relay_substrate_client::guard::abort_on_spec_version_change( target_client.clone(), - target_client.simple_runtime_version().await?.0, + target_client.simple_runtime_version().await?.spec_version, ); } Ok(()) diff --git a/relays/bin-substrate/src/chains/westend.rs b/relays/bin-substrate/src/chains/westend.rs index 50ae0349576..9cf639e9874 100644 --- a/relays/bin-substrate/src/chains/westend.rs +++ b/relays/bin-substrate/src/chains/westend.rs @@ -17,13 +17,13 @@ //! Westend chain specification for CLI. use crate::cli::CliChain; +use relay_substrate_client::SimpleRuntimeVersion; use relay_westend_client::{Westend, Westmint}; -use sp_version::RuntimeVersion; impl CliChain for Westend { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = None; } impl CliChain for Westmint { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = None; } diff --git a/relays/bin-substrate/src/chains/wococo.rs b/relays/bin-substrate/src/chains/wococo.rs index 0bbfa676fe9..afb4fc2c4b2 100644 --- a/relays/bin-substrate/src/chains/wococo.rs +++ b/relays/bin-substrate/src/chains/wococo.rs @@ -18,13 +18,13 @@ use crate::cli::CliChain; use relay_bridge_hub_wococo_client::BridgeHubWococo; +use relay_substrate_client::SimpleRuntimeVersion; use relay_wococo_client::Wococo; -use sp_version::RuntimeVersion; impl CliChain for Wococo { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = None; } impl CliChain for BridgeHubWococo { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = None; } diff --git a/relays/bin-substrate/src/chains/wococo_headers_to_bridge_hub_rococo.rs b/relays/bin-substrate/src/chains/wococo_headers_to_bridge_hub_rococo.rs index 6089ae7328c..e9054fd31e9 100644 --- a/relays/bin-substrate/src/chains/wococo_headers_to_bridge_hub_rococo.rs +++ b/relays/bin-substrate/src/chains/wococo_headers_to_bridge_hub_rococo.rs @@ -52,7 +52,7 @@ impl SubstrateFinalitySyncPipeline for WococoFinalityToBridgeHubRococo { if enable_version_guard { relay_substrate_client::guard::abort_on_spec_version_change( target_client.clone(), - target_client.simple_runtime_version().await?.0, + target_client.simple_runtime_version().await?.spec_version, ); } Ok(()) diff --git a/relays/bin-substrate/src/cli/chain_schema.rs b/relays/bin-substrate/src/cli/chain_schema.rs index 3993b74250d..bbc95d7dcdb 100644 --- a/relays/bin-substrate/src/cli/chain_schema.rs +++ b/relays/bin-substrate/src/cli/chain_schema.rs @@ -20,7 +20,7 @@ use structopt::StructOpt; use strum::{EnumString, EnumVariantNames}; use crate::cli::CliChain; -pub use relay_substrate_client::ChainRuntimeVersion; +pub use relay_substrate_client::{ChainRuntimeVersion, SimpleRuntimeVersion}; use substrate_relay_helper::TransactionParams; #[doc = "Runtime version params."] @@ -57,25 +57,24 @@ macro_rules! declare_chain_runtime_version_params_cli_schema { /// Converts self into `ChainRuntimeVersion`. pub fn into_runtime_version( self, - bundle_runtime_version: Option, + bundle_runtime_version: Option, ) -> anyhow::Result { Ok(match self.[<$chain_prefix _version_mode>] { RuntimeVersionType::Auto => ChainRuntimeVersion::Auto, RuntimeVersionType::Custom => { - let except_spec_version = self.[<$chain_prefix _spec_version>] + let custom_spec_version = self.[<$chain_prefix _spec_version>] .ok_or_else(|| anyhow::Error::msg(format!("The {}-spec-version is required when choose custom mode", stringify!($chain_prefix))))?; - let except_transaction_version = self.[<$chain_prefix _transaction_version>] + let custom_transaction_version = self.[<$chain_prefix _transaction_version>] .ok_or_else(|| anyhow::Error::msg(format!("The {}-transaction-version is required when choose custom mode", stringify!($chain_prefix))))?; ChainRuntimeVersion::Custom( - except_spec_version, - except_transaction_version + SimpleRuntimeVersion { + spec_version: custom_spec_version, + transaction_version: custom_transaction_version + } ) }, RuntimeVersionType::Bundle => match bundle_runtime_version { - Some(runtime_version) => ChainRuntimeVersion::Custom( - runtime_version.spec_version, - runtime_version.transaction_version - ), + Some(runtime_version) => ChainRuntimeVersion::Custom(runtime_version), None => ChainRuntimeVersion::Auto }, }) diff --git a/relays/bin-substrate/src/cli/mod.rs b/relays/bin-substrate/src/cli/mod.rs index 9081a397b6b..17d0262b21b 100644 --- a/relays/bin-substrate/src/cli/mod.rs +++ b/relays/bin-substrate/src/cli/mod.rs @@ -28,6 +28,7 @@ use structopt::{clap::arg_enum, StructOpt}; use strum::{EnumString, EnumVariantNames}; use bp_messages::LaneId; +use relay_substrate_client::SimpleRuntimeVersion; pub(crate) mod bridge; pub(crate) mod encode_message; @@ -194,7 +195,7 @@ pub trait CliChain: relay_substrate_client::Chain { /// Current version of the chain runtime, known to relay. /// /// can be `None` if relay is not going to submit transactions to that chain. - const RUNTIME_VERSION: Option; + const RUNTIME_VERSION: Option; } /// Lane id. diff --git a/relays/bin-substrate/src/cli/resubmit_transactions.rs b/relays/bin-substrate/src/cli/resubmit_transactions.rs index c69f9c8ae4e..2fecd196921 100644 --- a/relays/bin-substrate/src/cli/resubmit_transactions.rs +++ b/relays/bin-substrate/src/cli/resubmit_transactions.rs @@ -403,7 +403,7 @@ async fn update_transaction_tip( })?; let old_tip = unsigned_tx.tip; - let (spec_version, transaction_version) = client.simple_runtime_version().await?; + let runtime_version = client.simple_runtime_version().await?; while current_priority < target_priority { let next_tip = unsigned_tx.tip + tip_step; if next_tip > tip_limit { @@ -425,8 +425,8 @@ async fn update_transaction_tip( at_block.1, C::sign_transaction( SignParam { - spec_version, - transaction_version, + spec_version: runtime_version.spec_version, + transaction_version: runtime_version.transaction_version, genesis_hash: *client.genesis_hash(), signer: transaction_params.signer.clone(), }, @@ -449,8 +449,8 @@ async fn update_transaction_tip( old_tip != unsigned_tx.tip, C::sign_transaction( SignParam { - spec_version, - transaction_version, + spec_version: runtime_version.spec_version, + transaction_version: runtime_version.transaction_version, genesis_hash: *client.genesis_hash(), signer: transaction_params.signer.clone(), }, diff --git a/relays/client-substrate/src/client.rs b/relays/client-substrate/src/client.rs index dd763150267..62d6a7c599e 100644 --- a/relays/client-substrate/src/client.rs +++ b/relays/client-substrate/src/client.rs @@ -75,15 +75,32 @@ pub struct Subscription(pub(crate) Mutex; +/// A simple runtime version. It only includes the `spec_version` and `transaction_version`. +#[derive(Copy, Clone, Debug)] +pub struct SimpleRuntimeVersion { + /// Version of the runtime specification. + pub spec_version: u32, + /// All existing dispatches are fully compatible when this number doesn't change. + pub transaction_version: u32, +} + +impl SimpleRuntimeVersion { + /// Create a new instance of `SimpleRuntimeVersion` from a `RuntimeVersion`. + pub const fn from_runtime_version(runtime_version: &RuntimeVersion) -> Self { + Self { + spec_version: runtime_version.spec_version, + transaction_version: runtime_version.transaction_version, + } + } +} + /// Chain runtime version in client #[derive(Clone, Debug)] pub enum ChainRuntimeVersion { /// Auto query from chain. Auto, /// Custom runtime version, defined by user. - /// the first is `spec_version` - /// the second is `transaction_version` - Custom(u32, u32), + Custom(SimpleRuntimeVersion), } /// Substrate client type. @@ -213,16 +230,14 @@ impl Client { impl Client { /// Return simple runtime version, only include `spec_version` and `transaction_version`. - pub async fn simple_runtime_version(&self) -> Result<(u32, u32)> { - let (spec_version, transaction_version) = match self.chain_runtime_version { + pub async fn simple_runtime_version(&self) -> Result { + Ok(match &self.chain_runtime_version { ChainRuntimeVersion::Auto => { let runtime_version = self.runtime_version().await?; - (runtime_version.spec_version, runtime_version.transaction_version) + SimpleRuntimeVersion::from_runtime_version(&runtime_version) }, - ChainRuntimeVersion::Custom(spec_version, transaction_version) => - (spec_version, transaction_version), - }; - Ok((spec_version, transaction_version)) + ChainRuntimeVersion::Custom(version) => *version, + }) } /// Returns true if client is connected to at least one peer and is in synced state. @@ -430,10 +445,10 @@ impl Client { where C: ChainWithTransactions, { - let (spec_version, transaction_version) = self.simple_runtime_version().await?; + let runtime_version = self.simple_runtime_version().await?; Ok(SignParam:: { - spec_version, - transaction_version, + spec_version: runtime_version.spec_version, + transaction_version: runtime_version.transaction_version, genesis_hash: self.genesis_hash, signer, }) diff --git a/relays/client-substrate/src/lib.rs b/relays/client-substrate/src/lib.rs index 599d9c658b5..ef75e304246 100644 --- a/relays/client-substrate/src/lib.rs +++ b/relays/client-substrate/src/lib.rs @@ -40,8 +40,8 @@ pub use crate::{ UnsignedTransaction, UtilityPallet, }, client::{ - ChainRuntimeVersion, Client, OpaqueGrandpaAuthoritiesSet, Subscription, - ANCIENT_BLOCK_THRESHOLD, + ChainRuntimeVersion, Client, OpaqueGrandpaAuthoritiesSet, SimpleRuntimeVersion, + Subscription, ANCIENT_BLOCK_THRESHOLD, }, error::{Error, Result}, rpc::{SubstrateBeefyFinalityClient, SubstrateFinalityClient, SubstrateGrandpaFinalityClient}, diff --git a/relays/lib-substrate-relay/src/finality/guards.rs b/relays/lib-substrate-relay/src/finality/guards.rs index 1451b549cc0..188a03733a3 100644 --- a/relays/lib-substrate-relay/src/finality/guards.rs +++ b/relays/lib-substrate-relay/src/finality/guards.rs @@ -36,7 +36,7 @@ where if enable_version_guard { relay_substrate_client::guard::abort_on_spec_version_change( target_client.clone(), - target_client.simple_runtime_version().await?.0, + target_client.simple_runtime_version().await?.spec_version, ); } relay_substrate_client::guard::abort_when_account_balance_decreased( From f5e1932ad04b7847fc8b224bd7db410e07b1d001 Mon Sep 17 00:00:00 2001 From: Serban Iorga Date: Wed, 11 Jan 2023 09:07:32 +0200 Subject: [PATCH 2/2] Set R/WococoBridgeHub bundle runtime version --- relays/bin-substrate/src/chains/rococo.rs | 3 ++- relays/bin-substrate/src/chains/wococo.rs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/relays/bin-substrate/src/chains/rococo.rs b/relays/bin-substrate/src/chains/rococo.rs index 3cfe950b07f..633c7cfb290 100644 --- a/relays/bin-substrate/src/chains/rococo.rs +++ b/relays/bin-substrate/src/chains/rococo.rs @@ -26,5 +26,6 @@ impl CliChain for Rococo { } impl CliChain for BridgeHubRococo { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = + Some(SimpleRuntimeVersion { spec_version: 9302, transaction_version: 1 }); } diff --git a/relays/bin-substrate/src/chains/wococo.rs b/relays/bin-substrate/src/chains/wococo.rs index afb4fc2c4b2..66a72e11134 100644 --- a/relays/bin-substrate/src/chains/wococo.rs +++ b/relays/bin-substrate/src/chains/wococo.rs @@ -26,5 +26,6 @@ impl CliChain for Wococo { } impl CliChain for BridgeHubWococo { - const RUNTIME_VERSION: Option = None; + const RUNTIME_VERSION: Option = + Some(SimpleRuntimeVersion { spec_version: 9302, transaction_version: 1 }); }