> ## Documentation Index
> Fetch the complete documentation index at: https://docs.therootnetwork.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Grandpa

## Calls

### noteStalled

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.

<Info>
  **Note**: Only callable by root.
</Info>

**Namespace**

```
api.tx.grandpa.noteStalled
```

**Type**

```
function noteStalled(
  delay: u32,
  best_finalized_block_number: u32
)
```

### reportEquivocation

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.

**Namespace**

```
api.tx.grandpa.reportEquivocation
```

**Type**

```
function reportEquivocation(
  equivocation_proof: SpFinalityGrandpaEquivocationProof,
  key_owner_proof: SpCoreVoid
)
```

### reportEquivocationUnsigned

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.

This extrinsic must be called unsigned and it is expected that only block authors will call it (validated in `ValidateUnsigned`), as such if the block author is defined it will be defined as the equivocation reporter.

**Namespace**

```
api.tx.grandpa.reportEquivocationUnsigned
```

**Type**

```
function reportEquivocationUnsigned(
  equivocation_proof: SpFinalityGrandpaEquivocationProof,
  key_owner_proof: SpCoreVoid
)
```

## Storage

### currentSetId

The number of changes (both in terms of keys and underlying economic responsibilities) in the "set" of Grandpa validators from genesis.

**Namespace**

```
api.query.grandpa.currentSetId
```

**Type**

```
function currentSetId(

): u64
```

### nextForced

next block number where we can force a change.

**Namespace**

```
api.query.grandpa.nextForced
```

**Type**

```
function nextForced(

): Option<u32>
```

### pendingChange

Pending change: (signaled at, scheduled change).

**Namespace**

```
api.query.grandpa.pendingChange
```

**Type**

```
function pendingChange(

): Option<PalletGrandpaStoredPendingChange>
```

### setIdSession

A mapping from grandpa set ID to the index of the *most recent* session for which its members were responsible.

TWOX-NOTE: `SetId` is not under user control.

**Namespace**

```
api.query.grandpa.setIdSession
```

**Type**

```
function setIdSession(
  u64
): Option<u32>
```

### stalled

`true` if we are currently stalled.

**Namespace**

```
api.query.grandpa.stalled
```

**Type**

```
function stalled(

): Option<(u32,u32)>
```

### state

State of the current authority set.

**Namespace**

```
api.query.grandpa.state
```

**Type**

```
function state(

): PalletGrandpaStoredState
```

## Events

### NewAuthorities

New authority set has been applied.

**Namespace**

```
api.events.grandpa.NewAuthorities
```

**Type**

```
type NewAuthorities = {
  authority_set: Vec<(SpFinalityGrandpaAppPublic,u64)>
}
```

### Paused

Current authority set has been paused.

**Namespace**

```
api.events.grandpa.Paused
```

**Type**

```
type Paused = {

}
```

### Resumed

Current authority set has been resumed.

**Namespace**

```
api.events.grandpa.Resumed
```

**Type**

```
type Resumed = {

}
```

## Errors

### ChangePending

Attempt to signal GRANDPA change with one already pending.

**Namespace**

```
api.errors.grandpa.ChangePending
```

### DuplicateOffenceReport

A given equivocation report is valid but already previously reported.

**Namespace**

```
api.errors.grandpa.DuplicateOffenceReport
```

### InvalidEquivocationProof

An equivocation proof provided as part of an equivocation report is invalid.

**Namespace**

```
api.errors.grandpa.InvalidEquivocationProof
```

### InvalidKeyOwnershipProof

A key ownership proof provided as part of an equivocation report is invalid.

**Namespace**

```
api.errors.grandpa.InvalidKeyOwnershipProof
```

### PauseFailed

Attempt to signal GRANDPA pause when the authority set isn't live (either paused or already pending pause).

**Namespace**

```
api.errors.grandpa.PauseFailed
```

### ResumeFailed

Attempt to signal GRANDPA resume when the authority set isn't paused (either live or already pending resume).

**Namespace**

```
api.errors.grandpa.ResumeFailed
```

### TooSoon

Cannot signal forced change so soon after last.

**Namespace**

```
api.errors.grandpa.TooSoon
```

## Constants

### maxAuthorities

Max Authorities in use

**Namespace**

```
api.consts.grandpa.maxAuthorities
```

**Type**

```
type maxAuthorities = u32
```

## JSON-RPC Methods

### `proveFinality`

Prove finality for the given block number, returning the Justification for the last block in the set.

**Interface**

```
api.rpc.grandpa.proveFinality(blockNumber: BlockNumber): Option<EncodedFinalityProofs>
```

**JSON**

```
{ "id":1, "jsonrpc":"2.0", "method":"grandpa_proveFinality", "params":[blockNumber: BlockNumber] }
```

### `roundState`

Returns the state of the current best round state as well as the ongoing background rounds

**Interface**

```
api.rpc.grandpa.roundState(): ReportedRoundStates
```

**JSON**

```
{ "id":1, "jsonrpc":"2.0", "method":"grandpa_roundState", "params":[] }
```

### `subscribeJustifications`

Subscribes to grandpa justifications

**Interface**

```
api.rpc.grandpa.subscribeJustifications(): JustificationNotification
```

**JSON**

```
{ "id":1, "jsonrpc":"2.0", "method":"grandpa_subscribeJustifications", "params":[] }
```
