Drop availability only for candidates that lose disputes (#3973)

* guide: updates for disputes changes

* paras_inherent: drop availability only for candidates that lose disputes

* spellcheck

* Update runtime/parachains/src/paras_inherent.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

Co-authored-by: Andronik Ordian <write@reusable.software>
This commit is contained in:
Robert Habermeier
2021-09-29 22:33:16 +02:00
committed by GitHub
parent f66440dc19
commit b6a87891ac
3 changed files with 15 additions and 12 deletions
@@ -174,24 +174,27 @@ pub mod pallet {
// Handle disputes logic.
let current_session = <shared::Pallet<T>>::session_index();
let freed_disputed: Vec<(_, FreedReason)> = {
let fresh_disputes = T::DisputesHandler::provide_multi_dispute_data(disputes)?;
let new_current_dispute_sets: Vec<_> = disputes
.iter()
.filter(|s| s.session == current_session)
.map(|s| (s.session, s.candidate_hash))
.collect();
let _ = T::DisputesHandler::provide_multi_dispute_data(disputes)?;
if T::DisputesHandler::is_frozen() {
// The relay chain we are currently on is invalid. Proceed no further on parachains.
Included::<T>::set(Some(()));
return Ok(Some(MINIMAL_INCLUSION_INHERENT_WEIGHT).into())
}
let any_current_session_disputes =
fresh_disputes.iter().any(|(s, _)| s == &current_session);
if any_current_session_disputes {
let current_session_disputes: Vec<_> = fresh_disputes
if !new_current_dispute_sets.is_empty() {
let concluded_invalid_disputes: Vec<_> = new_current_dispute_sets
.iter()
.filter(|(s, _)| s == &current_session)
.filter(|(s, c)| T::DisputesHandler::concluded_invalid(*s, *c))
.map(|(_, c)| *c)
.collect();
<inclusion::Pallet<T>>::collect_disputed(current_session_disputes)
<inclusion::Pallet<T>>::collect_disputed(concluded_invalid_disputes)
.into_iter()
.map(|core| (core, FreedReason::Concluded))
.collect()