mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 19:51:02 +00:00
Manual Para Lock (#5451)
* remove para lock check for now * fmt * manual para lock * expose schedule_code_upgrade and set_current_head * extrinsics and benchmarks * use zero * add weights * fix variable name * add and fix comments * fix weights * add back default lock Co-authored-by: parity-processbot <>
This commit is contained in:
@@ -50,7 +50,8 @@ mod mock;
|
||||
|
||||
pub use origin::{ensure_parachain, Origin};
|
||||
pub use paras::ParaLifecycle;
|
||||
use primitives::v2::Id as ParaId;
|
||||
use primitives::v2::{HeadData, Id as ParaId, ValidationCode};
|
||||
use sp_runtime::DispatchResult;
|
||||
|
||||
/// Schedule a para to be initialized at the start of the next session with the given genesis data.
|
||||
///
|
||||
@@ -78,3 +79,20 @@ pub fn schedule_parathread_upgrade<T: paras::Config>(id: ParaId) -> Result<(), (
|
||||
pub fn schedule_parachain_downgrade<T: paras::Config>(id: ParaId) -> Result<(), ()> {
|
||||
paras::Pallet::<T>::schedule_parachain_downgrade(id).map_err(|_| ())
|
||||
}
|
||||
|
||||
/// Schedules a validation code upgrade to a parachain with the given id.
|
||||
///
|
||||
/// This simply calls [`crate::paras::Pallet::schedule_code_upgrade_external`].
|
||||
pub fn schedule_code_upgrade<T: paras::Config>(
|
||||
id: ParaId,
|
||||
new_code: ValidationCode,
|
||||
) -> DispatchResult {
|
||||
paras::Pallet::<T>::schedule_code_upgrade_external(id, new_code)
|
||||
}
|
||||
|
||||
/// Sets the current parachain head with the given id.
|
||||
///
|
||||
/// This simply calls [`crate::paras::Pallet::set_current_head`].
|
||||
pub fn set_current_head<T: paras::Config>(id: ParaId, new_head: HeadData) {
|
||||
paras::Pallet::<T>::set_current_head(id, new_head)
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ use primitives::v2::{
|
||||
use scale_info::TypeInfo;
|
||||
use sp_core::RuntimeDebug;
|
||||
use sp_runtime::{
|
||||
traits::{AppVerify, One},
|
||||
traits::{AppVerify, One, Saturating},
|
||||
DispatchResult, SaturatedConversion,
|
||||
};
|
||||
use sp_std::{cmp, mem, prelude::*};
|
||||
@@ -535,6 +535,8 @@ pub mod pallet {
|
||||
/// The PVF pre-checking statement cannot be included since the PVF pre-checking mechanism
|
||||
/// is disabled.
|
||||
PvfCheckDisabled,
|
||||
/// Parachain cannot currently schedule a code upgrade.
|
||||
CannotUpgradeCode,
|
||||
}
|
||||
|
||||
/// All currently active PVF pre-checking votes.
|
||||
@@ -752,8 +754,7 @@ pub mod pallet {
|
||||
new_head: HeadData,
|
||||
) -> DispatchResult {
|
||||
ensure_root(origin)?;
|
||||
<Self as Store>::Heads::insert(¶, new_head);
|
||||
Self::deposit_event(Event::CurrentHeadUpdated(para));
|
||||
Self::set_current_head(para, new_head);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1050,6 +1051,31 @@ const INVALID_TX_DOUBLE_VOTE: u8 = 3;
|
||||
const INVALID_TX_PVF_CHECK_DISABLED: u8 = 4;
|
||||
|
||||
impl<T: Config> Pallet<T> {
|
||||
/// This is a call to schedule code upgrades for parachains which is safe to be called
|
||||
/// outside of this module. That means this function does all checks necessary to ensure
|
||||
/// that some external code is allowed to trigger a code upgrade. We do not do auth checks,
|
||||
/// that should be handled by whomever calls this function.
|
||||
pub(crate) fn schedule_code_upgrade_external(
|
||||
id: ParaId,
|
||||
new_code: ValidationCode,
|
||||
) -> DispatchResult {
|
||||
// Check that we can schedule an upgrade at all.
|
||||
ensure!(Self::can_upgrade_validation_code(id), Error::<T>::CannotUpgradeCode);
|
||||
let config = configuration::Pallet::<T>::config();
|
||||
let current_block = frame_system::Pallet::<T>::block_number();
|
||||
// Schedule the upgrade with a delay just like if a parachain triggered the upgrade.
|
||||
let upgrade_block = current_block.saturating_add(config.validation_upgrade_delay);
|
||||
Self::schedule_code_upgrade(id, new_code, upgrade_block, &config);
|
||||
Self::deposit_event(Event::CodeUpgradeScheduled(id));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Set the current head of a parachain.
|
||||
pub(crate) fn set_current_head(para: ParaId, new_head: HeadData) {
|
||||
<Self as Store>::Heads::insert(¶, new_head);
|
||||
Self::deposit_event(Event::CurrentHeadUpdated(para));
|
||||
}
|
||||
|
||||
/// Called by the initializer to initialize the paras pallet.
|
||||
pub(crate) fn initializer_initialize(now: T::BlockNumber) -> Weight {
|
||||
let weight = Self::prune_old_code(now);
|
||||
|
||||
Reference in New Issue
Block a user