diff --git a/substrate/frame/collective/src/lib.rs b/substrate/frame/collective/src/lib.rs index 00e976bfb9..a6e44b96fe 100644 --- a/substrate/frame/collective/src/lib.rs +++ b/substrate/frame/collective/src/lib.rs @@ -211,7 +211,13 @@ decl_storage! { add_extra_genesis { config(phantom): sp_std::marker::PhantomData; config(members): Vec; - build(|config| Module::::initialize_members(&config.members)) + build(|config| { + use sp_std::collections::btree_set::BTreeSet; + let members_set: BTreeSet<_> = config.members.iter().collect(); + assert!(members_set.len() == config.members.len(), "Members cannot contain duplicate accounts."); + + Module::::initialize_members(&config.members) + }); } } @@ -1837,4 +1843,13 @@ mod tests { ]); }) } + + #[test] + #[should_panic(expected = "Members cannot contain duplicate accounts.")] + fn genesis_build_panics_with_duplicate_members() { + collective::GenesisConfig:: { + members: vec![1, 2, 3, 1], + phantom: Default::default(), + }.build_storage().unwrap(); + } } diff --git a/substrate/frame/membership/src/lib.rs b/substrate/frame/membership/src/lib.rs index 0d95af4e6f..c834ed2365 100644 --- a/substrate/frame/membership/src/lib.rs +++ b/substrate/frame/membership/src/lib.rs @@ -84,6 +84,11 @@ decl_storage! { config(phantom): sp_std::marker::PhantomData; build(|config: &Self| { let mut members = config.members.clone(); + + use sp_std::collections::btree_set::BTreeSet; + let members_set: BTreeSet<_> = config.members.iter().collect(); + assert!(members_set.len() == config.members.len(), "Members cannot contain duplicate accounts."); + members.sort(); T::MembershipInitialized::initialize_members(&members); >::put(members); @@ -706,4 +711,13 @@ mod tests { assert_eq!(PRIME.with(|m| *m.borrow()), Membership::prime()); }); } + + #[test] + #[should_panic(expected = "Members cannot contain duplicate accounts.")] + fn genesis_build_panics_with_duplicate_members() { + pallet_membership::GenesisConfig:: { + members: vec![1, 2, 3, 1], + phantom: Default::default(), + }.build_storage().unwrap(); + } }