In the last update, I talked about my progress in understanding how blocks are processed. With guidance from Ethan at Status-IM, I was able to pinpoint the key function responsible for handling blocks: proc addResolvedHeadBlock in block_processor.nim. In this detailed update, we will delve deeper into this function and the components related to it.
The focus of our exploration is the dag parameter, which is of type ChainDAGRef. ChainDAG is a critical concept in our blockchain processing. It initially stores a linear history of blocks, starting from the genesis block and extending to a certain point. Beyond this point, it allows for branching, creating a Directed Acyclic Graph (DAG) structure. Among these branches, one is considered the "canonical chain." This canonical chain represents the official and accepted history of the blockchain network. Branching and the selection of a canonical chain can occur due to factors like consensus forks.
Now, let's understand how everything fits together. One of the elements of type ChainDAGRef is BeaconChainDB, which is a vital part of our blockchain processing.
block_clearance.nim - Line 60
In the code, you'll see a line where dag.putBlock(trustedBlock)
is used. To demystify this, let's break down the components involved:
dag: This is a reference to ChainDAG, responsible for storing and handling the blocks in a database.
putBlock: It is a procedure of dag, which is part of BeaconChainDB in ChainDAGRef. It is used to put a block into the database.
Understanding trustedBlock
trustedBlock: This is of type ForkyTrustedSignedBeaconBlock. It represents a beacon block that has been signed, making it a reliable and valid block in the blockchain.
beacon_chain_db.nim
putSnappySSZ
- line 745
putSZSSZ
- line 762
thoughts
This is where the writes are added to an append-only log file.
The initial challenge I faced with the language server in VS Code has been resolved. I utilized the nimbus-build-system present in the nimbus-eth2 repository. This solution was explained in a video released by Codex Storage.
Lastly, I stumbled upon an intriguing book that I believe will be of interest to those looking to start their journey in computer programming with Nim. You can find it at the following link: Nim Programming Book. It's a valuable resource for anyone eager to dive into Nim programming.