Change Runtime APIs best_finalized() signature

Change Runtime APIs best_finalized() signature to return Option<HeaderId>

Signed-off-by: Serban Iorga <serban@parity.io>
This commit is contained in:
Serban Iorga
2022-07-28 15:18:40 +03:00
committed by Bastian Köcher
parent f13211344b
commit 7969459d07
14 changed files with 39 additions and 43 deletions
+10 -11
View File
@@ -40,6 +40,7 @@ use crate::{
}; };
use beefy_primitives::{crypto::AuthorityId as BeefyId, mmr::MmrLeafVersion, ValidatorSet}; use beefy_primitives::{crypto::AuthorityId as BeefyId, mmr::MmrLeafVersion, ValidatorSet};
use bp_runtime::{HeaderId, HeaderIdProvider};
use bridge_runtime_common::messages::{ use bridge_runtime_common::messages::{
source::estimate_message_dispatch_and_delivery_fee, MessageBridge, source::estimate_message_dispatch_and_delivery_fee, MessageBridge,
}; };
@@ -56,9 +57,7 @@ use sp_mmr_primitives::{
}; };
use sp_runtime::{ use sp_runtime::{
create_runtime_str, generic, impl_opaque_keys, create_runtime_str, generic, impl_opaque_keys,
traits::{ traits::{Block as BlockT, IdentityLookup, Keccak256, NumberFor, OpaqueKeys},
Block as BlockT, Header as HeaderT, IdentityLookup, Keccak256, NumberFor, OpaqueKeys,
},
transaction_validity::{TransactionSource, TransactionValidity}, transaction_validity::{TransactionSource, TransactionValidity},
ApplyExtrinsicResult, FixedPointNumber, FixedU128, Perquintill, ApplyExtrinsicResult, FixedPointNumber, FixedU128, Perquintill,
}; };
@@ -818,19 +817,19 @@ impl_runtime_apis! {
} }
impl bp_rialto::RialtoFinalityApi<Block> for Runtime { impl bp_rialto::RialtoFinalityApi<Block> for Runtime {
fn best_finalized() -> Option<(bp_rialto::BlockNumber, bp_rialto::Hash)> { fn best_finalized() -> Option<HeaderId<bp_rialto::Hash, bp_rialto::BlockNumber>> {
BridgeRialtoGrandpa::best_finalized().map(|header| (header.number, header.hash())) BridgeRialtoGrandpa::best_finalized().map(|header| header.id())
} }
} }
impl bp_westend::WestendFinalityApi<Block> for Runtime { impl bp_westend::WestendFinalityApi<Block> for Runtime {
fn best_finalized() -> Option<(bp_westend::BlockNumber, bp_westend::Hash)> { fn best_finalized() -> Option<HeaderId<bp_westend::Hash, bp_westend::BlockNumber>> {
BridgeWestendGrandpa::best_finalized().map(|header| (header.number, header.hash())) BridgeWestendGrandpa::best_finalized().map(|header| header.id())
} }
} }
impl bp_westend::WestmintFinalityApi<Block> for Runtime { 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 // the parachains finality pallet is never decoding parachain heads, so it is
// only done in the integration code // only done in the integration code
use bp_westend::WESTMINT_PARACHAIN_ID; use bp_westend::WESTMINT_PARACHAIN_ID;
@@ -839,12 +838,12 @@ impl_runtime_apis! {
WithWestendParachainsInstance, WithWestendParachainsInstance,
>::best_parachain_head(WESTMINT_PARACHAIN_ID.into())?; >::best_parachain_head(WESTMINT_PARACHAIN_ID.into())?;
let head = bp_westend::Header::decode(&mut &encoded_head.0[..]).ok()?; 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 { 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 // the parachains finality pallet is never decoding parachain heads, so it is
// only done in the integration code // only done in the integration code
let encoded_head = pallet_bridge_parachains::Pallet::< let encoded_head = pallet_bridge_parachains::Pallet::<
@@ -852,7 +851,7 @@ impl_runtime_apis! {
WithRialtoParachainsInstance, WithRialtoParachainsInstance,
>::best_parachain_head(bp_rialto_parachain::RIALTO_PARACHAIN_ID.into())?; >::best_parachain_head(bp_rialto_parachain::RIALTO_PARACHAIN_ID.into())?;
let head = bp_rialto_parachain::Header::decode(&mut &encoded_head.0[..]).ok()?; let head = bp_rialto_parachain::Header::decode(&mut &encoded_head.0[..]).ok()?;
Some((*head.number(), head.hash())) Some(head.id())
} }
} }
@@ -49,6 +49,7 @@ use sp_version::NativeVersion;
use sp_version::RuntimeVersion; use sp_version::RuntimeVersion;
// A few exports that help ease life for downstream crates. // A few exports that help ease life for downstream crates.
use bp_runtime::{HeaderId, HeaderIdProvider};
pub use frame_support::{ pub use frame_support::{
construct_runtime, match_types, parameter_types, construct_runtime, match_types, parameter_types,
traits::{Everything, IsInVec, Nothing, Randomness}, traits::{Everything, IsInVec, Nothing, Randomness},
@@ -727,8 +728,8 @@ impl_runtime_apis! {
} }
impl bp_millau::MillauFinalityApi<Block> for Runtime { impl bp_millau::MillauFinalityApi<Block> for Runtime {
fn best_finalized() -> Option<(bp_millau::BlockNumber, bp_millau::Hash)> { fn best_finalized() -> Option<HeaderId<bp_millau::Hash, bp_millau::BlockNumber>> {
BridgeMillauGrandpa::best_finalized().map(|header| (header.number, header.hash())) BridgeMillauGrandpa::best_finalized().map(|header| header.id())
} }
} }
+3 -2
View File
@@ -35,6 +35,7 @@ pub mod xcm_config;
use crate::millau_messages::{ToMillauMessagePayload, WithMillauMessageBridge}; use crate::millau_messages::{ToMillauMessagePayload, WithMillauMessageBridge};
use beefy_primitives::{crypto::AuthorityId as BeefyId, mmr::MmrLeafVersion, ValidatorSet}; use beefy_primitives::{crypto::AuthorityId as BeefyId, mmr::MmrLeafVersion, ValidatorSet};
use bp_runtime::{HeaderId, HeaderIdProvider};
use bridge_runtime_common::messages::{ use bridge_runtime_common::messages::{
source::estimate_message_dispatch_and_delivery_fee, MessageBridge, source::estimate_message_dispatch_and_delivery_fee, MessageBridge,
}; };
@@ -653,8 +654,8 @@ impl_runtime_apis! {
} }
impl bp_millau::MillauFinalityApi<Block> for Runtime { impl bp_millau::MillauFinalityApi<Block> for Runtime {
fn best_finalized() -> Option<(bp_millau::BlockNumber, bp_millau::Hash)> { fn best_finalized() -> Option<HeaderId<bp_millau::Hash, bp_millau::BlockNumber>> {
BridgeMillauGrandpa::best_finalized().map(|header| (header.number, header.hash())) BridgeMillauGrandpa::best_finalized().map(|header| header.id())
} }
} }
+1 -1
View File
@@ -110,7 +110,7 @@ sp_api::decl_runtime_apis! {
/// Kusama runtime itself. /// Kusama runtime itself.
pub trait KusamaFinalityApi { pub trait KusamaFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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. /// Outbound message lane API for messages that are sent to Kusama chain.
+1 -1
View File
@@ -274,7 +274,7 @@ sp_api::decl_runtime_apis! {
/// Millau runtime itself. /// Millau runtime itself.
pub trait MillauFinalityApi { pub trait MillauFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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. /// Outbound message lane API for messages that are sent to Millau chain.
+1 -1
View File
@@ -111,7 +111,7 @@ sp_api::decl_runtime_apis! {
/// Polkadot runtime itself. /// Polkadot runtime itself.
pub trait PolkadotFinalityApi { pub trait PolkadotFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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. /// Outbound message lane API for messages that are sent to Polkadot chain.
@@ -216,7 +216,7 @@ sp_api::decl_runtime_apis! {
/// RialtoParachain runtime itself. /// RialtoParachain runtime itself.
pub trait RialtoParachainFinalityApi { pub trait RialtoParachainFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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. /// Outbound message lane API for messages that are sent to RialtoParachain chain.
+1 -1
View File
@@ -237,7 +237,7 @@ sp_api::decl_runtime_apis! {
/// Rialto runtime itself. /// Rialto runtime itself.
pub trait RialtoFinalityApi { pub trait RialtoFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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. /// Outbound message lane API for messages that are sent to Rialto chain.
+1 -1
View File
@@ -106,7 +106,7 @@ sp_api::decl_runtime_apis! {
/// Rococo runtime itself. /// Rococo runtime itself.
pub trait RococoFinalityApi { pub trait RococoFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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. /// Outbound message lane API for messages that are sent to Rococo chain.
+2 -2
View File
@@ -104,7 +104,7 @@ sp_api::decl_runtime_apis! {
/// Westend runtime itself. /// Westend runtime itself.
pub trait WestendFinalityApi { pub trait WestendFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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. /// API for querying information about the finalized Westmint headers.
@@ -113,7 +113,7 @@ sp_api::decl_runtime_apis! {
/// Westmint runtime itself. /// Westmint runtime itself.
pub trait WestmintFinalityApi { pub trait WestmintFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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>>;
} }
} }
+1 -1
View File
@@ -63,7 +63,7 @@ sp_api::decl_runtime_apis! {
/// Wococo runtime itself. /// Wococo runtime itself.
pub trait WococoFinalityApi { pub trait WococoFinalityApi {
/// Returns number and hash of the best finalized header known to the bridge module. /// 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. /// Outbound message lane API for messages that are sent to Wococo chain.
+1 -1
View File
@@ -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"; pub const ROOT_ACCOUNT_DERIVATION_PREFIX: &[u8] = b"pallet-bridge/account-derivation/root";
/// Generic header Id. /// 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); pub struct HeaderId<Hash, Number>(pub Number, pub Hash);
/// Generic header id provider. /// Generic header id provider.
@@ -562,17 +562,13 @@ where
Some(at_self_hash), Some(at_self_hash),
) )
.await?; .await?;
let decoded_best_finalized_peer_on_self =
Option::<(BlockNumberOf<PeerChain>, HashOf<PeerChain>)>::decode( Option::<HeaderId<HashOf<PeerChain>, BlockNumberOf<PeerChain>>>::decode(
&mut &encoded_best_finalized_peer_on_self.0[..], &mut &encoded_best_finalized_peer_on_self.0[..],
) )
.map_err(SubstrateError::ResponseParseFailed)? .map_err(SubstrateError::ResponseParseFailed)?
.map(Ok) .map(Ok)
.unwrap_or(Err(SubstrateError::BridgePalletIsNotInitialized))?; .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)
} }
fn make_message_details_map<C: Chain>( fn make_message_details_map<C: Chain>(
@@ -107,14 +107,13 @@ where
Some(at_block.1), Some(at_block.1),
) )
.await?; .await?;
let decoded_best_finalized_source_block =
Option::<(BlockNumberOf<P::SourceRelayChain>, HashOf<P::SourceRelayChain>)>::decode( Option::<HeaderId<HashOf<P::SourceRelayChain>, BlockNumberOf<P::SourceRelayChain>>>::decode(
&mut &encoded_best_finalized_source_block.0[..], &mut &encoded_best_finalized_source_block.0[..],
) )
.map_err(SubstrateError::ResponseParseFailed)? .map_err(SubstrateError::ResponseParseFailed)?
.map(Ok) .map(Ok)
.unwrap_or(Err(SubstrateError::BridgePalletIsNotInitialized))?; .unwrap_or(Err(SubstrateError::BridgePalletIsNotInitialized))
Ok(HeaderId(decoded_best_finalized_source_block.0, decoded_best_finalized_source_block.1))
} }
async fn parachain_head( async fn parachain_head(