difftreelog
Merge pull request #1057 from UniqueNetwork/feature/resolve-skipped-blocks
in: master
resolve_unstake
5 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6814,7 +6814,7 @@
[[package]]
name = "pallet-app-promotion"
-version = "0.2.1"
+version = "0.2.2"
dependencies = [
"frame-benchmarking",
"frame-support",
js-packages/scripts/correctStateAfterMaintenance.tsdiffbeforeafterboth1import config from '../tests/config.js';2import {usingPlaygrounds} from '@unique/test-utils/util.js';3import type {u32} from '@polkadot/types-codec';45const WS_ENDPOINT = config.substrateUrl;6const DONOR_SEED = '//Alice';78export const main = async(options: { wsEndpoint: string; donorSeed: string } = {9 wsEndpoint: WS_ENDPOINT,10 donorSeed: DONOR_SEED,11}) => {12 await usingPlaygrounds(async (helper, privateKey) => {13 const api = helper.getApi();1415 if((await api.query.maintenance.enabled()).valueOf()) {16 throw Error('The network is still in maintenance mode');17 }1819 const pendingBlocks = (20 await api.query.appPromotion.pendingUnstake.entries()21 ).map(([k, _v]) =>22 (k.args[0] as u32).toNumber());2324 const currentBlock = (await api.query.system.number() as u32).toNumber();2526 const filteredBlocks = pendingBlocks.filter(b => currentBlock > b);2728 if(filteredBlocks.length != 0) {29 console.log(`During maintenance mode, ${filteredBlocks.length} block(s) were not processed. Number(s): ${filteredBlocks}`);30 } else {31 console.log('Nothing to change');32 return;33 }3435 const skippedBlocks = chunk(filteredBlocks, 10);3637 const signer = await privateKey(options.donorSeed);3839 const txs = skippedBlocks.map((b) =>40 api.tx.appPromotion.resolveSkippedBlocks(b));414243 const promises = txs.map((tx) => () => helper.signTransaction(signer, tx));4445 await Promise.allSettled(promises.map((p) => p()));4647 const failedBlocks: number[] = [];48 let isSuccess = true;4950 for(const b of filteredBlocks) {51 if(((await api.query.appPromotion.pendingUnstake(b)).toJSON() as any[]).length != 0) {52 failedBlocks.push(b);53 isSuccess = false;54 }55 }5657 if(isSuccess) {58 console.log('Done. %d block(s) were processed.', filteredBlocks.length);59 } else {60 throw new Error(`Something went wrong. Block(s) have not been processed: ${failedBlocks}`);61 }626364 }, options.wsEndpoint);65};6667const chunk = <T>(arr: T[], size: number) =>68 Array.from({length: Math.ceil(arr.length / size)}, (_: any, i: number) =>69 arr.slice(i * size, i * size + size));pallets/app-promotion/CHANGELOG.mddiffbeforeafterboth--- a/pallets/app-promotion/CHANGELOG.md
+++ b/pallets/app-promotion/CHANGELOG.md
@@ -4,6 +4,12 @@
<!-- bureaucrate goes here -->
+## [0.2.2] - 2024-03-21
+
+### Changed
+
+- Unstake of skipped blocks is now available to `Signed` origin.
+
## [0.2.1] - 2023-06-23
### Changed
pallets/app-promotion/Cargo.tomldiffbeforeafterboth--- a/pallets/app-promotion/Cargo.toml
+++ b/pallets/app-promotion/Cargo.toml
@@ -9,7 +9,7 @@
license = 'GPLv3'
name = 'pallet-app-promotion'
repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.2.1'
+version = '0.2.2'
[package.metadata.docs.rs]
targets = ['x86_64-unknown-linux-gnu']
pallets/app-promotion/src/lib.rsdiffbeforeafterboth--- a/pallets/app-promotion/src/lib.rs
+++ b/pallets/app-promotion/src/lib.rs
@@ -689,21 +689,18 @@
/// Called for blocks that, for some reason, have not been unstacked
///
- /// # Permissions
- ///
- /// * Sudo
///
/// # Arguments
///
- /// * `origin`: Must be `Root`.
+ /// * `origin`: Must be `Signed`.
/// * `pending_blocks`: Block numbers that will be processed.
#[pallet::call_index(9)]
#[pallet::weight(<T as Config>::WeightInfo::on_initialize(PENDING_LIMIT_PER_BLOCK*pending_blocks.len() as u32))]
- pub fn force_unstake(
+ pub fn resolve_skipped_blocks(
origin: OriginFor<T>,
pending_blocks: Vec<BlockNumberFor<T>>,
) -> DispatchResult {
- ensure_root(origin)?;
+ ensure_signed(origin)?;
ensure!(
pending_blocks