report_equivocation

Call v101 → current #0

Reports GRANDPA voter equivocation (double voting) with ownership proof.

View calls on chain

Click items to navigate. Pan and zoom to explore.

Used by: validatorsdevelopers

The Big Picture

GRANDPA consensus requires honest voting - validators must only vote for one block per round. If a validator votes for two different blocks at the same height (equivocation), they're breaking consensus rules. This call lets anyone submit proof of such misbehavior, which triggers slashing and protects network integrity.

Use Cases

  • Report misbehaving GRANDPA validators who vote for conflicting blocks
  • Enforce consensus integrity by punishing double voters
  • Earn reporter rewards by detecting and reporting equivocations

From Chain Metadata

Report voter equivocation/misbehavior. This method will verify the equivocation proof and validate the given key ownership proof against the extracted offender. If both are valid, the offence will be reported.

Input Parameters

#NameTypeDescription
0
equivocation_proof
EquivocationProof equivocation_proof (EquivocationProof)
1
key_owner_proof
Void key_owner_proof (Void)

Permissions

Origin
Unknown
Required Role

Permission data inferred from metadata. May be incomplete.

Requirements

  • Equivocation proof is valid and demonstrates double voting
  • Key ownership proof validates the offender held the key during that session
  • Same equivocation has not already been reported

Effects

Postconditions

  • Equivocation offence is recorded on-chain
  • Offender may be slashed based on network rules

Side Effects

  • May trigger validator slashing
  • Offence is added to the offences pallet for processing

Code Examples

import { ApiPromise, WsProvider } from "@polkadot/api";
import { stringCamelCase } from "@polkadot/util";

const provider = new WsProvider("wss://entrypoint-finney.opentensor.ai:443");
const api = await ApiPromise.create({ provider });

// Build report_equivocation call
const equivocation_proof = 0 as any /* EquivocationProof */;
const key_owner_proof = 0 as any /* Void */;

const call = api.tx[stringCamelCase("Grandpa")][stringCamelCase("report_equivocation")](
  equivocation_proof,
  key_owner_proof
);

Runtime Info

Pallet Index
4
Call Index
0
First Version
v101
Current Version
v393