Introduction to Flow blockchain — part 3
In the previous post we examined the process of creating blocks. In this post we will continue to build on what we learned and expand our understanding of the block lifecycle.
Blockchain Forks
We need to understand why and how can the blockchain fork, to understand why block finalization is important.
The flow protocol blockchain can fork in 3 scenarios.
1) Consensus leader did not receive latest block.
💡 ? in the diagram represents a decision consensus node needs to make when it sees a fork in the blockchain, called fork-choice rule. HotStuff algorithm provides some level of freedom here, in Flow we choose the “newest fork” (i.e. the fork whose QC has the largest view).
2) Consensus leader does not receive votes with sufficient weight to create a Quorum Certificate (QC). Same as the diagram above, but instead of not receiving block B2a, the consensus leader D does not receive sufficient votes to form QC for block B2a. In this case the consensus leader D will propose a block based on the last block for which a QC is committed to the chain.
3) Malicious consensus leader builds a block from a parent block which isn’t the latest. The malicious node might do this for multiple reasons, for example to exclude transactions it does not want to be executed.
Now that we understand the blockchain forking, we can look at the block finalization.
Block Finalization
Finalization is an important concept in building the Flow blockchain — it means that the consensus has committed to this block and it is guaranteed to remain on the chain.
For the client that submitted a transaction that is included in a finalized block, it is a guarantee that the transaction is committed to the chain and will be executed.
The finalization of a block is important for the nodes that participate in the network, because when a block is finalized it means that they can throw away any fork that does not contain the finalized block.
This post completes the majority of the block and transaction lifecycle. To talk about the final step — block sealing, we need to look at data storage first. Stay tuned for the next post!