note_stalled

Call v101 → current #2

Signals that GRANDPA finality has stalled and schedules a forced authority set change.

View calls on chain

Click items to navigate. Pan and zoom to explore.

Used by: developers

The Big Picture

Sometimes GRANDPA gets stuck - validators might go offline, network partitions happen, or bugs cause finality to stop. This root call is the emergency recovery mechanism. It schedules a forced transition to a new validator set, allowing the network to resume finality after a safety delay.

Use Cases

  • Recover from GRANDPA consensus failures
  • Transition to a new validator set when current set is unresponsive
  • Emergency recovery when finality has stopped progressing

From Chain Metadata

Note that the current authority set of the GRANDPA finality gadget has stalled. This will trigger a forced authority set change at the beginning of the next session, to be enacted `delay` blocks after that. The `delay` should be high enough to safely assume that the block signalling the forced change will not be re-orged e.g. 1000 blocks. The block production rate (which may be slowed down because of finality lagging) should be taken into account when choosing the `delay`. The GRANDPA voters based on the new authority will start voting on top of `best_finalized_block_number` for new finalized blocks. `best_finalized_block_number` should be the highest of the latest finalized block of all validators of the new authority set. Only callable by root.

Input Parameters

#NameTypeDescription
0
delay
u32 delay (u32)
1
best_finalized_block_number
u32 best_finalized_block_number (u32)

Permissions

Origin
Unknown
Required Role

Permission data inferred from metadata. May be incomplete.

Requirements

  • Caller has root/sudo privileges
  • GRANDPA has actually stalled (finality is not progressing)
  • Delay parameter is high enough to prevent reorgs (e.g., 1000 blocks)

Effects

Postconditions

  • Forced authority set change is scheduled for the next session
  • New validators will start voting from best_finalized_block_number

Side Effects

  • May disrupt ongoing finality if called prematurely
  • Network transitions to new authority set after delay

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 note_stalled call
const delay = 0;
const best_finalized_block_number = 0;

const call = api.tx[stringCamelCase("Grandpa")][stringCamelCase("note_stalled")](
  delay,
  best_finalized_block_number
);

Runtime Info

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