diff --git a/frame/society/src/lib.rs b/frame/society/src/lib.rs index 0edf00ff80f6e..18152b9e29ec4 100644 --- a/frame/society/src/lib.rs +++ b/frame/society/src/lib.rs @@ -513,6 +513,8 @@ pub mod pallet { Unfounded { founder: T::AccountId }, /// Some funds were deposited into the society account. Deposit { value: BalanceOf }, + /// A group of members has been choosen as Skeptics + SkepticsChosen { skeptics: Vec }, } /// The first member. @@ -1610,12 +1612,14 @@ impl, I: 'static> Pallet { // Select sqrt(n) random members from the society and make them skeptics. let pick_member = - |_| pick_item(&mut rng, &members[..]).expect("exited if members empty; qed"); - for skeptic in (0..members.len().integer_sqrt()).map(pick_member) { + |_| pick_item(&mut rng, &members[..]).expect("exited if members empty; qed").clone(); + let skeptics = (0..members.len().integer_sqrt()).map(pick_member).collect::>(); + skeptics.iter().for_each(|skeptic| { for Bid { who: c, .. } in candidates.iter() { >::insert(c, skeptic, Vote::Skeptic); } - } + }); + Self::deposit_event(Event::::SkepticsChosen { skeptics }); } /// Attempt to slash the payout of some member. Return the total amount that was deducted. diff --git a/frame/society/src/tests.rs b/frame/society/src/tests.rs index 864735aa10cca..0b42f77035776 100644 --- a/frame/society/src/tests.rs +++ b/frame/society/src/tests.rs @@ -211,6 +211,9 @@ fn payout_works() { #[test] fn basic_new_member_skeptic_works() { EnvBuilder::new().execute(|| { + // NOTE: events are not deposited in the genesis event + System::set_block_number(1); + assert_eq!(Strikes::::get(10), 0); assert_ok!(Society::bid(RuntimeOrigin::signed(20), 0)); run_to_block(4); @@ -218,6 +221,10 @@ fn basic_new_member_skeptic_works() { run_to_block(8); assert_eq!(Society::members(), vec![10]); assert_eq!(Strikes::::get(10), 1); + + System::assert_last_event(mock::RuntimeEvent::Society(crate::Event::SkepticsChosen { + skeptics: vec![10], + })); }); }