GRANDPA Finality
GRANDPA operates independently of block production, providing deterministic finality through a voting process on chains rather than individual blocks. Validators participate in two rounds of voting:


Pre-vote Round
Validators broadcast pre-votes for the highest block they consider valid: Prevote_i = Sign_{sk_i}(GRANDPA_PREVOTE, BlockHash, RoundNumber)
The pre-vote includes the block hash and round number, signed with the validator's private key. Signature verification takes approximately 500 microseconds using SR25519 signatures .

Pre-commit Round
After collecting pre-votes, validators determine the highest block with 2/3 pre-vote support and broadcast pre-commits: Precommit_i = Sign_{sk_i}(GRANDPA_PRECOMMIT, BlockHash, RoundNumber) When 2/3 of validators pre-commit to a block, it becomes finalized, along with all its ancestors.
The protocol tolerates up to f < n/3 Byzantine validators, where n is the total number of validators. BABE continues producing blocks even during network partitions, while GRANDPA ensures finality only when 2/3 of validators can communicate.
Network latency is modeled as: Finality_Latency = Voting_Rounds × (Network_Delay + Processing_Time) With typical network delays of 100-200ms and processing time of 2ms, finality is achieved in 1-2 seconds under normal conditions.
