diff --git a/pallets/smith-members/src/impls.rs b/pallets/smith-members/src/impls.rs index 34bbb47736adaa7438a605c8bff1299f356bf59e..95a1e49dfd63d25acd45e8a5b5f7c983bad89aef 100644 --- a/pallets/smith-members/src/impls.rs +++ b/pallets/smith-members/src/impls.rs @@ -4,18 +4,18 @@ use sp_runtime::traits::Convert; impl<T: Config> pallet_authority_members::OnOutgoingMember<T::MemberId> for Pallet<T> { fn on_outgoing_member(member_id: T::MemberId) { - Pallet::<T>::on_smith_goes_offline( - T::IdtyIdOfAuthorityId::convert(member_id).expect("convertion should be ok"), - ); + if let Some(member_id) = T::IdtyIdOfAuthorityId::convert(member_id) { + Pallet::<T>::on_smith_goes_offline(member_id); + } } } /// As long as a Smith is in the authority set, he will not expire. impl<T: Config> pallet_authority_members::OnIncomingMember<T::MemberId> for Pallet<T> { fn on_incoming_member(member_id: T::MemberId) { - Pallet::<T>::on_smith_goes_online( - T::IdtyIdOfAuthorityId::convert(member_id).expect("convertion should be ok"), - ); + if let Some(member_id) = T::IdtyIdOfAuthorityId::convert(member_id) { + Pallet::<T>::on_smith_goes_online(member_id); + } } } diff --git a/pallets/smith-members/src/lib.rs b/pallets/smith-members/src/lib.rs index 5d896994a232b7f353e288bb0363103b4f078727..95dd31177915c5dd19b8872c363c7c524ee39d52 100644 --- a/pallets/smith-members/src/lib.rs +++ b/pallets/smith-members/src/lib.rs @@ -212,10 +212,9 @@ pub mod pallet { for (issuer, issued_certs) in cert_meta_by_issuer { // Write CertsByIssuer Smiths::<T>::mutate(issuer, |maybe_smith_meta| { - let maybe_smith_meta = maybe_smith_meta - .as_mut() - .expect("issuers must have received certs as well"); - maybe_smith_meta.issued_certs = issued_certs; + if let Some(smith_meta) = maybe_smith_meta { + smith_meta.issued_certs = issued_certs; + } }); } } @@ -372,8 +371,9 @@ impl<T: Config> Pallet<T> { fn do_accept_invitation(receiver: T::IdtyIndex) -> DispatchResultWithPostInfo { Smiths::<T>::mutate(receiver, |maybe_smith_meta| { - let maybe_smith_meta = maybe_smith_meta.as_mut().expect("status checked earlier"); - maybe_smith_meta.status = SmithStatus::Pending; + if let Some(smith_meta) = maybe_smith_meta { + smith_meta.status = SmithStatus::Pending; + } }); Self::deposit_event(Event::<T>::InvitationAccepted { idty_index: receiver, @@ -426,34 +426,36 @@ impl<T: Config> Pallet<T> { fn do_certify_smith(receiver: T::IdtyIndex, issuer: T::IdtyIndex) { Smiths::<T>::mutate(issuer, |maybe_smith_meta| { - let maybe_smith_meta = maybe_smith_meta.as_mut().expect("issuer checked earlier"); - maybe_smith_meta.issued_certs.push(receiver); - maybe_smith_meta.issued_certs.sort(); + if let Some(smith_meta) = maybe_smith_meta { + smith_meta.issued_certs.push(receiver); + smith_meta.issued_certs.sort(); + } }); Smiths::<T>::mutate(receiver, |maybe_smith_meta| { - let maybe_smith_meta = maybe_smith_meta.as_mut().expect("receiver checked earlier"); - maybe_smith_meta.received_certs.push(issuer); - maybe_smith_meta.received_certs.sort(); - maybe_smith_meta.status = if maybe_smith_meta.received_certs.len() - >= T::MinCertForMembership::get() as usize - { - SmithStatus::Smith - } else { - SmithStatus::Pending - }; - // expiry postponed - let new_expires_on = CurrentSession::<T>::get() + T::SmithInactivityMaxDuration::get(); - maybe_smith_meta.expires_on = Some(new_expires_on); - Self::deposit_event(Event::<T>::CertificationReceived { - idty_index: receiver, - issued_by: issuer, - }); - if maybe_smith_meta.status == SmithStatus::Smith { - Self::deposit_event(Event::<T>::PromotedToSmith { + if let Some(smith_meta) = maybe_smith_meta { + smith_meta.received_certs.push(issuer); + smith_meta.received_certs.sort(); + smith_meta.status = + if smith_meta.received_certs.len() >= T::MinCertForMembership::get() as usize { + SmithStatus::Smith + } else { + SmithStatus::Pending + }; + // expiry postponed + let new_expires_on = + CurrentSession::<T>::get() + T::SmithInactivityMaxDuration::get(); + smith_meta.expires_on = Some(new_expires_on); + Self::deposit_event(Event::<T>::CertificationReceived { idty_index: receiver, + issued_by: issuer, }); + if smith_meta.status == SmithStatus::Smith { + Self::deposit_event(Event::<T>::PromotedToSmith { + idty_index: receiver, + }); + } + // TODO: unschedule old expiry } - // TODO: unschedule old expiry }); } @@ -480,21 +482,23 @@ impl<T: Config> Pallet<T> { fn _do_exclude_smith(idty_index: T::IdtyIndex, reason: SmithRemovalReason) { let mut lost_certs = vec![]; Smiths::<T>::mutate(idty_index, |maybe_smith_meta| { - let maybe_smith_meta = maybe_smith_meta.as_mut().expect("checked earlier"); - maybe_smith_meta.expires_on = None; - maybe_smith_meta.status = SmithStatus::Excluded; - for cert in &maybe_smith_meta.received_certs { - lost_certs.push(*cert); + if let Some(smith_meta) = maybe_smith_meta { + smith_meta.expires_on = None; + smith_meta.status = SmithStatus::Excluded; + for cert in &smith_meta.received_certs { + lost_certs.push(*cert); + } + smith_meta.received_certs = vec![]; + // N.B.: the issued certs are kept in case the smith joins back } - maybe_smith_meta.received_certs = vec![]; - // N.B.: the issued certs are kept in case the smith joins back }); // We remove the lost certs from their issuer's stock for lost_cert in lost_certs { Smiths::<T>::mutate(lost_cert, |maybe_smith_meta| { - let maybe_smith_meta = maybe_smith_meta.as_mut().expect("checked earlier"); - if let Ok(index) = maybe_smith_meta.issued_certs.binary_search(&idty_index) { - maybe_smith_meta.issued_certs.remove(index); + if let Some(smith_meta) = maybe_smith_meta { + if let Ok(index) = smith_meta.issued_certs.binary_search(&idty_index) { + smith_meta.issued_certs.remove(index); + } } }); } @@ -507,10 +511,11 @@ impl<T: Config> Pallet<T> { if let Some(smith_meta) = Smiths::<T>::get(idty_index) { if smith_meta.expires_on.is_some() { Smiths::<T>::mutate(idty_index, |maybe_smith_meta| { - let maybe_smith_meta = maybe_smith_meta.as_mut().expect("checked earlier"); - // As long as the smith is online, it cannot expire - maybe_smith_meta.expires_on = None; - // FIXME: unschedule old expiry + if let Some(smith_meta) = maybe_smith_meta { + // As long as the smith is online, it cannot expire + smith_meta.expires_on = None; + // FIXME: unschedule old expiry + } }); } } @@ -520,12 +525,13 @@ impl<T: Config> Pallet<T> { if let Some(smith_meta) = Smiths::<T>::get(idty_index) { if smith_meta.expires_on.is_none() { Smiths::<T>::mutate(idty_index, |maybe_smith_meta| { - let maybe_smith_meta = maybe_smith_meta.as_mut().expect("checked earlier"); - // As long as the smith is online, it cannot expire - let new_expires_on = - CurrentSession::<T>::get() + T::SmithInactivityMaxDuration::get(); - maybe_smith_meta.expires_on = Some(new_expires_on); - ExpiresOn::<T>::append(new_expires_on, idty_index); + if let Some(smith_meta) = maybe_smith_meta { + // As long as the smith is online, it cannot expire + let new_expires_on = + CurrentSession::<T>::get() + T::SmithInactivityMaxDuration::get(); + smith_meta.expires_on = Some(new_expires_on); + ExpiresOn::<T>::append(new_expires_on, idty_index); + } }); } }