In substrate, what is the equivocation handling system and KeyOwnerProof/Identification/ProofSystem in babe config?

Viewed 32
        // The proof of key ownership, used for validating equivocation reports.
        /// The proof must include the session index and validator count of the
        /// session at which the equivocation occurred.
        type KeyOwnerProof: Parameter + GetSessionNumber + GetValidatorCount;

        /// The identification of a key owner, used when reporting equivocations.
        type KeyOwnerIdentification: Parameter;

        /// A system for proving ownership of keys, i.e. that a given key was part
        /// of a validator set, needed for validating equivocation reports.
        type KeyOwnerProofSystem: KeyOwnerProofSystem<
            (KeyTypeId, AuthorityId),
            Proof = Self::KeyOwnerProof,
            IdentificationTuple = Self::KeyOwnerIdentification,
        >;

        /// The equivocation handling subsystem, defines methods to report an
        /// offence (after the equivocation has been validated) and for submitting a
        /// transaction to report an equivocation (from an offchain context).
        /// NOTE: when enabling equivocation handling (i.e. this type isn't set to
        /// `()`) you must use this pallet's `ValidateUnsigned` in the runtime
        /// definition.
        type HandleEquivocation: HandleEquivocation<Self>;

What do these types mean and what are they for? I guess a better question is what are these equivocation reports that these types pertain to?

1 Answers

An equivocation report is a signaling that someone detected a Babe authority to have build two blocks on the same height. So, if someone detects a Babe authority building two blocks at the same height, it will issue such an equivocation report. It is up to chain how it wants to handle this. Polkadot for example will slash the offending authority.

Related