diff --git a/pallets/authority-members/src/impls.rs b/pallets/authority-members/src/impls.rs index bdea383ae42477ef04c8eb4945d778b7fdcc8489..33b51a286d19fd33fe646bed410a19deead1d591 100644 --- a/pallets/authority-members/src/impls.rs +++ b/pallets/authority-members/src/impls.rs @@ -20,7 +20,6 @@ //! The offences are executed here based. The offenders are disconnected and //! can be added to a blacklist to avoid futur connection. -#![cfg_attr(not(feature = "std"), no_std)] #![allow(clippy::type_complexity)] use super::pallet::*; @@ -56,7 +55,7 @@ where SlashStrategy::Blacklist => { for offender in offenders { if let Some(member_id) = T::MemberIdOf::convert(offender.offender.0.clone()) { - T::OnBlacklistedMember::on_blacklisted_member(member_id.clone()); + T::OnBlacklistedMember::on_blacklisted_member(member_id); Blacklist::<T>::mutate(|blacklist| { if !blacklist.contains(&member_id) { blacklist.push(member_id); diff --git a/pallets/authority-members/src/lib.rs b/pallets/authority-members/src/lib.rs index 6bd4e630203a0d0113ea8cef3b29df9daad50b4a..32b0724124f0ff58503225e3a611632e3143a585 100644 --- a/pallets/authority-members/src/lib.rs +++ b/pallets/authority-members/src/lib.rs @@ -50,6 +50,7 @@ pub mod pallet { use frame_support::traits::{StorageVersion, UnfilteredDispatchable}; use frame_system::pallet_prelude::*; use sp_runtime::traits::{Convert, IsMember}; + use sp_std::collections::btree_map::BTreeMap; use sp_std::vec; /// The current storage version. @@ -547,10 +548,10 @@ impl<T: Config> pallet_session::SessionManager<T::ValidatorId> for Pallet<T> { } for member_id in members_ids_to_add.iter() { - T::OnIncomingMember::on_incoming_member(member_id.clone()); + T::OnIncomingMember::on_incoming_member(*member_id); } for member_id in members_ids_to_del.iter() { - T::OnOutgoingMember::on_outgoing_member(member_id.clone()); + T::OnOutgoingMember::on_outgoing_member(*member_id); } // updates the list of OnlineAuthorities and returns the list of their key diff --git a/pallets/authority-members/src/mock.rs b/pallets/authority-members/src/mock.rs index d04f0f47f89905eb13f211dcfd58098887743239..c5aaa5f2db06d96f03206d94349cee0e831950c0 100644 --- a/pallets/authority-members/src/mock.rs +++ b/pallets/authority-members/src/mock.rs @@ -160,6 +160,9 @@ impl pallet_authority_members::Config for Test { type RemoveMemberOrigin = system::EnsureRoot<u64>; type RuntimeEvent = RuntimeEvent; type WeightInfo = (); + type OnBlacklistedMember = (); + type OnIncomingMember = (); + type OnOutgoingMember = (); } // Build genesis storage according to the mock runtime. diff --git a/pallets/distance/src/mock.rs b/pallets/distance/src/mock.rs index 988c9b43ff3893da774cdc707856fd0953d59e2a..bb020190aef70365eb2373e77eab53cfbfea0bc4 100644 --- a/pallets/distance/src/mock.rs +++ b/pallets/distance/src/mock.rs @@ -189,6 +189,9 @@ impl pallet_authority_members::Config for Test { type RemoveMemberOrigin = system::EnsureRoot<AccountId>; type RuntimeEvent = RuntimeEvent; type WeightInfo = (); + type OnOutgoingMember = (); + type OnIncomingMember = (); + type OnBlacklistedMember = (); } parameter_types! { diff --git a/pallets/smith-members/src/impls.rs b/pallets/smith-members/src/impls.rs index b32201d864f75f1d26ee31b0cee136b7f314bb15..c3417028b21f708b59dbc39e2c43076e9bcfad4f 100644 --- a/pallets/smith-members/src/impls.rs +++ b/pallets/smith-members/src/impls.rs @@ -1,11 +1,10 @@ use crate::{Config, CurrentSession, Pallet}; -use frame_support::StorageValue; use pallet_authority_members::SessionIndex; use sp_runtime::traits::Convert; /// We want to remove a Smith when he is removed from the higher level set of "authorities". impl<T: Config> pallet_authority_members::OnRemovedMember<T> for Pallet<T> { - fn on_removed_member(member_id: T) { + fn on_removed_member(_: T) { todo!("Remove smith as well") // TODO: not sure if we should listen authority-members or rather the initial pallet that called the removal } diff --git a/pallets/smith-members/src/lib.rs b/pallets/smith-members/src/lib.rs index 934a0e4ea1676949ecccda634c855ca4085a6d47..f0aeed93a976f19a424ab04ea64d03fa726186bc 100644 --- a/pallets/smith-members/src/lib.rs +++ b/pallets/smith-members/src/lib.rs @@ -32,7 +32,7 @@ use frame_support::pallet_prelude::Get; use frame_support::{ensure, RuntimeDebug}; use frame_system::ensure_signed; use frame_system::pallet_prelude::OriginFor; -use sp_runtime::traits::{AtLeast32BitUnsigned, Convert}; +use sp_runtime::traits::AtLeast32BitUnsigned; use sp_std::fmt::Debug; use sp_std::prelude::*; @@ -60,16 +60,11 @@ pub enum SmithStatus { Excluded, } -#[frame_support::pallet] +#[frame_support::pallet(dev_mode)] pub mod pallet { use super::*; - use super::*; - use crate::Call::certify_smith; use frame_support::pallet_prelude::*; use frame_support::traits::StorageVersion; - use frame_support::{pallet_prelude::*, traits::ReservableCurrency}; - use frame_system::pallet_prelude::*; - use frame_system::pallet_prelude::*; use pallet_authority_members::SessionIndex; use sp_runtime::traits::{Convert, IsMember}; use std::collections::BTreeMap; @@ -122,16 +117,12 @@ pub mod pallet { #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event<T: Config> { /// A smith gathered enough certifications to become an authority (can call `go_online()`). - SmithBecameAuthority { - idty_index: T::IdtyIndex, - owner_key: T::AccountId, - }, + SmithBecameAuthority { idty_index: T::IdtyIndex }, } #[pallet::genesis_config] pub struct GenesisConfig<T: Config> { - pub certs_by_receiver: - BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, Option<T::BlockNumber>>>, + pub certs_by_receiver: BTreeMap<T::IdtyIndex, Vec<T::IdtyIndex>>, } #[cfg(feature = "std")] @@ -151,12 +142,12 @@ pub mod pallet { for (receiver, issuers) in &self.certs_by_receiver { // Forbid self-cert assert!( - !issuers.contains_key(receiver), + !issuers.contains(receiver), "Identity cannot certify it-self." ); let mut issuers_: Vec<_> = Vec::with_capacity(issuers.len()); - for (issuer, maybe_removable_on) in issuers { + for issuer in issuers { // Count issued certs cert_meta_by_issuer .entry(*issuer) @@ -397,6 +388,11 @@ impl<T: Config> Pallet<T> { // expiry postponed let new_expires_on = CurrentSession::<T>::get() + T::InactivityMaxDuration::get(); maybe_smith_meta.expires_on = Some(new_expires_on); + if maybe_smith_meta.status == SmithStatus::Smith { + Self::deposit_event(Event::<T>::SmithBecameAuthority { + idty_index: receiver, + }); + } // TODO: unschedule old expiry }); } @@ -415,7 +411,7 @@ impl<T: Config> Pallet<T> { maybe_smith_meta.expires_on = None; maybe_smith_meta.status = SmithStatus::Excluded; for cert in &maybe_smith_meta.received_certs { - lost_certs.push(cert.clone()); + lost_certs.push(*cert); } maybe_smith_meta.received_certs = vec![]; // N.B.: the issued certs are kept in case the smith joins back @@ -476,7 +472,7 @@ impl<T: Config> Pallet<T> { } // TODO: return what? - fn smith_goes_blacklisted(idty_index: T::IdtyIndex) { + fn smith_goes_blacklisted(_idty_index: T::IdtyIndex) { // TODO: for now, just let smith_goes_offline do the job // if let Some(_) = Smiths::<T>::get(idty_index) { // Smiths::<T>::remove(idty_index); @@ -494,7 +490,7 @@ impl<T: Config> Pallet<T> { for _ in smith.received_certs { count += 1; } - return count >= T::MinCertForMembership::get(); + count >= T::MinCertForMembership::get() } } diff --git a/pallets/smith-members/src/mock.rs b/pallets/smith-members/src/mock.rs index d68d9782e63fc642d50b70c34e58c43f700f7676..5ae7629ce12dd76bc170a78f2db0fadd37b8e18c 100644 --- a/pallets/smith-members/src/mock.rs +++ b/pallets/smith-members/src/mock.rs @@ -16,25 +16,20 @@ #![cfg(test)] -use crate::traits::OnSmithDelete; use crate::{self as pallet_smith_members}; -use frame_support::pallet_prelude::{GenesisBuild, Hooks}; use frame_support::{ parameter_types, traits::{ConstU32, ConstU64}, weights::{constants::RocksDbWeight, Weight}, }; -use pallet_balances::pallet; use sp_core::H256; -use sp_runtime::traits::{ConstBool, ConvertInto, IsMember}; +use sp_runtime::traits::{ConvertInto, IsMember}; use sp_runtime::{ testing::Header, traits::{BlakeTwo256, IdentityLookup}, BuildStorage, Perbill, }; -pub struct OnOffenceHandler; - parameter_types! { pub static OnOffencePerbill: Vec<Perbill> = Default::default(); pub static OffenceWeight: Weight = Default::default(); @@ -94,7 +89,6 @@ impl pallet_smith_members::Config for Runtime { type IsWoTMember = EveryoneExceptIdZero; type IdtyIdOf = ConvertInto; type MinCertForMembership = ConstU32<2>; - type MinCertForCreateIdtyRight = ConstU32<3>; type MaxByIssuer = ConstU32<3>; type InactivityMaxDuration = ConstU32<5>; type OnSmithDelete = (); diff --git a/pallets/smith-members/src/tests.rs b/pallets/smith-members/src/tests.rs index 54c4652bfdd83b7210c1f9e68f9a6df75972798c..fc199c339c10d52aab85697f91a86d5e0de93423 100644 --- a/pallets/smith-members/src/tests.rs +++ b/pallets/smith-members/src/tests.rs @@ -28,17 +28,10 @@ use pallet_authority_members::OnNewSession; fn process_to_become_a_smith_and_lose_it() { new_test_ext(GenesisConfig { certs_by_receiver: btreemap![ - 1 => btreemap![ - 2 => None, - 3 => None, - 4 => None, - ], - 2 => btreemap![ - 3 => None, - 4 => None, - ], - 3 => btreemap![], - 4 => btreemap![], + 1 => vec![2, 3, 4], + 2 => vec![3, 4], + 3 => vec![], + 4 => vec![], ], }) .execute_with(|| { @@ -91,9 +84,9 @@ fn process_to_become_a_smith_and_lose_it() { // On session 4 everything if fine Pallet::<Runtime>::on_new_session(4); - assert_eq!(Smiths::<Runtime>::get(1).is_some(), true); - assert_eq!(Smiths::<Runtime>::get(2).is_some(), true); - assert_eq!(Smiths::<Runtime>::get(5).is_some(), true); + assert!(Smiths::<Runtime>::get(1).is_some()); + assert!(Smiths::<Runtime>::get(2).is_some()); + assert!(Smiths::<Runtime>::get(5).is_some()); // On session 5 no more smiths because of lack of activity Pallet::<Runtime>::on_new_session(5); assert_eq!( @@ -130,22 +123,10 @@ fn process_to_become_a_smith_and_lose_it() { fn should_have_checks_on_certify() { new_test_ext(GenesisConfig { certs_by_receiver: btreemap![ - 1 => btreemap![ - 2 => None, - 3 => None, - 4 => None, - ], - 2 => btreemap![ - 3 => None, - 4 => None, - ], - 3 => btreemap![ - 4 => None, - ], - 4 => btreemap![ - 1 => None, - 2 => None, - ], + 1 => vec![2, 3, 4], + 2 => vec![3, 4], + 3 => vec![4], + 4 => vec![1, 2], ], }) .execute_with(|| { @@ -237,24 +218,17 @@ fn should_have_checks_on_certify() { fn smith_activity_postpones_expiration() { new_test_ext(GenesisConfig { certs_by_receiver: btreemap![ - 1 => btreemap![ - 2 => None, - 3 => None, - 4 => None, - ], - 2 => btreemap![ - 3 => None, - 4 => None, - ], - 3 => btreemap![], - 4 => btreemap![] + 1 => vec![2, 3, 4], + 2 => vec![3, 4], + 3 => vec![], + 4 => vec![] ], }) .execute_with(|| { // On session 4 everything is fine Pallet::<Runtime>::on_new_session(4); - assert_eq!(Smiths::<Runtime>::get(1).is_some(), true); - assert_eq!(Smiths::<Runtime>::get(2).is_some(), true); + assert!(Smiths::<Runtime>::get(1).is_some()); + assert!(Smiths::<Runtime>::get(2).is_some()); // Smith #2 is online but not #1 Pallet::<Runtime>::smith_goes_online(2); @@ -331,20 +305,10 @@ fn smith_activity_postpones_expiration() { fn smith_coming_back_recovers_its_issued_certs() { new_test_ext(GenesisConfig { certs_by_receiver: btreemap![ - 1 => btreemap![ - 2 => None, - 3 => None, - 4 => None, - ], - 2 => btreemap![ - 3 => None, - 4 => None, - ], - 3 => btreemap![ - 4 => None, - 1 => None, - ], - 4 => btreemap![] + 1 => vec![2, 3, 4], + 2 => vec![3, 4], + 3 => vec![1, 4], + 4 => vec![] ], }) .execute_with(|| { diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs index cf6728e0b911d1c7f980cfaf772a968e9d113781..d1779940a754f7132be8e17f5f4b76bb7b1dc2aa 100644 --- a/runtime/common/src/pallets_config.rs +++ b/runtime/common/src/pallets_config.rs @@ -241,6 +241,9 @@ macro_rules! pallets_config { type MaxAuthorities = MaxAuthorities; type RemoveMemberOrigin = EnsureRoot<Self::AccountId>; type WeightInfo = common_runtime::weights::pallet_authority_members::WeightInfo<Runtime>; + type OnBlacklistedMember = (); + type OnIncomingMember = (); + type OnOutgoingMember = (); } impl pallet_authorship::Config for Runtime { type EventHandler = ImOnline;