From 7969459d077a8740caa20706c0dbf4f81c86330d Mon Sep 17 00:00:00 2001 From: Serban Iorga <serban@parity.io> Date: Thu, 28 Jul 2022 15:18:40 +0300 Subject: [PATCH] Change Runtime APIs best_finalized() signature Change Runtime APIs best_finalized() signature to return Option<HeaderId> Signed-off-by: Serban Iorga <serban@parity.io> --- bridges/bin/millau/runtime/src/lib.rs | 21 +++++++++---------- .../bin/rialto-parachain/runtime/src/lib.rs | 5 +++-- bridges/bin/rialto/runtime/src/lib.rs | 5 +++-- bridges/primitives/chain-kusama/src/lib.rs | 2 +- bridges/primitives/chain-millau/src/lib.rs | 2 +- bridges/primitives/chain-polkadot/src/lib.rs | 2 +- .../chain-rialto-parachain/src/lib.rs | 2 +- bridges/primitives/chain-rialto/src/lib.rs | 2 +- bridges/primitives/chain-rococo/src/lib.rs | 2 +- bridges/primitives/chain-westend/src/lib.rs | 4 ++-- bridges/primitives/chain-wococo/src/lib.rs | 2 +- bridges/primitives/runtime/src/lib.rs | 2 +- .../src/messages_source.rs | 16 ++++++-------- .../src/parachains/target.rs | 15 +++++++------ 14 files changed, 39 insertions(+), 43 deletions(-) diff --git a/bridges/bin/millau/runtime/src/lib.rs b/bridges/bin/millau/runtime/src/lib.rs index 468c596b02e..59f2a08177c 100644 --- a/bridges/bin/millau/runtime/src/lib.rs +++ b/bridges/bin/millau/runtime/src/lib.rs @@ -40,6 +40,7 @@ use crate::{ }; use beefy_primitives::{crypto::AuthorityId as BeefyId, mmr::MmrLeafVersion, ValidatorSet}; +use bp_runtime::{HeaderId, HeaderIdProvider}; use bridge_runtime_common::messages::{ source::estimate_message_dispatch_and_delivery_fee, MessageBridge, }; @@ -56,9 +57,7 @@ use sp_mmr_primitives::{ }; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, - traits::{ - Block as BlockT, Header as HeaderT, IdentityLookup, Keccak256, NumberFor, OpaqueKeys, - }, + traits::{Block as BlockT, IdentityLookup, Keccak256, NumberFor, OpaqueKeys}, transaction_validity::{TransactionSource, TransactionValidity}, ApplyExtrinsicResult, FixedPointNumber, FixedU128, Perquintill, }; @@ -818,19 +817,19 @@ impl_runtime_apis! { } impl bp_rialto::RialtoFinalityApi<Block> for Runtime { - fn best_finalized() -> Option<(bp_rialto::BlockNumber, bp_rialto::Hash)> { - BridgeRialtoGrandpa::best_finalized().map(|header| (header.number, header.hash())) + fn best_finalized() -> Option<HeaderId<bp_rialto::Hash, bp_rialto::BlockNumber>> { + BridgeRialtoGrandpa::best_finalized().map(|header| header.id()) } } impl bp_westend::WestendFinalityApi<Block> for Runtime { - fn best_finalized() -> Option<(bp_westend::BlockNumber, bp_westend::Hash)> { - BridgeWestendGrandpa::best_finalized().map(|header| (header.number, header.hash())) + fn best_finalized() -> Option<HeaderId<bp_westend::Hash, bp_westend::BlockNumber>> { + BridgeWestendGrandpa::best_finalized().map(|header| header.id()) } } impl bp_westend::WestmintFinalityApi<Block> for Runtime { - fn best_finalized() -> Option<(bp_westend::BlockNumber, bp_westend::Hash)> { + fn best_finalized() -> Option<HeaderId<bp_westend::Hash, bp_westend::BlockNumber>> { // the parachains finality pallet is never decoding parachain heads, so it is // only done in the integration code use bp_westend::WESTMINT_PARACHAIN_ID; @@ -839,12 +838,12 @@ impl_runtime_apis! { WithWestendParachainsInstance, >::best_parachain_head(WESTMINT_PARACHAIN_ID.into())?; let head = bp_westend::Header::decode(&mut &encoded_head.0[..]).ok()?; - Some((*head.number(), head.hash())) + Some(head.id()) } } impl bp_rialto_parachain::RialtoParachainFinalityApi<Block> for Runtime { - fn best_finalized() -> Option<(bp_rialto::BlockNumber, bp_rialto::Hash)> { + fn best_finalized() -> Option<HeaderId<bp_rialto::Hash, bp_rialto::BlockNumber>> { // the parachains finality pallet is never decoding parachain heads, so it is // only done in the integration code let encoded_head = pallet_bridge_parachains::Pallet::< @@ -852,7 +851,7 @@ impl_runtime_apis! { WithRialtoParachainsInstance, >::best_parachain_head(bp_rialto_parachain::RIALTO_PARACHAIN_ID.into())?; let head = bp_rialto_parachain::Header::decode(&mut &encoded_head.0[..]).ok()?; - Some((*head.number(), head.hash())) + Some(head.id()) } } diff --git a/bridges/bin/rialto-parachain/runtime/src/lib.rs b/bridges/bin/rialto-parachain/runtime/src/lib.rs index 9f9a37b4577..e96268d8aa8 100644 --- a/bridges/bin/rialto-parachain/runtime/src/lib.rs +++ b/bridges/bin/rialto-parachain/runtime/src/lib.rs @@ -49,6 +49,7 @@ use sp_version::NativeVersion; use sp_version::RuntimeVersion; // A few exports that help ease life for downstream crates. +use bp_runtime::{HeaderId, HeaderIdProvider}; pub use frame_support::{ construct_runtime, match_types, parameter_types, traits::{Everything, IsInVec, Nothing, Randomness}, @@ -727,8 +728,8 @@ impl_runtime_apis! { } impl bp_millau::MillauFinalityApi<Block> for Runtime { - fn best_finalized() -> Option<(bp_millau::BlockNumber, bp_millau::Hash)> { - BridgeMillauGrandpa::best_finalized().map(|header| (header.number, header.hash())) + fn best_finalized() -> Option<HeaderId<bp_millau::Hash, bp_millau::BlockNumber>> { + BridgeMillauGrandpa::best_finalized().map(|header| header.id()) } } diff --git a/bridges/bin/rialto/runtime/src/lib.rs b/bridges/bin/rialto/runtime/src/lib.rs index 9f0708ce9fd..56cbca221d4 100644 --- a/bridges/bin/rialto/runtime/src/lib.rs +++ b/bridges/bin/rialto/runtime/src/lib.rs @@ -35,6 +35,7 @@ pub mod xcm_config; use crate::millau_messages::{ToMillauMessagePayload, WithMillauMessageBridge}; use beefy_primitives::{crypto::AuthorityId as BeefyId, mmr::MmrLeafVersion, ValidatorSet}; +use bp_runtime::{HeaderId, HeaderIdProvider}; use bridge_runtime_common::messages::{ source::estimate_message_dispatch_and_delivery_fee, MessageBridge, }; @@ -653,8 +654,8 @@ impl_runtime_apis! { } impl bp_millau::MillauFinalityApi<Block> for Runtime { - fn best_finalized() -> Option<(bp_millau::BlockNumber, bp_millau::Hash)> { - BridgeMillauGrandpa::best_finalized().map(|header| (header.number, header.hash())) + fn best_finalized() -> Option<HeaderId<bp_millau::Hash, bp_millau::BlockNumber>> { + BridgeMillauGrandpa::best_finalized().map(|header| header.id()) } } diff --git a/bridges/primitives/chain-kusama/src/lib.rs b/bridges/primitives/chain-kusama/src/lib.rs index f3450a77dcb..a72e607ddb2 100644 --- a/bridges/primitives/chain-kusama/src/lib.rs +++ b/bridges/primitives/chain-kusama/src/lib.rs @@ -110,7 +110,7 @@ sp_api::decl_runtime_apis! { /// Kusama runtime itself. pub trait KusamaFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } /// Outbound message lane API for messages that are sent to Kusama chain. diff --git a/bridges/primitives/chain-millau/src/lib.rs b/bridges/primitives/chain-millau/src/lib.rs index 6bdd9c53ee1..71a545e6ba7 100644 --- a/bridges/primitives/chain-millau/src/lib.rs +++ b/bridges/primitives/chain-millau/src/lib.rs @@ -274,7 +274,7 @@ sp_api::decl_runtime_apis! { /// Millau runtime itself. pub trait MillauFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } /// Outbound message lane API for messages that are sent to Millau chain. diff --git a/bridges/primitives/chain-polkadot/src/lib.rs b/bridges/primitives/chain-polkadot/src/lib.rs index af195e511c4..2fcfa1f03e8 100644 --- a/bridges/primitives/chain-polkadot/src/lib.rs +++ b/bridges/primitives/chain-polkadot/src/lib.rs @@ -111,7 +111,7 @@ sp_api::decl_runtime_apis! { /// Polkadot runtime itself. pub trait PolkadotFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } /// Outbound message lane API for messages that are sent to Polkadot chain. diff --git a/bridges/primitives/chain-rialto-parachain/src/lib.rs b/bridges/primitives/chain-rialto-parachain/src/lib.rs index 00402ae49d2..baef2e403b4 100644 --- a/bridges/primitives/chain-rialto-parachain/src/lib.rs +++ b/bridges/primitives/chain-rialto-parachain/src/lib.rs @@ -216,7 +216,7 @@ sp_api::decl_runtime_apis! { /// RialtoParachain runtime itself. pub trait RialtoParachainFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } /// Outbound message lane API for messages that are sent to RialtoParachain chain. diff --git a/bridges/primitives/chain-rialto/src/lib.rs b/bridges/primitives/chain-rialto/src/lib.rs index e5d1abbc7e6..d242f6dc4ac 100644 --- a/bridges/primitives/chain-rialto/src/lib.rs +++ b/bridges/primitives/chain-rialto/src/lib.rs @@ -237,7 +237,7 @@ sp_api::decl_runtime_apis! { /// Rialto runtime itself. pub trait RialtoFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } /// Outbound message lane API for messages that are sent to Rialto chain. diff --git a/bridges/primitives/chain-rococo/src/lib.rs b/bridges/primitives/chain-rococo/src/lib.rs index ad3190a1223..45f1937eee5 100644 --- a/bridges/primitives/chain-rococo/src/lib.rs +++ b/bridges/primitives/chain-rococo/src/lib.rs @@ -106,7 +106,7 @@ sp_api::decl_runtime_apis! { /// Rococo runtime itself. pub trait RococoFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } /// Outbound message lane API for messages that are sent to Rococo chain. diff --git a/bridges/primitives/chain-westend/src/lib.rs b/bridges/primitives/chain-westend/src/lib.rs index 16c0252ea77..e0ac5ad961f 100644 --- a/bridges/primitives/chain-westend/src/lib.rs +++ b/bridges/primitives/chain-westend/src/lib.rs @@ -104,7 +104,7 @@ sp_api::decl_runtime_apis! { /// Westend runtime itself. pub trait WestendFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } /// API for querying information about the finalized Westmint headers. @@ -113,7 +113,7 @@ sp_api::decl_runtime_apis! { /// Westmint runtime itself. pub trait WestmintFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } } diff --git a/bridges/primitives/chain-wococo/src/lib.rs b/bridges/primitives/chain-wococo/src/lib.rs index 83d913db7fc..02276aa7dd8 100644 --- a/bridges/primitives/chain-wococo/src/lib.rs +++ b/bridges/primitives/chain-wococo/src/lib.rs @@ -63,7 +63,7 @@ sp_api::decl_runtime_apis! { /// Wococo runtime itself. pub trait WococoFinalityApi { /// Returns number and hash of the best finalized header known to the bridge module. - fn best_finalized() -> Option<(BlockNumber, Hash)>; + fn best_finalized() -> Option<bp_runtime::HeaderId<Hash, BlockNumber>>; } /// Outbound message lane API for messages that are sent to Wococo chain. diff --git a/bridges/primitives/runtime/src/lib.rs b/bridges/primitives/runtime/src/lib.rs index ae7250c49bd..a51327e89b8 100644 --- a/bridges/primitives/runtime/src/lib.rs +++ b/bridges/primitives/runtime/src/lib.rs @@ -82,7 +82,7 @@ pub const ACCOUNT_DERIVATION_PREFIX: &[u8] = b"pallet-bridge/account-derivation/ pub const ROOT_ACCOUNT_DERIVATION_PREFIX: &[u8] = b"pallet-bridge/account-derivation/root"; /// Generic header Id. -#[derive(RuntimeDebug, Default, Clone, Copy, Eq, Hash, PartialEq)] +#[derive(RuntimeDebug, Default, Clone, Encode, Decode, Copy, Eq, Hash, PartialEq)] pub struct HeaderId<Hash, Number>(pub Number, pub Hash); /// Generic header id provider. diff --git a/bridges/relays/lib-substrate-relay/src/messages_source.rs b/bridges/relays/lib-substrate-relay/src/messages_source.rs index 6647376d935..95a3feab0c1 100644 --- a/bridges/relays/lib-substrate-relay/src/messages_source.rs +++ b/bridges/relays/lib-substrate-relay/src/messages_source.rs @@ -562,17 +562,13 @@ where Some(at_self_hash), ) .await?; - let decoded_best_finalized_peer_on_self = - Option::<(BlockNumberOf<PeerChain>, HashOf<PeerChain>)>::decode( - &mut &encoded_best_finalized_peer_on_self.0[..], - ) - .map_err(SubstrateError::ResponseParseFailed)? - .map(Ok) - .unwrap_or(Err(SubstrateError::BridgePalletIsNotInitialized))?; - let peer_on_self_best_finalized_id = - HeaderId(decoded_best_finalized_peer_on_self.0, decoded_best_finalized_peer_on_self.1); - Ok(peer_on_self_best_finalized_id) + Option::<HeaderId<HashOf<PeerChain>, BlockNumberOf<PeerChain>>>::decode( + &mut &encoded_best_finalized_peer_on_self.0[..], + ) + .map_err(SubstrateError::ResponseParseFailed)? + .map(Ok) + .unwrap_or(Err(SubstrateError::BridgePalletIsNotInitialized)) } fn make_message_details_map<C: Chain>( diff --git a/bridges/relays/lib-substrate-relay/src/parachains/target.rs b/bridges/relays/lib-substrate-relay/src/parachains/target.rs index c2c1498eea0..a96c0ba0ab6 100644 --- a/bridges/relays/lib-substrate-relay/src/parachains/target.rs +++ b/bridges/relays/lib-substrate-relay/src/parachains/target.rs @@ -107,14 +107,13 @@ where Some(at_block.1), ) .await?; - let decoded_best_finalized_source_block = - Option::<(BlockNumberOf<P::SourceRelayChain>, HashOf<P::SourceRelayChain>)>::decode( - &mut &encoded_best_finalized_source_block.0[..], - ) - .map_err(SubstrateError::ResponseParseFailed)? - .map(Ok) - .unwrap_or(Err(SubstrateError::BridgePalletIsNotInitialized))?; - Ok(HeaderId(decoded_best_finalized_source_block.0, decoded_best_finalized_source_block.1)) + + Option::<HeaderId<HashOf<P::SourceRelayChain>, BlockNumberOf<P::SourceRelayChain>>>::decode( + &mut &encoded_best_finalized_source_block.0[..], + ) + .map_err(SubstrateError::ResponseParseFailed)? + .map(Ok) + .unwrap_or(Err(SubstrateError::BridgePalletIsNotInitialized)) } async fn parachain_head( -- GitLab