Dependency Graph
Lodestar monorepo dependency graph
This is a diagram of the various lodestar-*
packages in the Lodestar monorepo and how they fit together:
note: this dependency graph only applies to dependencies as they are used in the src/
folders of each package, not in test/
For a list of all the packages in the monorepo and a description for each, click here.
Let's talk about how each package fits together in finer detail, from top to bottom, following the chart.
@lodestar/params
@lodestar/params contains the parameters for configuring an Ethereum Consensus network. For example, the mainnet params
@lodestar/types
@lodestar/types contains Ethereum Consensus ssz types and data structures.
@lodestar/config
@lodestar/config combines @lodestar/params
and @lodestar/types
together to be used as a single config object across the other Lodestar packages.
@lodestar/utils
@lodestar/utils contains various utilities that are common among the various Lodestar monorepo packages.
@lodestar/state-transition
@lodestar/state-transition contains the Lodestar implementation of the beacon state transition function, which is used by @lodestar/beacon-node
to perform the actual beacon state transition. This package also contains various functions used to calculate info about the beacon chain (such as computeEpochAtSlot
) which are used by @lodestar/fork-choice
and @lodestar/validator
@lodestar/db
@lodestar/db is where all persistent data about the beacon node is stored. Any package that needs to read or write persistent beacon node data depends on lodestar-db
.
@lodestar/fork-choice
@lodestar/fork-choice holds the methods for reading/writing the fork choice DAG. The @lodestar/beacon-node
package is the sole consumer of this package because the beacon node itself is what controls when the fork choice DAG is updated.
For a good explanation on how the fork choice itself works, see the annotated fork choice spec. This is an annotated version of the Ethereum Consensus fork choice spec which lodestar-fork-choice
is based on.
@lodestar/validator
@lodestar/validator contains the validator client. The sole consumer of this package is @chainsafe/lodestar
, which provides CLI access to run and configure the validator client. However, the validator client communicates to a REST API that is contained in @lodestar/beacon-node
(specifically in the api
module) to perform the validator duties.
@lodestar/beacon-node
@lodestar/beacon-node contains the actual beacon node process itself, which is the aggregate of all the above packages and the "brain" of the Lodestar beacon chain implementation. All of the node modules live in this package as well.
@chainsafe/lodestar
@chainsafe/lodestar combines everything together for CLI usage and configuration of the beacon node and validator.