Skip to content

Releases: ethereumjs/ethereumjs-monorepo

@ethereumjs/era v10.0.0-dev-rc.1

24 Mar 17:05
b1f8cbc
Compare
Choose a tag to compare
Pre-release

Initial development release

Features:

  • Export history data as Era1
  • Read Era1 files which store pre-merge execution layer block history in 8192 block increments (i.e. eras)
  • Read Era files which store SSZ encoded signed beacon blocks by era (8192 blocks)

Note: This library is still experimental and the API might change along minor release versions!

@ethereumjs/devp2p v10.0.0-rc.1

24 Mar 16:19
b1f8cbc
Compare
Choose a tag to compare
Pre-release

This is the first (and likely the last) round of RC releases for the upcoming breaking releases, following the alpha releases from October 2024 (see alpha release release notes for full/main change description). The releases are somewhat delayed (sorry for that), but final releases can now be expected very very soon, to be released once the Ethereum Pectra hardfork is scheduled for mainnet and all EIPs are fully finalized. Pectra will then also be the default hardfork setting for all EthereumJS libraries.

New Versioning Scheme

This breaking release round will come with a new versioning scheme (thanks to paulmillr for the suggestion), aligning the package numbers on breaking releases for all EthereumJS packages. This will make it easier to report bugs ("bug happened on EthereumJS version 10 releases"), reason about release series and make library compatibility more transparent and easier to grasp.

As a start we bump all major release versions to version 10, these RC releases are the first to be released with the new versioning scheme.

Native Node.js EventEmitter Replacement

We removed the last remaining internal Node.js utility dependency to make the packages more browser friendly and replace the native Node.js EventEmitter by using the eventemitter3 package as a replacement, see PR #3746.

The new package is meant to be more performant while remaining almost entirely API compatible with native Node.js event emitters.

If you directly import the Node.js event emitter, you need to switch your imports to:

import { EventEmitter } from 'events' // old
import { EventEmitter } from 'eventemitter3' // new

EthereumJS-wide Error Objects

We have done preparations to allow for handling specific error sub types in the future by introducing a monorepo-wide EthereumJSError error class in the @ethereumjs/util package, see PR #3879. This error is thrown for all error cases within the monorepo and can be specifically handled by comparing with instanceof EthereumJSError.

We will introduce a set of more specific sub error classes inheriting from this generic type in upcoming minor releases, and so keeping things fully backwards compatible. This will allow for a more specific and robust handling of errors thrown by EthereumJS libraries.

Other Changes

  • Add typing for events, PR #3753
  • Outdated LES support has been removed from the package, PR #3759

@ethereumjs/common v10.0.0-rc.1

24 Mar 16:10
b1f8cbc
Compare
Choose a tag to compare
Pre-release

This is the first (and likely the last) round of RC releases for the upcoming breaking releases, following the alpha releases from October 2024. The releases are somewhat delayed (sorry for that), but final releases can now be expected very very soon, to be released once the Ethereum Pectra hardfork is scheduled for mainnet and all EIPs are fully finalized. Pectra will then also be the default hardfork setting for all EthereumJS libraries.

New Versioning Scheme

This breaking release round will come with a new versioning scheme (thanks to paulmillr for the suggestion), aligning the package numbers on breaking releases for all EthereumJS packages. This will make it easier to report bugs ("bug happened on EthereumJS version 10 releases"), reason about release series and make library compatibility more transparent and easier to grasp.

As a start we bump all major release versions to version 10, these RC releases are the first to be released with the new versioning scheme.

Native Node.js EventEmitter Replacement

We removed the last remaining internal Node.js utility dependency to make the packages more browser friendly and replace the native Node.js EventEmitter by using the eventemitter3 package as a replacement, see PR #3746.

The new package is meant to be more performant while remaining almost entirely API compatible with native Node.js event emitters.

If you directly import the Node.js event emitter, you need to switch your imports to:

import { EventEmitter } from 'events' // old
import { EventEmitter } from 'eventemitter3' // new

All this might affect you if you listen to events emitted by the common.events EventEmitter instance, e.g. to detect hardfork changes.

Pectra Spec Updates

  • Support for generalized EL requests coming with EIP-7685 introduction (devnet-4), PR #3706
  • Add requestsHash to genesis block/configuration, PR #3771
  • Allow specifying eip-7840 blobSchedule via geth genesis, PR #3835

EthereumJS-wide Error Objects

We have done preparations to allow for handling specific error sub types in the future by introducing a monorepo-wide EthereumJSError error class in the @ethereumjs/util package, see PR #3879. This error is thrown for all error cases within the monorepo and can be specifically handled by comparing with instanceof EthereumJSError.

We will introduce a set of more specific sub error classes inheriting from this generic type in upcoming minor releases, and so keeping things fully backwards compatible. This will allow for a more specific and robust handling of errors thrown by EthereumJS libraries.

Other Changes

  • Add typing for events, PR #3753
  • Remove Goerli support, PR #3851
  • Fix TTD related failed Geth genesis parsing, PR #3847
  • Fix deposit address for sepolia and holesky, PR #3882

@ethereumjs/blockchain v10.0.0-rc.1

24 Mar 17:24
b1f8cbc
Compare
Choose a tag to compare
Pre-release

This is the first (and likely the last) round of RC releases for the upcoming breaking releases, following the alpha releases from October 2024 (see alpha release release notes for full/main change description). The releases are somewhat delayed (sorry for that), but final releases can now be expected very very soon, to be released once the Ethereum Pectra hardfork is scheduled for mainnet and all EIPs are fully finalized. Pectra will then also be the default hardfork setting for all EthereumJS libraries.

New Versioning Scheme

This breaking release round will come with a new versioning scheme (thanks to paulmillr for the suggestion), aligning the package numbers on breaking releases for all EthereumJS packages. This will make it easier to report bugs ("bug happened on EthereumJS version 10 releases"), reason about release series and make library compatibility more transparent and easier to grasp.

As a start we bump all major release versions to version 10, these RC releases are the first to be released with the new versioning scheme.

Native Node.js EventEmitter Replacement

We removed the last remaining internal Node.js utility dependency to make the packages more browser friendly and replace the native Node.js EventEmitter by using the eventemitter3 package as a replacement, see PR #3746.

The new package is meant to be more performant while remaining almost entirely API compatible with native Node.js event emitters.

If you directly import the Node.js event emitter, you need to switch your imports to:

import { EventEmitter } from 'events' // old
import { EventEmitter } from 'eventemitter3' // new

All this might affect you if you listen to events emitted by the blockchain.events EventEmitter instance.

Pectra Spec Updates

  • Support for generalized EL requests coming with EIP-7685 introduction (devnet-4), PR #3706
  • Add requestsHash to genesis block/configuration, PR #3771

EthereumJS-wide Error Objects

We have done preparations to allow for handling specific error sub types in the future by introducing a monorepo-wide EthereumJSError error class in the @ethereumjs/util package, see PR #3879. This error is thrown for all error cases within the monorepo and can be specifically handled by comparing with instanceof EthereumJSError.

We will introduce a set of more specific sub error classes inheriting from this generic type in upcoming minor releases, and so keeping things fully backwards compatible. This will allow for a more specific and robust handling of errors thrown by EthereumJS libraries.

@ethereumjs/block v10.0.0-rc.1

24 Mar 16:56
b1f8cbc
Compare
Choose a tag to compare
Pre-release

This is the first (and likely the last) round of RC releases for the upcoming breaking releases, following the alpha releases from October 2024 (see alpha release release notes for full/main change description). The releases are somewhat delayed (sorry for that), but final releases can now be expected very very soon, to be released once the Ethereum Pectra hardfork is scheduled for mainnet and all EIPs are fully finalized. Pectra will then also be the default hardfork setting for all EthereumJS libraries.

New Versioning Scheme

This breaking release round will come with a new versioning scheme (thanks to paulmillr for the suggestion), aligning the package numbers on breaking releases for all EthereumJS packages. This will make it easier to report bugs ("bug happened on EthereumJS version 10 releases"), reason about release series and make library compatibility more transparent and easier to grasp.

As a start we bump all major release versions to version 10, these RC releases are the first to be released with the new versioning scheme.

Pectra Spec Updates

  • Support for EIP-7691 Blob Throughput Increase, PR #3807
  • Support for generalized EL requests coming with EIP-7685 introduction (devnet-4), PR #3706
  • Fix the param resolution for excess gas and blob fee compute, PR #3841

EthereumJS-wide Error Objects

We have done preparations to allow for handling specific error sub types in the future by introducing a monorepo-wide EthereumJSError error class in the @ethereumjs/util package, see PR #3879. This error is thrown for all error cases within the monorepo and can be specifically handled by comparing with instanceof EthereumJSError.

We will introduce a set of more specific sub error classes inheriting from this generic type in upcoming minor releases, and so keeping things fully backwards compatible. This will allow for a more specific and robust handling of errors thrown by EthereumJS libraries.

@ethereumjs/binarytree v10.0.0-dev-rc.1

24 Mar 17:37
b1f8cbc
Compare
Choose a tag to compare
Pre-release

This is the first (and likely the last) round of RC releases for the upcoming breaking releases, following the alpha releases from October 2024 (see alpha release release notes for full/main change description). The releases are somewhat delayed (sorry for that), but final releases can now be expected very very soon, to be released once the Ethereum Pectra hardfork is scheduled for mainnet and all EIPs are fully finalized. Pectra will then also be the default hardfork setting for all EthereumJS libraries.

New Versioning Scheme

This breaking release round will come with a new versioning scheme (thanks to paulmillr for the suggestion), aligning the package numbers on breaking releases for all EthereumJS packages. This will make it easier to report bugs ("bug happened on EthereumJS version 10 releases"), reason about release series and make library compatibility more transparent and easier to grasp.

As a start we bump all major release versions to version 10, these RC releases are the first to be released with the new versioning scheme.

Note: This is the initial developer release of a binary tree package. While we also directly bump the binarytree package version for consistency reasons please be aware that this package is still in a very early stage and not production ready!

@ethereumjs/wallet v3.0.0-alpha.1

24 Mar 16:24
Compare
Choose a tag to compare
Pre-release
  • Upgrade to TypeScript 5, PR #3607
  • Node 22 support, PR #3669
  • Upgrade ethereum-cryptography to v3, PR #3668

@ethereumjs/vm v9.0.0-alpha.1

24 Mar 17:46
Compare
Choose a tag to compare
Pre-release

This is a first round of alpha releases for our upcoming breaking release round with a focus on bundle size (tree shaking) and security (dependencies down + no WASM (by default)). Note that alpha releases are not meant to be fully API-stable yet and are for early testing only. This release series will be then followed by a beta release round where APIs are expected to be mostly stable. Final releases can then be expected for late October/early November 2024.

Renamings

Static Constructors

The static constructors for our library classes have been reworked to now be standalone methods (with a similar naming scheme). This allows for better tree shaking of unused constructor code (see PR #3618):

  • VM.create() -> createVM
Core Procedural Methods

See: PR #3530

  • VM.runTx() -> runTx()
  • VM.runBlock() -> runBlock()
  • VM.buildBlock() -> buildBlock()

Own VM Parameter Set

HF-sensitive parameters like historyStorageAddress were previously by design all provided by the @ethereumjs/common library. This meant that all parameter sets were shared among the libraries and libraries carried around a lot of unnecessary parameters.

With the Common refactoring from PR #3537 parameters now moved over to a dedicated params.ts file (exposed as e.g. paramsVM) within the parameter-using library and the library sets its own parameter set by internally calling a new Common method updateParams(). For shared Common instances parameter sets then accumulate as needed.

Beside having a lighter footprint this additionally allows for easier parameter customization. There is a new params constructor option which leverages this new possibility and where it becomes possible to provide a fully customized set of core library parameters.

New Common API

There is a new Common API for simplification and better tree shaking, see PR #3545. Change your Common initializations as follows (see Common release for more details):

// old
import { Chain, Common } from '@ethereumjs/common'
const common = new Common({ chain: Chain.Mainnet })

// new
import { Common, Mainnet } from '@ethereumjs/common'
const common = new Common({ chain: Mainnet })

Pure JavaScript EVM (no default WASM)

This is the first EthereumJS VM release where we could realize a fully WASM-free version of the underlying EVM by default! 🤩 We were finally able to replace all crypto primitives which still relied on Web Assembly code with pure JavaScript/TypeScript pendants, thanks a lot to @paulmillr from Noble for the cooperation on this! ❤️

Together with a strong dependency reduction being accomplished along this release this opens up for new use cases for the JavaScript VM/EVM in more security sensitive contexts. The code of the EVM is now compact enough that it gets fully auditable (and we plan an EVM audit for 2025), see e.g. here for an EVM bundle snapshot including all dependencies!

See EVM release notes for a detailed breakdown of the changes!

Mega-EOF Support (experimental)

The underlying EVM now supports Mega-EOF in an experimental form! 🎉 See EVM release notes for more details.

EIP-7702 EOA Account Abstraction Support (experimental)

The VM now experimentally supports running EIP-7702 txs with runTx() (or runBlock()) and along transform an EOA into a smart contract for the period of one transaction and execute the respective bytecode, see PRs #3470, #3577 and #3581.

The following is an example on how to create an EIP-7702 tx (note that you need to replace the authorizationList parameters with real-world tx and signature values):

import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import { createEOACode7702Tx } from '@ethereumjs/tx'
import { type PrefixedHexString, createAddressFromPrivateKey, randomBytes } from '@ethereumjs/util'

const ones32 = `0x${'01'.repeat(32)}` as PrefixedHexString

const common = new Common({ chain: Mainnet, hardfork: Hardfork.Cancun, eips: [7702] })
const tx = createEOACode7702Tx(
  {
    authorizationList: [
      {
        chainId: '0x2',
        address: `0x${'20'.repeat(20)}`,
        nonce: '0x1',
        yParity: '0x1',
        r: ones32,
        s: ones32,
      },
    ],
    to: createAddressFromPrivateKey(randomBytes(32)),
  },
  { common },
)

Removal of TTD Logic (live-Merge Transition Support)

Total terminal difficulty (TTD) logic related to fork switching has been removed from the libraries, see PRs #3518 and #3556. This means that a Merge-type live hardfork transition solely triggered by TTD is not supported anymore. It is still possible though to replay and deal with both pre- and post Merge HF blocks.

For this library this means:

  • The setHardfork option for runBlock() is simplified to only accept a boolean and no BigIntLike for an eventual TD value anymore

Other Breaking Changes

  • New default hardfork: Shanghai -> Cancun, see PR #3566
  • VM is now by default initialized without state manager caches (tree shaking), PR #3601
  • VM uses EVMMockBlockchain as blockchain default (tree shaking), PR #3601

Other Changes

  • Upgrade to TypeScript 5, PR #3607
  • Node 22 support, PR #3669
  • Implement t8ntool to use for execution-spec-tests, PR #3603
  • Upgrade ethereum-cryptography to v3, PR #3668
  • Exit early on non-existing system contracts, PR #3614
  • Add allowNoBlobs option to BlockBuilder.addTransaction(), PR #3603
  • Exit early in runBlock() if system contract has no code, PR #3603

@ethereumjs/verkle v0.2.0-alpha.1

24 Mar 17:30
Compare
Choose a tag to compare
Pre-release

We are getting there! 😁 While still in an experimental stage this release makes a big leap towards stateful Verkle-based EVM execution, by applying various updates and aligning with a new experimental StatefulVerkleStateManager.

  • Use node hash as db key, PR #3472
  • Apply leaf marker on all touched values, PR #3520
  • Proof function renaming (e.g. createProof() -> createVerkleProof()), PR #3557
  • Refactor trie and verkle utils, PR #3600
  • Add and integrate StatefulVerkleStateManager, PR #3628
  • Various Verkle Fixes, PR #3650

@ethereumjs/util v10.0.0-alpha.1

24 Mar 16:04
Compare
Choose a tag to compare
Pre-release

This is a first round of alpha releases for our upcoming breaking release round with a focus on bundle size (tree shaking) and security (dependencies down + no WASM (by default)). Note that alpha releases are not meant to be fully API-stable yet and are for early testing only. This release series will be then followed by a beta release round where APIs are expected to be mostly stable. Final releases can then be expected for late October/early November 2024.

Renamings

Static Constructors

The static constructors for our library classes have been reworked to now be standalone methods (with a similar naming scheme). This allows for better tree shaking of unused constructor code:

account

See PR #3524:

  • Account.fromAccountData() -> createAccount()
  • Account.fromRlpSerializedAccount() -> createAccountFromRLP()
  • Account.fromRlpSerializedPartialAccount() -> createPartialAccountFromRLP()
  • Account.fromValuesArray() --> createAccountFromBytesArray()
  • Account.fromPartialAccountData() --> createPartialAccount()
address

See PR #3544:

  • Address.zero() -> createZeroAddress()
  • Address.fromString() -> createAddressFromString()
  • Address.fromPublicKey() -> createAddressFromPublicKey()
  • Address.fromPrivateKey() -> createAddressFromPrivateKey()
  • Address.generate() -> createContractAddress()
  • Address.generate2() -> createContractAddress2()
  • New: createAddressFromBigInt()
withdrawal

See PR #3589

  • Withdrawal.fromWithdrawalData() -> createWithdrawal()
  • Withdrawal.fromValuesArray() -> createWithdrawalFromBytesArray()
  • Withdrawal.toBytesArray() -> withdrawalToBytesArray()
request

See PR #3589

  • *Request.fromRequestData() -> create*Request()
  • *Request.fromJSON() -> create*RequestFromJSON()
  • *Request.deserialize() -> create*RequestFromRLP()

Other Breaking Changes

  • bytes: Restrict hexToBytes(), unpadHex() and hexToBigInt() to accept only hex-prefixed values, PR #3510
  • Remove deprecated initKZG() method, PR #3635
  • Renaming all camel-case Rpc-> RPC and Json -> JSON names, PR #3638
  • Remove redundant fills and zeros() function, PR #3709

Other Changes

  • Upgrade to TypeScript 5, PR #3607
  • Node 22 support, PR #3669
  • Upgrade ethereum-cryptography to v3, PR #3668
  • kaustinen7 verkle testnet preparation (update verkle leaf structure -> BASIC_DATA), PR #3433
  • Use noble bytes conversion utilities internally, PR #3698
  • Added two simple unit conversion methods, Units.ether() and Units.gwei(), mainly to ease tx creation a bit, PRs #3734, #3736 and #3738