Home

Awesome

<p align="center"> <img src="https://user-images.githubusercontent.com/47108/78779352-d0839500-796a-11ea-9468-fd2a0b3fe1ef.png" width=280> </p>

EthereumJS Monorepo

Code Coverage Discord GitPOAP

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 MPT (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.

packagenpmissuestestscoverage
@ethereumjs/blockNPM PackageBlock IssuesActions StatusCode Coverage
@ethereumjs/blockchainNPM PackageBlockchain IssuesActions StatusCode Coverage
@ethereumjs/clientNPM PackageClient IssuesActions StatusCode Coverage
@ethereumjs/commonNPM PackageCommon IssuesActions StatusCode Coverage
@ethereumjs/devp2pNPM PackageDevp2p IssuesActions StatusCode Coverage
@ethereumjs/ethashNPM PackageEthash IssuesActions StatusCode Coverage
@ethereumjs/evmNPM PackageEVM IssuesActions StatusCode Coverage
@ethereumjs/genesisNPM PackageGenesis IssuesActions StatusCode Coverage
@ethereumjs/rlpNPM Packagerlp IssuesActions StatusCode Coverage
@ethereumjs/statemanagerNPM PackageStateManager IssuesActions StatusCode Coverage
@ethereumjs/mptNPM PackageMPT IssuesActions StatusCode Coverage
@ethereumjs/txNPM PackageTx IssuesActions StatusCode Coverage
@ethereumjs/utilNPM PackageUtil IssuesActions StatusCode Coverage
@ethereumjs/verkleNPM PackageVM IssuesActions StatusCode Coverage
@ethereumjs/vmNPM PackageVM IssuesActions StatusCode Coverage
@ethereumjs/walletNPM PackageStateManager IssuesActions StatusCode Coverage

Branches

The following are our currently active branches:

BranchRelease SeriesStatus Description
masterUpcoming (Autumn 2024)DevelopBreaking release work
maintenance-v8v7/v8MaintenanceMaintenance for v8 releases (v7 also included)
maintenance-v6v6MaintenanceMaintenance for v6 releases

Breaking releases are mostly done in sync for all libraries (latest exceptions: VM v8, EVM v3), and release cycles are currently named after the @ethereumjs/vm version. In most cases PRs should be opened towards the current working branch. If there is no current working branch, please ask! 🙂

To inspect code related to a specific package version, refer to the tags.

Coverage report

Detailed version can be seen on Codecov.io

Code Coverage

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
   mpt --> client
   mpt --> vm
   mpt --> blockchain
   mpt --> block
   mpt --> statemanager
   util --> common
   common --> block
   common --> statemanager
   common --> tx
   common --> blockchain
   common --> vm
   common --> evm
   common --> client
   common --> devp2p
   common --> genesis
   evm --> vm
   evm --> client
   genesis --> client
   genesis --> statemanager
   genesis --> mpt
   tx --> block
   tx --> vm
   tx --> client
   vm --> client
   rlp --> util
   statemanager --> evm
   statemanager --> vm
   statemanager --> client

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.