cumulus-primitives-parachain-inherent: Split into two crates (#2803)

This splits `cumulus-primitives-parachain-inherent` into two crates, the
previous `cumulus-primitives-parachain-inherent` and a new
`cumulus-client-parachain-inherent`. The idea behind this is to move the
`create_at` logic into the client crate. This removes quite a lot of
unrelated dependencies from the runtime std build and thus, makes the
compilation faster. On my Laptop the compilation is goes down by one
minute for `asset-hub-rococo-runtime`. I also assume that the full build
of the entire workspace probably can be speed-up a little bit, because
more stuff can be compiled in parallel.

---------

Co-authored-by: command-bot <>
This commit is contained in:
Bastian Köcher
2024-01-05 21:43:26 +01:00
committed by GitHub
parent cea7024de1
commit 930c151928
15 changed files with 122 additions and 63 deletions
Generated
+26 -9
View File
@@ -3626,9 +3626,9 @@ dependencies = [
"cumulus-client-collator", "cumulus-client-collator",
"cumulus-client-consensus-common", "cumulus-client-consensus-common",
"cumulus-client-consensus-proposer", "cumulus-client-consensus-proposer",
"cumulus-client-parachain-inherent",
"cumulus-primitives-aura", "cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-parachain-inherent",
"cumulus-relay-chain-interface", "cumulus-relay-chain-interface",
"futures", "futures",
"parity-scale-codec", "parity-scale-codec",
@@ -3760,6 +3760,29 @@ dependencies = [
"url", "url",
] ]
[[package]]
name = "cumulus-client-parachain-inherent"
version = "0.1.0"
dependencies = [
"async-trait",
"cumulus-primitives-core",
"cumulus-primitives-parachain-inherent",
"cumulus-relay-chain-interface",
"cumulus-test-relay-sproof-builder",
"parity-scale-codec",
"sc-client-api",
"scale-info",
"sp-api",
"sp-core",
"sp-inherents",
"sp-runtime",
"sp-state-machine",
"sp-std 8.0.0",
"sp-storage 13.0.0",
"sp-trie",
"tracing",
]
[[package]] [[package]]
name = "cumulus-client-pov-recovery" name = "cumulus-client-pov-recovery"
version = "0.1.0" version = "0.1.0"
@@ -4033,20 +4056,14 @@ version = "0.1.0"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-relay-chain-interface",
"cumulus-test-relay-sproof-builder",
"parity-scale-codec", "parity-scale-codec",
"sc-client-api",
"scale-info", "scale-info",
"sp-api",
"sp-core", "sp-core",
"sp-inherents", "sp-inherents",
"sp-runtime", "sp-runtime",
"sp-state-machine", "sp-state-machine",
"sp-std 8.0.0", "sp-std 8.0.0",
"sp-storage 13.0.0",
"sp-trie", "sp-trie",
"tracing",
] ]
[[package]] [[package]]
@@ -4303,11 +4320,11 @@ dependencies = [
"cumulus-client-cli", "cumulus-client-cli",
"cumulus-client-consensus-common", "cumulus-client-consensus-common",
"cumulus-client-consensus-relay-chain", "cumulus-client-consensus-relay-chain",
"cumulus-client-parachain-inherent",
"cumulus-client-pov-recovery", "cumulus-client-pov-recovery",
"cumulus-client-service", "cumulus-client-service",
"cumulus-pallet-parachain-system", "cumulus-pallet-parachain-system",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-parachain-inherent",
"cumulus-relay-chain-inprocess-interface", "cumulus-relay-chain-inprocess-interface",
"cumulus-relay-chain-interface", "cumulus-relay-chain-interface",
"cumulus-relay-chain-minimal-node", "cumulus-relay-chain-minimal-node",
@@ -13033,10 +13050,10 @@ dependencies = [
"cumulus-client-consensus-common", "cumulus-client-consensus-common",
"cumulus-client-consensus-proposer", "cumulus-client-consensus-proposer",
"cumulus-client-consensus-relay-chain", "cumulus-client-consensus-relay-chain",
"cumulus-client-parachain-inherent",
"cumulus-client-service", "cumulus-client-service",
"cumulus-primitives-aura", "cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-parachain-inherent",
"cumulus-relay-chain-interface", "cumulus-relay-chain-interface",
"frame-benchmarking", "frame-benchmarking",
"frame-benchmarking-cli", "frame-benchmarking-cli",
+1
View File
@@ -57,6 +57,7 @@ members = [
"cumulus/client/consensus/proposer", "cumulus/client/consensus/proposer",
"cumulus/client/consensus/relay-chain", "cumulus/client/consensus/relay-chain",
"cumulus/client/network", "cumulus/client/network",
"cumulus/client/parachain-inherent",
"cumulus/client/pov-recovery", "cumulus/client/pov-recovery",
"cumulus/client/relay-chain-inprocess-interface", "cumulus/client/relay-chain-inprocess-interface",
"cumulus/client/relay-chain-interface", "cumulus/client/relay-chain-interface",
+1 -1
View File
@@ -41,9 +41,9 @@ substrate-prometheus-endpoint = { path = "../../../../substrate/utils/prometheus
cumulus-client-consensus-common = { path = "../common" } cumulus-client-consensus-common = { path = "../common" }
cumulus-relay-chain-interface = { path = "../../relay-chain-interface" } cumulus-relay-chain-interface = { path = "../../relay-chain-interface" }
cumulus-client-consensus-proposer = { path = "../proposer" } cumulus-client-consensus-proposer = { path = "../proposer" }
cumulus-client-parachain-inherent = { path = "../../../client/parachain-inherent" }
cumulus-primitives-aura = { path = "../../../primitives/aura" } cumulus-primitives-aura = { path = "../../../primitives/aura" }
cumulus-primitives-core = { path = "../../../primitives/core" } cumulus-primitives-core = { path = "../../../primitives/core" }
cumulus-primitives-parachain-inherent = { path = "../../../primitives/parachain-inherent" }
cumulus-client-collator = { path = "../../collator" } cumulus-client-collator = { path = "../../collator" }
# Polkadot # Polkadot
@@ -30,10 +30,10 @@ use cumulus_client_consensus_common::{
self as consensus_common, ParachainBlockImportMarker, ParachainCandidate, self as consensus_common, ParachainBlockImportMarker, ParachainCandidate,
}; };
use cumulus_client_consensus_proposer::ProposerInterface; use cumulus_client_consensus_proposer::ProposerInterface;
use cumulus_client_parachain_inherent::{ParachainInherentData, ParachainInherentDataProvider};
use cumulus_primitives_core::{ use cumulus_primitives_core::{
relay_chain::Hash as PHash, DigestItem, ParachainBlockData, PersistedValidationData, relay_chain::Hash as PHash, DigestItem, ParachainBlockData, PersistedValidationData,
}; };
use cumulus_primitives_parachain_inherent::ParachainInherentData;
use cumulus_relay_chain_interface::RelayChainInterface; use cumulus_relay_chain_interface::RelayChainInterface;
use polkadot_node_primitives::{Collation, MaybeCompressedPoV}; use polkadot_node_primitives::{Collation, MaybeCompressedPoV};
@@ -124,7 +124,7 @@ where
parent_hash: Block::Hash, parent_hash: Block::Hash,
timestamp: impl Into<Option<Timestamp>>, timestamp: impl Into<Option<Timestamp>>,
) -> Result<(ParachainInherentData, InherentData), Box<dyn Error + Send + Sync + 'static>> { ) -> Result<(ParachainInherentData, InherentData), Box<dyn Error + Send + Sync + 'static>> {
let paras_inherent_data = ParachainInherentData::create_at( let paras_inherent_data = ParachainInherentDataProvider::create_at(
relay_parent, relay_parent,
&self.relay_client, &self.relay_client,
validation_data, validation_data,
@@ -0,0 +1,30 @@
[package]
name = "cumulus-client-parachain-inherent"
version = "0.1.0"
authors.workspace = true
edition.workspace = true
description = "Inherent that needs to be present in every parachain block. Contains messages and a relay chain storage-proof."
license = "Apache-2.0"
[dependencies]
async-trait = "0.1.73"
codec = { package = "parity-scale-codec", version = "3.0.0", features = ["derive"] }
scale-info = { version = "2.10.0", features = ["derive"] }
tracing = { version = "0.1.37" }
# Substrate
sc-client-api = { path = "../../../substrate/client/api" }
sp-api = { path = "../../../substrate/primitives/api" }
sp-core = { path = "../../../substrate/primitives/core" }
sp-inherents = { path = "../../../substrate/primitives/inherents" }
sp-runtime = { path = "../../../substrate/primitives/runtime" }
sp-state-machine = { path = "../../../substrate/primitives/state-machine" }
sp-std = { path = "../../../substrate/primitives/std" }
sp-storage = { path = "../../../substrate/primitives/storage" }
sp-trie = { path = "../../../substrate/primitives/trie" }
# Cumulus
cumulus-primitives-core = { path = "../../primitives/core" }
cumulus-primitives-parachain-inherent = { path = "../../primitives/parachain-inherent" }
cumulus-relay-chain-interface = { path = "../relay-chain-interface" }
cumulus-test-relay-sproof-builder = { path = "../../test/relay-sproof-builder" }
@@ -16,7 +16,6 @@
//! Client side code for generating the parachain inherent. //! Client side code for generating the parachain inherent.
use crate::ParachainInherentData;
use codec::Decode; use codec::Decode;
use cumulus_primitives_core::{ use cumulus_primitives_core::{
relay_chain::{self, Hash as PHash, HrmpChannelId}, relay_chain::{self, Hash as PHash, HrmpChannelId},
@@ -24,6 +23,11 @@ use cumulus_primitives_core::{
}; };
use cumulus_relay_chain_interface::RelayChainInterface; use cumulus_relay_chain_interface::RelayChainInterface;
mod mock;
pub use cumulus_primitives_parachain_inherent::{ParachainInherentData, INHERENT_IDENTIFIER};
pub use mock::{MockValidationDataInherentDataProvider, MockXcmConfig};
const LOG_TARGET: &str = "parachain-inherent"; const LOG_TARGET: &str = "parachain-inherent";
/// Collect the relevant relay chain state in form of a proof for putting it into the validation /// Collect the relevant relay chain state in form of a proof for putting it into the validation
@@ -132,7 +136,9 @@ async fn collect_relay_storage_proof(
.ok() .ok()
} }
impl ParachainInherentData { pub struct ParachainInherentDataProvider;
impl ParachainInherentDataProvider {
/// Create the [`ParachainInherentData`] at the given `relay_parent`. /// Create the [`ParachainInherentData`] at the given `relay_parent`.
/// ///
/// Returns `None` if the creation failed. /// Returns `None` if the creation failed.
@@ -178,21 +184,3 @@ impl ParachainInherentData {
}) })
} }
} }
#[async_trait::async_trait]
impl sp_inherents::InherentDataProvider for ParachainInherentData {
async fn provide_inherent_data(
&self,
inherent_data: &mut sp_inherents::InherentData,
) -> Result<(), sp_inherents::Error> {
inherent_data.put_data(crate::INHERENT_IDENTIFIER, &self)
}
async fn try_handle_error(
&self,
_: &sp_inherents::InherentIdentifier,
_: &[u8],
) -> Option<Result<(), sp_inherents::Error>> {
None
}
}
@@ -19,6 +19,7 @@ use codec::Decode;
use cumulus_primitives_core::{ use cumulus_primitives_core::{
relay_chain, InboundDownwardMessage, InboundHrmpMessage, ParaId, PersistedValidationData, relay_chain, InboundDownwardMessage, InboundHrmpMessage, ParaId, PersistedValidationData,
}; };
use cumulus_primitives_parachain_inherent::MessageQueueChain;
use sc_client_api::{Backend, StorageProvider}; use sc_client_api::{Backend, StorageProvider};
use sp_core::twox_128; use sp_core::twox_128;
use sp_inherents::{InherentData, InherentDataProvider}; use sp_inherents::{InherentData, InherentDataProvider};
@@ -168,7 +169,7 @@ impl<R: Send + Sync + GenerateRandomness<u64>> InherentDataProvider
// Process the downward messages and set up the correct head // Process the downward messages and set up the correct head
let mut downward_messages = Vec::new(); let mut downward_messages = Vec::new();
let mut dmq_mqc = crate::MessageQueueChain(self.xcm_config.starting_dmq_mqc_head); let mut dmq_mqc = MessageQueueChain::new(self.xcm_config.starting_dmq_mqc_head);
for msg in &self.raw_downward_messages { for msg in &self.raw_downward_messages {
let wrapped = InboundDownwardMessage { sent_at: relay_parent_number, msg: msg.clone() }; let wrapped = InboundDownwardMessage { sent_at: relay_parent_number, msg: msg.clone() };
@@ -188,7 +189,7 @@ impl<R: Send + Sync + GenerateRandomness<u64>> InherentDataProvider
// Now iterate again, updating the heads as we go // Now iterate again, updating the heads as we go
for (para_id, messages) in &horizontal_messages { for (para_id, messages) in &horizontal_messages {
let mut channel_mqc = crate::MessageQueueChain( let mut channel_mqc = MessageQueueChain::new(
*self *self
.xcm_config .xcm_config
.starting_hrmp_mqc_heads .starting_hrmp_mqc_heads
+1 -1
View File
@@ -102,10 +102,10 @@ cumulus-client-consensus-aura = { path = "../client/consensus/aura" }
cumulus-client-consensus-relay-chain = { path = "../client/consensus/relay-chain" } cumulus-client-consensus-relay-chain = { path = "../client/consensus/relay-chain" }
cumulus-client-consensus-common = { path = "../client/consensus/common" } cumulus-client-consensus-common = { path = "../client/consensus/common" }
cumulus-client-consensus-proposer = { path = "../client/consensus/proposer" } cumulus-client-consensus-proposer = { path = "../client/consensus/proposer" }
cumulus-client-parachain-inherent = { path = "../client/parachain-inherent" }
cumulus-client-service = { path = "../client/service" } cumulus-client-service = { path = "../client/service" }
cumulus-primitives-aura = { path = "../primitives/aura" } cumulus-primitives-aura = { path = "../primitives/aura" }
cumulus-primitives-core = { path = "../primitives/core" } cumulus-primitives-core = { path = "../primitives/core" }
cumulus-primitives-parachain-inherent = { path = "../primitives/parachain-inherent" }
cumulus-relay-chain-interface = { path = "../client/relay-chain-interface" } cumulus-relay-chain-interface = { path = "../client/relay-chain-interface" }
color-print = "0.3.4" color-print = "0.3.4"
+1 -1
View File
@@ -1085,7 +1085,7 @@ where
let relay_chain_interface = relay_chain_interface.clone(); let relay_chain_interface = relay_chain_interface.clone();
async move { async move {
let parachain_inherent = let parachain_inherent =
cumulus_primitives_parachain_inherent::ParachainInherentData::create_at( cumulus_client_parachain_inherent::ParachainInherentDataProvider::create_at(
relay_parent, relay_parent,
&relay_chain_interface, &relay_chain_interface,
&validation_data, &validation_data,
@@ -13,23 +13,17 @@ workspace = true
async-trait = { version = "0.1.74", optional = true } async-trait = { version = "0.1.74", optional = true }
codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
scale-info = { version = "2.10.0", default-features = false, features = ["derive"] } scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
tracing = { version = "0.1.37", optional = true }
# Substrate # Substrate
sc-client-api = { path = "../../../substrate/client/api", optional = true }
sp-api = { path = "../../../substrate/primitives/api", optional = true }
sp-core = { path = "../../../substrate/primitives/core", default-features = false } sp-core = { path = "../../../substrate/primitives/core", default-features = false }
sp-inherents = { path = "../../../substrate/primitives/inherents", default-features = false } sp-inherents = { path = "../../../substrate/primitives/inherents", default-features = false }
sp-runtime = { path = "../../../substrate/primitives/runtime", optional = true } sp-runtime = { path = "../../../substrate/primitives/runtime", optional = true }
sp-state-machine = { path = "../../../substrate/primitives/state-machine", optional = true } sp-state-machine = { path = "../../../substrate/primitives/state-machine", optional = true }
sp-std = { path = "../../../substrate/primitives/std", default-features = false } sp-std = { path = "../../../substrate/primitives/std", default-features = false }
sp-storage = { path = "../../../substrate/primitives/storage", optional = true }
sp-trie = { path = "../../../substrate/primitives/trie", default-features = false } sp-trie = { path = "../../../substrate/primitives/trie", default-features = false }
# Cumulus # Cumulus
cumulus-primitives-core = { path = "../core", default-features = false } cumulus-primitives-core = { path = "../core", default-features = false }
cumulus-relay-chain-interface = { path = "../../client/relay-chain-interface", optional = true }
cumulus-test-relay-sproof-builder = { path = "../../test/relay-sproof-builder", optional = true }
[features] [features]
default = ["std"] default = ["std"]
@@ -37,17 +31,9 @@ std = [
"async-trait", "async-trait",
"codec/std", "codec/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-relay-chain-interface",
"cumulus-test-relay-sproof-builder",
"sc-client-api",
"scale-info/std", "scale-info/std",
"sp-api",
"sp-core/std", "sp-core/std",
"sp-inherents/std", "sp-inherents/std",
"sp-runtime",
"sp-state-machine",
"sp-std/std", "sp-std/std",
"sp-storage",
"sp-trie/std", "sp-trie/std",
"tracing",
] ]
@@ -19,11 +19,11 @@
//! The [`ParachainInherentData`] is the data that is passed by the collator to the parachain //! The [`ParachainInherentData`] is the data that is passed by the collator to the parachain
//! runtime. The runtime will use this data to execute messages from other parachains/the relay //! runtime. The runtime will use this data to execute messages from other parachains/the relay
//! chain or to read data from the relay chain state. When the parachain is validated by a parachain //! chain or to read data from the relay chain state. When the parachain is validated by a parachain
//! validator on the relay chain, this data is checked for correctnes. If the data passed by the //! validator on the relay chain, this data is checked for correctness. If the data passed by the
//! collator to the runtime isn't correct, the parachain candidate is considered invalid. //! collator to the runtime isn't correct, the parachain candidate is considered invalid.
//! //!
//! Use [`ParachainInherentData::create_at`] to create the [`ParachainInherentData`] at a given //! To create a [`ParachainInherentData`] for a specific relay chain block, there exists the
//! relay chain block to include it in a parachain block. //! `ParachainInherentDataExt` trait in `cumulus-client-parachain-inherent` that helps with this.
#![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), no_std)]
@@ -36,13 +36,6 @@ use scale_info::TypeInfo;
use sp_inherents::InherentIdentifier; use sp_inherents::InherentIdentifier;
use sp_std::{collections::btree_map::BTreeMap, vec::Vec}; use sp_std::{collections::btree_map::BTreeMap, vec::Vec};
#[cfg(feature = "std")]
mod client_side;
#[cfg(feature = "std")]
mod mock;
#[cfg(feature = "std")]
pub use mock::{MockValidationDataInherentDataProvider, MockXcmConfig};
/// The identifier for the parachain inherent. /// The identifier for the parachain inherent.
pub const INHERENT_IDENTIFIER: InherentIdentifier = *b"sysi1337"; pub const INHERENT_IDENTIFIER: InherentIdentifier = *b"sysi1337";
@@ -68,6 +61,25 @@ pub struct ParachainInherentData {
pub horizontal_messages: BTreeMap<ParaId, Vec<InboundHrmpMessage>>, pub horizontal_messages: BTreeMap<ParaId, Vec<InboundHrmpMessage>>,
} }
#[cfg(feature = "std")]
#[async_trait::async_trait]
impl sp_inherents::InherentDataProvider for ParachainInherentData {
async fn provide_inherent_data(
&self,
inherent_data: &mut sp_inherents::InherentData,
) -> Result<(), sp_inherents::Error> {
inherent_data.put_data(INHERENT_IDENTIFIER, &self)
}
async fn try_handle_error(
&self,
_: &sp_inherents::InherentIdentifier,
_: &[u8],
) -> Option<Result<(), sp_inherents::Error>> {
None
}
}
/// This struct provides ability to extend a message queue chain (MQC) and compute a new head. /// This struct provides ability to extend a message queue chain (MQC) and compute a new head.
/// ///
/// MQC is an instance of a [hash chain] applied to a message queue. Using a hash chain it's /// MQC is an instance of a [hash chain] applied to a message queue. Using a hash chain it's
@@ -84,6 +96,11 @@ pub struct ParachainInherentData {
pub struct MessageQueueChain(RelayHash); pub struct MessageQueueChain(RelayHash);
impl MessageQueueChain { impl MessageQueueChain {
/// Create a new instance initialized to `hash`.
pub fn new(hash: RelayHash) -> Self {
Self(hash)
}
/// Extend the hash chain with an HRMP message. This method should be used only when /// Extend the hash chain with an HRMP message. This method should be used only when
/// this chain is tracking HRMP. /// this chain is tracking HRMP.
pub fn extend_hrmp(&mut self, horizontal_message: &InboundHrmpMessage) -> &mut Self { pub fn extend_hrmp(&mut self, horizontal_message: &InboundHrmpMessage) -> &mut Self {
+1 -1
View File
@@ -71,9 +71,9 @@ cumulus-client-cli = { path = "../../client/cli" }
parachains-common = { path = "../../parachains/common" } parachains-common = { path = "../../parachains/common" }
cumulus-client-consensus-common = { path = "../../client/consensus/common" } cumulus-client-consensus-common = { path = "../../client/consensus/common" }
cumulus-client-consensus-relay-chain = { path = "../../client/consensus/relay-chain" } cumulus-client-consensus-relay-chain = { path = "../../client/consensus/relay-chain" }
cumulus-client-parachain-inherent = { path = "../../client/parachain-inherent" }
cumulus-client-service = { path = "../../client/service" } cumulus-client-service = { path = "../../client/service" }
cumulus-primitives-core = { path = "../../primitives/core" } cumulus-primitives-core = { path = "../../primitives/core" }
cumulus-primitives-parachain-inherent = { path = "../../primitives/parachain-inherent" }
cumulus-relay-chain-inprocess-interface = { path = "../../client/relay-chain-inprocess-interface" } cumulus-relay-chain-inprocess-interface = { path = "../../client/relay-chain-inprocess-interface" }
cumulus-relay-chain-interface = { path = "../../client/relay-chain-interface" } cumulus-relay-chain-interface = { path = "../../client/relay-chain-interface" }
cumulus-test-runtime = { path = "../runtime" } cumulus-test-runtime = { path = "../runtime" }
+1 -1
View File
@@ -19,8 +19,8 @@ use codec::Encode;
use sc_block_builder::BlockBuilderBuilder; use sc_block_builder::BlockBuilderBuilder;
use crate::{construct_extrinsic, Client as TestClient}; use crate::{construct_extrinsic, Client as TestClient};
use cumulus_client_parachain_inherent::ParachainInherentData;
use cumulus_primitives_core::{relay_chain::AccountId, PersistedValidationData}; use cumulus_primitives_core::{relay_chain::AccountId, PersistedValidationData};
use cumulus_primitives_parachain_inherent::ParachainInherentData;
use cumulus_test_relay_sproof_builder::RelayStateSproofBuilder; use cumulus_test_relay_sproof_builder::RelayStateSproofBuilder;
use cumulus_test_runtime::{ use cumulus_test_runtime::{
BalancesCall, GluttonCall, NodeBlock, SudoCall, UncheckedExtrinsic, WASM_BINARY, BalancesCall, GluttonCall, NodeBlock, SudoCall, UncheckedExtrinsic, WASM_BINARY,
+1 -1
View File
@@ -447,7 +447,7 @@ where
let relay_chain_interface = relay_chain_interface_for_closure.clone(); let relay_chain_interface = relay_chain_interface_for_closure.clone();
async move { async move {
let parachain_inherent = let parachain_inherent =
cumulus_primitives_parachain_inherent::ParachainInherentData::create_at( cumulus_client_parachain_inherent::ParachainInherentDataProvider::create_at(
relay_parent, relay_parent,
&relay_chain_interface, &relay_chain_interface,
&validation_data, &validation_data,
+19
View File
@@ -0,0 +1,19 @@
title: "cumulus-primitives-parachain-inherent: Split into two crates"
doc:
- audience: Node Dev
description: |
This splits `cumulus-primitives-parachain-inherent` into two crates. The new crate is called
`cumulus-client-parachain-inherent`. This is done to improve the compile time for runtimes,
as they are not required anymore to pull in half of the node side at compile time.
To migrate your code you need to change
`cumulus_primitives_parachain_inherent::ParachainInherentData::create_at` to
`cumulus_client_parachain_inherent::ParachainInherentDataProvider::create_at`.
Any other code should be compatible. The mocking code also moved to the new client crate and
you may need to adapt your imports accordingly. Generally, replacing the old crate with the new
crate fix most compile errors resulting from this pull request.
crates:
- name: "cumulus-primitives-parachain-inherent"
- name: "cumulus-client-parachain-inherent"