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:
Bastian Köcher
2023-10-30 17:37:10 +01:00
committed by GitHub
parent 40ff09b8fb
commit 2d9426f1cc
3 changed files with 13 additions and 13 deletions
+1 -8
View File
@@ -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.
+10 -2
View File
@@ -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));
}, },
); );
} }
+2 -3
View File
@@ -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.