report_equivocation_unsigned

Call v101 → v148, v149 → current #1

Reports GRANDPA equivocation without requiring a signed transaction.

View calls on chain

Click items to navigate. Pan and zoom to explore.

Used by: validatorsdevelopers

The Big Picture

This is the unsigned variant of equivocation reporting, designed for block authors. When a validator building a block detects an equivocation, they can include this unsigned extrinsic in their block. The chain validates the proof and accepts the report without requiring a signature, since block authorship itself proves authorization.

Use Cases

  • Allow block authors to report equivocations without paying fees
  • Enable automated equivocation detection in validator software
  • Ensure equivocations are reported even if the detector lacks funds

From Chain Metadata

See [`Pallet::report_equivocation_unsigned`].

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
  • Call is submitted by a block author (validated via ValidateUnsigned)
  • Same equivocation has not already been reported

Effects

Postconditions

  • Equivocation offence is recorded on-chain
  • Block author is credited as the reporter

Side Effects

  • May trigger validator slashing
  • No transaction fee charged (inherent-like behavior)

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_unsigned call (typed, named args)
const equivocation_proof = undefined as any /* EquivocationProof — replace with real value */;

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

Version History

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

Runtime Info

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