Skip to content

Commit

Permalink
parachain-system: Send same event & digest as a standalone chain (#2064)
Browse files Browse the repository at this point in the history
This ensures that upgrading a parachain code sends the same event &
digest as when using `set_code` on a standalone chain.

Close: #2049
  • Loading branch information
bkchr authored Oct 30, 2023
1 parent 40ff09b commit 2d9426f
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 13 deletions.
9 changes: 1 addition & 8 deletions cumulus/pallets/parachain-system/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ use frame_support::{
dispatch::{DispatchResult, Pays, PostDispatchInfo},
ensure,
inherent::{InherentData, InherentIdentifier, ProvideInherent},
storage,
traits::Get,
weights::Weight,
};
Expand Down Expand Up @@ -598,7 +597,7 @@ pub mod pallet {
);
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();
Self::deposit_event(Event::ValidationFunctionApplied {
relay_chain_block_num: vfp.relay_parent_number,
Expand Down Expand Up @@ -1399,12 +1398,6 @@ impl<T: Config> Pallet<T> {
<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.
///
/// Returns `None` if the relay chain parachain host configuration hasn't been submitted yet.
Expand Down
12 changes: 10 additions & 2 deletions cumulus/pallets/parachain-system/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,7 @@ fn hrmp_outbound_respects_used_bandwidth() {
}

#[test]
fn events() {
fn runtime_upgrade_events() {
BlockTests::new()
.with_relay_sproof_builder(|_, block_number, builder| {
if block_number > 123 {
Expand All @@ -894,12 +894,20 @@ fn events() {
|| {},
|| {
let events = System::events();

assert_eq!(events[0].event, RuntimeEvent::System(frame_system::Event::CodeUpdated));

assert_eq!(
events[0].event,
events[1].event,
RuntimeEvent::ParachainSystem(crate::Event::ValidationFunctionApplied {
relay_chain_block_num: 1234
})
);

assert!(System::digest()
.logs()
.iter()
.any(|d| *d == sp_runtime::generic::DigestItem::RuntimeEnvironmentUpdated));
},
);
}
Expand Down
5 changes: 2 additions & 3 deletions substrate/frame/system/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ pub trait SetCode<T: Config> {

impl<T: Config> SetCode<T> for () {
fn set_code(code: Vec<u8>) -> DispatchResult {
<Pallet<T>>::update_code_in_storage(&code)?;
<Pallet<T>>::update_code_in_storage(&code);
Ok(())
}
}
Expand Down Expand Up @@ -1106,11 +1106,10 @@ impl<T: Config> Pallet<T> {
/// Note this function almost never should be used directly. It is exposed
/// for `OnSetCode` implementations that defer actual code being written to
/// 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);
Self::deposit_log(generic::DigestItem::RuntimeEnvironmentUpdated);
Self::deposit_event(Event::CodeUpdated);
Ok(())
}

/// Increment the reference counter on an account.
Expand Down

0 comments on commit 2d9426f

Please sign in to comment.