mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-06 05:38:00 +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},
|
||||
ensure,
|
||||
inherent::{InherentData, InherentIdentifier, ProvideInherent},
|
||||
storage,
|
||||
traits::Get,
|
||||
weights::Weight,
|
||||
};
|
||||
@@ -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,
|
||||
@@ -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.
|
||||
|
||||
@@ -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 {
|
||||
@@ -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));
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user