Releases: ethereumjs/ethereumjs-monorepo
@ethereumjs/vm v10.1.0
@ethereumjs/util v10.1.0
@ethereumjs/tx v10.1.0
tx: throw on toCreationAddress for 4844 and 7702, PR #4162tx: improve JSDoc annotations, PR #41614844 Tx Constructor Consistency and UX, PR #4155valueBoundaryCheck chores, PR #4083updates regarding blobtx serialization, PR #4065
EIP-7594 - PeerDAS - Peer Data Availability Sampling
Support for EIP-7594 PeerDAS blob transactions has been added. This extends EIP-4844 blob transactions with data availability sampling capabilities. PeerDAS transactions use network wrapper version 1 and include cell proofs instead of blob proofs. The transaction library now supports creating and validating PeerDAS transactions with a maximum of 6 blobs per transaction.
import { Blob4844Tx } from @ethereumjs/tx
import { Common, Hardfork } from @ethereumjs/common
import { hexToBytes } from @ethereumjs/util
const common = new Common({ chain: mainnet, hardfork: Hardfork.Osaka })
// Create a PeerDAS blob transaction (network wrapper version 1)
const tx = Blob4844Tx.fromTxData({
chainId: common.chainId(),
nonce: 0n,
maxFeePerGas: 1000000000n,
maxPriorityFeePerGas: 1000000000n,
maxFeePerBlobGas: 1000000000n,
gasLimit: 100000n,
to: 0x...,
value: 0n,
blobVersionedHashes: [0x...],
blobs: [0x...], // Blob data
kzgCommitments: [0x...],
kzgProofs: [0x...], // Cell proofs for PeerDAS
networkWrapperVersion: 1 // EIP-7594
}, { common })EIP-7825 - Transaction Gas Limit Cap
EIP-7825 support has been implemented, introducing a protocol-level cap of 16,777,216 gas (2^24) for individual transactions. The transaction library now validates that transaction gas limits do not exceed this cap. Transactions with gas limits above the cap will be rejected during construction.
import { LegacyTx } from @ethereumjs/tx
import { Common, Hardfork } from @ethereumjs/common
const common = new Common({ chain: mainnet, hardfork: Hardfork.Osaka })
// Transaction with gas limit exceeding 16,777,216 will throw an error
try {
const tx = LegacyTx.fromTxData({
gasLimit: 20000000n, // Exceeds EIP-7825 cap
// ... other fields
}, { common })
} catch (error) {
// Error: Gas limit exceeds maximum allowed by EIP-7825
}
// Valid transaction with gas limit within the cap
const validTx = LegacyTx.fromTxData({
gasLimit: 10000000n, // Within EIP-7825 cap
// ... other fields
}, { common })@ethereumjs/statemanager v10.1.0
- Remove Verkle package support, PR #4145
@ethereumjs/rlp v10.1.0
Maintenance release, no active changes.
@ethereumjs/mpt v10.1.0
Maintenance release, no active changes.
@ethereumjs/genesis v10.1.0
Maintenance release, no active changes.
@ethereumjs/evm v10.1.0
- Extended modexp precompile debug messages, PR #4124
- More ArrayBuffer type assignment fixes, PR #4109
- Cleanup unused dependencies and fix dependency categorization, PR #4146
- Remove Verkle package support, PR #4145
EIP-7823 - Set upper bounds for MODEXP
The MODEXP precompile (address 0x05) now enforces an upper bound of 8192 bits (1024 bytes) on each input field (base, exponent, modulus). If any input exceeds this limit, the precompile execution stops, returns an error, and consumes all gas. This change improves security and makes the precompile more suitable for future EVMMAX replacement.
import { EVM } from @ethereumjs/evm
import { Common, Hardfork } from @ethereumjs/common
const common = new Common({ chain: mainnet, hardfork: Hardfork.Osaka })
const evm = await EVM.create({ common })
// MODEXP call with inputs exceeding 1024 bytes will now fail
// Inputs within the limit continue to work as beforeEIP-7883 - ModExp Gas Cost Increase
The MODEXP precompile gas cost calculation has been updated according to EIP-7883. The minimum gas cost has been increased from 200 to 500, and the pricing algorithm has been adjusted with increased complexity calculations for larger inputs. The multiplier for exponents larger than 32 bytes has been doubled from 8 to 16.
import { EVM } from @ethereumjs/evm
import { Common, Hardfork } from @ethereumjs/common
const common = new Common({ chain: mainnet, hardfork: Hardfork.Osaka })
const evm = await EVM.create({ common })
// MODEXP calls will now consume more gas according to the new pricing formula
// The minimum cost is now 500 gas (previously 200)EIP-7939 - Count leading zeros (CLZ) opcode
A new opcode CLZ (0x1e) has been added that counts the number of leading zero bits in a 256-bit word. If the input is zero, it returns 256. The opcode has a gas cost of 5 gas.
import { EVM } from @ethereumjs/evm
import { Common, Hardfork } from @ethereumjs/common
const common = new Common({ chain: mainnet, hardfork: Hardfork.Osaka })
const evm = await EVM.create({ common })
// CLZ opcode can be used in EVM bytecode:
// PUSH1 0x01 // Push 1 to stack
// CLZ // Count leading zeros: returns 255
// PUSH1 0x00 // Push 0 to stack
// CLZ // Returns 256EIP-7951 - Precompile for secp256r1 Curve Support
A new precompile P256VERIFY has been added at address 0x100 for ECDSA signature verification over the secp256r1 curve (also known as P-256 or prime256v1). This enables native support for signatures from modern secure hardware including Apple Secure Enclave, Android Keystore, and FIDO2/WebAuthn devices. The precompile costs 6900 gas and expects 160 bytes of input (32 bytes each for message hash, r, s, public key x, and public key y).
import { EVM } from @ethereumjs/evm
import { Common, Hardfork } from @ethereumjs/common
import { hexToBytes } from @ethereumjs/util
const common = new Common({ chain: mainnet, hardfork: Hardfork.Osaka })
const evm = await EVM.create({ common })
// P256VERIFY precompile usage:
// Input: 160 bytes = [msgHash (32) | r (32) | s (32) | qx (32) | qy (32)]
// Output: 32 bytes with 0x00...01 for valid signature, empty for invalid
const input = hexToBytes(0x...) // 160 bytes
const result = await evm.runCall({
to: 0x0000000000000000000000000000000000000100,
data: input,
gasLimit: 10000n
})@ethereumjs/common v10.1.0
- Improve
paramsCacheupdates, PR #4091 - Improve
nextHardforkBlockOrTimestampmethod, PR #4080 - Remove Verkle package support, PR #4145
EIP-7594 - PeerDAS - Peer Data Availability Sampling
This release adds support for EIP-7594 PeerDAS, which extends EIP-4844 blob transactions with data availability sampling capabilities. The Common library now includes EIP-7594 configuration and activation for the Osaka hardfork, enabling support for PeerDAS blob transactions with cell proofs and network wrapper version 1.
EIP-7823 - Set upper bounds for MODEXP
EIP-7823 support has been added, introducing an upper bound of 8192 bits (1024 bytes) on each input field (base, exponent, modulus) of the MODEXP precompile. The Common library includes the EIP configuration and activation for Osaka, ensuring MODEXP calls exceeding these limits are properly rejected.
EIP-7825 - Transaction Gas Limit Cap
Support for EIP-7825 has been implemented, introducing a protocol-level cap of 16,777,216 gas (2^24) for individual transactions. The Common library includes the EIP configuration and activation for Osaka, enabling transaction validation against this gas limit cap.
EIP-7883 - ModExp Gas Cost Increase
EIP-7883 support has been added, which increases the gas cost of the MODEXP precompile. The Common library includes the EIP configuration and activation for Osaka, ensuring MODEXP operations use the updated pricing algorithm with increased minimum gas cost and adjusted complexity calculations.
EIP-7918 - Blob base fee bounded by execution cost
EIP-7918 support has been implemented, which imposes that the price of GAS_PER_BLOB blob gas is greater than the price of BLOB_BASE_COST execution gas. The Common library includes the EIP configuration and activation for Osaka, ensuring proper blob fee market functionality.
EIP-7934 - RLP Execution Block Size Limit
Support for EIP-7934 has been added, introducing a protocol-level cap on the maximum RLP-encoded block size to 10 MiB (with a 2 MiB margin for beacon block size). The Common library includes the EIP configuration and activation for Osaka, enabling block size validation.
EIP-7939 - Count leading zeros (CLZ) opcode
EIP-7939 support has been implemented, adding a new opcode CLZ (0x1e) that counts the number of leading zero bits in a 256-bit word. The Common library includes the EIP configuration and activation for Osaka, enabling the use of the CLZ opcode in EVM execution.
EIP-7951 - Precompile for secp256r1 Curve Support
EIP-7951 support has been added, introducing a new precompile at address 0x100 (P256VERIFY) for ECDSA signature verification over the secp256r1 curve. The Common library includes the EIP configuration and activation for Osaka, enabling native support for secp256r1 signatures from modern secure hardware devices.
EIP-7892 - Blob Parameter Only Hardforks
Support for Blob Parameter Only (BPO) hardforks has been implemented according to EIP-7892. BPO hardforks are lightweight protocol upgrades that modify only blob-related parameters (target, max, and blobGasPriceUpdateFraction) without requiring code changes, enabling rapid scaling of blob capacity in response to network demand.
Two BPO hardforks are scheduled alongside Fusaka:
- BPO 1: Increases blob target to 10 and max to 15 blobs per block
- BPO 2: Further increases blob target to 14 and max to 21 blobs per block
The Common library now includes BPO hardfork definitions and activation timestamps for testnets (Holešky, Sepolia, Hoodi). The getBlobGasSchedule() method returns the appropriate blob gas schedule parameters based on the active hardfork, automatically handling BPO transitions.
import { Common, Hardfork, Mainnet } from @ethereumjs/common
// Common instance with BPO1 active
const common = new Common({ chain: Mainnet, hardfork: Hardfork.Bpo1 })
// Get blob gas schedule parameters
const schedule = common.getBlobGasSchedule()
// schedule.targetBlobGasPerBlock = 1310720 (10 * 131072)
// schedule.maxBlobGasPerBlock = 1966080 (15 * 131072)
// schedule.blobGasPriceUpdateFraction = 8346193@ethereumjs/blockchain v10.1.0
- Remove Verkle package support, PR #4145