mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 00:31: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:
@@ -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