From b4d8c76f60cf8bfdd3bee4923850fe6dc4d1cf33 Mon Sep 17 00:00:00 2001 From: Bradley Olson <34992650+BradleyOlson64@users.noreply.github.com> Date: Wed, 4 Jan 2023 13:35:58 -0800 Subject: [PATCH] Issue 6274: keeping all backing votes in provisioner vote set (#6494) * Fixing filter to keep all backing votes * Comment and implementers guide edit * Formatting * Using fallthrough * Fmt --- .../src/disputes/prioritized_selection/mod.rs | 18 ++++++++++++++---- .../src/node/utility/provisioner.md | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/node/core/provisioner/src/disputes/prioritized_selection/mod.rs b/node/core/provisioner/src/disputes/prioritized_selection/mod.rs index 7d8e52ccf19b..e92626e3afca 100644 --- a/node/core/provisioner/src/disputes/prioritized_selection/mod.rs +++ b/node/core/provisioner/src/disputes/prioritized_selection/mod.rs @@ -28,7 +28,7 @@ use polkadot_node_subsystem::{ }; use polkadot_primitives::v2::{ supermajority_threshold, CandidateHash, DisputeState, DisputeStatement, DisputeStatementSet, - Hash, MultiDisputeStatementSet, SessionIndex, ValidatorIndex, + Hash, MultiDisputeStatementSet, SessionIndex, ValidDisputeStatementKind, ValidatorIndex, }; use std::{ collections::{BTreeMap, HashMap}, @@ -364,10 +364,20 @@ fn is_vote_worth_to_keep( dispute_statement: DisputeStatement, onchain_state: &DisputeState, ) -> bool { - let offchain_vote = match dispute_statement { - DisputeStatement::Valid(_) => true, - DisputeStatement::Invalid(_) => false, + let (offchain_vote, valid_kind) = match dispute_statement { + DisputeStatement::Valid(kind) => (true, Some(kind)), + DisputeStatement::Invalid(_) => (false, None), }; + // We want to keep all backing votes. This maximizes the number of backers + // punished when misbehaving. + if let Some(kind) = valid_kind { + match kind { + ValidDisputeStatementKind::BackingValid(_) | + ValidDisputeStatementKind::BackingSeconded(_) => return true, + _ => (), + } + } + let in_validators_for = onchain_state .validators_for .get(validator_index.0 as usize) diff --git a/roadmap/implementers-guide/src/node/utility/provisioner.md b/roadmap/implementers-guide/src/node/utility/provisioner.md index e477a652a60e..fb97d52f1a8c 100644 --- a/roadmap/implementers-guide/src/node/utility/provisioner.md +++ b/roadmap/implementers-guide/src/node/utility/provisioner.md @@ -73,7 +73,7 @@ The end result of this process is a vector of `BackedCandidate`s, sorted in orde This is the point at which the block author provides further votes to active disputes or initiates new disputes in the runtime state. -The block-authoring logic of the runtime has an extra step between handling the inherent-data and producing the actual inherent call, which we assume performs the work of filtering out disputes which are not relevant to the on-chain state. +The block-authoring logic of the runtime has an extra step between handling the inherent-data and producing the actual inherent call, which we assume performs the work of filtering out disputes which are not relevant to the on-chain state. Backing votes are always kept in the dispute statement set. This ensures we punish the maximum number of misbehaving backers. To select disputes: