nealsun / ethereumjs-vm

The Ethereum VM implemented in JavaScript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

EthereumJS Monorepo

Code Coverage Discord JS Standard Style

This was originally the EthereumJS VM repository. On Q1 2020 we brought some of its building blocks together to simplify development. Below you can find the packages included in this repository.

🚧 Please note that the master branch is updated on a daily basis, and to inspect code related to a specific package version, refer to the tags.

package npm issues tests coverage
@ethereumjs/account NPM Package Account Issues Actions Status Code Coverage
@ethereumjs/block NPM Package Block Issues Actions Status Code Coverage
@ethereumjs/blockchain NPM Package Blockchain Issues Actions Status Code Coverage
@ethereumjs/common NPM Package Common Issues Actions Status Code Coverage
@ethereumjs/ethash NPM Package Ethash Issues Actions Status Code Coverage
@ethereumjs/tx NPM Package Tx Issues Actions Status Code Coverage
@ethereumjs/vm NPM Package VM Issues Actions Status Code Coverage

Coverage report

Detailed version can be seen on Codecov.io

Code Coverage

Package dependency relationship

diagram

Development quick start

This monorepo uses Lerna. It links the local packages together, making development a lot easier.

TLDR: Setup

npm install
npm build

TLDR: To update dependencies and (re-)link packages

npm run bootstrap
npm build

Above is the quickest way to set you up. Going down the road, there are two sets of commands: project and package-specific commands. You can find them at ./package.json and ./packages/*/package.json, respectively. Here's a breakdown:

Project scripts — run from repository root

npm install

Adds dependencies listed in the root package. Also, it executes the bootstrap script described below, installing all sub-packages dependencies.

npm run bootstrap

Installs dependencies for all sub-packages, and links them to create an integrated development environment.

npm run build

Produces dist files for all sub-packages. This command can be scoped.

npm run build:tree -- --scope @ethereumjs/blockchain

Builds all local packages that the provided package (eg: @ethereumjs/blockchain) depends on, and itself. This unusual syntax just means: pass whatever arguments are after -- to the underlying script.

If no scope is provided, npm run build:tree, will build all sub-packages.

Package scripts — run from ./packages/<name>

⚠️ Important: if you run npm install from the package directory, it will remove all links to the local packages, pulling all dependencies from npm. Run npm install from the root only.

There's a set of rather standardized commands you will find in each package of this repository.

npm run build

Uses TypeScript compiler to build files from src or lib. Files can be found at packages/<name>/dist.

npm run coverage

Runs whatever is on npm run test script, capturing coverage information. By the end, it displays a coverage table. Additional reports can be found at packages/<name>/coverage.

npm run docs:build

Generates package documentation and outputs it to ./packages/<name>/docs.

npm run lint

Checks code style according to the rules defined in ethereumjs-config.

npm run lint:fix

Fixes code style according to the rules.

npm run test

Runs all package tests. Note that the VM has several test scopes - refer to packages/vm/package.json for more info.

npm run clean

Removes root and package node_modules directories. Useful to run before npm i for a fresh install.

Going further

As this project is powered by Lerna, you can install it globally to enjoy lots more options. Refer to Lerna docs for additional commands.

  • npm install -g lerna
  • lerna run
  • lerna exec

Cleaning node_modules

Hoisting is enabled so dependencies are moved to the root node_modules. lerna clean does not remove the root node_modules so for convenience you can use the project script npm run clean.

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 do improvements on the libraries have a look at our contribution guidelines.

LICENSE

MIT

About

The Ethereum VM implemented in JavaScript


Languages

Language:TypeScript 71.7%Language:JavaScript 27.3%Language:Shell 0.7%Language:Python 0.3%Language:Solidity 0.1%Language:HTML 0.0%