diff --git a/pallets/authority-members/src/lib.rs b/pallets/authority-members/src/lib.rs index 6510b29265347a521438c8c84a9f47b4c87c13fd..fd9f76a8f7e0b0f5e2f8da20c6d6391ed5a58bc6 100644 --- a/pallets/authority-members/src/lib.rs +++ b/pallets/authority-members/src/lib.rs @@ -62,6 +62,7 @@ pub mod pallet { frame_system::Config + pallet_session::Config + pallet_session::historical::Config { type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>; + type KeysWrapper: Parameter + Into<Self::Keys>; type IsMember: IsMember<Self::MemberId>; type OnRemovedMember: OnRemovedMember<Self::MemberId>; type OwnerKeyOf: Convert<Self::MemberId, Option<Self::AccountId>>; @@ -256,7 +257,7 @@ pub mod pallet { pub fn set_session_keys( origin: OriginFor<T>, member_id: T::MemberId, - keys: T::Keys, + keys: T::KeysWrapper, ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin.clone())?; Self::verify_ownership_and_membership(&who, member_id)?; @@ -265,7 +266,7 @@ pub mod pallet { .ok_or(pallet_session::Error::<T>::NoAssociatedValidatorId)?; let _post_info = pallet_session::Call::<T>::set_keys { - keys, + keys: keys.into(), proof: vec![], } .dispatch_bypass_filter(origin)?; diff --git a/pallets/authority-members/src/mock.rs b/pallets/authority-members/src/mock.rs index a2e8f036a886b1ea191d5eb7ae4872067be38fc4..5da294071911a5eca2cbf750710ed7c6319b75c9 100644 --- a/pallets/authority-members/src/mock.rs +++ b/pallets/authority-members/src/mock.rs @@ -149,6 +149,7 @@ impl IsMember<u64> for TestIsSmithMember { impl pallet_authority_members::Config for Test { type Event = Event; + type KeysWrapper = MockSessionKeys; type IsMember = TestIsSmithMember; type MaxOfflineSessions = ConstU32<2>; type MemberId = u64; diff --git a/runtime/common/src/entities.rs b/runtime/common/src/entities.rs index 7f676a3b0eb27cf9dba90c63edee3a79ccec8414..9300b95cdc74edfc9b013974251a7f25bb190854 100644 --- a/runtime/common/src/entities.rs +++ b/runtime/common/src/entities.rs @@ -23,9 +23,9 @@ use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "std", derive(Deserialize, Serialize))] #[derive(Clone, Encode, Decode, Default, Eq, PartialEq, RuntimeDebug, TypeInfo)] -pub struct SmithsMembershipMetaData<SessionKeys> { +pub struct SmithsMembershipMetaData<SessionKeysWrapper> { pub peer_id: [u8; 32], - pub session_keys: SessionKeys, + pub session_keys: SessionKeysWrapper, } #[cfg_attr(feature = "std", derive(Deserialize, Serialize))] diff --git a/runtime/common/src/handlers.rs b/runtime/common/src/handlers.rs index 37afe7192df9a31472ea8179946688c783a3b9d7..e7729ed692d5b540ccd1430fa9fd6aec1bd99d2f 100644 --- a/runtime/common/src/handlers.rs +++ b/runtime/common/src/handlers.rs @@ -62,17 +62,22 @@ pub struct OnSmithMembershipEventHandler<Inner, Runtime>( impl< IdtyIndex: Copy + Parameter, - SessionKeys: Clone, - Inner: sp_membership::traits::OnEvent<IdtyIndex, SmithsMembershipMetaData<SessionKeys>>, + SessionKeysWrapper: Clone, + Inner: sp_membership::traits::OnEvent<IdtyIndex, SmithsMembershipMetaData<SessionKeysWrapper>>, Runtime: pallet_identity::Config<IdtyIndex = IdtyIndex> - + pallet_authority_members::Config<MemberId = IdtyIndex> - + pallet_membership::Config<Instance2, MetaData = SmithsMembershipMetaData<SessionKeys>> - + pallet_session::Config<Keys = SessionKeys>, - > sp_membership::traits::OnEvent<IdtyIndex, SmithsMembershipMetaData<SessionKeys>> + + pallet_authority_members::Config<KeysWrapper = SessionKeysWrapper, MemberId = IdtyIndex> + + pallet_membership::Config< + Instance2, + MetaData = SmithsMembershipMetaData<SessionKeysWrapper>, + >, + > sp_membership::traits::OnEvent<IdtyIndex, SmithsMembershipMetaData<SessionKeysWrapper>> for OnSmithMembershipEventHandler<Inner, Runtime> { fn on_event( - membership_event: &sp_membership::Event<IdtyIndex, SmithsMembershipMetaData<SessionKeys>>, + membership_event: &sp_membership::Event< + IdtyIndex, + SmithsMembershipMetaData<SessionKeysWrapper>, + >, ) -> Weight { (match membership_event { sp_membership::Event::MembershipAcquired( diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 88b16d498eddc453784d458938e1a0c3735bb060..3e23d5f5ad96bc02fa62fb5a5df12bfed61e8949 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -88,3 +88,38 @@ impl< .map(|idty_value| idty_value.owner_key) } } + +#[macro_export] +macro_rules! declare_session_keys { + {} => { + pub mod opaque { + use super::*; + + impl_opaque_keys! { + pub struct SessionKeys { + pub grandpa: Grandpa, + pub babe: Babe, + pub im_online: ImOnline, + pub authority_discovery: AuthorityDiscovery, + } + } + + #[derive(Clone, codec::Decode, Debug, codec::Encode, Eq, PartialEq)] + pub struct SessionKeysWrapper(pub SessionKeys); + + impl Into<SessionKeys> for SessionKeysWrapper { + fn into(self) -> SessionKeys { + self.0 + } + } + + impl scale_info::TypeInfo for SessionKeysWrapper { + type Identity = [u8; 128]; + + fn type_info() -> scale_info::Type { + Self::Identity::type_info() + } + } + } + } +} diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs index 95a72d14e8d14dea0ab7ff9090a0462d2471e5ce..b5fff7fab9c8cc2b61dad7a32c861238fb2abf18 100644 --- a/runtime/common/src/pallets_config.rs +++ b/runtime/common/src/pallets_config.rs @@ -239,6 +239,7 @@ macro_rules! pallets_config { impl pallet_authority_members::Config for Runtime { type Event = Event; + type KeysWrapper = opaque::SessionKeysWrapper; type IsMember = SmithsMembership; type OnRemovedMember = OnRemovedAUthorityMemberHandler<Runtime>; type OwnerKeyOf = OwnerKeyOfImpl<Runtime>; @@ -350,7 +351,7 @@ macro_rules! pallets_config { type IdtyId = IdtyIndex; type MembershipExternalStorage = sp_membership::traits::NoExternalStorage; type MembershipPeriod = SmithMembershipPeriod; - type MetaData = SmithsMembershipMetaData<opaque::SessionKeys>; + type MetaData = SmithsMembershipMetaData<opaque::SessionKeysWrapper>; type OnEvent = OnSmithMembershipEventHandler<SmithsSubWot, Runtime>; type PendingMembershipPeriod = SmithPendingMembershipPeriod; type RenewablePeriod = SmithRenewablePeriod; diff --git a/runtime/g1/src/lib.rs b/runtime/g1/src/lib.rs index 3881473fb57fed0fa480e7198797e9cb4ac7263e..c16c4cd488e2ab1e6ef56070002b5bbd4ab576da 100644 --- a/runtime/g1/src/lib.rs +++ b/runtime/g1/src/lib.rs @@ -68,17 +68,7 @@ pub use frame_support::{ StorageValue, }; -pub mod opaque { - use super::*; - impl_opaque_keys! { - pub struct SessionKeys { - pub grandpa: Grandpa, - pub babe: Babe, - pub im_online: ImOnline, - pub authority_discovery: AuthorityDiscovery, - } - } -} +common_runtime::declare_session_keys! {} // To learn more about runtime versioning and what each of the following value means: // https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning diff --git a/runtime/gdev/src/lib.rs b/runtime/gdev/src/lib.rs index 7e4b1d26b935b9eea7110a66b4ff7d8872d1f38c..786bd192a8ed5d50ec4dd4d4515e78a3d58a70e4 100644 --- a/runtime/gdev/src/lib.rs +++ b/runtime/gdev/src/lib.rs @@ -69,18 +69,7 @@ pub use frame_support::{ StorageValue, }; -pub mod opaque { - use super::*; - - impl_opaque_keys! { - pub struct SessionKeys { - pub grandpa: Grandpa, - pub babe: Babe, - pub im_online: ImOnline, - pub authority_discovery: AuthorityDiscovery, - } - } -} +common_runtime::declare_session_keys! {} // To learn more about runtime versioning and what each of the following value means: // https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning diff --git a/runtime/gtest/src/lib.rs b/runtime/gtest/src/lib.rs index 3048fd5075f86cae2000b9984a4822066b8c9286..6b30529c57570c24f44e96bc4d8021d97c905ce3 100644 --- a/runtime/gtest/src/lib.rs +++ b/runtime/gtest/src/lib.rs @@ -68,17 +68,7 @@ pub use frame_support::{ StorageValue, }; -pub mod opaque { - use super::*; - impl_opaque_keys! { - pub struct SessionKeys { - pub grandpa: Grandpa, - pub babe: Babe, - pub im_online: ImOnline, - pub authority_discovery: AuthorityDiscovery, - } - } -} +common_runtime::declare_session_keys! {} // To learn more about runtime versioning and what each of the following value means: // https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning @@ -146,10 +136,10 @@ impl frame_support::traits::Contains<Call> for BaseCallFilter { } common_runtime::pallets_config! { -impl pallet_sudo::Config for Runtime { - type Event = Event; - type Call = Call; -} + impl pallet_sudo::Config for Runtime { + type Event = Event; + type Call = Call; + } } // Create the runtime by composing the FRAME pallets that were previously configured.