Episode 15 - Block Finality
When a centralized system stores all the data, it is pretty straight forward to find out the “final” state of data at a particular point in time. Whatever the centralized system has committed to the storage is deemed final. However, when it comes to decentralized systems, it is not that straight forward to determine the final state of data.
In a blockchain, transactions are proposed by calling functions on one of the nodes. They are then broadcasted among other nodes and included in a forthcoming block when one of these nodes chooses to do so. Once included in a block, the transactions, along with the whole block, are verified and committed to the state of the blockchain by all the nodes.
This entire process from the proposal of a block to getting it committed to the blockchain takes some time. Also, blockchain nodes are generally not located at the same place, they communicate with each other via the internet. This also causes network delays in the sharing and replication of block data among all the nodes in the network.
Because of these two reasons —time taken by the block production process and network delays — not all the nodes have exactly the same state all the time. For example, when the block with number 5 is proposed by one of the nodes, some other nodes might be having blocks 2 or 3or 4 as their final state. Block 5 might reach all the nodes after some time (a few seconds or even minutes if they have slower bandwidth). There could also be scenarios of temporary forks when a subset of nodes starts building the chain on a different block and when these sub-chains merge some of the intermediate blocks become irrelevant/invalid.
This is why the concept of block finality becomes important. The finality of a block means that the majority of the nodes in a blockchain network have verified and accepted that block and their state has been updated accordingly. Finality assures that the transactions included in a block will not become invalid because of any reason.
Finality could be of following three types:
Probabilistic Finality: When a convention is followed about finality. For example, in the Bitcoin blockchain, a block is considered final when 6 more blocks have been added to the chain on top of it.
Deterministic Finality: When an algorithm is used to determine the finality of blocks. This is a novel approach that some blockchains use to get faster and more reliable finality.
Instant Finality: There are some consensus algorithms that work in such a way that any block produced is considered final. Finality is achieved as soon as the block is produced.