Skip to content
Snippets Groups Projects

Smiths sub-wot

Merged Éloïs requested to merge elois-smiths-members into master
1 file
+ 15
4
Compare changes
  • Side-by-side
  • Inline
@@ -36,6 +36,7 @@ use frame_support::pallet_prelude::*;
use frame_system::RawOrigin;
use pallet_certification::traits::SetNextIssuableOn;
use pallet_identity::{IdtyEvent, IdtyStatus};
use sp_membership::traits::IsInPendingMemberships;
use sp_runtime::traits::IsMember;
type IdtyIndex = u32;
@@ -61,11 +62,11 @@ pub mod pallet {
frame_system::Config
+ pallet_certification::Config<I, IdtyIndex = IdtyIndex>
+ pallet_identity::Config<IdtyIndex = IdtyIndex>
+ pallet_membership::Config<I, IdtyId = IdtyIndex, MetaData = ()>
+ pallet_membership::Config<I, IdtyId = IdtyIndex>
{
type FirstIssuableOn: Get<Self::BlockNumber>;
type ManageIdentitiesChanges: Get<bool>;
type MinCertForUdRight: Get<u32>;
type IsSubWot: Get<bool>;
type MinCertForMembership: Get<u32>;
type MinCertForCreateIdtyRight: Get<u32>;
}
@@ -80,7 +81,7 @@ pub mod pallet {
);
}
pub(super) fn dispath_idty_call(idty_call: pallet_identity::Call<T>) -> bool {
if T::ManageIdentitiesChanges::get() {
if !T::IsSubWot::get() {
if let Err(e) = idty_call.dispatch_bypass_filter(RawOrigin::Root.into()) {
sp_std::if_std! {
println!("{:?}", e)
@@ -93,7 +94,10 @@ pub mod pallet {
}
}
impl<T: Config<I>, I: 'static> pallet_identity::traits::EnsureIdtyCallAllowed<T> for Pallet<T, I> {
impl<T: Config<I>, I: 'static> pallet_identity::traits::EnsureIdtyCallAllowed<T> for Pallet<T, I>
where
T: pallet_membership::Config<I, MetaData = ()>,
{
fn can_create_identity(creator: IdtyIndex) -> bool {
if let Some(cert_meta) = pallet_certification::Pallet::<T, I>::idty_cert_meta(creator) {
cert_meta.received_count >= T::MinCertForCreateIdtyRight::get()
@@ -120,8 +124,16 @@ impl<T: Config<I>, I: 'static> pallet_identity::traits::EnsureIdtyCallAllowed<T>
impl<T: Config<I>, I: 'static> sp_membership::traits::IsIdtyAllowedToClaimMembership<IdtyIndex>
for Pallet<T, I>
{
fn is_idty_allowed_to_claim_membership(_: &IdtyIndex) -> bool {
false
fn is_idty_allowed_to_claim_membership(idty_index: &IdtyIndex) -> bool {
if T::IsSubWot::get() {
if let Some(idty_value) = pallet_identity::Pallet::<T>::identity(idty_index) {
idty_value.status == IdtyStatus::Validated
} else {
false
}
} else {
false
}
}
}
@@ -142,7 +154,11 @@ impl<T: Config<I>, I: 'static> sp_membership::traits::IsIdtyAllowedToRequestMemb
{
fn is_idty_allowed_to_request_membership(idty_index: &IdtyIndex) -> bool {
if let Some(idty_value) = pallet_identity::Pallet::<T>::identity(idty_index) {
idty_value.status == IdtyStatus::Disabled
if T::IsSubWot::get() {
idty_value.status == IdtyStatus::Validated
} else {
idty_value.status == IdtyStatus::Disabled
}
} else {
false
}
@@ -174,24 +190,28 @@ impl<T: Config<I>, I: 'static> sp_membership::traits::IsOriginAllowedToUseIdty<T
}
}
impl<T: Config<I>, I: 'static> sp_membership::traits::OnEvent<IdtyIndex, ()> for Pallet<T, I> {
fn on_event(membership_event: &sp_membership::Event<IdtyIndex>) -> Weight {
impl<T: Config<I>, I: 'static, MetaData> sp_membership::traits::OnEvent<IdtyIndex, MetaData>
for Pallet<T, I>
where
T: pallet_membership::Config<I, MetaData = MetaData>,
{
fn on_event(membership_event: &sp_membership::Event<IdtyIndex, MetaData>) -> Weight {
match membership_event {
sp_membership::Event::<IdtyIndex>::MembershipAcquired(_) => {}
sp_membership::Event::<IdtyIndex>::MembershipExpired(idty_index) => {
sp_membership::Event::<IdtyIndex, MetaData>::MembershipAcquired(_, _) => {}
sp_membership::Event::<IdtyIndex, MetaData>::MembershipExpired(idty_index) => {
Self::dispath_idty_call(pallet_identity::Call::disable_identity {
idty_index: *idty_index,
});
}
sp_membership::Event::<IdtyIndex>::MembershipRenewed(_) => {}
sp_membership::Event::<IdtyIndex>::MembershipRequested(idty_index, _) => {
sp_membership::Event::<IdtyIndex, MetaData>::MembershipRenewed(_) => {}
sp_membership::Event::<IdtyIndex, MetaData>::MembershipRequested(idty_index) => {
if let Some(idty_cert_meta) =
pallet_certification::Pallet::<T, I>::idty_cert_meta(idty_index)
{
let received_count = idty_cert_meta.received_count;
// TODO insert `receiver` in distance queue if received_count >= MinCertForUdRight
if received_count >= T::MinCertForUdRight::get() as u32 {
// TODO insert `receiver` in distance queue if received_count >= MinCertForMembership
if received_count >= T::MinCertForMembership::get() as u32 {
// TODO insert `receiver` in distance queue
if Self::dispath_idty_call(pallet_identity::Call::validate_identity {
idty_index: *idty_index,
@@ -202,8 +222,8 @@ impl<T: Config<I>, I: 'static> sp_membership::traits::OnEvent<IdtyIndex, ()> for
}
}
}
sp_membership::Event::<IdtyIndex>::MembershipRevoked(_) => {}
sp_membership::Event::<IdtyIndex>::PendingMembershipExpired(idty_index) => {
sp_membership::Event::<IdtyIndex, MetaData>::MembershipRevoked(_) => {}
sp_membership::Event::<IdtyIndex, MetaData>::PendingMembershipExpired(idty_index) => {
Self::dispath_idty_call(pallet_identity::Call::remove_identity {
idty_index: *idty_index,
});
@@ -246,13 +266,24 @@ impl<T: Config<I>, I: 'static> pallet_certification::traits::OnNewcert<IdtyIndex
if receiver_received_count == T::MinReceivedCertToBeAbleToIssueCert::get() {
Self::do_apply_first_issuable_on(receiver);
}
} else if pallet_membership::Pallet::<T, I>::pending_membership(receiver).is_some()
&& receiver_received_count >= T::MinCertForUdRight::get()
} else if pallet_membership::Pallet::<T, I>::is_in_pending_memberships(receiver)
&& receiver_received_count >= T::MinCertForMembership::get()
{
// TODO insert `receiver` in distance queue
Self::dispath_idty_call(pallet_identity::Call::validate_identity {
idty_index: receiver,
});
if T::IsSubWot::get() {
if let Err(e) = pallet_membership::Pallet::<T, I>::claim_membership(
RawOrigin::Root.into(),
receiver,
) {
sp_std::if_std! {
println!("{:?}", e)
}
}
} else {
// TODO insert `receiver` in distance queue
Self::dispath_idty_call(pallet_identity::Call::validate_identity {
idty_index: receiver,
});
}
if receiver_received_count == T::MinReceivedCertToBeAbleToIssueCert::get() {
Self::do_apply_first_issuable_on(receiver);
@@ -272,7 +303,7 @@ impl<T: Config<I>, I: 'static> pallet_certification::traits::OnRemovedCert<IdtyI
receiver_received_count: u32,
_expiration: bool,
) -> Weight {
if receiver_received_count < T::MinCertForUdRight::get() {
if receiver_received_count < T::MinCertForMembership::get() {
// Revoke receiver membership and disable his identity
if let Err(e) = pallet_membership::Pallet::<T, I>::revoke_membership(
RawOrigin::Root.into(),
Loading