mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 09:21:05 +00:00
babe: report equivocations (#6362)
* slots: create primitives crate for consensus slots * offences: add method to check if an offence is unknown * babe: initial equivocation reporting implementation * babe: organize imports * babe: working equivocation reporting * babe: add slot number to equivocation proof * session: move duplicate traits to session primitives * babe: move equivocation stuff to its own file * offences: fix test * session: don't have primitives depend on frame_support * babe: use opaque type for key owner proof * babe: cleanup client equivocation reporting * babe: cleanup equivocation code in pallet * babe: allow sending signed equivocation reports * node: fix compilation * fix test compilation * babe: return bool on check_equivocation_proof * babe: add test for equivocation reporting * babe: add more tests * babe: add test for validate unsigned * babe: take slot number in generate_key_ownership_proof API * babe: add benchmark for equivocation proof checking * session: add benchmark for membership proof checking * offences: fix babe benchmark * babe: add weights based on benchmark results * babe: adjust weights after benchmarking on reference hardware * babe: reorder checks in check_and_report_equivocation
This commit is contained in:
@@ -64,6 +64,48 @@ pub struct MembershipProof {
|
||||
pub validator_count: ValidatorCount,
|
||||
}
|
||||
|
||||
/// A utility trait to get a session number. This is implemented for
|
||||
/// `MembershipProof` below to fetch the session number the given session
|
||||
/// membership proof is for. It is useful when we need to deal with key owner
|
||||
/// proofs generically (i.e. just typing against the `KeyOwnerProofSystem`
|
||||
/// trait) but still restrict their capabilities.
|
||||
pub trait GetSessionNumber {
|
||||
fn session(&self) -> SessionIndex;
|
||||
}
|
||||
|
||||
/// A utility trait to get the validator count of a given session. This is
|
||||
/// implemented for `MembershipProof` below and fetches the number of validators
|
||||
/// in the session the membership proof is for. It is useful when we need to
|
||||
/// deal with key owner proofs generically (i.e. just typing against the
|
||||
/// `KeyOwnerProofSystem` trait) but still restrict their capabilities.
|
||||
pub trait GetValidatorCount {
|
||||
fn validator_count(&self) -> ValidatorCount;
|
||||
}
|
||||
|
||||
impl GetSessionNumber for sp_core::Void {
|
||||
fn session(&self) -> SessionIndex {
|
||||
Default::default()
|
||||
}
|
||||
}
|
||||
|
||||
impl GetValidatorCount for sp_core::Void {
|
||||
fn validator_count(&self) -> ValidatorCount {
|
||||
Default::default()
|
||||
}
|
||||
}
|
||||
|
||||
impl GetSessionNumber for MembershipProof {
|
||||
fn session(&self) -> SessionIndex {
|
||||
self.session
|
||||
}
|
||||
}
|
||||
|
||||
impl GetValidatorCount for MembershipProof {
|
||||
fn validator_count(&self) -> ValidatorCount {
|
||||
self.validator_count
|
||||
}
|
||||
}
|
||||
|
||||
/// Generate the initial session keys with the given seeds, at the given block and store them in
|
||||
/// the client's keystore.
|
||||
#[cfg(feature = "std")]
|
||||
|
||||
Reference in New Issue
Block a user