
Security News
gem.coop Tests Dependency Cooldowns as Package Ecosystems Move to Slow Down Attacks
gem.coop is testing registry-level dependency cooldowns to limit exposure during the brief window when malicious gems are most likely to spread.
@ethereumjs/util
Advanced tools
v10| A collection of utility functions for Ethereum. |
|---|
To obtain the latest version, simply require the project using npm:
npm install @ethereumjs/util
This package contains the following modules providing respective helper methods, classes and commonly re-used constants.
All helpers are re-exported from the root level and deep imports are not necessary. So an import can be done like this:
import { hexToBytes, isValidChecksumAddress } from '@ethereumjs/util'
Class representing an Account and providing private/public key and address-related functionality (creation, validation, conversion). It is not recommended to use this constructor directly. Instead use the static factory methods to assist in creating an Account from varying data types.
// ./examples/account.ts
import { createAccount } from '@ethereumjs/util'
const account = createAccount({
nonce: '0x02',
balance: '0x0384',
storageRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
codeHash: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470',
})
console.log(`Account with nonce=${account.nonce} and balance=${account.balance} created`)
For Verkle or other contexts it can be useful to create partial accounts not containing all the account parameters. This is supported starting with v9.1.0:
// ./examples/accountPartial.ts
import { createPartialAccount } from '@ethereumjs/util'
const account = createPartialAccount({
nonce: '0x02',
balance: '0x0384',
})
console.log(`Partial account with nonce=${account.nonce} and balance=${account.balance} created`)
Class representing an Ethereum Address with instantiation helpers and validation methods.
// ./examples/address.ts
import { createAddressFromString } from '@ethereumjs/util'
const address = createAddressFromString('0x2f015c60e0be116b1f0cd534704db9c92118fb6a')
console.log(`Ethereum address ${address.toString()} created`)
Module with EIP-7702 authorization list signing utilities.
Module providing helpers around EIP-4844 blobs for creating blobs, associated KZG commitments and proofs as well as versioned hashes. It also provides helpers for EIP-7594 conformant blobs for creating extended cells and corresponding proofs.
// ./examples/blobs.ts
import { bytesToHex, computeVersionedHash, getBlobs } from '@ethereumjs/util'
const blobs = getBlobs('test input')
console.log('Created the following blobs:')
console.log(blobs)
const commitment = bytesToHex(new Uint8Array([1, 2, 3]))
const blobCommitmentVersion = 0x01
const versionedHash = computeVersionedHash(commitment, blobCommitmentVersion)
console.log(`Versioned hash ${versionedHash} computed`)
Byte-related helper and conversion functions.
// ./examples/bytes.ts
import { bytesToBigInt } from '@ethereumjs/util'
const bytesValue = new Uint8Array([97])
const bigIntValue = bytesToBigInt(bytesValue)
console.log(`Converted value: ${bigIntValue}`)
Exposed constants (e.g. KECCAK256_NULL_S for string representation of Keccak-256 hash of null)
// ./examples/constants.ts
import { BIGINT_2EXP96, KECCAK256_NULL_S } from '@ethereumjs/util'
console.log(`The keccak-256 hash of null: ${KECCAK256_NULL_S}`)
console.log(`BigInt constants (performance), e.g. BIGINT_2EXP96: ${BIGINT_2EXP96}`)
DB interface for database abstraction (Blockchain, Trie), see e.g. @ethereumjs/trie recipes) for usage.
Genesis related interfaces and helpers.
Internalized simple helper methods like isHexString. Note that methods from this module might get deprecated in the future.
KZG interface (used for 4844 blob txs), see @ethereumjs/tx README for main usage instructions.
Simple map DB implementation using the DB interface (see above).
Module with a compact generic request class for EIP-7685 general purpose execution layer requests to the CL (Prague hardfork) with the possibility to set data and a type conforming to the following request types:
DepositRequest (Prague Hardfork)WithdrawalRequest (Prague Hardfork)ConsolidationRequest (Prague Hardfork)These request types are mainly used within the @ethereumjs/block library where applied usage instructions are provided in the README.
Small helpers around signature validation, conversion, recovery as well as selected convenience wrappers for calls to the underlying crypo libraries, using the cryptographic primitive implementations from the Noble crypto library set. If possible for your use case it is recommended to use the underlying crypto libraries directly for robustness.
// ./examples/signature.ts
import { bytesToHex, ecrecover, hexToBytes } from '@ethereumjs/util'
const chainId = BigInt(3) // Ropsten
const ecHash = hexToBytes('0x82ff40c0a986c6a5cfad4ddf4c3aa6996f1a7837f9c398e17e5de5cbd5a12b28')
const r = hexToBytes('0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9')
const s = hexToBytes('0x129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66')
const v = BigInt(41)
const pubkey = ecrecover(ecHash, v, r, s, chainId)
console.log(`Recovered public key ${bytesToHex(pubkey)} from valid signature values`)
Various TypeScript types. Direct usage is not recommended, type structure might change in the future.
Class representing an EIP-4895 Withdrawal with different constructors as well as conversion and output helpers.
// ./examples/withdrawal.ts
import { createWithdrawal } from '@ethereumjs/util'
const withdrawal = createWithdrawal({
index: 0n,
validatorIndex: 65535n,
address: '0x0000000000000000000000000000000000000000',
amount: 0n,
})
console.log('Withdrawal object created:')
console.log(withdrawal.toJSON())
We provide hybrid ESM/CJS builds for all our libraries. With the v10 breaking release round from Spring 2025, all libraries are "pure-JS" by default and we have eliminated all hard-wired WASM code. Additionally we have substantially lowered the bundle sizes, reduced the number of dependencies, and cut out all usages of Node.js-specific primitives (like the Node.js event emitter).
It is 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.
Read the API docs.
With the breaking releases from Summer 2023 we have started to ship our libraries with both CommonJS (cjs folder) and ESM builds (esm folder), see package.json for the detailed setup.
If you use an ES6-style import in your code files from the ESM build will be used:
import { EthereumJSClass } from '@ethereumjs/[PACKAGE_NAME]'
If you use Node.js specific require, the CJS build will be used:
const { EthereumJSClass } = require('@ethereumjs/[PACKAGE_NAME]')
Using ESM will give you additional advantages over CJS beyond browser usage like static code analysis / Tree Shaking which CJS can not provide.
The following methods are available by an internalized version of the ethjs-util package (MIT license), see internal.ts. The original package is not maintained any more and the original functionality will be replaced by own implementations over time (starting with the v7.1.3 release, October 2021).
They can be imported by name:
import { stripHexPrefix } from '@ethereumjs/util'
The EthereumJS GitHub organization and its repositories are managed by members of the former Ethereum Foundation JavaScript team and the broader Ethereum community. If you want to join for work or carry out improvements on the libraries see the developer docs for an overview of current standards and tools and review our code of conduct.
ethereumjs-wallet is a library for creating and managing Ethereum wallets. It provides functionalities for generating private keys, addresses, and signing transactions. Compared to @ethereumjs/util, it is more focused on wallet management rather than general utility functions.
web3-utils is a utility library that is part of the Web3.js suite. It provides a wide range of utility functions for Ethereum-related operations, including encoding/decoding, hashing, and address validation. It overlaps with @ethereumjs/util in many areas but is part of a larger framework for interacting with the Ethereum blockchain.
ethers is a complete Ethereum library that includes utilities for interacting with the Ethereum blockchain, managing wallets, and performing cryptographic operations. It offers similar functionalities to @ethereumjs/util but is more comprehensive, providing a full suite of tools for Ethereum development.
FAQs
A collection of utility functions for Ethereum
The npm package @ethereumjs/util receives a total of 1,411,702 weekly downloads. As such, @ethereumjs/util popularity was classified as popular.
We found that @ethereumjs/util demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
gem.coop is testing registry-level dependency cooldowns to limit exposure during the brief window when malicious gems are most likely to spread.

Security News
Following multiple malicious extension incidents, Open VSX outlines new safeguards designed to catch risky uploads earlier.

Research
/Security News
Threat actors compromised four oorzc Open VSX extensions with more than 22,000 downloads, pushing malicious versions that install a staged loader, evade Russian-locale systems, pull C2 from Solana memos, and steal macOS credentials and wallets.