NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1574 most downloaded on PyPI
eth-utils: Common utility functions for python code that interacts with Ethereum
Last release 6 months ago
25 Mar 2026
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 55 of 57 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
63 releases · first in 2017
Bump version: 6.0.0-beta.1 → 6.0.0
Bump version: 6.0.0-beta.1 → 6.0.0
Bump version: 5.3.1 → 6.0.0-beta.1
Bump version: 5.3.1 → 6.0.0-beta.1
Drop support for Python 3.8 and 3.9. ( #322 )
Add support for Python 3.14 ( #322 )
Add **kwargs to model_json_schema method to allow for newer Pydantic versions ( #321 )
Pin Pyupgrade to 3.21.2 in pre-commit config ( #323 )
optimize apply_formatters_to_sequence ( #307 )
One column per quarter.
Bump version: 5.3.0 → 5.3.1
Bump version: 5.3.0 → 5.3.1
Loosen expectation in test_get_aligned_abi_inputs_raises_type_error_for_incorrect_input_types ( #313 )
Bump version: 5.2.0 → 5.3.0
Bump version: 5.2.0 → 5.3.0
Replace arg["name"] with arg.get("name") to correctly handle optional names. ( #299 )
Add new methods: to_wei_decimals , and from_wei_decimals which take a number instead of a string ( #302 )
Add CamelModel pydantic model for validating objects and serializing to camelCase when used with by_alias=True , with the general expectation of a well-formed JSON-RPC object. ( #303 )
Bump version: 5.1.0 → 5.2.0
Bump version: 5.1.0 → 5.2.0
Update types in is_same_address to accept AnyAddress , str , or bytes . ( #289 )
Add Python 3.13 support and other misc. template updates ( #296 )
Bump version: 5.0.0 → 5.1.0
Bump version: 5.0.0 → 5.1.0
Correct error message in from_wei and to_wei ( #247 )
Remove unused hexbytes dependency that is causing a cyclic dependency issue ( #284 )
Removed _BaseHasLogger and _BaseHasExtendedDebugLogger , and the logger attribute in the HasLogger and HasExtendedDebugLogger is type hinted directly. ( #275 )
Add new humanize_hexstr function ( #285 )
Add memoryview to accepted input type for to_hex , to_int , to_bytes , and to_text ( #287 )
Bump version: 5.0.0-beta.1 → 5.0.0
Bump version: 5.0.0-beta.1 → 5.0.0
Run mypy locally via pre-commit hook, bump to mypy==1.10.0 ( #282 )
Bump version: 4.1.1 → 5.0.0-beta.1
Bump version: 4.1.1 → 5.0.0-beta.1
Updates to the latest eth-typing to use new ABI types for improved type checking in existing ABI utility functions. ( #271 )
Contract Application Binary Interface (ABI) utilities to obtain type and value information for functions and events . ( #271 )
Merge template to use bump-my-version and update release Make commands. ( #280 )
- Update networks for latest changes and testnets.
Update networks for latest changes and testnets. ( #276 )
Merge template updates, fixing docs CI and setting nightly CI runs for all testing ( #272 )
Updated eth_networks.json with latest networks. ( #273 )
No warning for outdated networks. ( #278 )
- Upgrades from the template with support for Python 3.12 and linting with blocklint .
Upgrades from the template with support for Python 3.12 and linting with blocklint . ( #268 )
Remove cached_property dependency, as it was only for <=py37 ( #269 )
- Web3.is_address now returns True for non-checksummed addresses.
Web3.is_address now returns True for non-checksummed addresses. ( #265 )
- Merge updates from the project template, notably: use pre-commit for linting and change the name of the master branch to main
Drop python 3.7 support ( #261 )
Merge updates from the project template, notably: use pre-commit for linting and change the name of the master branch to main ( #261 )
Correct booleans in pyproject.toml and add test for the presence of the eth_utils.version attribute ( #263 )
Bump version: 2.3.1 → 2.3.2
Bump version: 2.3.1 → 2.3.2
- Some users were experiencing encoding issues when parsing the networks json. Use UTF-8 explicitly.
Some users were experiencing encoding issues when parsing the networks json. Use UTF-8 explicitly. ( #259 )
Fix and add new test cases for invalid Network chain_id values. ( #256 )
#259
- Add Network utility methods to utilize network metadata for a given ChainId .
Add Network utility methods to utilize network metadata for a given ChainId . ( #253 )
- Add information to docs for utilities which did not have any.
Add information to docs for utilities which did not have any. ( #254 )
Pull latest from template repo to fix release script, update wording in comments and docs. ( #252 )
#242
- Add build.os config for readthedocs
Add build.os config for readthedocs ( #250 )
- Added humanize_wei utility to convert common values to more readable units.
Added humanize_wei utility to convert common values to more readable units. ( #194 )
- Add currency tests with float ether inputs.
Add currency tests with float ether inputs. ( #231 )
remove unused docs deps, bump version of remaining ( #239 )
merge updates from the python project template ( #240 )
- Allow a wider eth-hash dependency range
Allow a wider eth-hash dependency range ( #225 )
Performance improvement of up to 65% on is_0x_prefixed ( #223 )
Fix typo in documentation: hexidecimal -> hexadecimal ( #222 )
Update use of @cached_property for debug2 logging. ( #232 )
#226 , #235
Remove support for Python 3.6, add Python 3.11, misc dev internal updates ( #227 )
- Upgrade eth-typing to v3.0+, Add support for python 3.9 and 3.10 Remove support for python 3.5
Upgrade eth-typing to v3.0+, Add support for python 3.9 and 3.10 Remove support for python 3.5 ( #215 )
Nothing published for this version
- When a TypeError or ValueError is raised during apply_formatters_to_dict() , eth_utils appends some useful contextual information. It was trying to
When a TypeError or ValueError is raised during apply_formatters_to_dict() , eth_utils appends some useful contextual information. It was trying to re-create the old exception, but that sometimes fails, like with a JSONDecodeError , which expects more arguments in the constructor. So now we raise a basic TypeError or ValueError. ( #204 )
Update the type signature of to_canonical_address() , to_checksum_address() , and to_normalized_address() to allow bytes -typed address input. ( #205 )
Significant speedup of is_hex() and is_hexstr() . ( #202 )
Significant speedup of is_address() . Running a test that abi-encodes an array of 10 addresses was about 67% faster. ( #203 )
Upgrade eth-hash to v0.3.1, to use its exported type annotations instead of casting the results. ( #208 )
#196
#207
When a TypeError or ValueError is raised during ~eth_utils.applicators.apply_formatters_to_dict, eth_utils appends some useful contextual information. It was trying to re-create the old exception, but that sometimes fails, like with a JSONDecodeError, which expects more arguments in the constructor. So now we raise a basic TypeError or ValueError. (#204)
Update the type signature of ~eth_utils.address.to_canonical_address, ~eth_utils.address.to_checksum_address, and ~eth_utils.address.to_normalized_address to allow bytes-typed address input. (#205)
Significant speedup of ~eth_utils.hexadecimal.is_hex and ~eth_utils.hexadecimal.is_hexstr. (#202)
Significant speedup of ~eth_utils.address.is_address. Running a test that abi-encodes an array of 10 addresses was about 67% faster. (#203)
Upgrade eth-hash to v0.3.1, to use its exported type annotations instead of casting the results. (#208)
- Added a new type signature of apply_formatter_if to eth_utils curried module. Also added text_if_str and apply_formatters_to_dict.
Added a new type signature of apply_formatter_if to eth_utils curried module. Also added text_if_str and apply_formatters_to_dict. ( #201 )
#201
- Make sure all the eth_utils.curried methods are importable, plus a fix for curried typing of hexstr_if_str.
Make sure all the eth_utils.curried methods are importable, plus a fix for curried typing of hexstr_if_str. ( #156 )
Pass context to new exception in replace_exceptions decorator. ( #198 )
Ensure pickling/unpickling an ExtendedDebugLogger always gives back an ExtendedDebugLogger . ( #199 )
Nothing published for this version
Nothing published for this version
- Silence a deprecation error by importing from collections.abc, instead of collections.
Add is_hexstr as preferred method of checking if a given value is a hex string. ( #137 )
Improve performance of is_hex and is_hexstr by up to 40x ( #185 )
Add humanize_integer_sequence utility. ( #188 )
Add humanize_bytes utility. ( #189 )
Silence a deprecation error by importing from collections.abc, instead of collections. ( #186 )
- Add missing asterisk to MANIFEST.in
Add missing asterisk to MANIFEST.in ( #182 )
### Misc - #181
#181
### Misc - #177 , #180
#177 , #180
No significant changes.
No significant changes.
### Features - Add support for python3.8
Add support for python3.8 ( #174 )
- Expose DEBUG2 log level as top level module import
Expose DEBUG2 log level as top level module import ( #117 )
Add get_logger and get_extended_debug_logger utils ( #170 )
Setup towncrier to improve the quality of the release notes ( #172 )
- Caching for ExtendedDebugLogger.show_debug2 property
Released: August 5, 2019
Feature
Caching for ExtendedDebugLogger.show_debug2 property
- Fix HasLogger compatibility with other metaclasses.
Released: August 5, 2019
Feature
Add support for Python3.7
#165
Bugfix
Fix HasLogger compatibility with other metaclasses.
- Fix typing of clamp numeric utility.
Released: July 24, 2019
Feature
Add support for Python3.7
#165
Add humanize_ipfs_uri .
#162
Bugfix
Fix typing of clamp numeric utility.
- Use eth-typing types instead of eth-utils types, when available
Released: June 11, 2019
Maintenance
Use eth-typing types instead of eth-utils types, when available
- Add logging utilities HasLogger , ExtendedDebugLogger , HasExtendedDebugLogger and setup_DEBUG2_logging - #158
Released: May 16, 2019
Feature
Add logging utilities HasLogger , ExtendedDebugLogger , HasExtendedDebugLogger and setup_DEBUG2_logging - #158
- Fix eth_utils.currency.denom to be a real class with proper type declarations.
Released: April 30, 2019
Bugfix
Fix eth_utils.currency.denom to be a real class with proper type declarations.
#154
Fix eth_utils.functional.replace_exceptions type declarations.
#155
Feature
Add new eth_utils.clamp - #150
- Fix type declarations for eth_utils.functional.to_dict and eth_utils.funcional.to_ordered_dict - #151
Released: April 17, 2019
Bugfix
Fix type declarations for eth_utils.functional.to_dict and eth_utils.funcional.to_ordered_dict - #151
- Add new eth_utils.humanize.humanize_seconds and eth_utils.humanize.humanize_hash .
Released: April 16, 2019
Features
Add new eth_utils.humanize.humanize_seconds and eth_utils.humanize.humanize_hash .
#149
Enable PEP561 type hints
- Fixed eth_utils.abi.collapse_if_tuple not handling fixed-size tuple arrays.
Released: Dec 18, 2018
Bugfixes
Fixed eth_utils.abi.collapse_if_tuple not handling fixed-size tuple arrays.
- Support tuples in eth_utils.abi.function_abi_to_4byte_selector and a new eth_utils.abi.collapse_if_tuple - #141
Released: Dec 6, 2018
Features
Support tuples in eth_utils.abi.function_abi_to_4byte_selector and a new eth_utils.abi.collapse_if_tuple - #141
- Misc - Fix linting issues
Misc
Fix linting issues
- Use eth-typing v2.0.0, which may be a breaking change for downstream packages
Misc
Use eth-typing v2.0.0, which may be a breaking change for downstream packages
- Prevent from installing with Python 3.5.2 which has a fatal bug when ... is used in a type.
Bugfixes
Prevent from installing with Python 3.5.2 which has a fatal bug when ... is used in a type.
#125
Misc
Start using black for style checking.
- Move docs to RTD/Sphinx, with doctest
Move docs to RTD/Sphinx, with doctest
Update eth-typing dependency to 1.3.0
- Import more resources from implementation-specific “toolz” library in “toolz” wrapper module
Import more resources from implementation-specific “toolz” library in “toolz” wrapper module
- Update eth-typing dependency
Update eth-typing dependency
- Add ValidationError exception
Add ValidationError exception
- Reject str as a primitive in to_hex()
Reject str as a primitive in to_hex()
Faster int_to_big_endian implementation
- Update apply key map to catch conflicting keys
Update apply key map to catch conflicting keys
Add validation of 19 byte address
Support bytearrays in conversion functions
Apply formatters to sequence
- Add autouse fixture to print warnings
Add autouse fixture to print warnings
Change hexidecimal -> hexadecimal
Strictly accept text types for decode_hex
Remove remaining force_* utils
Nothing published for this version
Nothing published for this version
- Deprecate force bytes/text & formatting utils
Convert formatting from force
Backport pr45 into v0
Write validate conversion arguments decorator
Update hex and int conversions to work with new decorator
Deprecate force bytes/text & formatting utils
- Convert keccak from force_bytes
Swap in eth-hash for pysha3
Convert keccak from force_bytes
Convert address utils from force text/bytes
Import many of the application functions from web3.py
Add @combomethod decorator
Add tool to generate environment info
Add type conversion helpers
Convert precision to localcontext
Remove unnecessary future imports
Drop support for py27
- Constrain dependencies to major version
Constrain dependencies to major version
- Support for python 3.6
Support for python 3.6
Your coding agent can read these notes before it upgrades. Set up the MCP server →