EthereumJS Monorepo
This repository holds various protocol building blocks of the Ethereum blockchain execution layer and is managed by the Ethereum Foundation JavaScript team. There is a TypeScript implementation of the Ethereum Virtual Machine (EVM) ready to be used in Node.js or a browser environment, implementations of core structural blockchain building blocks like an Ethereum Tx, Block or Blockchain as well as a Trie (Merkle Patricia Tree) and devp2p (execution networking layer) implementation.
All libraries are bound together by the core Common library keeping track of chain specifics and hardfork changes. They are complemented by helper packages like RLP for data encoding/decoding or Util, providing helper functionalities like (byte) conversion, signatures, types and others.
Finally, the EthereumJS Execution Client (EthereumJS) has been in active development for some time now. It already serves a variety of purposes like testing, research (e.g. EIPs) and developer tooling to engage with the protocol.
Also to note: on the Ethereum Consensus side, the ChainSafe Lodestar repository complements this repository with an Ethereum Consensus Client implementation as well as various protocol implementations (like an SSZ library) developed in the context of Ethereum Consensus layer evolution.
Packages
Below you can find a list of the packages included in this repository.
Branches
The following are our currently active branches:
Branch | Release Series | Status | Â Description |
---|---|---|---|
master | v7 | Active |
Upcoming v7 release branch (see Issue #2561) |
maintenance-v6 | v6 | Maintenance |
Maintenance for v6 releases (current) |
Note: For this last weeks before our upcoming v7 breaking release series (~July 2023) we use our master
branch for final v7 development and have side-pushed current release series (v6) maintenance to a separate maintenance-v6
branch.
Breaking releases are done in sync for all libraries, and release cycles are named after the @ethereumjs/vm
version. In most cases PRs should be opened towards the current working branch.
To inspect code related to a specific package version, refer to the tags.
Coverage report
Detailed version can be seen on Codecov.io
Package dependency relationship
graph TD
vm{vm}
client{client}
ethash --> blockchain
ethash --> client
devp2p --> client
block --> client
block --> blockchain
block --> ethash
block --> vm
blockchain --> client
blockchain --> vm
trie --> client
trie --> vm
trie --> blockchain
trie --> block
trie --> statemanager
common --> block
common --> statemanager
common --> tx
common --> blockchain
common --> vm
common --> evm
common --> client
common --> devp2p
evm --> vm
evm --> client
tx --> block
tx --> vm
vm --> client
statemanager --> vm
To update the diagram above edit the README file and open a new PR with the changes.
Getting Started
See our monorepo documentation to get started on setting up the repository and installing dependencies. The config folder gives an overview on shared configuration and scripts between packages.
EthereumJS
See our organizational documentation for an introduction to EthereumJS
as well as information on current standards and best practices. If you want to join for work or carry out improvements on the libraries, please review our contribution guidelines first.
License
Most packages are MPL-2.0 licensed, see package folder for the respective license.