DevelopersSeptember 14, 2026by
EmpoorioChain Core
EmpoorioChain Core

GRANDPA: How EmpoorioChain Finalizes Blocks

Most descriptions of a chain's consensus stop at "how are blocks made". That is the easy half. The hard half is finality: the moment the network commits that a block will never be reverted. EmpoorioChain uses GRANDPA for that, and this post explains what it does, why it was chosen, and what its guarantees currently rest on.

Production and finality are two protocols

EmpoorioChain runs a hybrid:

  • Aura decides who authors each 6-second slot. It is fast and predictable, but on its own it only gives probabilistic safety — a longer chain could always appear.
  • GRANDPA (GHOST-based Recursive Ancestor Deriving Prefix Agreement) runs alongside and votes on which blocks are final.

Because the two are decoupled, the chain keeps producing blocks even if finality temporarily lags — for instance while a validator is restarting. The reverse is also true: if finality stalls for long, the unfinalized chain grows, and clients that respect the three-state model (submitted, included, finalized) will show users exactly that.

How GRANDPA votes

GRANDPA validators do not vote on individual blocks. Each validator votes for the highest block it considers valid, and the protocol finalizes the highest common ancestor that a two-thirds supermajority has voted for — a whole prefix of the chain in one round. This is what lets finality catch up in bursts and why, in the May 2026 testnet benchmark, finality latency clustered tightly around 17 seconds (p50 16.96 s, p99 17.72 s) rather than scaling with the number of blocks.

Finality is exposed as Prometheus metrics that operators are expected to alert on: empoorio_finality_seconds at p50/p95/p99, empoorio_finalized_head, empoorio_finalized_head_age_seconds, and an exporter liveness gauge. A finality stall is a page, not a dashboard curiosity.

The uncomfortable number

The public testnet currently runs two validators, both in the same hosting provider. GRANDPA requires two thirds of the set to agree. Two thirds of two is two. Losing either validator halts finality. The engineering docs call this what it is: fault tolerance of zero.

This is the single most important thing to know about the network today, and it is why the ecosystem's own documentation refuses to publish a "connect to the testnet" tutorial as if it were production. Opening the validator set — the runtime caps Aura and GRANDPA at 32 authorities — is the structural change everything else waits on. The plan for it is written; the recruitment is the work.

BEEFY and MMR

The runtime also includes BEEFY and an MMR (Merkle Mountain Range). They exist so that light clients and bridges can verify EmpoorioChain finality with compact proofs — Eoonia's light-client protocol depends on them. They do not replace GRANDPA as the finality users see. If a document tells you otherwise, GRANDPA is right and the document is stale.

What is not in production

The repository contains research implementations of DAG-based ordering and HotStuff-family consensus under runtime/src/consensus. They are not wired into the node service, have no multi-node tests, no rollback plan and no production metrics. The documented rule is that none of them may be described as active until all of those exist. They are a roadmap, and roadmaps are not consensus.

Based on CONSENSUS_STATUS.md, RED.json (validator count) and the 2026-05-30 testnet performance report.

Share this article