report_equivocation

Call v101 → v148, v149 → 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

See [`Pallet::report_equivocation`].

Input Parameters

#NameTypeDescription
0
equivocation_proof
EquivocationProof Box<EquivocationProof<T::Hash, BlockNumberFor<T>>>equivocation_proof (EquivocationProof)
1
key_owner_proof
Void T::KeyOwnerProofkey_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

// ----------------------------------------------------------------------
// HEADS UP: 1 arg below has a complex type with no usable default.
// Look for `undefined as any` and replace it with real value
// before running — the snippet compiles, but will fail at runtime as-is.
// ----------------------------------------------------------------------
import { createClient, Binary } from "polkadot-api";
import { getWsProvider } from "polkadot-api/ws";
import { sub } from "@polkadot-api/descriptors"; // generated by: npx papi add sub -w wss://entrypoint-finney.opentensor.ai:443

const client = createClient(getWsProvider("wss://entrypoint-finney.opentensor.ai:443"));
const api = client.getTypedApi(sub);

// Build report_equivocation call (typed, named args)
const equivocation_proof = undefined as any /* EquivocationProof — replace with real value */;

const tx = api.tx.Grandpa.report_equivocation({
  equivocation_proof,
});

Version History

v101 block 1 2 args
v149 block 3,014,339 2 args Current

Runtime Info

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