diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/lib.rs index 1a075b9fe6bea9a931f1a40c06ada4095a3205b6..ceb4d23c294f6ccbf90a115605d04aa228048838 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/lib.rs @@ -42,6 +42,7 @@ decl_test_parachains! { LocationToAccountId: asset_hub_rococo_runtime::xcm_config::LocationToAccountId, ParachainInfo: asset_hub_rococo_runtime::ParachainInfo, MessageOrigin: cumulus_primitives_core::AggregateMessageOrigin, + DigestProvider: (), }, pallets = { PolkadotXcm: asset_hub_rococo_runtime::PolkadotXcm, diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/lib.rs index 3e240ed6748278f768f4143fe6a93db25d094cd2..3e63fa4917d8109257d2f6b8e3957b1c551db2c6 100644 --- a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/lib.rs +++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/lib.rs @@ -42,6 +42,7 @@ decl_test_parachains! { LocationToAccountId: asset_hub_westend_runtime::xcm_config::LocationToAccountId, ParachainInfo: asset_hub_westend_runtime::ParachainInfo, MessageOrigin: cumulus_primitives_core::AggregateMessageOrigin, + DigestProvider: (), }, pallets = { PolkadotXcm: asset_hub_westend_runtime::PolkadotXcm, diff --git a/cumulus/xcm/xcm-emulator/src/lib.rs b/cumulus/xcm/xcm-emulator/src/lib.rs index 8fe6181ab237f0a1cf45da4d5cb1a0121ceb38b7..28719c8654ece831f11cfe23f598e659a635da89 100644 --- a/cumulus/xcm/xcm-emulator/src/lib.rs +++ b/cumulus/xcm/xcm-emulator/src/lib.rs @@ -37,8 +37,8 @@ pub use cumulus_primitives_core::AggregateMessageOrigin as CumulusAggregateMessa pub use frame_support::{ assert_ok, sp_runtime::{ - traits::{Dispatchable, Header as HeaderT}, - DispatchResult, + traits::{Convert, Dispatchable, Header as HeaderT}, + Digest, DispatchResult, }, traits::{ EnqueueMessage, ExecuteOverweightError, Get, Hooks, OnInitialize, OriginTrait, @@ -108,7 +108,6 @@ thread_local! { /// Most recent `HeadData` of each parachain, encoded. pub static LAST_HEAD: RefCell<HashMap<String, HashMap<u32, HeadData>>> = RefCell::new(HashMap::new()); } - pub trait CheckAssertion<Origin, Destination, Hops, Args> where Origin: Chain + Clone, @@ -264,6 +263,7 @@ pub trait Parachain: Chain { type ParachainInfo: Get<ParaId>; type ParachainSystem; type MessageProcessor: ProcessMessage + ServiceQueues; + type DigestProvider: sp_runtime::traits::Convert<BlockNumberFor<Self::Runtime>, Digest>; fn init(); @@ -599,6 +599,7 @@ macro_rules! decl_test_parachains { LocationToAccountId: $location_to_account:path, ParachainInfo: $parachain_info:path, MessageOrigin: $message_origin:path, + $( DigestProvider: $digest_provider:ty, )? }, pallets = { $($pallet_name:ident: $pallet_path:path,)* @@ -639,6 +640,7 @@ macro_rules! decl_test_parachains { type ParachainSystem = $crate::ParachainSystemPallet<<Self as $crate::Chain>::Runtime>; type ParachainInfo = $parachain_info; type MessageProcessor = $crate::DefaultParaMessageProcessor<$name<N>, $message_origin>; + $crate::decl_test_parachains!(@inner_digest_provider $($digest_provider)?); // We run an empty block during initialisation to open HRMP channels // and have them ready for the next block @@ -657,7 +659,7 @@ macro_rules! decl_test_parachains { } fn new_block() { - use $crate::{Chain, HeadData, Network, Hooks, Encode, Parachain, TestExt}; + use $crate::{Chain, Convert, HeadData, Network, Hooks, Encode, Parachain, TestExt}; let para_id = Self::para_id().into(); @@ -677,7 +679,10 @@ macro_rules! decl_test_parachains { .expect("network not initialized?") .clone() ); - <Self as Chain>::System::initialize(&block_number, &parent_head_data.hash(), &Default::default()); + + let digest = <Self as Parachain>::DigestProvider::convert(block_number); + + <Self as Chain>::System::initialize(&block_number, &parent_head_data.hash(), &digest); <<Self as Parachain>::ParachainSystem as Hooks<$crate::BlockNumberFor<Self::Runtime>>>::on_initialize(block_number); let _ = <Self as Parachain>::ParachainSystem::set_validation_data( @@ -734,6 +739,8 @@ macro_rules! decl_test_parachains { $crate::__impl_check_assertion!($name, N); )+ }; + ( @inner_digest_provider $digest_provider:ty ) => { type DigestProvider = $digest_provider; }; + ( @inner_digest_provider /* none */ ) => { type DigestProvider = (); }; } #[macro_export]