Skip to content

BEEFY: slash validators voting on non-finalized forks #1120

Closed
paritytech/substrate
#14744
@acatangiu

Description

@acatangiu

Description

BEEFY voters should only vote on GRANDPA finalized blocks - vote only on canonic chain/fork.

Votes on blocks from different forks should (automatically) lead to stake slashing (more aggressive slashing than GRANDPA equivocations, since this scenario is intentionally dishonest).

We should add client/voter detection of such misbehavior as well as runtime logic for reporting proofs of misbehavior and subsequent slashing consequences.

Proposed solution

Runtime side

  • add new pallet::call to pallet_beefy similar to report_equivocation that takes InvalidPayloadProof
  • hook pallet_beefy_mmr to pallet_beefy::EquivocationReportSystem to be able to verify InvalidPayloadProof:
    • verify inner GrandpaProof to make sure the current chain fork is finalized at least up to offending vote height,
    • verify offending_vote.mmr_root != on-chain mmr_root (combined with above, it proves what we need)
  • report offense to staking so offending vote author gets slashed

Client-side

  • add "fisherman" capabilities to voter gossip - on detecting votes for historical forks, it builds the required proof of misbehavior and submits report.

cc @Lederstrumpf, @andresilva

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions