Skip to main content

MisbehaviourProof

Trait MisbehaviourProof 

Source
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.

Implementors§