From 0457c1a9e3435b30886827329f5596880d870219 Mon Sep 17 00:00:00 2001 From: Toufeeq Pasha <47236805+ToufeeqP@users.noreply.github.com> Date: Wed, 12 Jul 2023 21:31:08 +0530 Subject: [PATCH] [pallet_collective] Enforce prime is a valid member of collective in set_members extrinsic (#14354) * Updated set_members extrinsic to enforce prime is valid member of collective * Added additional tests for set_members extrinsic * applied the code review suggestions --- substrate/frame/collective/src/lib.rs | 5 +++++ substrate/frame/collective/src/tests.rs | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/substrate/frame/collective/src/lib.rs b/substrate/frame/collective/src/lib.rs index 30c4ad0929..6d69586666 100644 --- a/substrate/frame/collective/src/lib.rs +++ b/substrate/frame/collective/src/lib.rs @@ -346,6 +346,8 @@ pub mod pallet { WrongProposalWeight, /// The given length bound for the proposal was too low. WrongProposalLength, + /// Prime account is not a member + PrimeAccountNotMember, } #[pallet::hooks] @@ -417,6 +419,9 @@ pub mod pallet { old.len(), ); } + if let Some(p) = &prime { + ensure!(new_members.contains(p), Error::::PrimeAccountNotMember); + } let mut new_members = new_members; new_members.sort(); >::set_members_sorted(&new_members, &old); diff --git a/substrate/frame/collective/src/tests.rs b/substrate/frame/collective/src/tests.rs index a4ec55856e..bf16931649 100644 --- a/substrate/frame/collective/src/tests.rs +++ b/substrate/frame/collective/src/tests.rs @@ -236,6 +236,25 @@ fn initialize_members_sorts_members() { }); } +#[test] +fn set_members_with_prime_works() { + ExtBuilder::default().build_and_execute(|| { + let members = vec![1, 2, 3]; + assert_ok!(Collective::set_members( + RuntimeOrigin::root(), + members.clone(), + Some(3), + MaxMembers::get() + )); + assert_eq!(Collective::members(), members.clone()); + assert_eq!(Collective::prime(), Some(3)); + assert_noop!( + Collective::set_members(RuntimeOrigin::root(), members, Some(4), MaxMembers::get()), + Error::::PrimeAccountNotMember + ); + }); +} + #[test] fn proposal_weight_limit_works() { ExtBuilder::default().build_and_execute(|| {