mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-19 18:05:41 +00:00
parachain-system: Send same event & digest as a standalone chain (#2064)
This ensures that upgrading a parachain code sends the same event & digest as when using `set_code` on a standalone chain. Close: https://github.com/paritytech/polkadot-sdk/issues/2049
This commit is contained in:
@@ -39,7 +39,6 @@ use frame_support::{
|
|||||||
dispatch::{DispatchResult, Pays, PostDispatchInfo},
|
dispatch::{DispatchResult, Pays, PostDispatchInfo},
|
||||||
ensure,
|
ensure,
|
||||||
inherent::{InherentData, InherentIdentifier, ProvideInherent},
|
inherent::{InherentData, InherentIdentifier, ProvideInherent},
|
||||||
storage,
|
|
||||||
traits::Get,
|
traits::Get,
|
||||||
weights::Weight,
|
weights::Weight,
|
||||||
};
|
};
|
||||||
@@ -598,7 +597,7 @@ pub mod pallet {
|
|||||||
);
|
);
|
||||||
let validation_code = <PendingValidationCode<T>>::take();
|
let validation_code = <PendingValidationCode<T>>::take();
|
||||||
|
|
||||||
Self::put_parachain_code(&validation_code);
|
frame_system::Pallet::<T>::update_code_in_storage(&validation_code);
|
||||||
<T::OnSystemEvent as OnSystemEvent>::on_validation_code_applied();
|
<T::OnSystemEvent as OnSystemEvent>::on_validation_code_applied();
|
||||||
Self::deposit_event(Event::ValidationFunctionApplied {
|
Self::deposit_event(Event::ValidationFunctionApplied {
|
||||||
relay_chain_block_num: vfp.relay_parent_number,
|
relay_chain_block_num: vfp.relay_parent_number,
|
||||||
@@ -1399,12 +1398,6 @@ impl<T: Config> Pallet<T> {
|
|||||||
<DidSetValidationCode<T>>::put(true);
|
<DidSetValidationCode<T>>::put(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Put a new validation function into a particular location where this
|
|
||||||
/// parachain will execute it on subsequent blocks.
|
|
||||||
fn put_parachain_code(code: &[u8]) {
|
|
||||||
storage::unhashed::put_raw(sp_core::storage::well_known_keys::CODE, code);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The maximum code size permitted, in bytes.
|
/// The maximum code size permitted, in bytes.
|
||||||
///
|
///
|
||||||
/// Returns `None` if the relay chain parachain host configuration hasn't been submitted yet.
|
/// Returns `None` if the relay chain parachain host configuration hasn't been submitted yet.
|
||||||
|
|||||||
@@ -869,7 +869,7 @@ fn hrmp_outbound_respects_used_bandwidth() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn events() {
|
fn runtime_upgrade_events() {
|
||||||
BlockTests::new()
|
BlockTests::new()
|
||||||
.with_relay_sproof_builder(|_, block_number, builder| {
|
.with_relay_sproof_builder(|_, block_number, builder| {
|
||||||
if block_number > 123 {
|
if block_number > 123 {
|
||||||
@@ -894,12 +894,20 @@ fn events() {
|
|||||||
|| {},
|
|| {},
|
||||||
|| {
|
|| {
|
||||||
let events = System::events();
|
let events = System::events();
|
||||||
|
|
||||||
|
assert_eq!(events[0].event, RuntimeEvent::System(frame_system::Event::CodeUpdated));
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
events[0].event,
|
events[1].event,
|
||||||
RuntimeEvent::ParachainSystem(crate::Event::ValidationFunctionApplied {
|
RuntimeEvent::ParachainSystem(crate::Event::ValidationFunctionApplied {
|
||||||
relay_chain_block_num: 1234
|
relay_chain_block_num: 1234
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
assert!(System::digest()
|
||||||
|
.logs()
|
||||||
|
.iter()
|
||||||
|
.any(|d| *d == sp_runtime::generic::DigestItem::RuntimeEnvironmentUpdated));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ pub trait SetCode<T: Config> {
|
|||||||
|
|
||||||
impl<T: Config> SetCode<T> for () {
|
impl<T: Config> SetCode<T> for () {
|
||||||
fn set_code(code: Vec<u8>) -> DispatchResult {
|
fn set_code(code: Vec<u8>) -> DispatchResult {
|
||||||
<Pallet<T>>::update_code_in_storage(&code)?;
|
<Pallet<T>>::update_code_in_storage(&code);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1106,11 +1106,10 @@ impl<T: Config> Pallet<T> {
|
|||||||
/// Note this function almost never should be used directly. It is exposed
|
/// Note this function almost never should be used directly. It is exposed
|
||||||
/// for `OnSetCode` implementations that defer actual code being written to
|
/// for `OnSetCode` implementations that defer actual code being written to
|
||||||
/// the storage (for instance in case of parachains).
|
/// the storage (for instance in case of parachains).
|
||||||
pub fn update_code_in_storage(code: &[u8]) -> DispatchResult {
|
pub fn update_code_in_storage(code: &[u8]) {
|
||||||
storage::unhashed::put_raw(well_known_keys::CODE, code);
|
storage::unhashed::put_raw(well_known_keys::CODE, code);
|
||||||
Self::deposit_log(generic::DigestItem::RuntimeEnvironmentUpdated);
|
Self::deposit_log(generic::DigestItem::RuntimeEnvironmentUpdated);
|
||||||
Self::deposit_event(Event::CodeUpdated);
|
Self::deposit_event(Event::CodeUpdated);
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Increment the reference counter on an account.
|
/// Increment the reference counter on an account.
|
||||||
|
|||||||
Reference in New Issue
Block a user