• Tomasz Drwięga's avatar
    Offences reporting and slashing (#3322) · 5d992d80
    Tomasz Drwięga authored
    
    
    * Remove offline slashing logic from staking.
    
    * Initial version of reworked offence module, can report offences
    
    * Clean up staking example.
    
    * Commit SlashingOffence
    
    * Force new era on slash.
    
    * Add offenders in the SlashingOffence trait.
    
    * Introduce the ReportOffence trait.
    
    * Rename `Offence`.
    
    * Add on_before_session_ending handler.
    
    * Move offence related stuff under sr-primitives.
    
    * Fix cargo check.
    
    * Import new im-online implementation.
    
    * Adding validator count to historical session storage as it's needed for slash calculations
    
    * Add a comment about offence.
    
    * Add BabeEquivocationOffence
    
    * GrandpaEquivocationOffence
    
    * slash_fraction and fix
    
    * current_era_start_session_index
    
    * UnresponsivnessOffence
    
    * Finalise OnOffenceHandler traits, and stub impl for staking.
    
    * slash_fraction doesn't really need &self
    
    * Note that offenders count is greater than 0
    
    * Add a test to ensure that I got the math right
    
    * Use FullIdentification in offences.
    
    * Use FullIndentification.
    
    * Hook up the offences module.
    
    * Report unresponsive validators
    
    * Make sure eras have the same length.
    
    * Slashing and rewards.
    
    * Fix compilation.
    
    * Distribute rewards.
    
    * Supply validators_count
    
    * Use identificationTuple in Unresponsivness report
    
    * Fix merge.
    
    * Make sure we don't slash if amount is zero.
    
    * We don't return an error from report_offence anymo
    
    * We actually can use vec!
    
    * Prevent division by zero if the reporters is empty
    
    * offence_forces_new_era/nominators_also_get_slashed
    
    * advance_session
    
    * Fix tests.
    
    * Update srml/staking/src/lib.rs
    
    Co-Authored-By: default avatarRobert Habermeier <[email protected]>
    
    * slashing_performed_according_exposure
    
    * Check that reporters receive their slice.
    
    * Small clean-up.
    
    * invulnerables_are_not_slashed
    
    * Minor clean ups.
    
    * Improve docs.
    
    * dont_slash_if_fraction_is_zero
    
    * Remove session dependency from offences.
    
    * Introduce sr-staking-primitives
    
    * Move offence under sr_staking_primitives
    
    * rename session_index
    
    * Resolves todos re using SessionIndex
    
    * Fix staking tests.
    
    * Properly scale denominator.
    
    * Fix UnresponsivnessOffence
    
    * Fix compilation.
    
    * Tests for offences.
    
    * Clean offences tests.
    
    * Fix staking doc test.
    
    * Bump spec version
    
    * Fix aura tests.
    
    * Fix node_executor
    
    * Deposit an event on offence.
    
    * Fix compilation of node-runtime
    
    * Remove aura slashing logic.
    
    * Remove HandleReport
    
    * Update docs for timeslot.
    
    * rename with_on_offence_fractions
    
    * Add should_properly_count_offences
    
    * Replace ValidatorIdByIndex with CurrentElectedSet
    
    ValidatorIdByIndex was querying the current_elected set in each call, doing loading (even though its from cache), deserializing and cloning of element.
    
    Instead of this it is more efficient to use `CurrentElectedSet`. As a small bonus, the invariant became a little bit easier: now we just rely on the fact that `keys` and `current_elected` set are of the same length rather than relying on the fact that `validator_id_by_index` would work similar to `<[T]>::get`.
    
    * Clarify babe equivocation
    
    * Fix offences.
    
    * Rename validators_count to validator_set_count
    
    * Fix squaring.
    
    * Update core/sr-staking-primitives/src/offence.rs
    
    Co-Authored-By: default avatarGavin Wood <[email protected]>
    
    * Docs for CurrentElectedSet.
    
    * Don't punish only invulnerables
    
    * Use `get/insert` instead of `mutate`.
    
    * Fix compilation
    
    * Update core/sr-staking-primitives/src/offence.rs
    
    Co-Authored-By: default avatarGavin Wood <[email protected]>
    
    * Update srml/offences/src/lib.rs
    
    Co-Authored-By: default avatarRobert Habermeier <[email protected]>
    
    * Update srml/im-online/src/lib.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Update srml/im-online/src/lib.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Update srml/im-online/src/lib.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Update srml/babe/src/lib.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Update core/sr-staking-primitives/src/offence.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Update core/sr-staking-primitives/src/offence.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Update core/sr-staking-primitives/src/offence.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Update core/sr-staking-primitives/src/offence.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Update core/sr-staking-primitives/src/offence.rs
    
    Co-Authored-By: default avatarjoe petrowski <[email protected]>
    
    * Add aura todo.
    
    * Allow multiple reports for single offence report.
    
    * Fix slash_fraction calculation.
    
    * Fix typos.
    
    * Fix compilation and tests.
    
    * Fix staking tests.
    
    * Update srml/im-online/src/lib.rs
    
    Co-Authored-By: default avatarLogan Saether <[email protected]>
    
    * Fix doc on time_slot
    
    * Allow slashing only on current era (#3411)
    
    * only slash in current era
    
    * prune journal for last era
    
    * comment own_slash
    
    * emit an event when old slashing events are discarded
    
    * Pave the way for pruning
    
    * Address issues.
    
    * Try to refactor collect_offence_reports
    
    * Other fixes.
    
    * More fixes.
    5d992d80