INNER CODE UNIT · Rust
try_remove_candidate
AstarNetwork/Astar · pallets/collator-selection/src/lib.rs:710
fn try_remove_candidate(who: &T::AccountId) -> Result<usize, DispatchError> {
let current_count =
<Candidates<T>>::try_mutate(|candidates| -> Result<usize, DispatchError> {
let index = candidates
.iter()
.position(|candidate| candidate.who == *who)
.ok_or(Error::<T>::NotCandidate)?;
let candidate = candidates.remove(index);
// start un-bonding period, 1 session
let session_index = T::ValidatorSet::session_index().saturating_add(1);
<NonCandidates<T>>::insert(who, (session_index, candidate.deposit));
Ok(candidates.len())
})?;
Self::deposit_event(Event::CandidateRemoved(who.clone()));
Ok(current_count)
}