pub trait MisbehaviourProof { }Expand description
Definition (Proof of misbehaviour). A proof of misbehaviour against validator v is an
EquivocationProof naming v for which EquivocationProof::check returns Ok against a
committee. There are four shapes, and each exhibits a pair of v’s own signatures — or, for
InvalidJustification, a single signature plus the opening it commits to.
What check establishes, and what it does not. Signatures are verified against the
ValidatorPublicKey carried in the proof, not against anything looked up in the committee.
Of the four arms, only InvalidJustification consults the committee argument at all — to
judge whether the opening was a quorum of it. So LockViolation, DoubleVote and
FirstRoundViolation are committee-independent: their verdicts hold whatever committee is
supplied, and indeed whether or not the named validator belongs to one.
For InvalidJustification the committee does matter, and a vote is honest only relative to
the committee of the epoch it was cast in; that epoch is not carried in the proof, so an
auditor supplying a different epoch’s committee could convict a correct validator. Throughout
this module such a proof is understood to be adjudicated against the right one.
No arm checks committee membership or weight. An accepted proof therefore says “this key
equivocated”, not “this committee member equivocated”: turning a set of proofs into a weight
is the consumer’s job, and ConflictCompleteness states its threshold about the set
extract_equivocations returns, whose members are committee signers by construction.