mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-15 10:21:05 +00:00
CandidateBackingSubsystem (#1312)
* Updates guide for CandidateBacking * Move assignment types to primitives * Initial implementation. * More functionality * use assert_matches * Changes to report misbehaviors * Some fixes after a review * Remove a blank line * Update guide and some types * Adds run_job function * Some comments and refactorings * Fix review * Remove warnings * Use summary in kicking off validation * Parallelize requests * Validation provides local and global validation params * Test issued validity tracking * Nits from review
This commit is contained in:
@@ -28,6 +28,8 @@ use std::collections::hash_map::{HashMap, Entry};
|
||||
use std::hash::Hash;
|
||||
use std::fmt::Debug;
|
||||
|
||||
use primitives::parachain::{ValidityAttestation as PrimitiveValidityAttestation, ValidatorSignature};
|
||||
|
||||
use codec::{Encode, Decode};
|
||||
|
||||
/// Context for the statement table.
|
||||
@@ -98,7 +100,7 @@ pub enum ValidityDoubleVote<C, D, S> {
|
||||
/// Implicit vote by issuing and explicitly voting invalidity
|
||||
IssuedAndInvalidity((C, S), (D, S)),
|
||||
/// Direct votes for validity and invalidity
|
||||
ValidityAndInvalidity(D, S, S),
|
||||
ValidityAndInvalidity(C, S, S),
|
||||
}
|
||||
|
||||
/// Misbehavior: multiple signatures on same statement.
|
||||
@@ -180,6 +182,15 @@ pub enum ValidityAttestation<S> {
|
||||
Explicit(S),
|
||||
}
|
||||
|
||||
impl Into<PrimitiveValidityAttestation> for ValidityAttestation<ValidatorSignature> {
|
||||
fn into(self) -> PrimitiveValidityAttestation {
|
||||
match self {
|
||||
Self::Implicit(s) => PrimitiveValidityAttestation::Implicit(s),
|
||||
Self::Explicit(s) => PrimitiveValidityAttestation::Explicit(s),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// An attested-to candidate.
|
||||
#[derive(Clone, PartialEq, Decode, Encode)]
|
||||
pub struct AttestedCandidate<Group, Candidate, AuthorityId, Signature> {
|
||||
@@ -550,7 +561,7 @@ impl<C: Context> Table<C> {
|
||||
// valid vote conflicting with invalid vote
|
||||
(ValidityVote::Valid(good), ValidityVote::Invalid(bad)) |
|
||||
(ValidityVote::Invalid(bad), ValidityVote::Valid(good)) =>
|
||||
make_vdv(ValidityDoubleVote::ValidityAndInvalidity(digest, good, bad)),
|
||||
make_vdv(ValidityDoubleVote::ValidityAndInvalidity(votes.candidate.clone(), good, bad)),
|
||||
|
||||
// two signatures on same candidate
|
||||
(ValidityVote::Issued(a), ValidityVote::Issued(b)) =>
|
||||
@@ -817,7 +828,7 @@ mod tests {
|
||||
assert_eq!(
|
||||
table.detected_misbehavior.get(&AuthorityId(2)).unwrap(),
|
||||
&Misbehavior::ValidityDoubleVote(ValidityDoubleVote::ValidityAndInvalidity(
|
||||
candidate_digest,
|
||||
Candidate(2, 100),
|
||||
Signature(2),
|
||||
Signature(2),
|
||||
))
|
||||
|
||||
Reference in New Issue
Block a user