Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

develop: esm support #1936

Closed
wants to merge 52 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
a5fbda3
VM: Make CodeHashes have a DB prefix in StateManager (#1438)
jochem-brouwer Sep 2, 2021
10b66a3
Util: Remove `assert` in favor of simply throwing `Errors` (#1638)
steveluscher Jan 18, 2022
5472158
Common, VM: Remove unused HF options from Common, move supportedHardf…
emersonmacro Jan 21, 2022
f5e63d1
Common: method deprecations (new) (#1698)
ScottyPoi Feb 8, 2022
d884e93
Common: Rename *BN methods to non-BN names (#1709)
ScottyPoi Feb 11, 2022
2662444
Upgrade ethereum-cryptography to 1.0. (#1714)
paulmillr Feb 21, 2022
8db625b
VM: Replace BN.js with bigints, Util helpers (#1671)
acolytec3 Feb 22, 2022
066ff05
monorepo: develop rebase 2022-02-23 fixes
holgerd77 Feb 23, 2022
6699974
Tx: Execute on deprecation notes (#1742)
ScottyPoi Feb 24, 2022
27447b3
Monorepo: Set default hardfork to London (#1749)
holgerd77 Feb 28, 2022
275dfc8
Block: deprecation tasks (#1752)
emersonmacro Feb 28, 2022
e6c5692
Common, Block: remove and rename ambiguous active methods (#1753)
emersonmacro Mar 1, 2022
deef2d0
vm: reintroduce modifyAccountFields (#1763)
ryanio Mar 4, 2022
90ff202
Develop Rebase Fixes (2022-03-05)
holgerd77 Mar 5, 2022
df169ff
Monorepo: Rebuild package-lock.json
holgerd77 Mar 5, 2022
8dfa78c
develop: fix client parse, move modifyAccountFields to baseStateManag…
ryanio Mar 8, 2022
f2243ae
Convert bn to bigint (#1771)
holgerd77 Mar 14, 2022
a5ad034
refactor: unify constructor input types and refactor defaults to clas…
gabrocheleau Mar 15, 2022
21a42bf
util: remove object.ts (#1809)
acolytec3 Mar 23, 2022
8118ffa
VM: rebase fixes
holgerd77 Mar 24, 2022
5483ddb
Client: rebase fixes
holgerd77 Mar 24, 2022
ad22469
Fix missing = sign
acolytec3 Mar 24, 2022
048e68a
Revert process code changes
acolytec3 Mar 24, 2022
4224100
VM, Blockchain, Client: fix storing unsettled promises (develop) (#1811)
ryanio Apr 2, 2022
72475ad
vm, client: continuing v6 breaking changes (#1815)
ryanio Apr 2, 2022
a1645db
Implement EIP3074: Authcall (#1789)
jochem-brouwer Apr 4, 2022
b8c4732
util: move misplaced functions (#1825)
acolytec3 Apr 4, 2022
54acfe1
Blockchain, Client, VM: Head function rename rebase (#1822)
acolytec3 Apr 5, 2022
f8c5d0f
develop: ci fix, some last backwards compatibility removals (#1834)
ryanio Apr 5, 2022
be072a2
Develop rebase fixes (2022-04-07)
acolytec3 Apr 6, 2022
6ff409e
vm: extract statemanager to own package (#1817)
g11tech Apr 13, 2022
eccc50b
Blockchain: encapsulate consensus mechanism (new) (#1841)
holgerd77 Apr 14, 2022
66aa7bd
Develop rebase fixes (2022-05-04)
g11tech Apr 30, 2022
441e3d9
trie: convert constructor to options interface, remove deprecated set…
ryanio May 2, 2022
2fd2f48
util: replace hash module with ethereum-cryptography (#1859)
emersonmacro May 4, 2022
7168c41
vm: Improve `skipBalance` logic (#1849)
acolytec3 May 4, 2022
6df7b56
Migrate `common.param` (and friends) to return `BigInt` (#1854)
acolytec3 May 4, 2022
9f5824d
rlp: v3 integration for monorepo packages (#1662)
ryanio May 12, 2022
44dac5b
blockchain: fix iterator return type, reinstate tests (#1877)
ScottyPoi May 13, 2022
66f8779
EVM/VM refactor (#1892)
gabrocheleau May 23, 2022
9e98dc8
Common type safety (#1906)
acolytec3 May 26, 2022
5bf632b
Common refactor (#1915)
acolytec3 May 27, 2022
961a5c5
refactor(trie): abstract database implementation with an interface (#…
faustbrian May 27, 2022
7765b7e
Tx: Throw when hash() is called on unsigned legacy transaction (#1894)
ScottyPoi May 31, 2022
e0a659d
common/blockchain genesis refactor (#1916)
ryanio May 31, 2022
d62b7f4
develop: small fixes (#1924)
ryanio Jun 3, 2022
a7b1648
Update EIP 3074 AUTHCALL (#1867)
jochem-brouwer Jun 3, 2022
538f6dc
esm: updates to config files
ryanio Jun 5, 2022
727e505
esm: updates to src and test files [no ci]
ryanio Jun 5, 2022
3557a9b
vm: get more tests passing
ryanio Jun 6, 2022
514c15a
client: get more tests passing
ryanio Jun 6, 2022
5dc8aec
try requiring bigint-crypto-utils to solve errors, fix json usage in …
ryanio Jun 6, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .github/workflows/e2e-hardhat.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
name: E2E Hardhat Tests
on:
push:
branches: [master, develop]
branches: [master]
tags: ['*']
pull_request:
branches: [master]
types: [opened, reopened, synchronize]

env:
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/node-versions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@ jobs:
run: npm run test
working-directory: packages/util

- name: Test StateManager
run: npm run test
working-directory: packages/statemanager

- name: Test VM
run: npm run test:API
working-directory: packages/vm
Expand Down
47 changes: 47 additions & 0 deletions .github/workflows/statemanager-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: StateManager
on:
push:
branches: [master, develop]
tags: ['*']
pull_request:
types: [opened, reopened, synchronize]

env:
cwd: ${{github.workspace}}/packages/statemanager

defaults:
run:
working-directory: packages/statemanager

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
test-statemanager:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16]
steps:
- uses: actions/checkout@v2
with:
submodules: recursive

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'

- run: npm i
working-directory: ${{github.workspace}}

- run: npm run lint
- run: npm run coverage

- uses: codecov/codecov-action@v2
with:
files: ${{ env.cwd }}/coverage/lcov.info
flags: statemanager
if: ${{ matrix.node-version == 16 }}
5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,8 @@ jspm_packages/
# parcel-bundler cache (https://parceljs.org/)
.cache

# generate output
dist
dist.browser
# generated output
dist*

# Gatsby files
.cache/
Expand Down
44 changes: 29 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,20 @@ This was originally the EthereumJS VM repository. In Q1 2020 we brought some of

🚧 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](https://github.com/ethereumjs/ethereumjs-monorepo/tags).

| package | npm | issues | tests | coverage |
| -------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------- | ---------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [@ethereumjs/block][block-package] | [![NPM Package][block-npm-badge]][block-npm-link] | [![Block Issues][block-issues-badge]][block-issues-link] | [![Actions Status][block-actions-badge]][block-actions-link] | [![Code Coverage][block-coverage-badge]][block-coverage-link] |
| [@ethereumjs/blockchain][blockchain-package] | [![NPM Package][blockchain-npm-badge]][blockchain-npm-link] | [![Blockchain Issues][blockchain-issues-badge]][blockchain-issues-link] | [![Actions Status][blockchain-actions-badge]][blockchain-actions-link] | [![Code Coverage][blockchain-coverage-badge]][blockchain-coverage-link] |
| [@ethereumjs/client][client-package] | [![NPM Package][client-npm-badge]][client-npm-link] | [![Client Issues][client-issues-badge]][client-issues-link] | [![Actions Status][client-actions-badge]][client-actions-link] | [![Code Coverage][client-coverage-badge]][client-coverage-link] |
| [@ethereumjs/common][common-package] | [![NPM Package][common-npm-badge]][common-npm-link] | [![Common Issues][common-issues-badge]][common-issues-link] | [![Actions Status][common-actions-badge]][common-actions-link] | [![Code Coverage][common-coverage-badge]][common-coverage-link] |
| [@ethereumjs/devp2p][devp2p-package] | [![NPM Package][devp2p-npm-badge]][devp2p-npm-link] | [![Devp2p Issues][devp2p-issues-badge]][devp2p-issues-link] | [![Actions Status][devp2p-actions-badge]][devp2p-actions-link] | [![Code Coverage][devp2p-coverage-badge]][devp2p-coverage-link] |
| [@ethereumjs/ethash][ethash-package] | [![NPM Package][ethash-npm-badge]][ethash-npm-link] | [![Ethash Issues][ethash-issues-badge]][ethash-issues-link] | [![Actions Status][ethash-actions-badge]][ethash-actions-link] | [![Code Coverage][ethash-coverage-badge]][ethash-coverage-link] |
| [merkle-patricia-tree][trie-package] | [![NPM Package][trie-npm-badge]][trie-npm-link] | [![Trie Issues][trie-issues-badge]][trie-issues-link] | [![Actions Status][trie-actions-badge]][trie-actions-link] | [![Code Coverage][trie-coverage-badge]][trie-coverage-link] |
| [rlp][rlp-package] | [![NPM Package][rlp-npm-badge]][rlp-npm-link] | [![rlp Issues][rlp-issues-badge]][rlp-issues-link] | [![Actions Status][rlp-actions-badge]][rlp-actions-link] | [![Code Coverage][rlp-coverage-badge]][rlp-coverage-link] |
| [@ethereumjs/tx][tx-package] | [![NPM Package][tx-npm-badge]][tx-npm-link] | [![Tx Issues][tx-issues-badge]][tx-issues-link] | [![Actions Status][tx-actions-badge]][tx-actions-link] | [![Code Coverage][tx-coverage-badge]][tx-coverage-link] |
| [ethereumjs-util][util-package] | [![NPM Package][util-npm-badge]][util-npm-link] | [![Util Issues][util-issues-badge]][util-issues-link] | [![Actions Status][util-actions-badge]][util-actions-link] | [![Code Coverage][util-coverage-badge]][util-coverage-link] |
| [@ethereumjs/vm][vm-package] | [![NPM Package][vm-npm-badge]][vm-npm-link] | [![VM Issues][vm-issues-badge]][vm-issues-link] | [![Actions Status][vm-actions-badge]][vm-actions-link] | [![Code Coverage][vm-coverage-badge]][vm-coverage-link] |
| package | npm | issues | tests | coverage |
| ------------------------------------------------ | --------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| [@ethereumjs/block][block-package] | [![NPM Package][block-npm-badge]][block-npm-link] | [![Block Issues][block-issues-badge]][block-issues-link] | [![Actions Status][block-actions-badge]][block-actions-link] | [![Code Coverage][block-coverage-badge]][block-coverage-link] |
| [@ethereumjs/blockchain][blockchain-package] | [![NPM Package][blockchain-npm-badge]][blockchain-npm-link] | [![Blockchain Issues][blockchain-issues-badge]][blockchain-issues-link] | [![Actions Status][blockchain-actions-badge]][blockchain-actions-link] | [![Code Coverage][blockchain-coverage-badge]][blockchain-coverage-link] |
| [@ethereumjs/client][client-package] | [![NPM Package][client-npm-badge]][client-npm-link] | [![Client Issues][client-issues-badge]][client-issues-link] | [![Actions Status][client-actions-badge]][client-actions-link] | [![Code Coverage][client-coverage-badge]][client-coverage-link] |
| [@ethereumjs/common][common-package] | [![NPM Package][common-npm-badge]][common-npm-link] | [![Common Issues][common-issues-badge]][common-issues-link] | [![Actions Status][common-actions-badge]][common-actions-link] | [![Code Coverage][common-coverage-badge]][common-coverage-link] |
| [@ethereumjs/devp2p][devp2p-package] | [![NPM Package][devp2p-npm-badge]][devp2p-npm-link] | [![Devp2p Issues][devp2p-issues-badge]][devp2p-issues-link] | [![Actions Status][devp2p-actions-badge]][devp2p-actions-link] | [![Code Coverage][devp2p-coverage-badge]][devp2p-coverage-link] |
| [@ethereumjs/ethash][ethash-package] | [![NPM Package][ethash-npm-badge]][ethash-npm-link] | [![Ethash Issues][ethash-issues-badge]][ethash-issues-link] | [![Actions Status][ethash-actions-badge]][ethash-actions-link] | [![Code Coverage][ethash-coverage-badge]][ethash-coverage-link] |
| [merkle-patricia-tree][trie-package] | [![NPM Package][trie-npm-badge]][trie-npm-link] | [![Trie Issues][trie-issues-badge]][trie-issues-link] | [![Actions Status][trie-actions-badge]][trie-actions-link] | [![Code Coverage][trie-coverage-badge]][trie-coverage-link] |
| [rlp][rlp-package] | [![NPM Package][rlp-npm-badge]][rlp-npm-link] | [![rlp Issues][rlp-issues-badge]][rlp-issues-link] | [![Actions Status][rlp-actions-badge]][rlp-actions-link] | [![Code Coverage][rlp-coverage-badge]][rlp-coverage-link] |
| [@ethereumjs/statemanager][statemanager-package] | [![NPM Package][statemanager-npm-badge]][statemanager-npm-link] | [![StateManager Issues][statemanager-issues-badge]][statemanager-issues-link] | [![Actions Status][statemanager-actions-badge]][statemanager-actions-link] | [![Code Coverage][statemanager-coverage-badge]][statemanager-coverage-link] |
| [@ethereumjs/tx][tx-package] | [![NPM Package][tx-npm-badge]][tx-npm-link] | [![Tx Issues][tx-issues-badge]][tx-issues-link] | [![Actions Status][tx-actions-badge]][tx-actions-link] | [![Code Coverage][tx-coverage-badge]][tx-coverage-link] |
| [ethereumjs-util][util-package] | [![NPM Package][util-npm-badge]][util-npm-link] | [![Util Issues][util-issues-badge]][util-issues-link] | [![Actions Status][util-actions-badge]][util-actions-link] | [![Code Coverage][util-coverage-badge]][util-coverage-link] |
| [@ethereumjs/vm][vm-package] | [![NPM Package][vm-npm-badge]][vm-npm-link] | [![VM Issues][vm-issues-badge]][vm-issues-link] | [![Actions Status][vm-actions-badge]][vm-actions-link] | [![Code Coverage][vm-coverage-badge]][vm-coverage-link] |

## Coverage report

Expand All @@ -47,6 +48,7 @@ Detailed version can be seen on [Codecov.io][coverage-link]
trie --> client
trie --> vm
trie --> block
trie --> blockchain
common --> block
common --> blockchain
common --> tx
Expand All @@ -56,9 +58,12 @@ Detailed version can be seen on [Codecov.io][coverage-link]
tx --> block
tx --> vm
vm --> client
```
statemanager --> vm
common --> statemanager
trie --> statemanager
```

To update the diagram above edit the README file and open a new PR with the changes.
To update the diagram above edit the README file and open a new PR with the changes.

## Getting Started

Expand Down Expand Up @@ -170,6 +175,15 @@ Most packages are [MPL-2.0](<https://tldrlegal.com/license/mozilla-public-licens
[util-actions-link]: https://github.com/ethereumjs/ethereumjs-monorepo/actions?query=workflow%3A%22Util%22
[util-coverage-badge]: https://codecov.io/gh/ethereumjs/ethereumjs-monorepo/branch/master/graph/badge.svg?flag=util
[util-coverage-link]: https://codecov.io/gh/ethereumjs/ethereumjs-monorepo/tree/master/packages/util
[statemanager-package]: ./packages/statemanager
[statemanager-npm-badge]: https://img.shields.io/npm/v/@ethereumjs/statemanager.svg
[statemanager-npm-link]: https://www.npmjs.com/package/@ethereumjs/statemanager
[statemanager-issues-badge]: https://img.shields.io/github/issues/ethereumjs/ethereumjs-monorepo/package:%20statemanager?label=issues
[statemanager-issues-link]: https://github.com/ethereumjs/ethereumjs-monorepo/issues?q=is%3Aopen+is%3Aissue+label%3A"package%3A+statemanager"
[statemanager-actions-badge]: https://github.com/ethereumjs/ethereumjs-monorepo/workflows/StateManager/badge.svg
[statemanager-actions-link]: https://github.com/ethereumjs/ethereumjs-monorepo/actions?query=workflow%3A%22StateManager%22
[statemanager-coverage-badge]: https://codecov.io/gh/ethereumjs/ethereumjs-monorepo/branch/master/graph/badge.svg?flag=statemanager
[statemanager-coverage-link]: https://codecov.io/gh/ethereumjs/ethereumjs-monorepo/tree/master/packages/statemanager
[vm-package]: ./packages/vm
[vm-npm-badge]: https://img.shields.io/npm/v/@ethereumjs/vm.svg
[vm-npm-link]: https://www.npmjs.com/package/@ethereumjs/vm
Expand Down
54 changes: 32 additions & 22 deletions config/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,15 @@ Exposed CLI commands:

### Usage

Add `.eslintrc.js`:
Add `.eslintrc.cjs`:

```js
module.exports = {
extends: '../../config/eslint.js',
}
module.exports = { extends: '../../config/eslint.cjs' }
```

In this file you can add rule adjustments or overrides for the specific package.

Add `prettier.config.js`:
Add `prettier.config.cjs`:

```js
module.exports = require('../../config/prettier.config')
Expand Down Expand Up @@ -110,26 +108,28 @@ Add `tsconfig.json`:
}
```

Add `tsconfig.prod.json`:
Add `tsconfig.esm.json`:

```json
{
"extends": "../../config/tsconfig.prod.json",
"extends": "../../config/tsconfig.esm.json",
"include": ["src/**/*.ts"],
"compilerOptions": {
"outDir": "./dist"
"outDir": "./dist/esm"
}
}
```

Add `tsconfig.browser.json`:
Add `tsconfig.cjs.json`:

```json
{
"extends": "../../config/tsconfig.browser.json",
"extends": "./tsconfig.esm.json",
"include": ["src/**/*.ts"],
"compilerOptions": {
"outDir": "./dist.browser"
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./dist/cjs"
}
}
```
Expand All @@ -145,25 +145,35 @@ Use CLI commands above in your `package.json`:
}
```

The default production target is ES2017. To support shipping the ES5 target for browsers, add to your `package.json`:
Add to your `package.json`:

```json
"main": "dist/index.js",
"types": "dist/index.d.ts",
"browser": "dist.browser/index.js",
"files": [
"dist",
"dist.browser"
]
"main": "./dist/cjs/index.js",
"types": "./dist/types/index.d.ts",
"browser": "./dist/esm/index.js",
"exports": {
".": {
"import": "./dist/esm/index.js",
"require": "./dist/cjs/index.js",
"types": "./dist/types/index.d.ts",
"browser": "./dist/esm/index.js"
},
"./dist/*": {
"import": "./dist/esm/*",
"require": "./dist/cjs/*",
"types": "./dist/types/*",
"browser": "./dist/esm/*"
}
},
```

## Documentation

Add `typedoc.js` to a package that extends the generic TypeDoc configuration:
Add `typedoc.cjs` to a package that extends the generic TypeDoc configuration:

```js
module.exports = {
extends: '../../config/typedoc.js',
export default {
extends: '../../config/typedoc.cjs',
// Additional directives
}
```
4 changes: 2 additions & 2 deletions config/cli/lint-fix.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ dim() {
echo "${DIM}$1${NOCOLOR}"
}

dim "> eslint --fix --config ./.eslintrc.js . \\ "
dim "> eslint --fix --config ./.eslintrc.cjs . \\ "
dim "\t --ext .js,.jsx,.ts,.tsx \\ "

blue "[Lint]${NOCOLOR} fixing..."

eslint --fix --config ./.eslintrc.js . --ext .js,.jsx,.ts,.tsx
eslint --fix --config ./.eslintrc.cjs . --ext .js,.jsx,.ts,.tsx

RETURN_CODE=$?

Expand Down
4 changes: 2 additions & 2 deletions config/cli/lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ dim() {
echo "${DIM}$1${NOCOLOR}"
}

dim "> eslint --format codeframe --config ./.eslintrc.js . \\ "
dim "> eslint --format codeframe --config ./.eslintrc.cjs . \\ "
dim "\t --ext .js,.jsx,.ts,.tsx \\ "

blue "[Lint]${NOCOLOR} checking..."

eslint --format codeframe --config ./.eslintrc.js . --ext .js,.jsx,.ts,.tsx
eslint --format codeframe --config ./.eslintrc.cjs . --ext .js,.jsx,.ts,.tsx

RETURN_CODE=$?

Expand Down
55 changes: 16 additions & 39 deletions config/cli/ts-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
set -e
# Purposefully not using `set -o xtrace`, for friendlier output.


# Presentational variables and functions declaration.

BLUE="\033[0;34m"
Expand All @@ -28,57 +27,35 @@ dim() {
printf "${DIM}$1${NOCOLOR}"
}

# Build functions declaration.

# Build function declaration.

build_node() {
blue "[Node build] "
echo "Using tsconfig.prod.json"
build_esm() {
blue "[ESM build] "
echo "Using tsconfig.esm.json"

echo "> tsc --build ./tsconfig.prod.json"
printf "${BLUE}[Node build] Working... "
echo "> tsc --build ./tsconfig.esm.json"
printf "${BLUE}[ESM build] Working... "

tsc --build ./tsconfig.prod.json
tsc --build ./tsconfig.esm.json
green "DONE"

echo "\n";
}

build_browser() {
if [ -f ./tsconfig.browser.json ];
then
blue "[Browser build] "
echo "Using tsconfig.browser.json"
echo "> tsc -p ./tsconfig.browser.json"

blue "[Browser build] "
printf "Working... "
build_cjs() {
blue "[CJS build] "
echo "Using tsconfig.cjs.json"

tsc -p ./tsconfig.browser.json
RETURN_CODE=$?
echo "> tsc --build ./tsconfig.cjs.json"
printf "${BLUE}[CJS build] Working... "

if [ $RETURN_CODE -eq 0 ]; then
green "DONE"
else
exit $RETURN_CODE
fi
else
dim "Skipping browser build, because no tsconfig.browser.json file is present."
fi
tsc -p ./tsconfig.cjs.json
green "DONE"

echo "\n";
}


# Begin build process.

if [ "$1" = "node" ];
then
build_node
elif [ "$1" = "browser" ];
then
build_browser
else
build_node
build_browser
fi
build_esm
#build_cjs
Loading