From 4d401162b95d42509941b9626d0ad633689cee98 Mon Sep 17 00:00:00 2001 From: Holger Drewes Date: Mon, 8 Jan 2024 13:32:07 +0100 Subject: [PATCH 1/7] Add exemplaric generalized runtime section in README for combined Node.js, browser info --- packages/block/README.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/block/README.md b/packages/block/README.md index ae8cef5afb..8e73eed330 100644 --- a/packages/block/README.md +++ b/packages/block/README.md @@ -21,6 +21,18 @@ npm install @ethereumjs/block **Note:** If you want to work with `EIP-4844` related functionality, you will have additional manual installation steps for the **KZG setup**, see related section below. +## Runtime Support + +### Node.js + +The current version of this library supports Node `18` and `20` (recommended). Node.js is the main supported platform which is also used internally for development and testing. + +### Browser + +This library targets to run in modern browsers which support the JavaScript [ES2020](https://www.w3schools.com/js/js_2020.asp) feature set. There is a dedicated ESM build provided and imports can be done using the normal ES6 [module import](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) syntax. + +See the dedicated [browser example](./examples/browser.html) for an entrypoint to browser usage. If you stumble upon browser-related issues please open an issue on GitHub. + ## Usage ### Introduction @@ -231,12 +243,6 @@ const block = Block.fromBlockData( ) ``` -## Browser - -With the breaking release round in Summer 2023 we have added hybrid ESM/CJS builds for all our libraries (see section below) and have eliminated many of the caveats which had previously prevented a frictionless browser usage. - -It is now easily possible to run a browser build of one of the EthereumJS libraries within a modern browser using the provided ESM build. For a setup example see [./examples/browser.html](./examples/browser.html). - ## API ### Docs From e8a4ee4784fa82769836a1dac2c795d46070f10e Mon Sep 17 00:00:00 2001 From: Holger Drewes Date: Mon, 8 Jan 2024 13:52:20 +0100 Subject: [PATCH 2/7] Add simple TypeScript example for Block --- packages/block/examples/simple.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 packages/block/examples/simple.ts diff --git a/packages/block/examples/simple.ts b/packages/block/examples/simple.ts new file mode 100644 index 0000000000..eb689e0c1a --- /dev/null +++ b/packages/block/examples/simple.ts @@ -0,0 +1,15 @@ +import { Block } from '@ethereumjs/block' +import { Chain, Common, Hardfork } from '@ethereumjs/common' +const common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.London }) + +const block = Block.fromBlockData( + { + header: { + baseFeePerGas: BigInt(10), + gasLimit: BigInt(100), + gasUsed: BigInt(60), + }, + }, + { common } +) +console.log(block) From 9a6f9e340a32076194e271e153c855610f6afe15 Mon Sep 17 00:00:00 2001 From: Holger Drewes Date: Mon, 8 Jan 2024 13:53:14 +0100 Subject: [PATCH 3/7] Expand exemplary README runtimes section with section on tsx example usage and a dedicated Bun section --- packages/block/README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/block/README.md b/packages/block/README.md index 8e73eed330..202e13ff3a 100644 --- a/packages/block/README.md +++ b/packages/block/README.md @@ -27,11 +27,27 @@ npm install @ethereumjs/block The current version of this library supports Node `18` and `20` (recommended). Node.js is the main supported platform which is also used internally for development and testing. +TypeScript examples in the [examples](./examples/) folder can be run using [tsx](https://github.com/privatenumber/tsx) like the following: + +```shell +tsx examples/simple.ts +``` + +### Bun + +This library has been tested to run with [Bun](https://bun.sh/) [v1.0](https://bun.sh/blog/bun-v1.0) or higher. Note that Bun is still in very active development and a production usage is not recommended (by the Bun team itself) in many cases. + +Example run using Bun: + +```shell +bun run examples/simple.ts +``` + ### Browser This library targets to run in modern browsers which support the JavaScript [ES2020](https://www.w3schools.com/js/js_2020.asp) feature set. There is a dedicated ESM build provided and imports can be done using the normal ES6 [module import](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) syntax. -See the dedicated [browser example](./examples/browser.html) for an entrypoint to browser usage. If you stumble upon browser-related issues please open an issue on GitHub. +For browser usage see the dedicated [example](./examples/browser.html) (with usage instructions). ## Usage From 65de309747d86cd7c7b35e1dad189a0294e7ca86 Mon Sep 17 00:00:00 2001 From: Holger Drewes Date: Mon, 8 Jan 2024 13:58:43 +0100 Subject: [PATCH 4/7] Add nightly GitHub Actions for Bun --- .github/workflows/bun-support.yml | 75 +++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .github/workflows/bun-support.yml diff --git a/.github/workflows/bun-support.yml b/.github/workflows/bun-support.yml new file mode 100644 index 0000000000..f2dd573265 --- /dev/null +++ b/.github/workflows/bun-support.yml @@ -0,0 +1,75 @@ +name: Bun Support +on: + schedule: + - cron: 0 0 * * * + workflow_dispatch: + +jobs: + tests: + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - uses: oven-sh/setup-bun@v1 + + - run: npm ci --omit=peer + + - name: Test Block + run: npm run test:node + working-directory: packages/block + + - name: Test Blockchain + run: npm run test:node + working-directory: packages/blockchain + + # Switch client to unit tests only due to `async_hooks` dependency build error in browser tests: 2022-06-15 + - name: Test Client + run: npm run test + working-directory: packages/client + + - name: Test Devp2p + run: npm run test + working-directory: packages/devp2p + + - name: Test Common + run: npm run test:node + working-directory: packages/common + + - name: Test Ethash + run: npm run test + working-directory: packages/ethash + + - name: Test EVM + run: npm run test:node + working-directory: packages/evm + + - name: Test Trie + run: npm run test:node + working-directory: packages/trie + + - name: Test Tx + run: npm run test:node + working-directory: packages/tx + + - name: Test Util + run: npm run test:node + working-directory: packages/util + + - name: Test StateManager + run: npm run test:node + working-directory: packages/statemanager + + - name: Test VM + run: npm run test:API + working-directory: packages/vm + + - name: Test RLP + run: npm run test:node + working-directory: packages/rlp + + - name: Test Wallet + run: npm run test:node + working-directory: packages/wallet From 282970aa9fa06af49dbdbf2bd667457b3106acc3 Mon Sep 17 00:00:00 2001 From: Holger Drewes Date: Mon, 8 Jan 2024 13:59:40 +0100 Subject: [PATCH 5/7] Temporarily run Bun CI for PR --- .github/workflows/bun-support.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bun-support.yml b/.github/workflows/bun-support.yml index f2dd573265..f0f71530ad 100644 --- a/.github/workflows/bun-support.yml +++ b/.github/workflows/bun-support.yml @@ -1,7 +1,15 @@ name: Bun Support +#on: +# schedule: +# - cron: 0 0 * * * +# workflow_dispatch: + on: - schedule: - - cron: 0 0 * * * + push: + branches: [master, develop] + tags: ['*'] + pull_request: + types: [opened, reopened, synchronize] workflow_dispatch: jobs: From 705df72a8c585d525114ad5e093dad629b56f2d4 Mon Sep 17 00:00:00 2001 From: Holger Drewes Date: Mon, 8 Jan 2024 14:15:39 +0100 Subject: [PATCH 6/7] Use bunx for test runs in GH Actions --- .github/workflows/bun-support.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/bun-support.yml b/.github/workflows/bun-support.yml index f0f71530ad..fed195ea88 100644 --- a/.github/workflows/bun-support.yml +++ b/.github/workflows/bun-support.yml @@ -23,61 +23,61 @@ jobs: submodules: recursive - uses: oven-sh/setup-bun@v1 - - run: npm ci --omit=peer + - run: bunx ci --omit=peer - name: Test Block - run: npm run test:node + run: bunx vitest run test working-directory: packages/block - name: Test Blockchain - run: npm run test:node + run: bunx vitest run test working-directory: packages/blockchain # Switch client to unit tests only due to `async_hooks` dependency build error in browser tests: 2022-06-15 - name: Test Client - run: npm run test + run: bunx vitest run test working-directory: packages/client - name: Test Devp2p - run: npm run test + run: bunx vitest run test working-directory: packages/devp2p - name: Test Common - run: npm run test:node + run: bunx vitest run test working-directory: packages/common - name: Test Ethash - run: npm run test + run: bunx vitest run test working-directory: packages/ethash - name: Test EVM - run: npm run test:node + run: bunx vitest run test working-directory: packages/evm - name: Test Trie - run: npm run test:node + run: bunx vitest run test working-directory: packages/trie - name: Test Tx - run: npm run test:node + run: bunx vitest run test working-directory: packages/tx - name: Test Util - run: npm run test:node + run: bunx vitest run test working-directory: packages/util - name: Test StateManager - run: npm run test:node + run: bunx vitest run test working-directory: packages/statemanager - name: Test VM - run: npm run test:API + run: bunx vitest run test working-directory: packages/vm - name: Test RLP - run: npm run test:node + run: bunx vitest run test working-directory: packages/rlp - name: Test Wallet - run: npm run test:node + run: bunx vitest run test working-directory: packages/wallet From fdd994668e4d43f0f7f46f06662385e73c5042c2 Mon Sep 17 00:00:00 2001 From: Holger Drewes Date: Mon, 8 Jan 2024 22:00:23 +0100 Subject: [PATCH 7/7] Resort bun GH Actions packages (alphabetically), comment out client run (expected to fail) --- .github/workflows/bun-support.yml | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/bun-support.yml b/.github/workflows/bun-support.yml index fed195ea88..5e91dc4bdd 100644 --- a/.github/workflows/bun-support.yml +++ b/.github/workflows/bun-support.yml @@ -33,19 +33,19 @@ jobs: run: bunx vitest run test working-directory: packages/blockchain - # Switch client to unit tests only due to `async_hooks` dependency build error in browser tests: 2022-06-15 - - name: Test Client + # Client not working yet in Bun (expected), 2024-01-08 + # - name: Test Client + # run: bunx vitest run test + # working-directory: packages/client + + - name: Test Common run: bunx vitest run test - working-directory: packages/client + working-directory: packages/common - name: Test Devp2p run: bunx vitest run test working-directory: packages/devp2p - - name: Test Common - run: bunx vitest run test - working-directory: packages/common - - name: Test Ethash run: bunx vitest run test working-directory: packages/ethash @@ -54,6 +54,14 @@ jobs: run: bunx vitest run test working-directory: packages/evm + - name: Test RLP + run: bunx vitest run test + working-directory: packages/rlp + + - name: Test StateManager + run: bunx vitest run test + working-directory: packages/statemanager + - name: Test Trie run: bunx vitest run test working-directory: packages/trie @@ -61,23 +69,15 @@ jobs: - name: Test Tx run: bunx vitest run test working-directory: packages/tx - + - name: Test Util run: bunx vitest run test working-directory: packages/util - - name: Test StateManager - run: bunx vitest run test - working-directory: packages/statemanager - - name: Test VM run: bunx vitest run test working-directory: packages/vm - - name: Test RLP - run: bunx vitest run test - working-directory: packages/rlp - - name: Test Wallet run: bunx vitest run test working-directory: packages/wallet