#![allow(unused)]fnmain() {
/// A set of statements about a specific candidate.structDisputeStatementSet {
candidate_hash: CandidateHash,
session: SessionIndex,
statements: Vec<(DisputeStatement, ValidatorIndex, ValidatorSignature)>,
}
}
#![allow(unused)]fnmain() {
/// A statement about a candidate, to be used within some dispute resolution process.////// Statements are either in favor of the candidate's validity or against it.enumDisputeStatement {
/// A valid statement, of the given kind
Valid(ValidDisputeStatementKind),
/// An invalid statement, of the given kind.
Invalid(InvalidDisputeStatementKind),
}
}
Kinds of dispute statements. Each of these can be combined with a candidate hash, session index, validator public key,
and validator signature to reproduce and check the original statement.
#![allow(unused)]fnmain() {
structDisputeState {
validators_for: Bitfield, // one bit per validator.
validators_against: Bitfield, // one bit per validator.
start: BlockNumber,
concluded_at: Option<BlockNumber>,
}
}
#![allow(unused)]fnmain() {
/// Type for transcending recorded on-chain/// dispute relevant votes and conclusions to/// the off-chain `DisputesCoordinator`.structScrapedOnChainVotes {
/// The session index at which the block was included.
session: SessionIndex,
/// The backing and seconding validity attestations for all candidates, providing the full candidate receipt.
backing_validators_per_candidate: Vec<(CandidateReceipt<H>, Vec<(ValidatorIndex, ValidityAttestation)>)>
/// Set of concluded disputes that were recorded/// on chain within the inherent.
disputes: MultiDisputeStatementSet,
}
}