Description
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
topallet_beefy
similar to report_equivocation that takesInvalidPayloadProof
- hook
pallet_beefy_mmr
topallet_beefy::EquivocationReportSystem
to be able to verifyInvalidPayloadProof
:- 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-chainmmr_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.
Metadata
Assignees
Labels
No labels
Activity