From cd048f135f1cefafce1ac1dd73249e818cd13b44 Mon Sep 17 00:00:00 2001 From: kianenigma Date: Fri, 7 Nov 2025 09:00:12 +0000 Subject: [PATCH 1/6] changelog and spec versions --- CHANGELOG.md | 2 +- relay/kusama/src/lib.rs | 2 +- relay/polkadot/src/lib.rs | 2 +- system-parachains/asset-hubs/asset-hub-kusama/src/lib.rs | 2 +- system-parachains/asset-hubs/asset-hub-polkadot/src/lib.rs | 2 +- system-parachains/bridge-hubs/bridge-hub-kusama/src/lib.rs | 2 +- system-parachains/bridge-hubs/bridge-hub-polkadot/src/lib.rs | 2 +- system-parachains/collectives/collectives-polkadot/src/lib.rs | 2 +- system-parachains/coretime/coretime-kusama/src/lib.rs | 2 +- system-parachains/coretime/coretime-polkadot/src/lib.rs | 2 +- system-parachains/encointer/src/lib.rs | 2 +- system-parachains/gluttons/glutton-kusama/src/lib.rs | 2 +- system-parachains/people/people-kusama/src/lib.rs | 2 +- system-parachains/people/people-polkadot/src/lib.rs | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 609983d7c5..c39ea64f59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Changelog for the runtimes governed by the Polkadot Fellowship. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [Unreleased] +## [2.0.2] 07.11.2025 ### Fixed diff --git a/relay/kusama/src/lib.rs b/relay/kusama/src/lib.rs index 48ecbe3126..66ee073874 100644 --- a/relay/kusama/src/lib.rs +++ b/relay/kusama/src/lib.rs @@ -188,7 +188,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: alloc::borrow::Cow::Borrowed("kusama"), impl_name: alloc::borrow::Cow::Borrowed("parity-kusama"), authoring_version: 2, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 26, diff --git a/relay/polkadot/src/lib.rs b/relay/polkadot/src/lib.rs index db0684aa33..32a37eb7a9 100644 --- a/relay/polkadot/src/lib.rs +++ b/relay/polkadot/src/lib.rs @@ -177,7 +177,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: alloc::borrow::Cow::Borrowed("polkadot"), impl_name: alloc::borrow::Cow::Borrowed("parity-polkadot"), authoring_version: 0, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 26, diff --git a/system-parachains/asset-hubs/asset-hub-kusama/src/lib.rs b/system-parachains/asset-hubs/asset-hub-kusama/src/lib.rs index b97cde1525..cd7b1b851c 100644 --- a/system-parachains/asset-hubs/asset-hub-kusama/src/lib.rs +++ b/system-parachains/asset-hubs/asset-hub-kusama/src/lib.rs @@ -144,7 +144,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("statemine"), impl_name: Cow::Borrowed("statemine"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 15, diff --git a/system-parachains/asset-hubs/asset-hub-polkadot/src/lib.rs b/system-parachains/asset-hubs/asset-hub-polkadot/src/lib.rs index d430cd6d09..8b5e6c9c10 100644 --- a/system-parachains/asset-hubs/asset-hub-polkadot/src/lib.rs +++ b/system-parachains/asset-hubs/asset-hub-polkadot/src/lib.rs @@ -192,7 +192,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { impl_name: Cow::Borrowed("statemint"), spec_name: Cow::Borrowed("statemint"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 15, diff --git a/system-parachains/bridge-hubs/bridge-hub-kusama/src/lib.rs b/system-parachains/bridge-hubs/bridge-hub-kusama/src/lib.rs index d2e79b6f6d..ed7af8496b 100644 --- a/system-parachains/bridge-hubs/bridge-hub-kusama/src/lib.rs +++ b/system-parachains/bridge-hubs/bridge-hub-kusama/src/lib.rs @@ -176,7 +176,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("bridge-hub-kusama"), impl_name: Cow::Borrowed("bridge-hub-kusama"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 5, diff --git a/system-parachains/bridge-hubs/bridge-hub-polkadot/src/lib.rs b/system-parachains/bridge-hubs/bridge-hub-polkadot/src/lib.rs index 2d72dd94a1..3581b3fab4 100644 --- a/system-parachains/bridge-hubs/bridge-hub-polkadot/src/lib.rs +++ b/system-parachains/bridge-hubs/bridge-hub-polkadot/src/lib.rs @@ -206,7 +206,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("bridge-hub-polkadot"), impl_name: Cow::Borrowed("bridge-hub-polkadot"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 4, diff --git a/system-parachains/collectives/collectives-polkadot/src/lib.rs b/system-parachains/collectives/collectives-polkadot/src/lib.rs index 07a8d643a3..92d17c6604 100644 --- a/system-parachains/collectives/collectives-polkadot/src/lib.rs +++ b/system-parachains/collectives/collectives-polkadot/src/lib.rs @@ -130,7 +130,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("collectives"), impl_name: Cow::Borrowed("collectives"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 7, diff --git a/system-parachains/coretime/coretime-kusama/src/lib.rs b/system-parachains/coretime/coretime-kusama/src/lib.rs index 8f5cf7aa2e..208d7f032f 100644 --- a/system-parachains/coretime/coretime-kusama/src/lib.rs +++ b/system-parachains/coretime/coretime-kusama/src/lib.rs @@ -150,7 +150,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("coretime-kusama"), impl_name: Cow::Borrowed("coretime-kusama"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/system-parachains/coretime/coretime-polkadot/src/lib.rs b/system-parachains/coretime/coretime-polkadot/src/lib.rs index e129cc0468..6b95ecc6bd 100644 --- a/system-parachains/coretime/coretime-polkadot/src/lib.rs +++ b/system-parachains/coretime/coretime-polkadot/src/lib.rs @@ -157,7 +157,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("coretime-polkadot"), impl_name: Cow::Borrowed("coretime-polkadot"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 0, diff --git a/system-parachains/encointer/src/lib.rs b/system-parachains/encointer/src/lib.rs index 208ff12ea2..958f271e29 100644 --- a/system-parachains/encointer/src/lib.rs +++ b/system-parachains/encointer/src/lib.rs @@ -146,7 +146,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("encointer-parachain"), impl_name: Cow::Borrowed("encointer-parachain"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 4, diff --git a/system-parachains/gluttons/glutton-kusama/src/lib.rs b/system-parachains/gluttons/glutton-kusama/src/lib.rs index 1e4b87eb77..3e58fbb5c2 100644 --- a/system-parachains/gluttons/glutton-kusama/src/lib.rs +++ b/system-parachains/gluttons/glutton-kusama/src/lib.rs @@ -94,7 +94,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("glutton"), impl_name: Cow::Borrowed("glutton"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/system-parachains/people/people-kusama/src/lib.rs b/system-parachains/people/people-kusama/src/lib.rs index 7f63273670..57897d46d9 100644 --- a/system-parachains/people/people-kusama/src/lib.rs +++ b/system-parachains/people/people-kusama/src/lib.rs @@ -171,7 +171,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("people-kusama"), impl_name: Cow::Borrowed("people-kusama"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/system-parachains/people/people-polkadot/src/lib.rs b/system-parachains/people/people-polkadot/src/lib.rs index 0ce80cc97b..9b9a53d185 100644 --- a/system-parachains/people/people-polkadot/src/lib.rs +++ b/system-parachains/people/people-polkadot/src/lib.rs @@ -158,7 +158,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: Cow::Borrowed("people-polkadot"), impl_name: Cow::Borrowed("people-polkadot"), authoring_version: 1, - spec_version: 2_000_001, + spec_version: 2_000_002, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 0, From ed877377380a1ef61624bcf466cc8819f21e140f Mon Sep 17 00:00:00 2001 From: kianenigma Date: Thu, 28 May 2026 14:30:47 +0100 Subject: [PATCH 2/6] parameterize min validator count on RC + reduce defaults --- Cargo.lock | 1 + relay/kusama/src/lib.rs | 15 +++- relay/polkadot/Cargo.toml | 4 ++ relay/polkadot/src/lib.rs | 72 +++++++++++++++++-- relay/polkadot/src/weights/mod.rs | 1 + .../polkadot/src/weights/pallet_parameters.rs | 66 +++++++++++++++++ 6 files changed, 150 insertions(+), 9 deletions(-) create mode 100644 relay/polkadot/src/weights/pallet_parameters.rs diff --git a/Cargo.lock b/Cargo.lock index c154b01301..844400a63c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12213,6 +12213,7 @@ dependencies = [ "pallet-nomination-pools-runtime-api", "pallet-offences", "pallet-offences-benchmarking", + "pallet-parameters", "pallet-preimage", "pallet-proxy", "pallet-rc-migrator", diff --git a/relay/kusama/src/lib.rs b/relay/kusama/src/lib.rs index fdf0bf6b0c..1159f4be8a 100644 --- a/relay/kusama/src/lib.rs +++ b/relay/kusama/src/lib.rs @@ -796,6 +796,15 @@ pub mod dynamic_params { #[codec(index = 1)] pub static BurnDestination: BurnDestinationAccount = Default::default(); } + + /// Parameters used by `pallet-staking-async-ah-client`. + #[dynamic_pallet_params] + #[codec(index = 2)] + pub mod ah_client { + /// Minimum size of the validator set that the relay chain will accept from Asset Hub. + #[codec(index = 0)] + pub static MinimumValidatorSetSize: u32 = 100; + } } #[cfg(feature = "runtime-benchmarks")] @@ -823,6 +832,8 @@ impl EnsureOriginWithArg for DynamicParamet Inflation(_) => frame_system::ensure_root(origin.clone()), Treasury(_) => EitherOf::, GeneralAdmin>::ensure_origin(origin.clone()), + AhClient(_) => + EitherOf::, StakingAdmin>::ensure_origin(origin.clone()), } .map_err(|_| origin) } @@ -1786,8 +1797,6 @@ impl pallet_nomination_pools::Config for Runtime { parameter_types! { pub const DelegatedStakingPalletId: PalletId = PalletId(*b"py/dlstk"); pub const SlashRewardFraction: Perbill = Perbill::from_percent(1); - // Kusama always wants 1000 validators, we reject anything smaller than that. - pub storage MinimumValidatorSetSize: u32 = 1000; } impl pallet_delegated_staking::Config for Runtime { @@ -1808,7 +1817,7 @@ impl pallet_staking_async_ah_client::Config for Runtime { type AdminOrigin = EnsureRoot; type SessionInterface = Session; type SendToAssetHub = StakingXcmToAssetHub; - type MinimumValidatorSetSize = MinimumValidatorSetSize; + type MinimumValidatorSetSize = dynamic_params::ah_client::MinimumValidatorSetSize; type UnixTime = Timestamp; type PointsPerBlock = ConstU32<20>; type MaxOffenceBatchSize = ConstU32<32>; diff --git a/relay/polkadot/Cargo.toml b/relay/polkadot/Cargo.toml index 6b9ad60d81..4a9738aaa2 100644 --- a/relay/polkadot/Cargo.toml +++ b/relay/polkadot/Cargo.toml @@ -68,6 +68,7 @@ pallet-multisig = { workspace = true } pallet-nomination-pools = { workspace = true } pallet-nomination-pools-runtime-api = { workspace = true } pallet-offences = { workspace = true } +pallet-parameters = { workspace = true } pallet-preimage = { workspace = true } pallet-proxy = { workspace = true } pallet-referenda = { workspace = true } @@ -180,6 +181,7 @@ std = [ "pallet-nomination-pools/std", "pallet-offences-benchmarking?/std", "pallet-offences/std", + "pallet-parameters/std", "pallet-preimage/std", "pallet-proxy/std", "pallet-referenda/std", @@ -264,6 +266,7 @@ runtime-benchmarks = [ "pallet-nomination-pools/runtime-benchmarks", "pallet-offences-benchmarking/runtime-benchmarks", "pallet-offences/runtime-benchmarks", + "pallet-parameters/runtime-benchmarks", "pallet-preimage/runtime-benchmarks", "pallet-proxy/runtime-benchmarks", "pallet-referenda/runtime-benchmarks", @@ -326,6 +329,7 @@ try-runtime = [ "pallet-multisig/try-runtime", "pallet-nomination-pools/try-runtime", "pallet-offences/try-runtime", + "pallet-parameters/try-runtime", "pallet-preimage/try-runtime", "pallet-proxy/try-runtime", "pallet-referenda/try-runtime", diff --git a/relay/polkadot/src/lib.rs b/relay/polkadot/src/lib.rs index d72db9ceb7..955efe6b50 100644 --- a/relay/polkadot/src/lib.rs +++ b/relay/polkadot/src/lib.rs @@ -40,14 +40,15 @@ use frame_election_provider_support::{ }; use frame_support::{ construct_runtime, + dynamic_params::{dynamic_pallet_params, dynamic_params}, genesis_builder_helper::{build_state, get_preset}, parameter_types, traits::{ fungible::HoldConsideration, tokens::{imbalance::ResolveTo, UnityOrOuterConversion}, - ConstU32, ConstU8, ConstUint, Contains, EitherOf, EitherOfDiverse, FromContains, Get, - InstanceFilter, KeyOwnerProofSystem, LinearStoragePrice, PrivilegeCmp, ProcessMessage, - ProcessMessageError, WithdrawReasons, + ConstU32, ConstU8, ConstUint, Contains, EitherOf, EitherOfDiverse, EnsureOrigin, + EnsureOriginWithArg, FromContains, Get, InstanceFilter, KeyOwnerProofSystem, + LinearStoragePrice, PrivilegeCmp, ProcessMessage, ProcessMessageError, WithdrawReasons, }, weights::{ constants::{WEIGHT_PROOF_SIZE_PER_KB, WEIGHT_REF_TIME_PER_MICROS}, @@ -1601,6 +1602,63 @@ impl pallet_delegated_staking::Config for Runtime { type CoreStaking = Staking; } +/// Dynamic params that can be adjusted at runtime. +#[dynamic_params(RuntimeParameters, pallet_parameters::Parameters::)] +pub mod dynamic_params { + use super::*; + + /// Parameters used by `pallet-staking-async-ah-client`. + #[dynamic_pallet_params] + #[codec(index = 0)] + pub mod ah_client { + /// Minimum size of the validator set that the relay chain will accept from Asset Hub. + #[codec(index = 0)] + pub static MinimumValidatorSetSize: u32 = 250; + } +} + +#[cfg(feature = "runtime-benchmarks")] +impl Default for RuntimeParameters { + fn default() -> Self { + RuntimeParameters::AhClient(dynamic_params::ah_client::Parameters::MinimumValidatorSetSize( + dynamic_params::ah_client::MinimumValidatorSetSize, + Some(250), + )) + } +} + +/// Defines what origin can modify which dynamic parameters. +pub struct DynamicParameterOrigin; +impl EnsureOriginWithArg for DynamicParameterOrigin { + type Success = (); + + fn try_origin( + origin: RuntimeOrigin, + key: &RuntimeParametersKey, + ) -> Result { + use crate::RuntimeParametersKey::*; + + match key { + AhClient(_) => + EitherOf::, StakingAdmin>::ensure_origin(origin.clone()), + } + .map_err(|_| origin) + } + + #[cfg(feature = "runtime-benchmarks")] + fn try_successful_origin(_key: &RuntimeParametersKey) -> Result { + // Provide the origin for the parameter returned by `Default`: + Ok(RuntimeOrigin::root()) + } +} + +impl pallet_parameters::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeParameters = RuntimeParameters; + type AdminOrigin = DynamicParameterOrigin; + type WeightInfo = weights::pallet_parameters::WeightInfo; +} + impl ah_client::Config for Runtime { type CurrencyBalance = Balance; type AssetHubOrigin = @@ -1608,9 +1666,7 @@ impl ah_client::Config for Runtime { type AdminOrigin = EnsureRoot; type SessionInterface = Session; type SendToAssetHub = StakingXcmToAssetHub; - // Polkadot RC currently has 600 validators. Note: this has to be updated with AH validator - // count increasing. - type MinimumValidatorSetSize = ConstU32<600>; + type MinimumValidatorSetSize = dynamic_params::ah_client::MinimumValidatorSetSize; type UnixTime = Timestamp; type PointsPerBlock = ConstU32<20>; type MaxOffenceBatchSize = ConstU32<32>; @@ -1844,6 +1900,9 @@ construct_runtime! { DelegatedStaking: pallet_delegated_staking = 41, StakingAhClient: pallet_staking_async_ah_client = 42, + // Dynamic, configurable parameters. + Parameters: pallet_parameters = 46, + // Parachains pallets. Start indices at 50 to leave room. ParachainsOrigin: parachains_origin = 50, Configuration: parachains_configuration = 51, @@ -1999,6 +2058,7 @@ mod benches { [pallet_multisig, Multisig] [pallet_nomination_pools, NominationPoolsBench::] [pallet_offences, OffencesBench::] + [pallet_parameters, Parameters] [pallet_preimage, Preimage] [pallet_proxy, Proxy] [pallet_scheduler, Scheduler] diff --git a/relay/polkadot/src/weights/mod.rs b/relay/polkadot/src/weights/mod.rs index f9b9c932bb..ed01de078b 100644 --- a/relay/polkadot/src/weights/mod.rs +++ b/relay/polkadot/src/weights/mod.rs @@ -31,6 +31,7 @@ pub mod pallet_indices; pub mod pallet_message_queue; pub mod pallet_multisig; pub mod pallet_nomination_pools; +pub mod pallet_parameters; pub mod pallet_preimage; pub mod pallet_proxy; pub mod pallet_referenda; diff --git a/relay/polkadot/src/weights/pallet_parameters.rs b/relay/polkadot/src/weights/pallet_parameters.rs new file mode 100644 index 0000000000..156b32a7c2 --- /dev/null +++ b/relay/polkadot/src/weights/pallet_parameters.rs @@ -0,0 +1,66 @@ +// Copyright (C) Parity Technologies and the various Polkadot contributors, see Contributions.md +// for a list of specific contributors. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Autogenerated weights for `pallet_parameters` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 54.0.0 +//! DATE: 2026-04-09, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm1-3`, CPU: `Intel(R) Xeon(R) E-2388G CPU @ 3.20GHz` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: 1024 + +// Executed Command: +// frame-omni-bencher +// v1 +// benchmark +// pallet +// --extrinsic=* +// --runtime=target/production/wbuild/polkadot-runtime/polkadot_runtime.wasm +// --pallet=pallet_parameters +// --header=/opt/actions-runner/_work/runtimes/runtimes/.github/scripts/cmd/file_header.txt +// --output=./relay/polkadot/src/weights +// --wasm-execution=compiled +// --steps=50 +// --repeat=20 +// --heap-pages=4096 +// --min-duration +// 1 +// --quiet + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(missing_docs)] + +use frame_support::{traits::Get, weights::Weight}; +use core::marker::PhantomData; + +/// Weight functions for `pallet_parameters`. +pub struct WeightInfo(PhantomData); +impl pallet_parameters::WeightInfo for WeightInfo { + /// Storage: `Parameters::Parameters` (r:1 w:1) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(53), added: 2528, mode: `MaxEncodedLen`) + fn set_parameter() -> Weight { + // Proof Size summary in bytes: + // Measured: `4` + // Estimated: `3518` + // Minimum execution time: 6_496_000 picoseconds. + Weight::from_parts(7_005_000, 0) + .saturating_add(Weight::from_parts(0, 3518)) + .saturating_add(T::DbWeight::get().reads(1)) + .saturating_add(T::DbWeight::get().writes(1)) + } +} From 0c7f698516407ae606894a8dbcc5a85019a2df28 Mon Sep 17 00:00:00 2001 From: kianenigma Date: Thu, 28 May 2026 14:34:54 +0100 Subject: [PATCH 3/6] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1e8a4c6d0..05aa3a6bbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - Zombienet SDK integration tests for elastic scaling on Asset Hub Polkadot and People Polkadot. +- Flexible validator set size limit on rc ([#PR1193](https://github.com/polkadot-fellows/runtimes/pull/1193)) ### Changed From d7ea930ba8d806daa913e31ca9e470d6115e106d Mon Sep 17 00:00:00 2001 From: kianenigma Date: Thu, 28 May 2026 14:46:51 +0100 Subject: [PATCH 4/6] better origin --- relay/kusama/src/lib.rs | 8 ++++++-- relay/polkadot/src/lib.rs | 7 +++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/relay/kusama/src/lib.rs b/relay/kusama/src/lib.rs index 1159f4be8a..84e5aab8d6 100644 --- a/relay/kusama/src/lib.rs +++ b/relay/kusama/src/lib.rs @@ -832,8 +832,12 @@ impl EnsureOriginWithArg for DynamicParamet Inflation(_) => frame_system::ensure_root(origin.clone()), Treasury(_) => EitherOf::, GeneralAdmin>::ensure_origin(origin.clone()), - AhClient(_) => - EitherOf::, StakingAdmin>::ensure_origin(origin.clone()), + AhClient(_) => EitherOfDiverse::< + // either local root or StakingAdmin, or same from OpenGov on AH + EitherOf, StakingAdmin>, + EnsureXcm>, + >::ensure_origin(origin.clone()) + .map(|_success| ()), } .map_err(|_| origin) } diff --git a/relay/polkadot/src/lib.rs b/relay/polkadot/src/lib.rs index 955efe6b50..71e4240bc5 100644 --- a/relay/polkadot/src/lib.rs +++ b/relay/polkadot/src/lib.rs @@ -1639,8 +1639,11 @@ impl EnsureOriginWithArg for DynamicParamet use crate::RuntimeParametersKey::*; match key { - AhClient(_) => - EitherOf::, StakingAdmin>::ensure_origin(origin.clone()), + AhClient(_) => EitherOfDiverse::< + // either local root or StakingAdmin, or same from OpenGov on AH + EitherOf, StakingAdmin>, + EnsureXcm>, + >::ensure_origin(origin.clone()).map(|_success| ()), } .map_err(|_| origin) } From 3ddcafd4f5f3f591455d11562586b38637606d06 Mon Sep 17 00:00:00 2001 From: kianenigma Date: Thu, 28 May 2026 14:51:01 +0100 Subject: [PATCH 5/6] fmt --- relay/polkadot/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/relay/polkadot/src/lib.rs b/relay/polkadot/src/lib.rs index 71e4240bc5..4f96235bd3 100644 --- a/relay/polkadot/src/lib.rs +++ b/relay/polkadot/src/lib.rs @@ -1643,7 +1643,8 @@ impl EnsureOriginWithArg for DynamicParamet // either local root or StakingAdmin, or same from OpenGov on AH EitherOf, StakingAdmin>, EnsureXcm>, - >::ensure_origin(origin.clone()).map(|_success| ()), + >::ensure_origin(origin.clone()) + .map(|_success| ()), } .map_err(|_| origin) } From 3b9bc1ea09f7dcd593d07cea7f0584f24c428da3 Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Mon, 1 Jun 2026 14:19:52 +0100 Subject: [PATCH 6/6] Apply suggestion from @kianenigma --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1196f2ff3c..8bf3a95a96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - PAH: filter `staking.reap_stash` from both `BaseCallFilter` and the XCM `SafeCallFilter` while the validator self-stake transition to higher bond. See Ref: [#1890](https://polkadot.subsquare.io/referenda/1890) ([#1159](https://github.com/polkadot-fellows/runtimes/pull/1159)) - Collectives Polkadot: Increase the Secretary Collective salary budget ([#1172](https://github.com/polkadot-fellows/runtimes/pull/1172)) - Align all runtimes to use the same values for e.g. `TransactionByteFee` and some other clean ups. ([#1175](https://github.com/polkadot-fellows/runtimes/pull/1175)) -- Flexible validator set size limit on rc ([#PR1193](https://github.com/polkadot-fellows/runtimes/pull/1193)) +- Flexible minimum validator set size on rc ([#PR1193](https://github.com/polkadot-fellows/runtimes/pull/1193)) ## [2.2.2] 23.04.2026