Skip to content
Snippets Groups Projects
Commit 255c81c3 authored by Éloïs's avatar Éloïs
Browse files

feat(runtimes): override session keys typeinfo

parent 19216eef
No related branches found
No related tags found
1 merge request!28Smiths sub-wot
This commit is part of merge request !28. Comments created here will be created in the context of that merge request.
...@@ -62,6 +62,7 @@ pub mod pallet { ...@@ -62,6 +62,7 @@ pub mod pallet {
frame_system::Config + pallet_session::Config + pallet_session::historical::Config frame_system::Config + pallet_session::Config + pallet_session::historical::Config
{ {
type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>; type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
type KeysWrapper: Parameter + Into<Self::Keys>;
type IsMember: IsMember<Self::MemberId>; type IsMember: IsMember<Self::MemberId>;
type OnRemovedMember: OnRemovedMember<Self::MemberId>; type OnRemovedMember: OnRemovedMember<Self::MemberId>;
type OwnerKeyOf: Convert<Self::MemberId, Option<Self::AccountId>>; type OwnerKeyOf: Convert<Self::MemberId, Option<Self::AccountId>>;
...@@ -256,7 +257,7 @@ pub mod pallet { ...@@ -256,7 +257,7 @@ pub mod pallet {
pub fn set_session_keys( pub fn set_session_keys(
origin: OriginFor<T>, origin: OriginFor<T>,
member_id: T::MemberId, member_id: T::MemberId,
keys: T::Keys, keys: T::KeysWrapper,
) -> DispatchResultWithPostInfo { ) -> DispatchResultWithPostInfo {
let who = ensure_signed(origin.clone())?; let who = ensure_signed(origin.clone())?;
Self::verify_ownership_and_membership(&who, member_id)?; Self::verify_ownership_and_membership(&who, member_id)?;
...@@ -265,7 +266,7 @@ pub mod pallet { ...@@ -265,7 +266,7 @@ pub mod pallet {
.ok_or(pallet_session::Error::<T>::NoAssociatedValidatorId)?; .ok_or(pallet_session::Error::<T>::NoAssociatedValidatorId)?;
let _post_info = pallet_session::Call::<T>::set_keys { let _post_info = pallet_session::Call::<T>::set_keys {
keys, keys: keys.into(),
proof: vec![], proof: vec![],
} }
.dispatch_bypass_filter(origin)?; .dispatch_bypass_filter(origin)?;
......
...@@ -149,6 +149,7 @@ impl IsMember<u64> for TestIsSmithMember { ...@@ -149,6 +149,7 @@ impl IsMember<u64> for TestIsSmithMember {
impl pallet_authority_members::Config for Test { impl pallet_authority_members::Config for Test {
type Event = Event; type Event = Event;
type KeysWrapper = MockSessionKeys;
type IsMember = TestIsSmithMember; type IsMember = TestIsSmithMember;
type MaxOfflineSessions = ConstU32<2>; type MaxOfflineSessions = ConstU32<2>;
type MemberId = u64; type MemberId = u64;
......
...@@ -23,9 +23,9 @@ use serde::{Deserialize, Serialize}; ...@@ -23,9 +23,9 @@ use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "std", derive(Deserialize, Serialize))] #[cfg_attr(feature = "std", derive(Deserialize, Serialize))]
#[derive(Clone, Encode, Decode, Default, Eq, PartialEq, RuntimeDebug, TypeInfo)] #[derive(Clone, Encode, Decode, Default, Eq, PartialEq, RuntimeDebug, TypeInfo)]
pub struct SmithsMembershipMetaData<SessionKeys> { pub struct SmithsMembershipMetaData<SessionKeysWrapper> {
pub peer_id: [u8; 32], pub peer_id: [u8; 32],
pub session_keys: SessionKeys, pub session_keys: SessionKeysWrapper,
} }
#[cfg_attr(feature = "std", derive(Deserialize, Serialize))] #[cfg_attr(feature = "std", derive(Deserialize, Serialize))]
......
...@@ -62,17 +62,22 @@ pub struct OnSmithMembershipEventHandler<Inner, Runtime>( ...@@ -62,17 +62,22 @@ pub struct OnSmithMembershipEventHandler<Inner, Runtime>(
impl< impl<
IdtyIndex: Copy + Parameter, IdtyIndex: Copy + Parameter,
SessionKeys: Clone, SessionKeysWrapper: Clone,
Inner: sp_membership::traits::OnEvent<IdtyIndex, SmithsMembershipMetaData<SessionKeys>>, Inner: sp_membership::traits::OnEvent<IdtyIndex, SmithsMembershipMetaData<SessionKeysWrapper>>,
Runtime: pallet_identity::Config<IdtyIndex = IdtyIndex> Runtime: pallet_identity::Config<IdtyIndex = IdtyIndex>
+ pallet_authority_members::Config<MemberId = IdtyIndex> + pallet_authority_members::Config<KeysWrapper = SessionKeysWrapper, MemberId = IdtyIndex>
+ pallet_membership::Config<Instance2, MetaData = SmithsMembershipMetaData<SessionKeys>> + pallet_membership::Config<
+ pallet_session::Config<Keys = SessionKeys>, Instance2,
> sp_membership::traits::OnEvent<IdtyIndex, SmithsMembershipMetaData<SessionKeys>> MetaData = SmithsMembershipMetaData<SessionKeysWrapper>,
>,
> sp_membership::traits::OnEvent<IdtyIndex, SmithsMembershipMetaData<SessionKeysWrapper>>
for OnSmithMembershipEventHandler<Inner, Runtime> for OnSmithMembershipEventHandler<Inner, Runtime>
{ {
fn on_event( fn on_event(
membership_event: &sp_membership::Event<IdtyIndex, SmithsMembershipMetaData<SessionKeys>>, membership_event: &sp_membership::Event<
IdtyIndex,
SmithsMembershipMetaData<SessionKeysWrapper>,
>,
) -> Weight { ) -> Weight {
(match membership_event { (match membership_event {
sp_membership::Event::MembershipAcquired( sp_membership::Event::MembershipAcquired(
......
...@@ -88,3 +88,38 @@ impl< ...@@ -88,3 +88,38 @@ impl<
.map(|idty_value| idty_value.owner_key) .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()
}
}
}
}
}
...@@ -239,6 +239,7 @@ macro_rules! pallets_config { ...@@ -239,6 +239,7 @@ macro_rules! pallets_config {
impl pallet_authority_members::Config for Runtime { impl pallet_authority_members::Config for Runtime {
type Event = Event; type Event = Event;
type KeysWrapper = opaque::SessionKeysWrapper;
type IsMember = SmithsMembership; type IsMember = SmithsMembership;
type OnRemovedMember = OnRemovedAUthorityMemberHandler<Runtime>; type OnRemovedMember = OnRemovedAUthorityMemberHandler<Runtime>;
type OwnerKeyOf = OwnerKeyOfImpl<Runtime>; type OwnerKeyOf = OwnerKeyOfImpl<Runtime>;
...@@ -350,7 +351,7 @@ macro_rules! pallets_config { ...@@ -350,7 +351,7 @@ macro_rules! pallets_config {
type IdtyId = IdtyIndex; type IdtyId = IdtyIndex;
type MembershipExternalStorage = sp_membership::traits::NoExternalStorage; type MembershipExternalStorage = sp_membership::traits::NoExternalStorage;
type MembershipPeriod = SmithMembershipPeriod; type MembershipPeriod = SmithMembershipPeriod;
type MetaData = SmithsMembershipMetaData<opaque::SessionKeys>; type MetaData = SmithsMembershipMetaData<opaque::SessionKeysWrapper>;
type OnEvent = OnSmithMembershipEventHandler<SmithsSubWot, Runtime>; type OnEvent = OnSmithMembershipEventHandler<SmithsSubWot, Runtime>;
type PendingMembershipPeriod = SmithPendingMembershipPeriod; type PendingMembershipPeriod = SmithPendingMembershipPeriod;
type RenewablePeriod = SmithRenewablePeriod; type RenewablePeriod = SmithRenewablePeriod;
......
...@@ -68,17 +68,7 @@ pub use frame_support::{ ...@@ -68,17 +68,7 @@ pub use frame_support::{
StorageValue, StorageValue,
}; };
pub mod opaque { common_runtime::declare_session_keys! {}
use super::*;
impl_opaque_keys! {
pub struct SessionKeys {
pub grandpa: Grandpa,
pub babe: Babe,
pub im_online: ImOnline,
pub authority_discovery: AuthorityDiscovery,
}
}
}
// To learn more about runtime versioning and what each of the following value means: // To learn more about runtime versioning and what each of the following value means:
// https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning // https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning
......
...@@ -69,18 +69,7 @@ pub use frame_support::{ ...@@ -69,18 +69,7 @@ pub use frame_support::{
StorageValue, StorageValue,
}; };
pub mod opaque { common_runtime::declare_session_keys! {}
use super::*;
impl_opaque_keys! {
pub struct SessionKeys {
pub grandpa: Grandpa,
pub babe: Babe,
pub im_online: ImOnline,
pub authority_discovery: AuthorityDiscovery,
}
}
}
// To learn more about runtime versioning and what each of the following value means: // To learn more about runtime versioning and what each of the following value means:
// https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning // https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning
......
...@@ -68,17 +68,7 @@ pub use frame_support::{ ...@@ -68,17 +68,7 @@ pub use frame_support::{
StorageValue, StorageValue,
}; };
pub mod opaque { common_runtime::declare_session_keys! {}
use super::*;
impl_opaque_keys! {
pub struct SessionKeys {
pub grandpa: Grandpa,
pub babe: Babe,
pub im_online: ImOnline,
pub authority_discovery: AuthorityDiscovery,
}
}
}
// To learn more about runtime versioning and what each of the following value means: // To learn more about runtime versioning and what each of the following value means:
// https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning // https://substrate.dev/docs/en/knowledgebase/runtime/upgrades#runtime-versioning
...@@ -146,10 +136,10 @@ impl frame_support::traits::Contains<Call> for BaseCallFilter { ...@@ -146,10 +136,10 @@ impl frame_support::traits::Contains<Call> for BaseCallFilter {
} }
common_runtime::pallets_config! { common_runtime::pallets_config! {
impl pallet_sudo::Config for Runtime { impl pallet_sudo::Config for Runtime {
type Event = Event; type Event = Event;
type Call = Call; type Call = Call;
} }
} }
// Create the runtime by composing the FRAME pallets that were previously configured. // Create the runtime by composing the FRAME pallets that were previously configured.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment