Releases: ethereumjs/ethereumjs-monorepo
@ethereumjs/vm v8.1.1
@ethereumjs/evm v3.1.1
@ethereumjs/wallet v2.0.4
Maintenance release with downstream dependency updates, see PR #3527
@ethereumjs/[email protected]
EIP-7685 Requests: EIP-6110 (Deposits) / EIP-7002 (Withdrawals) / EIP-7251 (Consolidations)
This library now supports EIP-6110
deposit requests, see PR #3390, EIP-7002
withdrawal requests, see PR #3385 and EIP-7251
consolidation requests, see PR #3477 as well as the underlying generic execution layer request logic introduced with EIP-7685
(PR #3372).
These new request types will be activated with the Prague
hardfork, see @ethereumjs/block README for detailed documentation.
EIP-2935 Serve Historical Block Hashes from State (Prague)
Starting with this release the VM supports EIP-2935 which stores the latest 256 block hashes in the storage of a system contract, see PR #3475 as the major integrational PR (while work on this has already been done in previous PRs).
This EIP will be activated along the Prague hardfork. Note that this EIP has no effect on the resolution of the BLOCKHASH
opcode, which will be a separate activation taking place by the integration of EIP-7709 in the following Osaka hardfork.
Verkle Dependency Decoupling
We have relatively light-heartedly added a new @ethereumjs/verkle
main dependency to the VM/EVM stack in the v7.2.1
release, which added an additional burden to the bundle size by several hundred KB and additionally draws in unnecessary WASM code. Coupling with Verkle has been refactored in PR #3462 and the direct dependency has been removed again.
An update to this release is therefore strongly recommended even if other fixes or features are not that relevant for you right now.
Verkle Updates
- Fixes for Kaustinen4 support, PR #3269
- Kaustinen5 related fixes, PR #3343
- Kaustinen6 adjustments,
verkle-cryptography-wasm
migration, PRs #3355 and #3356 - Missing beaconroot account verkle fix, PR #3421
- Remove the hacks to prevent account cleanups of system contracts, PR #3418
- Updates EIP-2935 tests with the new proposed bytecode and corresponding config, PR #3438
- Fix EIP-2935 address conversion issues, PR #3447
- Remove backfill of block hashes on EIP-2935 activation, PR #3478
Other Features
- Add
evmOpts
to the VM opts to allow for options chaining to the underlying EVM, PR #3481 - Stricter prefixed hex typing, PRs #3348, #3427 and #3357 (some changes removed in PR #3382 for backwards compatibility reasons, will be reintroduced along upcoming breaking releases)
Other Changes
- Removes support for EIP-2315 simple subroutines for EVM (deprecated with an alternative version integrated into EOF), PR #3342
- Small clean-up to
VM._emit()
, PR #3396 - Update
mcl-wasm
Dependency (Esbuild Issue), PR #3461
Bugfixes
@ethereumjs/verkle v0.1.0
This is the first (still experimental) Verkle library release with some basic put()
and get()
functionality working! 🎉 Still highly moving and evolving parts, but early experiments and feedback welcome!
- Kaustinen6 adjustments,
verkle-cryptography-wasm
migration, PRs #3355 and #3356 - Move tree key computation to verkle and simplify, PR #3420
- Rename code keccak, PR #3426
- Add tests for verkle bytes helper, PR #3441
- Verkle decoupling, PR #3462
- Rename verkle utils and refactor, PR #3468
- Optimize storage of default values in VerkleNode, PR #3476
- Build out trie processing, PR #3430
- Implement
trie.put()
, PR #3473 - Add
trie.del()
, PR #3486
@ethereumjs/util v9.1.0
Support for Partial Accounts
For Verkle or other contexts it can be useful to create partial accounts not containing all the account parameters. This is now supported starting with this release, see PR #3269:
import { Account } from '@ethereumjs/util'
const account = Account.fromPartialAccountData({
nonce: '0x02',
balance: '0x0384',
})
console.log(`Partial account with nonce=${account.nonce} and balance=${account.balance} created`)
New requests
Module
This release introduces a new requests
module (see PRs #3372, #3393, #3398 and #3477) with various type and an abstract base class for EIP-7685 general purpose execution layer requests to the CL (Prague hardfork) as well as concrete implementations for the currently supported request types:
- EIP-6110:
DepositRequest
(Prague Hardfork) - EIP-7002:
WithdrawawlRequest
(Prague Hardfork) - EIP-7251:
ConsolidationRequest
(Prague Hardfork)
These request types are mainly used within the @ethereumjs/block library where applied usage instructions are provided in the README.
Verkle Updates
- Update
kzg-wasm
to0.4.0
, PR #3358 - Shift Verkle to
osaka
hardfork, PR #3371 - New
verkle
module with utility methods and interfaces, PR #3462 - Rename verkle utils and refactor, PR #3468
Other Features
- Stricter prefixed hex typing, PRs #3348, #3427 and #3357 (some changes removed in PR #3382 for backwards compatibility reasons, will be reintroduced along upcoming breaking releases)
Other Changes
- Adjust
Account.isContract()
(in Verkle context work), PR #3343 - Rename deposit receipt to deposit request, PR #3408
- Adjust
Account.isEmpty()
to also work for partial accounts, PR #3405 - Enhances typing of CL requests, PR #3398
- Rename withdrawal request's
validatorPublicKey
tovalidatorPubkey
, PR #3474
@ethereumjs/tx v5.4.0
EOA Code Transaction (EIP-7702) (outdated)
This release introduces support for a non-final version of EIP-7702 EOA code transactions, see PR #3470. This tx type allows to run code in the context of an EOA and therefore extend the functionality which can be "reached" from respectively integrated into the scope of an otherwise limited EOA account.
The following is a simple example how to use an EOACodeEIP7702Transaction
with one autorization list item:
// ./examples/EOACodeTx.ts
import { Chain, Common, Hardfork } from '@ethereumjs/common'
import { EOACodeEIP7702Transaction } from '@ethereumjs/tx'
import type { PrefixedHexString } from '@ethereumjs/util'
const ones32 = `0x${'01'.repeat(32)}` as PrefixedHexString
const common = new Common({ chain: Chain.Mainnet, hardfork: Hardfork.Cancun, eips: [7702] })
const tx = EOACodeEIP7702Transaction.fromTxData(
{
authorizationList: [
{
chainId: '0x1',
address: `0x${'20'.repeat(20)}`,
nonce: ['0x1'],
yParity: '0x1',
r: ones32,
s: ones32,
},
],
},
{ common }
)
console.log(
`EIP-7702 EOA code tx created with ${tx.authorizationList.length} authorization list item(s).`
)
Note: Things move fast with EIP-7702
and the released implementation is based on this commit and therefore already outdated. An up-to-date version will be released along our breaking release round planned for early September 2024.
Verkle Updates
Other Features
- Extend
BlobEIP4844Transaction.networkWrapperToJson()
to also include the 4844 fields, PR #3365 - Stricter prefixed hex typing, PRs #3348, #3427 and #3357 (some changes removed in PR #3382 for backwards compatibility reasons, will be reintroduced along upcoming breaking releases)
Bugfixes
- Fix bug in generic error message regarding chain ID reporting, PR #3386
@ethereumjs/trie v6.2.1
Other Features
- Stricter prefixed hex typing, PRs #3348, #3427 and #3357 (some changes removed in PR #3382 for backwards compatibility reasons, will be reintroduced along upcoming breaking releases)
Bugfixes
- Fixes an issue in the delete operation used for unhashed tries and pruning activated which resulted in a wrong state root (bad!), PR #3333
@ethereumjs/statemanager v2.4.0
Verkle Updates
- Various fixes for Kaustinen4 support (partial account integration,
getContractCodeSize()
, other), PR #3269 - Kaustinen5 related fixes, PR #3343
- Kaustinen6 adjustments,
verkle-cryptography-wasm
migration, PRs #3355 and #3356 - Missing beaconroot account verkle fix, PR #3421
- Verkle decoupling, PR #3462
Other Features
- Stricter prefixed hex typing, PRs #3348, #3427 and #3357 (some changes removed in PR #3382 for backwards compatibility reasons, will be reintroduced along upcoming breaking releases)
Other Changes
- Modify RPCStateManager
getAccount()
, PR #3345
Bugfixes
@ethereumjs/genesis v0.2.3
Maintenance release with downstream dependency updates, see PR #3527