Release Notes

v7 Breaking Changes Summary

See the v7 Migration Guide v7.0.0-beta.6 (2024-05-15)


  • Properly propagate exceptions from the message listener task to the main loop for persistent connection providers. (#3378)

Improved Documentation

  • Prunes the node onboarding text (#3371)

  • Stale example cleanup (#3374)

  • Merge migration guides into one page (#3379)

  • Simplify titles of docs guides (#3381)

  • Move ABI Types guide into the Troubleshooting page (#3382)

  • Distribute examples into relevant guides and delete Example page (#3383)

  • Add subscribe/unsubscribe API (#3386)

  • Introduces batch request API (#3393)


  • Add support for request batching via w3.batch_requests() context manager (sync and async). (#3370)

  • Allow request cache configuration on provider __init__() for all provider classes. (#3395)

Internal Changes - for Contributors

  • Merge the python project template, notably adding python 3.12 support (#3363)

  • Increase python-asyncio dependency to be >=0.21.2,<0.23 (#3369)

  • Bump to mypy==1.10.0 for pre-commit (#3377)

  • Move signed.rawTransaction -> signed.raw_transaction in eth module tests (#3380) v7.0.0-beta.5 (2024-04-26)

Breaking Changes

  • Snake-case remaining arguments fromBlock, toBlock, and blockHash in contract and filter methods where they are passed in as kwargs. (#3353)

  • Employ an exponential backoff strategy using the backoff_factor in ExceptionRetryConfiguration for HTTPProvider and AsyncHTTPProvider. Reduce the default initial delay to 0.125 seconds. (#3358)

  • Validate JSON-RPC responses more strictly against the JSON-RPC 2.0 specifications. BlockNumberOutofRange -> BlockNumberOutOfRange. (#3359)


  • messageHash and rawTransaction from eth-account have been deprecated for snake_case versions (#3348)


  • Raise Web3RPCError on JSON-RPC errors rather than Web3ValueError. Raise MethodNotSupported exception when a method is not supported within; keep MethodUnavailable for when a method is not available on the current provider (JSON-RPC error). (#3359)

Internal Changes - for Contributors

  • Bump eth-account dependency to >=0.12.2 (#3348)


  • Remove the deprecated personal namespace and all references to it. (#3350) v7.0.0-beta.4 (2024-04-11)


  • Fix misused call to endpoint_uri for all cases of PersistentConnectionProvider by being able to retrieve either the ipc_path or the endpoint_uri from the base class with endpoint_uri_or_ipc_path property. (#3319)

Improved Documentation

  • Fix eth_createAccessList docs to reflect the correct behavior. (#3327)


  • Use in-house exception wrappers for common Python exceptions, such as ValueError, TypeError, AttributeError, and AssertionError, for better control over exception handling. (#3300)

  • Add request formatter for maxFeePerBlobGas when sending blob transactions. Add formatters for blobGasPrice and blobGasUsed for eth_getTransactionReceipt. (#3322)

  • Add formatters to ensure that the result of a eth_createAccessList response can be plugged directly into an accessList in a transaction. (#3327)

  • Add Cancun support to EthereumTesterProvider; update Cancun-related fields in some internal types. (#3332)

Internal Changes - for Contributors

  • Use pre-commit for linting, run updated lint tools and fix errors (#3297)

  • Dependency updates: eth-abi>=5.0.1, eth-account>=0.12.0 eth-typing>=4.0.0 and hexbytes>=1.2.0 with relevant changes to support these. (#3298)

  • Remove code conditionally necessary for python<=3.7 (#3317) v7.0.0-beta.3 (2024-03-28)


  • Fix process_log() when parsing logs for events with indexed and non-indexed inputs. get_event_data() now compares log topics and event ABIs as hex values. (#3289)

  • Fix process_log for HexStr inputs. Explicit type coercion of entry topics and data values. (#3293)

  • Fix typing for json data argument to eth_signTypedData. (#3308)

Improved Documentation

  • Add note about middlewares change to v7 migration guide. (#3277)

  • Rearrange v7 migration guide and include upgrade path from WebsocketProviderV2 (#3310)


  • Add support for eth_getRawTransactionByHash RPC method (#3247)

  • Add user_message kwarg for human readable Web3Exception messages. (#3263)

  • Add formatters for type 3 transaction fields maxFeePerBlobGas and blobVersionedHashes. (#3314)

Internal Changes - for Contributors

  • Add a daily CI run (#3272)

  • Add linting for non-inclusive language with blocklint. (#3275)

Miscellaneous Changes

Performance Improvements

  • Importing ens._normalization is deferred until the first call of ens.utils.normalize_name in order to speed up import web3. (#3285)

  • Utilize async functionality when popping responses from request manager cache for persistent connection providers. (#3306)


  • Remove Contract.encodeABI() in favor of Contract.encode_abi() to follow standard conventions. (#3281) v7.0.0-beta.2 (2024-03-11)

Breaking Changes

  • Move middlewares -> middleware (#3276)


  • Fix/update methods and decorators in web3/_utils/ to address issues raised by mypy (#3269)

  • Catch all types of eth-abi DecodingError in EthereumTesterProvider->_make_request() (#3271)

Improved Documentation

  • Remove annual user survey prompt from docs (#3218)

  • Introduce feedback form banner prompt on docs (#3253)

  • Refresh of the middleware docs (#3266)

Miscellaneous Changes


  • Remove the ethpm module and related docs, tests, and dependencies (#3261) v7.0.0-beta.1 (2024-02-28)

Breaking Changes

  • Refactor the middleware setup so that request processors and response processors are separated. This will allow for more flexibility in the future and aid in the implementation of features such as batched requests. This PR also closes out a few outstanding issues and will be the start of the breaking changes for v7. Review PR for a full list of changes. (#3169)

  • Use a message listener background task for WebsocketProviderV2 rather than relying on ws.recv() blocking. Some breaking changes to API, notably listen_to_websocket -> process_subscriptions. (#3179)

  • Drop dependency on lru-dict library. (#3196)

  • Drop support for python 3.7 (#3198)

  • Return iterable of ABIFunction``s from the ``BaseContractFunctions iterator. (#3200)

  • Name changes internal to the library related to v7: WebsocketProvider -> LegacyWebSocketProvider, WebsocketProviderV2 -> WebSocketProvider (#3225)

  • CallOverride type change to StateOverride to reflect better the type name for the state override. eth_call is also not the only method with this param, making the name more generic. (#3227)

  • Rename beacon/ -> beacon/ (#3233)

  • EthereumTesterProvider now returns input for eth_getTransaction* for better consistency with JSON-RPC spec. (#3235)

  • Change the signature for the async version of wait_for_transaction_receipt() to use Optional[float] instead of float. (#3237)

  • get_default_ipc_path() and get_dev_ipc_path() now return the path value without checking if the geth.ipc file exists. (#3245)


  • Fix return type of AsyncContract.constructor (#3192)

  • Handle new geth errors related to waiting for a transaction receipt while transactions are still being indexed. (#3216)

Improved Documentation

  • Documentation was updated to reflect early changes to v7 from v6. A v6 -> v7 migration guide was also started and will be added to as v7 breaking changes are introduced. (#3211)

  • Remove ENS v6 breaking change warning from v7 (#3254)


  • Add AsyncIPCProvider (#2984)

  • Implement state_override parameter for eth_estimateGas method. (#3164)

  • Upgrade eth-tester to v0.10.0-b.1 and turn on eth_feeHistory support for EthereumTesterProvider. (#3172)

  • Add formatters for new Cancun network upgrade block header fields: blobGasUsed, excessBlobGas, and parentBeaconBlockRoot. (#3223)

  • Contract event get_logs results sorted by each ContractEvent logIndex. (#3228)

Internal Changes - for Contributors

  • Create test fixture for latest geth version. Run tests with geth in --dev mode. (#3191)

  • Validate geth version used to generate the integration test fixture against the version in the binary that is used to run the tests. (#3193)

  • Internal change to WebsocketProviderV2 before release: raise exceptions in message listener task by default; opting to silence them via a flag. (#3202)

  • Compile contracts with and test against new Solidity version v0.8.24. (#3204)

  • Formatting updates for black==24.1.0. (#3207)

  • Allow HTTP provider request retry configuration to be turned off appropriately. Internal change since v7 has not yet been released. (#3211)

  • Upgraded geth fixture version (#3231)

Miscellaneous Changes

Performance Improvements

  • Remove call to parse_block_identifier when initializing ContractCaller functions. (#3257)


  • normalize_request_parameters middleware was in a stale state and not being used or tested. This middleware has been removed. (#3211)

  • Remove deprecated geth.miner namespace and methods. (#3236) v6.14.0 (2024-01-10)


  • Change fee_history default behavior. If reward_percentiles arg not included, pass it to the provider as an empty list instead of None. (#3185)

  • Use importlib.metadata for version info if python>=3.8 (#3187)

Improved Documentation

  • Remove docs reference for removed protocol_version RPC method (#3183)

Internal Changes - for Contributors

  • Re-define how async vs sync core test suites are ran. (#3180)

  • Add basic import and version tests for the web3 module (#3187) v6.13.0 (2023-12-20)


  • Implement async eth_createAccessList RPC method to create an EIP-2930 access list. (#3167)

Internal Changes - for Contributors

  • Add flaky async Geth integration tests to CI (#3170)

  • Fix wrong test reference for EthereumTesterProvider integration test suite. (#3171)

  • Small fix for integration tests for tox to recognize independent patterns for each test run. (#3173) v6.12.0 (2023-12-11)

Improved Documentation

  • Make downloadable versions of docs available in pdf, htmlzip, and epub formats (#3153)

  • Add 2023 user survey fine art banner in the docs (#3159)

  • Polish the community resources docs page (#3162)


  • Implement createAccessList RPC endpoint to create an EIP-2930 access list. (#2381)

Internal Changes - for Contributors

  • Run flaky eth-tester tests on CI (#3157)

  • Pin pytest-asyncio dependency to <0.23 (#3160) v6.11.4 (2023-11-27)


  • Fix collision of w3 variable when initializing contract with function of the same name (#3147)

Miscellaneous Changes v6.11.3 (2023-11-08)


  • When coming back through the middleware onion after a request is made, we have the response id. Use it to match to the cached request information and process the response accordingly. (#3140)

Improved Documentation

  • Adds Discord bot template repo to Resources page (#3143)

Internal Changes - for Contributors

  • Additional contract abi documentation to make it a clear requirement for contract instances. (#2539)

  • Fix type annotations for web3 constants. (#3138)

  • Add upper pin to deprecated dependency lru-dict whose new minor version release introduced a typing issue with CI lint builds. (#3144)

  • Recompile test contracts with new Solidity version v0.8.23 to ensure compatibility. (#3146) v6.11.2 (2023-10-30)

Improved Documentation

  • Fix formatting in documentation for creating an account. (#3128)

  • Fix broken links for Apeworx and Sepolia faucet (#3130)

Internal Changes - for Contributors

  • Speed up the core test suite by splitting up sync and async tests. This reduces the CI build times to ~8min from ~12min. (#3111)

  • Re-compile test contracts with Solidity v0.8.22 to ensure compatibility with this latest Solidity version. (#3134)

  • Improvements on yielding to the event loop while searching in response caches and calling recv() on the websocket connection for WebSocketProviderV2. (#3135) v6.11.1 (2023-10-18)

Improved Documentation

  • Update WebsocketProviderV2 documentation. Document a general overview of the RequestProcessor class and its internal caches. (#3125)


  • Properly define an __await__() method on the _PersistentConnectionWeb3 class so a persistent connection may be initialized using the await pattern. Integration tests added for initializing the persistent connection using the await pattern. (#3125)

Internal Changes - for Contributors

  • Updates and refactoring for the WebsocketProviderV2 class and its internal supporting classes and logic. Separation of one-to-one and one-to-many request responses. Storing of one-to-many responses in a deque and one-to-one responses in a SimpleCache class. Provide an async lock around the websocket recv(). (#3125)

  • Add upper pin to hexbytes dependency to due incoming breaking change (#3127)

Miscellaneous Changes v6.11.0 (2023-10-11)

Breaking Changes (to Beta APIs)

  • Refactor the async iterator pattern for message streams from the websocket connection for WebsocketProviderV2 to a proper async iterator. This allows for a more natural usage of the iterator pattern and mimics the behavior of the underlying websockets library. (#3116)


  • Use hashes to compare equality of two AttributeDict classes (#3104)

  • Fix issues with formatting middleware, such as async_geth_poa_middleware and subscription responses for WebsocketProviderV2. (#3116)

Improved Documentation

  • Change docker-compose to docker compose in the Contributing docs examples. (#3107)

  • Updates to the WebsocketProviderV2 documentation async iterator example for iterating over a persistent stream of messages from the websocket connection via async for. (#3116)

  • Update outdated node and private key management verbiage. (#3117)


  • Allow passing in a float for a request_timeout for requests for the Beacon class. Update some Beacon API endpoints (sync and async). (#3106)

  • Add allow_list kwarg for exception_retry_middleware to allow for a custom list of RPC endpoints. Add a sleep between retries and a customizable backoff_factor to control the sleep time between retry attempts. (#3120)

Internal Changes - for Contributors

  • Refactor logic for the input_munger() method on the Method class. (#2987)

  • Pin mypy to v1.4.1, the last to support py37 (#3122) v6.10.0 (2023-09-21)

Breaking Changes (to Beta APIs)

  • Breaking change to the API for interacting with a persistent websocket connection via AsyncWeb3 and WebsocketProviderV2. This change internalizes the property and opts for a API achieved via a new WebsocketConnection class. With these changes, eth_subscription messages now return the subscription id as the subscription param and the formatted message as the result param. (#3096)


  • Return w3.eth.gas_price when calculating time based gas price strategy for an empty chain. (#1149)

  • Update LogReceipt and TxReceipt declarations. Remove LogReceipt’s payload and topic attributes. Refactor LogEntry to LogReceipt. (#3043)

  • Fixes AsyncEth.max_priority_fee_per_gas. It wasn’t falling back to eth_feeHistory since the MethodUnavailable error was introduced. (#3084)

Improved Documentation

  • Update WebsocketProviderV2 documentation to reflect the new public websocket API via the WebsocketConnection class. (#3096)


  • Improved error messaging for exceptions from malformed JSON-RPC responses. (#3053)

  • Enable filtering by non-indexed arguments for contract event get_logs(). (#3078)

  • Add eth_maxPriorityFeePerGas to exception_retry_middleware whitelist (#3090)

  • Sync responses for WebsocketProviderV2 open connections with requests via matching RPC id values. (#3096)

  • Properly JSON encode AttributeDict, bytes, and HexBytes when sending a JSON-RPC request by utilizing the in-house Web3JsonEncoder class. (#3101)

Internal Changes - for Contributors

  • Fix an issue with an IPC test present only on MacOSX. (#929)

  • Ignore flake8 rule F401 (unused import) in all files (#3097) v6.9.0 (2023-08-23)


  • Fix the type for input in TxData from HexStr -> HexBytes. (#3074)

  • Fix an issue with WebsocketProviderV2 when responses to a request aren’t found in the cache (None values). (#3075)

  • Re-expose some websockets constants found in web3.providers.websocket.websocket via web3.providers.websocket. (#3076)

  • Return NotImplemented constant, rather than raising NotImplementedError for NamedElementOnion.__add__(), based on Python standards. (#3080)

  • Only release async_lock if it’s locked to begin with. (#3083)

Improved Documentation

  • Add MEV blocking tutorial to Resources docs page (#3072)

  • Fix documentation around current state of get_logs() usage and arguments. (#3073)

  • Add an Ape hackathon kit to Resources documenation page (#3082) v6.8.0 (2023-08-02)


  • Fix the type for the optional param asking for “full transactions” when subscribing to newPendingTransactions via eth_subscribe to bool. (#3067)

Improved Documentation

  • Change docs to reflect AsyncHTTPProvider does accept ENS names now (#3070)


  • Return structured JSON-RPC errors for missing or unimplemented eth-tester methods. (#3061)

  • ENS name-to-address support for eth_subscribe. (#3066)

  • Asynchronous iterator support for AsyncWeb3 with WebsocketProviderV2 using async for syntax. (#3067)

Internal Changes - for Contributors

  • Minor fixes to type hinting in the core tests setup fixtures. (#3069) v6.7.0 (2023-07-26)


  • Test wheel build in separate directory and virtualenv (#3046)

  • Handle case where data gets returned as None in a JSON-RPC error response (#3054)

  • Fixed default windows IPC provider path to work with python 3.11 (#3058)

  • Fix return type for rpc_gas_price_strategy to int but also only convert the strategy_based_gas_price to hex if it is an int in the gas_price_strategy_middleware. (#3065)

Improved Documentation

  • Add note to Release Notes about v5 end-of-life and v6.6.0 yank (#3045)

  • Add documentation for WebsocketProviderV2 (beta). (#3048)


  • Add ENSIP-9 (Multichain Address Resolution) support for address() and setup_address() for ENS and AsyncENS classes. (#3030)

  • Support for eth_subscribe and eth_unsubscribe methods has been added with the introduction of a new websocket provider, WebsocketProviderV2. (#3048)

Internal Changes - for Contributors

  • Added recursive typing to ABIFunctionComponents type (#3063)

  • Upgrade eth-tester requirement to v0.9.0-b.1 (#3064) v6.6.1 (2023-07-12)


  • Add ens/specs to (#3039) v6.6.0 (2023-07-12)

Note: This release was missing the required ``ens/specs`` directory, so it was yanked from Pypi in favor of v6.6.1

Breaking Changes

  • ENS name normalization now uses ENSIP-15 by default. This is technically a breaking change introduced by ENS but, according to ENSIP-15, 99% of existing names should be unaffected. (#3024)


  • Handle None in the formatting middleware (#2546)

  • Fix for a possible bug in construct_sign_and_send_raw_middleware where the signed transaction was sent as bytes and expected to be converted to hex by formatting later on. It is now explicitly sent as the hex string hash within the middleware. (#2936)

  • Fixes max_priority_fee_per_gas. It wasn’t falling back to eth_feeHistory since the MethodUnavailable error was introduced. (#3002)

  • Properly initialize logger in AsyncHTTPProvider. (#3026)

  • Fix AsyncWeb3.solidity_keccak to match Web3.solidity_keccak. (#3034)

Improved Documentation

  • Replaced transaction examples with unused account addresses. (#2011)

  • Removed obsolete docs for camelCase miner methods and deploy (#2039)

  • Update documentation relating to ENS only being available on mainnet. ENS is available on all networks where the ENS contracts are deployed. (#3012)

  • Add first steps section and tidy up learning resources (#3013)

  • Replace references to jasoncarver.eth with ens.eth. (#3020)

  • Adds “Hackathon Helpers” section to Resources page (#3035)


  • Update ENS Resolver ABI (#1839)

  • async_http_retry_request_middleware, an async http request retry middleware for AsyncHTTPProvider. (#3009)

  • Add eth_getStorageAt() support for EthereumTesterProvider. (#3011)

  • Add async support for ENS name-to-address resolution via async_name_to_address_middleware. (#3012)

  • Add async support for the sign-and-send raw transaction middleware via construct_async_sign_and_send_raw_middleware(). (#3025)

Internal Changes - for Contributors

  • Remove some warnings from test output (#2991)

  • Introduced the logic for ENSIP-15 ENS name normalization. Originally this was done via a flag in this PR but changed to the default behavior in #3024 before release. (#3000)

Miscellaneous Changes


  • Removed references to deprecated middlewares with new tests to check default middlewares (#2972) v6.5.0 (2023-06-15)


  • Properly create a fresh cache for each instance of simple_cache_middleware if no cache is provided. Fixes a bug when using this middleware with multiple instances of Web3. (#2979)

  • Fix potential race condition when writing cache entries in simple_cache_middleware (#2981)

  • Catch UnicodeDecodeError for contract revert messages that cannot be decoded and issue a warning instead, raising a ContractLogicError with the raw data from the response. (#2989)

Improved Documentation

  • Introduces resources page to documentation (#2957)

  • Completed docstrings for ContractFunction and AsyncContractFunction classes (#2960)

  • Added ‘unsupported by any current clients’ note to the Eth.sign_typed_data docs (#2961)

  • Removed list of AsyncHTTPProvider-supported methods, it supports them all now (#2962)

  • Modernize the filtering guide, emphasizing get_logs (#2968)

  • Removed references to defunct providers in IPCProvider docs (#2971)

  • Update Matomo analytics script to move to cloud services (#2978)


  • Add the sign_typed_data method to the AsyncEth class (#2920)

  • Add support for Solidity Panic errors, available since Solidity 0.8.0. Raises ContractPanicError with appropriate messaging based on the known panic error codes. (#2986)

Internal Changes - for Contributors

  • lint-roll - dropped isort --recursive flag, not needed as of their v5, added black (#2930)

  • Moved ethpm deprecation warning to only show when the module is explicitly enabled (#2983)

  • Update make release to check remote upstream is pointing to ethereum/ (#2988)

  • Removed pluggy from dev requirements (#2992)

Miscellaneous Changes v6.4.0 (2023-05-15)


  • fix AttributeDicts unhashable if they contain lists recursively tupleizing them (#2908)


  • add deprecation notice for the ethPM module (#2953)

Improved Documentation

  • remove reference to the ability to specify a list of providers - you can’t anymore (#2949)

  • add deprecation notice for the ethPM module (#2953)


  • Update eth-tester to pull in Shanghai changes and make additional changes to fully support Shanghai with eth-tester. (#2958)

Internal Changes - for Contributors

  • bump sphinx and readthedocs py versions (#2945)

  • re-compile test contracts with Solidity v0.8.20 (#2951)

  • Set towncrier settings in pyproject.toml to match the python project template and change newfragment type “doc” to “docs” (#2959)

v6.3.0 (2023-05-03)


  • Add support for custom revert errors (#2795)

  • Add the modify_transaction method to the AsyncEth class (#2825)

  • add show_traceback flag to is_connected to allow user to see connection error reason (#2912)

  • Add a data attribute on the ContractLogicError class that returns raw data returned by the node. (#2922)

  • Add support via result formatters for reward type trace actions on tracing calls. (#2929)


  • Typing was being ignored for the get_ipc_path and get_dev_ipc_path functions because of a missing None return. Those two methods now explicitly return None and have an Optional in their type definition. (#2917)

  • fix AsyncEventFilterBuilder looking for Web3 instead of AsyncWeb3 (#2931)

  • Add check for null withdrawal field on get_block response (#2941)

Improved Documentation

  • Add a decision tree guide for sending transactions (#2919)

  • Update references to master branch (#2933)

  • Cleanup Quickstart guide and next steps (#2935)

  • Cleanup Overview page links and context (#2938)

Internal Changes - for Contributors

  • Added build to towncrier commands in Makefile (#2915)

  • Update win wheel CI builds to use python -m tox -r instead of specifying the tox executable directly. (#2923)

  • update pip and tox install on CI containers (#2927)

v6.2.0 (2023-04-12)


  • Adds async version of eth_getUncleCount methods (#2822)

  • Add the sign_transaction method to the AsyncEth class (#2827)

  • Add the replace_transaction method to the AsyncEth class (#2847)


  • Use TraceFilterParams instead of FilterParams for trace_filter typing (#2913)

Improved Documentation

  • Add welcome banner for Ethereum newcomers (#2905)

  • Added breaking changes from pr2448 to v6 migration guide (#2907)

v6.1.0 (2023-04-05)


  • Add tracing functionality back in via the tracing module, add formatters for human-readable input and output, and attach this module to Web3 on init / make it a default module. (#2851)

  • Add result formatters for withdrawals_root and withdrawals as part of Shanghai hard fork support. (#2868)

  • add eth_chainId to exception_retry_middleware whitelist (#2892)


  • Mark test_async_eth_sign with @pytest.mark.asyncio (#2858)

  • fix readthedocs broken version selector (#2883)

Improved Documentation

  • remove camelCased method deprecation notices from web3.eth docs (#2882)

  • Add doc blurb about multiple HTTPProviders with the same URL (#2889)

  • fix styling and external link formatting (#2897)

Internal Changes - for Contributors

  • Bump pytest from 6.2.5 to 7+ because of CI DeprecationWarning (#2863)

  • Require eth-abi v4 stable (#2886)

  • remove unused docs dependencies and bump version of remaining (#2890)

  • Update go-ethereum integration test fixture to use the latest version of geth - v1.11.5. (#2896)

  • Update geth_steps in CircleCI builds to pip install the proper version of py-geth. (#2898)

  • Update CircleCI windows orb path since it now uses python 3.11. (#2899)

  • Bump go version used in CI jobs that install and run go-ethereum and parameterize the version in circleci config file for ease of configuration. (#2900)

Miscellaneous changes

v6.0.0 (2023-03-14)


  • fix dict_to_namedtuple unable to handle empty dict as input (#2867)

v6.0.0-beta.11 (2023-02-24)


  • Add the sign method to the AsyncEth class (#2833)


  • More accurately define the eth_call return type as HexBytes since the response is converted to HexBytes in the pythonic formatters and there are differences between HexBytes and bytes types. (#2842)

  • Set default block_identifier in to None (#2846)

Improved Documentation

  • Remove unused module lines to instantiate the AsyncHTTPProvider (#2789)

  • Typos fix in docs (#2817)

  • Add/cleanup docs for the AsyncHTTPProvider in light of the new AsyncWeb3 class (#2821)

  • Remove user survey banner following close of survey (#2831)

Internal Changes - for Contributors

  • Do not invoke directly; use python -m build where appropriate. (#2714)

  • clean up ignored unused imports (#2838)

  • Recompile test contracts with the new Solidity version 0.8.19. (#2840)

  • Update py-geth version and re-generate integration test fixture with geth v1.11.2. (#2841)

Breaking changes

  • Use AsyncWeb3 class and preserve typing for the async api calls. (#2819)

  • Fix typing for CallOverrideParams and add proper request formatters for call state overrides. (#2843)

  • Remove python warning and doc notes related to unstable async providers. (#2845)

v6.0.0-beta.10 (2023-02-15)


  • add decode_tuples option to contract instantiation (#2799)


  • Fix ethpm import issues after making ipfshttpclient optional. (#2775)

  • Fix for recently-broken eth-tester exception message parsing for some exception cases. (#2783)

Improved Documentation

  • Added a v6 Migraion Guide (#2778)

  • Rebrand the library to lowercase “” (#2804)

  • remove references to Rinkeby or replace with Goerli (#2815)

Internal Changes - for Contributors

  • Organize the eth module into separate files for better readability. (#2753)

  • Rename the newly-split eth module files to match convention. (#2772)

  • Re-compile all test contracts with latest Solidity version. Refactor test fixtures. Adds a script that compiles all test contracts to the same directory with selected Solidity version. (#2797)

  • Updates to isort and black required some formatting changes and isort config refactoring. (#2802)

  • Compile test contracts using newly-released Solidity version 0.8.18. (#2803)

Breaking changes

  • All exceptions inherit from a custom class. EthPM exceptions inherit from EthPMException, ENS exceptions inherit from ENSException, and all other exceptions inherit from Web3Exception (#1478)

  • Reorganized contract to,, and In this change there was a small breaking change where the constructor of BaseContractCaller contract_function_class was defaulting to a ContractFunction now there is no default. This was done to separate the base class from the implementation. (#2567)

  • When calling a contract, use w3.eth.default_block if no block_identifier is specified instead of latest. (#2777)

  • Strict bytes type checking is now default for This change also adds a boolean flag on the Web3 class for turning this feature on and off, as well as a flag on the ENS class for control over a standalone ENS instance. (#2788)

  • When a method is not supported by a node provider, raise a MethodUnavailable error instead of the generic ValueError. (#2796)

  • dict to AttributeDict conversion is no longer a default result formatter. This conversion is now done via a default middleware that may be removed. (#2805)

  • Removed deprecated manager.request_async and associated methods. (#2810)

  • removed Rinkeby from list of allowed chains in EthPM (#2815)

v6.0.0-beta.9 (2023-01-03)


  • Add async w3.eth.get_block_transaction_count (#2687)

  • Support Python 3.11 (#2699)

  • Load the AsyncHTTPProvider with default async middleware and default async modules, just as the HTTPProvider. (#2736)

  • Add support for Nethermind/Gnosis revert reason formatting (#2739)

  • Added async functionality to filter (#2744)

  • Get contract address from CREATE and CREATE2 opcodes (#2762)


  • Fixing abi encoding for multidimensional arrays. (#2764)

Performance improvements

  • Some minor performance improvements to the SimpleCache class and simple cache middlewares (sync and async). (#2719)

  • Remove unnecessary await for generate_gas_price() method as it does not need to be awaited. Move this method to BaseEth to be used directly by both Eth and AsyncEth modules. (#2735)

Improved Documentation

  • Add user survey to docs banner (#2720)

  • Document improvements for private key info and account funding. (#2722)

  • Include eth-tester install note in quickstart (#2755)

Deprecations and Removals

  • Removal of Infura auto provider support. (#2706)

  • Removal of version module. (#2729)

  • Remove already-deprecated start_rpc and stop_rpc from the w3.geth.admin module. (#2731)

Internal Changes - for Contributors

  • Use regex pattern for black command for tox / make lint linting commands. (#2727)

  • Use regex pattern for mypy command for tox / make lint linting commands. (#2734)

  • Remove internal method apply_formatter_to_array and use the method with the same name from the eth-utils library. (#2737)

Miscellaneous changes

Breaking changes

  • Snakecase the processReceipt, processLog, createFilter, and getLogs methods (#2709)

  • Remove Parity module and references. (#2718)

  • Make the ipfshttpclient library opt-in via a web3 install extra. This only affects the ethpm ipfs backends, which rely on the library. (#2730)

v6.0.0-beta.8 (2022-11-14)


  • Async support for caching certain methods via async_simple_cache_middleware as well as constructing custom async caching middleware via async_construct_simple_cache_middleware. SimpleCache class was also added to the public utils module. (#2579)

  • Remove upper pins on dependencies (#2648)

  • Async support for beacon api. (#2689)

  • If the loop for a cached async session is closed, or the session itself was closed, create a new session at that cache key and properly close and evict the stale session. (#2713)


  • bump sphinx_rtd_theme version to fix missing unordered list bullets (#2688)

  • Fix bug to generate unique cache keys when multi-threading & with unique event loops for async. (#2690)

  • Properly release async_lock for session requests if an exception is raised during a task. (#2695)

Internal Changes - for Contributors

  • move definition of RTD install requirements file from their dashboard into .readthedocs.yml, and remove unused sphinx-better-theme from requirements (#2688)

Miscellaneous changes

Breaking changes

  • Remove support for dictionary-based caches, for simple-cache-middleware, in favor of the internal SimpleCache class. (#2579)

  • Snakecase the clientVersion method (#2686)

  • change instances of createFilter to create_filter (#2692)

  • Remove SolidityError in favor of ContractLogicError (#2697)

  • Snakecase the solidityKeccak method (#2702)

  • Snakecase the fromWeb3 method (#2703)

  • Snakecase the toBytes, toHex, toInt, toJSON, and toText methods (#2707)

  • Snakecase the toAddress, isChecksumAddress, and toChecksumAddress methods (#2708)

v6.0.0-beta.7 (2022-10-19)


Improved Documentation

  • Added Chainstack link to quickstart docs. (#2677)

Deprecations and Removals

  • Remove Ropsten auto provider and the relevant references to Ropsten across the repo (#2672)

Internal Changes - for Contributors

  • Clean up remaining uses of deprecated eth_abi methods. (#2668)

Miscellaneous changes

v6.0.0-beta.6 (2022-09-26)


  • Protobuf dependency breaks at version 3.20.2 and above; pin to 3.20.1 for now. (#2657)


  • Add new predefined block identifiers safe and finalized. (#2652)

v6.0.0-beta.5 (2022-09-19)

Breaking Changes

  • Removed IBAN since it was an unused feature (#2537)

  • Update eth-tester dependency to v0.7.0-beta.1; Update eth-account version to >=0.7.0,<0.8.0 (#2623)

  • Remove WEB3_INFURA_API_KEY environment variable in favor of WEB3_INFURA_PROJECT_ID. Change InfuraKeyNotFound exception to InfuraProjectIdNotFound (#2634)

  • Remove Kovan auto provider (#2635)

  • Snakecase the isConnected method (#2643)

  • Snakecase the toWei and fromWei methods (#2647)


  • Fix eth-tester key remapping for logsBloom and receiptsRoot (#1630)

  • Improve upon issues with session caching - better support for multithreading and make sure session eviction from cache does not happen prematurely. (#2409)

  • Allow classes to inherit from the Web3 class by attaching modules appropriately. (#2592)

  • fixed bug in how async_eth_tester_middleware fills default fields (#2600)

  • Allow hex for value field when validating via validate_payable() contracts method (#2602)

  • Update Beacon API to v2.3.0 (#2616)

  • Move flaky option to top-level (#2642)

Documentation Updates

  • Update Proof of Authority middleware (geth_poa_middleware) documentation for better clarity. (#2538)

  • Add some missing supported async middlewares to docs. (#2574)

  • Introduce AsyncENS and availability on w3 instance in ENS guide. (#2585)

  • Fix typo in docs (#2613)

  • remove section for deleted account.recoverHash method (#2615)

  • examples docs gave incorrect return type for eth.get_transaction, fixed (#2617)

  • minor typo fix in contracts overview (#2628)

  • fix bug in Deploying new contracts example (#2646)


  • Support for Account class access in AsyncEth via async_w3.eth.account (#2580)

  • Expose public abi utility methods: get_abi_output_names() and get_abi_input_names() (#2596)

  • update all references to deprecated eth_abi.encode_abi to eth_abi.encode (#2621)

  • update all references to deprecated eth_abi.decode_abi to eth_abi.decode (#2636)

  • Add Sepolia auto provider (#2639)


v6.0.0-beta.4 (2022-07-13)

Breaking Changes

  • sha3 and soliditySha3 were previously deprecated and now removed (#2479)

  • Remove deprecated methods from Geth, Parity and Net modules (#2480)

  • Provide better messaging to wrong arguments for contract functions, especially for tuple argument types. (#2556)


  • Properly format block_number for eth_getTransactionCount when using EthereumTesterProvider (#1801)

  • removed Optional type hints for passphrase arguments that aren’t actually optional (#2511)

  • Fix is_dynamic_fee_transaction and TRANSACTION_DEFAULTS when gas_price_strategy returns zero (#2562)

Documentation Updates

  • Remove deprecated methods from Geth, Parity, and Net modules (#2480)

  • replace double- with single-quotes to make f-string valid (#2504)

  • added geth personal_sign and personal_ec_recover documentation (#2511)


  • Add transaction result formatters for type and chainId to convert values to int if hexadecimal if the field is not null (#2491)

  • Add a global flag on the provider for enabling / disabling CCIP Read for calls: global_ccip_read_enabled (defaults to True). (#2499)

  • Deprecate Geth Admin StartRPC and StopRPC for StartHTTP and StopHTTP (#2507)

  • Added Async support for ENS (#2547)

  • support multi-dimensional arrays for ABI tuples types (#2555)


v6.0.0-beta.3 (2022-06-01)

Breaking Changes

  • Removed deprecated methods from eth and geth (#1416)


  • Fix bug in _is_latest_block_number_request in cache middleware (#2185)

  • Increase cache size to allow for 20 entries. (#2477)

  • format receipt.type to int and to HexBytes (#2482)

  • Only thread lock for methods attempting to access the cache for caching middleware. (#2496)

Documentation Updates

  • Fix typo in simple_cache_middleware example (#2449)

  • Fix dict type hints in EventScanner example (#2469)

  • Add clarification around ValueError and Local Signing middleware (#2474)


  • Add async version of contract functionality (#2270)

  • ENSIP-10 / wildcard resolution support for ENS module (#2411)

  • CCIP Read support and finalize implementation of and add tests for ENS offchain resolution support (#2457)


v6.0.0-beta.2 (2022-04-27)

Breaking Changes

  • Audit .rst and .py files and convert all Web3 instance variable names to w3 to avoid confusion with the web3 module. (#1183)

  • Update dependency requirements: - eth-utils - eth-abi - eth-tester - eth-account - eth-typing (#2342)

  • Add attach_methods() to Module class to facilitate attaching methods to modules. (#2383)

  • Move IOError -> OSError (#2434)

Documentation Updates

  • Clarify info about Infura filters over HTTP (#2322)

  • Document reading private keys from environment variables (#2380)

  • Add example for the construct_sign_and_send_raw_middleware when connected to a hosted node (#2410)

  • Doc fix: Pending transaction filter returns a TransactionFilter not a BlockFilter (#2444)


  • Add ‘get_text’ method to look up ENS text record values (#2286)

  • For, validate that the forward resolution returns the same address as provided by the user as per the ENS documentation recommendation for Reverse Resolution. (#2420)

  • Add sync chain_id to simple_middleware_cache (#2425)


v6.0.0-beta.1 (2022-02-28)

Breaking Changes

  • Update websockets dependency to v10+ (#2324)

  • Remove support for the unsupported Python 3.6 Also removes outdated Parity tests (#2343)

  • Update Sphinx requirement to >=4.2.0,<5 (#2362)


  • Fix types for gas, and gasLimit: Wei -> int. Also fix types for effectiveGasPrice: (int -> Wei) (#2330)


  • Added session caching to the AsyncHTTPProvider (#2016)

  • Add support for Python 3.10 (#2175)

  • Added ‘Breaking Changes’ and ‘Deprecations’ categories to our release notes (#2340)

  • Add async eth.get_storage_at method (#2350)

  • Upgrade jsonschema version to >=4.0.0<5 (#2361)


v5.28.0 (2022-02-09)


  • Added Async functions for Geth Personal and Admin modules (#1413)

  • async support for formatting, validation, and geth poa middlewares (#2098)

  • Calculate a default maxPriorityFeePerGas using eth_feeHistory when eth_maxPriorityFeePerGas is not available, since the latter is not a part of the Ethereum JSON-RPC specs and only supported by certain clients. (#2259)

  • Allow NamedTuples in ABI inputs (#2312)

  • Add async eth.syncing method (#2331)


  • remove ens.utils.dict_copy decorator (#1423)

  • The exception retry middleware whitelist was missing a comma between txpool and testing (#2327)

  • Properly initialize external modules that do not inherit from the web3.module.Module class (#2328)

v5.27.0 (2022-01-31)


  • Added Async functions for Geth TxPool (#1413)

  • external modules are no longer required to inherit from the web3.module.Module class (#2304)

  • Add async eth.get_logs method (#2310)

  • add Async access to default_account and default_block (#2315)

  • Update eth-tester and eth-account dependencies to pull in bugfix from eth-keys (#2320)


  • Fixed issues with parsing tuples and nested tuples in event logs (#2211)

  • In ENS the contract function to resolve an ENS address was being called twice in error. One of those calls was removed. (#2318)

  • to_hexbytes block formatters no longer throw when value is None (#2321)

Improved Documentation

  • fix typo in eth.account docs (#2111)

  • explicitly add output_values to contracts example (#2293)

  • update imports for AsyncHTTPProvider sample code (#2302)

  • fixed broken link to filter schema (#2303)

  • add github link to the main docs landing page (#2313)

  • fix typos and update referenced geth version (#2326)


v5.26.0 (2022-01-06)


  • Add middlewares property to NamedElementOnion / web3.middleware_onion. Returns current middlewares in proper order for importing into a new Web3 instance (#2239)

  • Add async eth.hashrate method (#2243)

  • Add async eth.chain_id method (#2251)

  • Add async eth.mining method (#2252)

  • Add async eth.get_transaction_receipt and eth.wait_for_transaction_receipt methods (#2265)

  • Add async eth.accounts method (#2284)

  • Support for attaching external modules to the Web3 instance when instantiating the Web3 instance, via the external_modules argument, or via the new attach_modules() method (#2288)


  • Fixed doctest that wasn’t running in docs/contracts.rst (#2213)

  • Key mapping fix to eth-tester middleware for access list storage keys (#2224)

  • Inherit Web3 instance middlewares when instantiating ENS with ENS.fromWeb3() method (#2239)

Improved Documentation

  • Fix example docs to show a TransactionNotFound error, instead of None (#2199)

  • fix typo in ethpm.rst (#2277)

  • Clarify provider usage in Quickstart docs (#2287)

  • Address common BSC usage question (#2289)


v5.25.0 (2021-11-19)


  • Support for w3.eth.get_raw_transaction_by_block, and async support for w3.eth.get_raw_transaction_by_block (#2209)


  • BadResponseFormat error thrown instead of KeyError when a response gets sent back without a result key. (#2188)

Improved Documentation

  • Correct link to Websocket library documentation (#2173)

  • Doc update to make it clearer that enable_unstable_package_management() method is on the web3 instance (#2208)


v5.24.0 (2021-09-27)


  • Add async eth.send_raw_transaction method (#2135)

  • Updated eth-account version to v0.5.6 - adds support for signing typed transactions without needing to explicitly set the transaction type and now accepts correct JSON-RPC structure for accessList for typed transactions (#2157)


  • Encode block_count as hex before making eth_feeHistory RPC call (#2117)

Improved Documentation

  • Fix typo in AsyncHTTPProvider docs (#2131)

  • Update AsyncHTTPProvider doc Supported Methods to include web3.eth.send_raw_transaction(). (#2135)

  • Improve messaging around usage and implementation questions, directing users to the appropriate channel (#2138)

  • Clarify some contract ValueError error messages. (#2146)

  • Updated docs for w3.eth.account.sign_transaction to reflect that transaction type is no longer needed to successfully sign typed transactions and to illustrate how to structure an optional accessList parameter in a typed transaction (#2157)


v5.23.1 (2021-08-27)


  • Add constants for the zero address, zero hash, max int, and wei per ether. (#2109)

Improved Documentation

  • Renamed “1559 transaction” to “dynamic fee transaction” where appropriate to keep consistency among the general code base for 1559 transaction (type=2) naming (#2118)

  • Update AsyncHTTPProvider doc example to include modules and middlewares keyword arguments (#2123)


v5.23.0 (2021-08-12)


  • Add support for eth_feeHistory RPC method (#2038)

  • Add support for eth_maxPriorityFeePerGas RPC method (#2100)


  • Hot fix for string interpolation issue with contract function call decoding exception to facilitate extracting a meaningful message from the eth_call response (#2096)

  • Bypass adding a gasPrice via the gas price strategy, if one is set, when EIP-1559 transaction params are used for send_transaction (#2099)

Improved Documentation

  • Update feeHistory docs (#2104)

v5.22.0 (2021-08-02)


  • Add support for eth_getRawTransactionByHash RPC method (#2039)

  • Add AsyncNet module (#2044)

  • Add async eth.get_balance, eth.get_code, eth.get_transaction_count methods. (#2056)

  • eth_signTransaction support for eip-1559 params ‘maxFeePerGas’ and ‘maxPriorityFeePerGas’ (#2082)

  • Add support for async (#2083)


  • If a transaction hash was passed as a string rather than a HexByte to w3.eth.wait_for_transaction_receipt, and the time was exhausted before the transaction is in the chain, the error being raised was a TypeError instead of the correct TimeExhausted error. This is because the to_hex method in the TimeExhausted error message expects a primitive as the first argument, and a string doesn’t qualify as a primitive. Fixed by converting the transaction_hash to HexBytes instead. (#2068)

  • Hot fix for a string interpolation issue in message when BadFunctionCallOutput is raised for call_contract_function() (#2069)

  • fill_transaction_defaults() no longer sets a default gasPrice if 1559 fees are present in the transaction parameters. This fixes sign-and-send middleware issues with 1559 fees. (#2092)

Improved Documentation

  • Clarify that send_transaction, modify_transaction, and replace_transaction return HexByte objects instead of strings. (#2058)

  • Added troubleshooting section for Microsoft Visual C++ error on Windows machines (#2077)

  • Updated the sign-and-send middleware docs to include EIP-1559 as well as legacy transaction examples (#2092)


v5.21.0 (2021-07-12)


  • Adds support for EIP 1559 transaction keys: maxFeePerGas and maxPriorityFeePerGas (#2060)


  • Bugfix where an error response got passed to a function expecting a block identifier.

    Split out null result formatters from the error formatters and added some tests. (#2022)

  • Fix broken tests and use the new 1559 params for most of our test transactions. (#2053)

  • Set a default maxFeePerGas value consistent with Geth (#2055)

  • Fix bug in geth PoA middleware where a None response should throw a BlockNotFound error, but was instead throwing an AttributeError (#2064)

Improved Documentation

  • Added general documentation on unit and integration testing and how to contribute to our test suite. (#2053)

v5.20.1 (2021-07-01)


  • Have the geth dev IPC auto connection check for the WEB3_PROVIDER_URI environment variable. (#2023)

Improved Documentation

  • Remove reference to allowing multiple providers in docs (#2018)

  • Update “Contract Deployment Example” docs to use py-solc-x as solc is no longer maintained. (#2020)

  • Detail using unreleased Geth builds in CI (#2037)

  • Clarify that a missing trie node error could occur when using block_identifier with .call() on a node that isn’t running in archive mode (#2048)


v5.20.0 (2021-06-09)


  • Add new AsyncHTTPProvider. No middleware or session caching support yet.

    Also adds async w3.eth.gas_price, and async w3.isConnected() methods. (#1978)

  • Add ability for AsyncHTTPProvider to accept middleware

    Also adds async gas_price_strategy middleware, and moves gas estimate to middleware.

    AsyncEthereumTesterProvider now inherits from AsyncBase (#1999)

  • Support state_override in contract function call. (#2005)


  • Test ethpm caching + bump Sphinx version. (#1977)

Improved Documentation

  • Clarify solidityKeccak documentation. (#1971)

  • Improve contributor documentation context and ordering. (#2008)

  • Add docs for unstable AsyncHTTPProvider (#2017)


v5.19.0 (2021-04-28)


  • Handle optional eth_call state override param. (#1921)

  • Add list_storage_keys deprecate listStorageKeys (#1944)

  • Add net_peers deprecate netPeers (#1946)

  • Add trace_replay_transaction deprecate traceReplayTransaction (#1949)

  • Add add_reserved_peer deprecate addReservedPeer (#1951)

  • Add parity.set_mode, deprecate parity.setMode (#1954)

  • Add parity.trace_raw_transaction, deprecate parity.traceRawTransaction (#1955)

  • Add parity.trace_call, deprecate parity.traceCall (#1957)

  • Add trace_filter deprecate traceFilter (#1960)

  • Add trace_block, deprecate traceBlock (#1961)

  • Add trace_replay_block_transactions, deprecate traceReplayBlockTransactions (#1962)

  • Add parity.trace_transaction, deprecate parity.traceTransaction (#1963)

Improved Documentation

  • Document eth_call state overrides. (#1965)


v5.18.0 (2021-04-08)


  • Add w3.eth.modify_transaction deprecate w3.eth.modifyTransaction (#1886)

  • Add w3.eth.get_transaction_receipt, deprecate w3.eth.getTransactionReceipt (#1893)

  • Add w3.eth.wait_for_transaction_receipt deprecate w3.eth.waitForTransactionReceipt (#1896)

  • Add w3.eth.set_contract_factory deprecate w3.eth.setContractFactory (#1900)

  • Add w3.eth.generate_gas_price deprecate w3.eth.generateGasPrice (#1905)

  • Add w3.eth.set_gas_price_strategy deprecate w3.eth.setGasPriceStrategy (#1906)

  • Add w3.eth.estimate_gas deprecate w3.eth.estimateGas (#1913)

  • Add w3.eth.sign_typed_data deprecate w3.eth.signTypedData (#1915)

  • Add w3.eth.get_filter_changes deprecate w3.eth.getFilterChanges (#1916)

  • Add eth.get_filter_logs, deprecate eth.getFilterLogs (#1919)

  • Add eth.uninstall_filter, deprecate eth.uninstallFilter (#1920)

  • Add w3.eth.get_logs deprecate w3.eth.getLogs (#1925)

  • Add w3.eth.submit_hashrate deprecate w3.eth.submitHashrate (#1926)

  • Add w3.eth.submit_work deprecate w3.eth.submitWork (#1927)

  • Add w3.eth.get_work, deprecate w3.eth.getWork (#1934)

  • Adds public get_block_number method. (#1937)

Improved Documentation

  • Add ABI type examples to docs (#1890)

  • Promote the new Ethereum Python Discord server on the README. (#1898)

  • Escape reserved characters in install script of Contributing docs. (#1909)

  • Add detailed event filtering examples. (#1910)

  • Add docs example for tuning log levels. (#1928)

  • Add some performance tips in troubleshooting docs. (#1929)

  • Add existing contract interaction to docs examples. (#1933)

  • Replace Gitter links with the Python Discord server. (#1936)


v5.17.0 (2021-02-24)


  • Added get_transaction_count, and deprecated getTransactionCount (#1844)

  • Add w3.eth.send_transaction, deprecate w3.eth.sendTransaction (#1878)

  • Add web3.eth.sign_transaction, deprecate web3.eth.signTransaction (#1879)

  • Add w3.eth.send_raw_transaction, deprecate w3.eth.sendRawTransaction (#1880)

  • Add w3.eth.replace_transaction deprecate w3.eth.replaceTransaction (#1882)

Improved Documentation

  • Fix return type of send_transaction in docs. (#686)

v5.16.0 (2021-02-04)


  • Added get_block_transaction_count, and deprecated getBlockTransactionCount (#1841)

  • Move defaultAccount to default_account. Deprecate defaultAccount. (#1848)

  • Add eth.default_block, deprecate eth.defaultBlock. Also adds parity.default_block, and deprecates parity.defaultBlock. (#1849)

  • Add eth.gas_price, deprecate eth.gasPrice (#1850)

  • Added eth.block_number property. Deprecated eth.blockNumber (#1851)

  • Add eth.chain_id, deprecate eth.chainId (#1852)

  • Add eth.protocol_version, deprecate eth.protocolVersion (#1853)

  • Add eth.get_code, deprecate eth.getCode (#1856)

  • Deprecate eth.getProof, add eth.get_proof (#1857)

  • Add eth.get_transaction, deprecate eth.getTransaction (#1858)

  • Add eth.get_transaction_by_block, deprecate eth.getTransactionByBlock (#1859)

  • Add get_uncle_by_block, deprecate getUncleByBlock (#1862)

  • Add get_uncle_count, deprecate getUncleCount (#1863)


  • Fix event filter creation if the event ABI contains a values key. (#1807)

Improved Documentation

  • Remove v5 breaking changes link from the top of the release notes. (#1837)

  • Add account creation troubleshooting docs. (#1855)

  • Document passing a struct into a contract function. (#1860)

  • Add instance configuration troubleshooting docs. (#1865)

  • Clarify nonce lookup in sendRawTransaction docs. (#1866)

  • Updated docs for web3.eth methods: eth.getTransactionReceipt and eth.waitForTransactionReceipt (#1868)

v5.15.0 (2021-01-15)


  • Add get_storage_at method and deprecate getStorageAt. (#1828)

  • Add eth.get_block method and deprecate eth.getBlock. (#1829)


  • PR #1585 changed the error that was coming back from eth-tester when the Revert opcode was called, which broke some tests in downstream libraries. This PR reverts back to raising the original error. (#1813)

  • Added a new ContractLogicError for when a contract reverts a transaction. ContractLogicError will replace SolidityError, in v6. (#1814)

Improved Documentation

  • Introduce Beacon API documentation (#1836)


v5.14.0 (2021-01-05)


  • Remove docs/web3.* from the gitignore to allow for the beacon docs to be added to git, and add beacon to the default web3 modules that get loaded. (#1824)

  • Remove auto-documenting from the Beacon API (#1825)


  • Introduce experimental Ethereum 2.0 beacon node API (#1758)

  • Add new get_balance method on Eth class. Deprecated getBalance. (#1806)


v5.13.1 (2020-12-03)


  • Handle revert reason parsing for Ganache (#1794)

Improved Documentation

  • Document Geth and Parity/OpenEthereum fixture generation (#1787)


v5.13.0 (2020-10-29)


  • Raise SolidityError exceptions that contain the revert reason when a call fails. (#941)


  • Update eth-tester dependency to fix tester environment install version conflict. (#1782)


v5.12.3 (2020-10-21)


v5.12.2 (2020-10-12)


  • Address the use of multiple providers in the docs (#1701)

  • Remove stale connection errors from docs (#1737)

  • Allow ENS name resolution for methods that use the Method class (#1749)


v5.12.1 (2020-09-02)


v5.12.0 (2020-07-16)


  • Update and ethpm module to EthPM v3 specification. (#1652)

  • Allow consumer to initialize HttpProvider with their own requests.Session. This allows the HttpAdapter connection pool to be tuned as desired. (#1469)

Improved Documentation

  • Use ethpm v3 packages in examples documentation. (#1683)

  • Modernize the deploy contract example. (#1679)

  • Add contribution guidelines and a code of conduct. (#1691)


v5.12.0-beta.3 (2020-07-15)


  • Include ethpm-spec solidity examples in distribution. (#1686)

v5.12.0-beta.2 (2020-07-14)


  • Support ethpm-spec submodule in distributions. (#1682)

Improved Documentation

  • Modernize the deploy contract example. (#1679)

  • Use ethpm v3 packages in examples documentation. (#1683)

v5.12.0-beta.1 (2020-07-09)


  • Allow consumer to initialize HttpProvider with their own requests.Session. This allows the HttpAdapter connection pool to be tuned as desired. (#1469)

  • Update and ethpm module to EthPM v3 specification. (#1652)


  • Update outdated reference url in ethpm docs and tests. (#1680)

Improved Documentation

  • Add a getBalance() example and provide more context for using the fromWei and toWei utility methods. (#1676)

  • Overhaul the Overview documentation to provide a tour of major features. (#1681)

v5.11.1 (2020-06-17)


  • Added formatter rules for eth_tester middleware to allow getBalance() by using integer block numbers (#1660)

  • Fix type annotations within the module. Several arguments that defaulted to None were not declared Optional. (#1668)

  • Fix type annotation warning when using string URI to instantiate an HTTP or WebsocketProvider. (#1669)

  • Fix type annotations within the web3 modules. Several arguments that defaulted to None were not declared Optional. (#1670)

Improved Documentation

  • Breaks up links into three categories (Intro, Guides, and API) and adds content to the index page: a lib introduction and some “Getting Started” links. (#1671)

  • Fills in some gaps in the Quickstart guide and adds provider connection details for local nodes. (#1673)

v5.11.0 (2020-06-03)


  • Accept a block identifier in the Contract.estimateGas method. Includes a related upgrade of eth-tester to v0.5.0-beta.1. (#1639)

  • Introduce a more specific validation error, ExtraDataLengthError. This enables tools to detect when someone may be connected to a POA network, for example, and provide a smoother developer experience. (#1666)


  • Correct the type annotations of FilterParams.address (#1664)

Improved Documentation

  • Corrects the return value of getTransactionReceipt, description of caching middleware, and deprecated method names. (#1663)

  • Corrects documentation of websocket timeout configuration. (#1665)

v5.10.0 (2020-05-18)


  • An update of eth-tester includes a change of the default fork from Constantinople to Muir Glacier. #1636


  • was incorrectly annotated so that MyEvent was marked as a ContractEvent instance. Fixed to be a class type, i.e., Type[ContractEvent]. (#1646)

  • IPCProvider correctly handled pathlib.Path input, but warned against its type. Fixed to permit Path objects in addition to strings. (#1647)


v5.9.0 (2020-04-30)


  • Upgrade eth-account to use v0.5.2+. eth-account 0.5.2 adds support for hd accounts

    Also had to pin eth-keys to get dependencies to resolve. (#1622)


  • Fix local_filter_middleware new entries bug (#1514)

  • ENS name and ENS address can return None. Fixes return types. (#1633)

v5.8.0 (2020-04-23)


  • Introduced list_wallets method to the GethPersonal class. (#1516)

  • Added block_identifier parameter to ContractConstructor.estimateGas method. (#1588)

  • Add snake_case methods to Geth and Parity Personal Modules.

    Deprecate camelCase methods. (#1589)

  • Added new weighted keyword argument to the time based gas price strategy.

    If True, it will more give more weight to more recent block times. (#1614)

  • Adds support for Solidity’s new(ish) receive function.

    Adds a new contract API that mirrors the existing fallback API: contract.receive (#1623)


  • Fixed hasattr overloader method in the web3.ContractEvent, web3.ContractFunction, and web3.ContractCaller classes by implementing a try/except handler that returns False if an exception is raised in the __getattr__ overloader method (since __getattr__ HAS to be called in every __hasattr__ call).

    Created two new Exception classes, ‘ABIEventFunctionNotFound’ and ‘ABIFunctionNotFound’, which inherit from both AttributeError and MismatchedABI, and replaced the MismatchedABI raises in ContractEvent, ContractFunction, and ContractCaller with a raise to the created class in the __getattr__ overloader method of the object. (#1594)

  • Change return type of rpc_gas_price_strategy from int to Wei (#1612)

Improved Documentation

  • Fix typo in “Internals” docs. Changed asyncronous –> asynchronous (#1607)

  • Improve documentation that introduces and troubleshoots Providers. (#1609)

  • Add documentation for when to use each transaction method. (#1610)

  • Remove incorrect web3 for w3 in doc example (#1615)

  • Add examples for using web3.contract via the ethpm module. (#1617)

  • Add dark mode to documentation. Also fixes a bunch of formatting issues in docs. (#1626)


v5.7.0 (2020-03-16)


  • Add snake_case methods for the net module

    Also moved net module to use ModuleV2 instead of Module (#1592)


  • Fix return type of eth_getCode. Changed from Hexstr to HexBytes. (#1601)


v5.6.0 (2020-02-26)


  • Add snake_case methods to Geth Miner class, deprecate camelCase methods (#1579)

  • Add snake_case methods for the net module, deprecate camelCase methods (#1581)

  • Add PEP561 type marker (#1583)


  • Increase replacement tx minimum gas price bump

    Parity/OpenEthereum requires a replacement transaction’s gas to be a minimum of 12.5% higher than the original (vs. Geth’s 10%). (#1570)

v5.5.1 (2020-02-10)

Improved Documentation

  • Documents the getUncleCount method. (#1534)


v5.5.0 (2020-02-03)


  • ENS had to release a new registry to push a bugfix. See this article for background information. uses the new registry for all default ENS interactions, now. (#1573)


  • Minor bugfix in how ContractCaller looks up abi functions. (#1552)

  • Update modules to use compatible typing-extensions import. (#1554)

  • Make ‘from’ and ‘to’ fields checksum addresses in returned transaction receipts (#1562)

  • Use local Trinity’s IPC socket if it is available, for newer versions of Trinity. (#1563)

Improved Documentation

  • Add Matomo Tracking to Docs site.

    Matomo is an Open Source web analytics platform that allows us to get better insights and optimize for our audience without the negative consequences of other compareable platforms.

    Read more: (#1541)

  • Fix web3 typo in docs (#1559)


v5.4.0 (2019-12-06)


  • Add __str__ to IPCProvider (#1536)


  • Add required typing-extensions library to (#1544)

v5.3.1 (2019-12-05)


  • Only apply hexbytes formatting to r and s values in transaction if present (#1531)

  • Update eth-utils dependency which contains mypy bugfix. (#1537)

Improved Documentation

  • Update Contract Event documentation to show correct example (#1515)

  • Add documentation to methods that raise an error in v5 instead of returning None (#1527)


v5.3.0 (2019-11-14)


  • Support handling ENS domains in ERC1319 URIs. (#1489)


  • Make local block filter return empty list when when no blocks mined (#1255)

  • Google protobuf dependency was updated to 3.10.0 (#1493)

  • Infura websocket provider works when no secret key is present (#1501)

Improved Documentation

  • Update Quickstart instructions to use the auto Infura module instead of the more complicated web3 auto module (#1482)

  • Remove outdated py.test command from readme (#1483)


v5.2.2 (2019-10-21)


  • Add poll_latency to waitForTransactionReceipt (#1453)


  • Fix flaky Parity whisper module test (#1473)


v5.2.1 (2019-10-17)

Improved Documentation

  • Update documentation for unlock account duration (#1464)

  • Clarify module installation command for OSX>=10.15 (#1467)


v5.2.0 (2019-09-26)


  • Add enable_strict_bytes_type_checking flag to web3 instance (#1419)

  • Move Geth Whisper methods to snake case and deprecate camel case methods (#1433)


  • Add null check to logsbloom formatter (#1445)

Improved Documentation

  • Reformat autogenerated towncrier release notes (#1460)

Web3 5.1.0 (2019-09-18)


  • Add contract_types property to Package class. (#1440)


  • Fix flaky parity integration test in the whisper module (#1147)

Improved Documentation

  • Remove whitespace, move topics key -> topic in Geth docs (#1425)

  • Enforce stricter doc checking, turning warnings into errors to fail CI builds to catch issues quickly.

    Add missing to the table of contents and fix incorrectly formatted JSON example. (#1437)

  • Add example using Geth POA Middleware with Infura Rinkeby Node (#1444)



Released August 22, 2019

  • Bugfixes

    • [ethPM] Fix bug in package id and release id fetching strategy - #1427


Released August 15, 2019

  • Bugfixes

    • [ethPM] Add begin/close chars to package name regex - #1418

    • [ethPM] Update deployments to work when only abi available - #1417

    • Fix tuples handled incorrectly in decode_function_input - #1410

  • Misc

    • Eliminate signTransaction warning - #1404


Released August 1, 2019

  • Features

    • web3.eth.chainId now returns an integer instead of hex - #1394

  • Bugfixes

    • Deprecation Warnings now show for methods that have a @combomethod decorator - #1401

  • Misc

    • [ethPM] Add ethPM to the docker file - #1405

  • Docs

    • Docs are updated to use checksummed addresses - #1390

    • Minor doc formatting fixes - #1338 & #1345


Released July 31, 2019

This is intended to be the final release before the stable v5 release.

  • Features

    • Parity operating mode can be read and set - #1355

    • Process a single event log, instead of a whole transaction receipt - #1354

  • Docs

    • Remove doctest dependency on ethtoken - #1395

  • Bugfixes

    • [ethPM] Bypass IPFS validation for large files - #1393

  • Misc

    • [ethPM] Update default Registry solidity contract - #1400

    • [ethPM] Update to use new simple Registry implementation - #1398

    • Update dependency requirement formatting for releasing - #1403


Released July 18,2019

  • Features

    • [ethPM] Update registry uri to support basic uris w/o package id - #1389

  • Docs

    • Clarify in docs the return of Eth.sendRawTransaction() as a HexBytes object, not a string. - #1384

  • Misc

    • [ethPM] Migrate tests over from pytest-ethereum - #1385


Released July 15, 2019

  • Features

    • Add eth_getProof support - #1185

    • Implement - #1372

    • Update registry URIs to support chain IDs - #1382

    • Add error flags to event.processReceipt - #1366

  • Bugfixes

    • Remove full IDNA processing in favor of UTS46 - #1364

  • Misc

    • Migrate py-ethpm library to web3/ethpm - #1379

    • Relax canonical address requirement in ethPM - #1380

    • Replace ethPM’s infura strategy with web3’s native infura support - #1383

    • Change combine_argument_formatters to apply_formatters_to_sequence - #1360

    • Move pytest.xfail instances to @pytest.mark.xfail - #1376

    • Change net.version to eth.chainId in default transaction params - #1378


Released May 13, 2019

  • Features

    • Mark deprecated sha3 method as static - #1350

    • Upgrade to eth-account v0.4.0 - #1348

  • Docs

    • Add note about web3[tester] in documentation - #1325

  • Misc

    • Replace web3._utils.toolz imports with eth_utils.toolz - #1317


Released May 6, 2019

  • Features

    • Add support for tilda in provider IPC Path - #1049

    • EIP 712 Signing Supported - #1319

  • Docs

    • Update contract example to use compile_standard - #1263

    • Fix typo in middleware docs - #1339


Released April 24, 2019

  • Docs

    • Add documentation for unit tests - #1324

  • Misc

    • Update deprecated imports - #1334

    • Fix documentation typo - #1335

    • Upgrade eth-tester version - #1332


Released April 15, 2019

  • Features

    • Add getLogs by blockHash - #1269

    • Implement chainId endpoint - #1295

    • Moved non-standard JSON-RPC endpoints to applicable Parity/Geth docs. Deprecated web3.version for web3.api - #1290

    • Moved Whisper endpoints to applicable Geth or Parity namespace - #1308

    • Added support for Goerli provider - #1286

    • Added addReservedPeer to Parity module - #1311

  • Bugfixes

    • Cast gas price values to integers in gas strategies - #1297

    • Missing constructor function no longer ignores constructor args - #1316

  • Misc

    • Require eth-utils >= 1.4, downgrade Go version for integration tests - #1310

    • Fix doc build warnings - #1331

    • Zip Fixture data - #1307

    • Update Geth version for integration tests - #1301

    • Remove unneeded testrpc - #1322

    • Add ContractCaller docs to v5 migration guide - #1323


Released March 26, 2019

  • Breaking Changes

    • Raise error if there is no Infura API Key - #1294 & - #1299

  • Misc

    • Upgraded Parity version for integration testing - #1292


Released March 20, 2019

  • Breaking Changes

    • Removed web3/utils directory in favor of web3/_utils - #1282

    • Relocated personal RPC endpoints to Parity and Geth class - #1211

    • Deprecated, web3.eth.getCompilers(), and web3.eth.getTransactionFromBlock(). Removed web3.eth.enableUnauditedFeatures() - #1270

    • Relocated eth_protocolVersion and web3_clientVersion - #1274

    • Relocated web3.txpool to web3.geth.txpool - #1275

    • Relocated admin module to Geth namespace - #1288

    • Relocated miner module to Geth namespace - #1287

  • Features

    • Implement eth_submitHashrate and eth_submitWork JSONRPC endpoints. - #1280

    • Implement web3.eth.signTransaction - #1277

  • Docs

    • Added v5 migration docs - #1284


Released March 11, 2019

  • Breaking Changes

    • Updated JSON-RPC calls that lookup txs or blocks to raise an error if lookup fails - #1218 and #1268

  • Features

    • Tuple ABI support - #1235

  • Bugfixes

    • One last middleware_stack was still hanging on. Changed to middleware_onion - #1262


Released February 25th, 2019

  • Features

    • New NoABIFound error for cases where there is no ABI - #1247

  • Misc

    • Interact with Infura using an API Key. Key will be required after March 27th. - #1232

    • Remove process_type utility function in favor of eth-abi functionality - #1249


Released February 13th, 2019

  • Breaking Changes

    • Remove deprecated buildTransaction, call, deploy, estimateGas, and transact methods - #1232

  • Features

    • Adds Web3.toJSON method - #1173

    • Contract Caller API Implemented - #1227

    • Add Geth POA middleware to use Rinkeby with Infura Auto - #1234

    • Add manifest and input argument validation to pm.release_package() - #1237

  • Misc

    • Clean up intro and block/tx sections in Filter docs - #1223

    • Remove unnecessary EncodingError exception catching - #1224

    • Improvements to merge_args_and_kwargs utility function - #1228

    • Update vyper registry assets - #1242


Released January 23rd, 2019

  • Breaking Changes

    • Rename middleware_stack to middleware_onion - #1210

    • Drop already deprecated web3.soliditySha3 - #1217

    • ENS: Stop inferring .eth TLD on domain names - #1205

  • Bugfixes

    • Validate ethereum_tester class in EthereumTesterProvider - #1217

    • Support getLogs() method without creating filters - #1192

  • Features

    • Stablize the PM module - #1125

    • Implement async Version module - #1166

  • Misc

    • Update .gitignore to ignore .DS_Store and .mypy_cache/ - #1215

    • Change CircleCI badge link to CircleCI project - #1214


Released January 15th, 2019

  • Breaking Changes

    • Remove web3.miner.hashrate and - #1198

    • Remove web3.providers.tester.EthereumTesterProvider and web3.providers.tester.TestRPCProvider - #1199

    • Change manager.providers from list to single manager.provider - #1200

    • Replace deprecated web3.sha3 method with web3.keccak method - #1207

    • Drop auto detect testnets for IPCProvider - #1206

  • Bugfixes

    • Add check to make sure blockHash exists - #1158

  • Misc

    • Remove some unreachable code in providers/ - #1160

    • Migrate tester provider results from middleware to defaults - #1188

    • Fix doc formatting for build_filter method - #1187

    • Add ERC20 example in docs - #1178

    • Code style improvements - #1194 & #1191

    • Convert Web3 instance variables to w3 - #1186

    • Update eth-utils dependencies and clean up other dependencies - #1195


Released December 20th, 2018

  • Breaking Changes

    • Remove support for python3.5, drop support for eth-abi v1 - #1163

  • Features

    • Support for custom ReleaseManager was fixed - #1165

  • Misc

    • Fix doctest nonsense with unicorn token - 3b2047

    • Docs for installing web3 in FreeBSD - #1156

    • Use latest python in readthedocs - #1162

    • Use twine in release script - #1164

    • Upgrade eth-tester, for eth-abi v2 support - #1168


Released December 13th, 2018

  • Features

    • Add Rinkeby and Kovan Infura networks; made mainnet the default - #1150

    • Add parity-specific listStorageKeys RPC - #1145

    • Deprecated Web3.soliditySha3; use Web3.solidityKeccak instead. - #1139

    • Add default trinity locations to IPC path guesser - #1121

    • Add wss to AutoProvider - #1110

    • Add timeout for WebsocketProvider - #1109

    • Receipt timeout raises TimeExhausted - #1070

    • Allow specification of block number for eth_estimateGas - #1046

  • Misc

    • Removed web3._utils.six support - #1116

    • Upgrade eth-utils to 1.2.0 - #1104

    • Require Python version 3.5.3 or greater - #1095

    • Bump websockets version to 7.0.0 - #1146

    • Bump parity test binary to 1.11.11 - #1064


Released November 15, 2018

  • Misc

    • Reduce unneeded memory usage - #1138


Released October 28, 2018

  • Features

    • Add timeout for WebsocketProvider - #1119

    • Reject transactions that send ether to non-payable contract functions - #1115

    • Add Auto Infura Ropsten support: from import w3 - #1124

    • Auto-detect trinity IPC file location - #1129

  • Misc

    • Require Python >=3.5.3 - #1107

    • Upgrade eth-tester and eth-utils - #1085

    • Configure readthedocs dependencies - #1082

    • soliditySha3 docs fixup - #1100

    • Update ropsten faucet links in troubleshooting docs


Released September 25th, 2018

  • Bugfixes

    • IPC paths starting with ~ are appropriately resolved to the home directory - #1072

    • You can use the local signing middleware with bytes-type addresses - #1069


Released September 11th, 2018

  • Bugfixes

    • old pip bug used during release made it impossible for non-windows users to install 4.7.0.


Released September 10th, 2018

  • Features

    • Add traceFilter method to the parity module. - #1051

    • Move datastructures to public namespace datastructures to improve support for type checking. - #1038

    • Optimization to contract calls - #944

  • Bugfixes

    • ENS name resolution only attempted on mainnet by default. - #1037

    • Fix attribute access error when attributedict middleware is not used. - #1040

  • Misc - Upgrade eth-tester to 0.1.0-beta.32, and remove integration tests for py-ethereum. - Upgrade eth-hash to 0.2.0 with pycryptodome 3.6.6 which resolves a vulnerability.


Released Aug 24, 2018

  • Features

  • Bugfixes

    • Fix crash in time-based gas strategies with small number of transactions - #983

    • Fx crash when passing multiple addresses to w3.eth.getLogs() - #1005

  • Misc

    • Disallow configuring filters with both manual and generated topic lists - #976

    • Add support for the upcoming eth-abi v2, which does ABI string decoding differently - #974

    • Add a lot more filter tests - #997

    • Add more tests for filtering with None. Note that geth & parity differ here. - #985

    • Follow-up on Parity bug that we reported upstream (parity#7816): they resolved in 1.10. We removed xfail on that test. - #992

    • Docs: add an example of interacting with an ERC20 contract - #995

    • A couple doc typo fixes


Released July 30, 2018

  • Features

    • Accept addresses supplied in bytes format (which does not provide checksum validation)

    • Improve estimation of gas prices

  • Bugfixes

  • Misc

    • Test Parity 1.11.7

    • Parity integration tests upgrade to use sha256 instead of md5

    • Fix some filter docs

    • eth-account upgrade to v0.3.0

    • eth-tester upgrade to v0.1.0-beta.29


Released June 29, 2018

  • Bugfixes

    • eth-pm package was renamed (old one deleted) which broke the web3 release. eth-pm was removed from the install until it’s stable.

  • Misc

    • IPCProvider now accepts a pathlib.Path argument for the IPC path

    • Docs explaining the new custom autoproviders in web3


Released June 21, 2018

  • Features

    • Add support for https in WEB3_PROVIDER_URI environment variable

    • Can send websocket connection parameters in WebsocketProvider

    • Two new auto-initialization options:

      • from import w3

      • from import w3 (After setting the INFURA_API_KEY environment variable)

    • Alpha support for a new package management tool based on ethpm-spec

  • Bugfixes

    • Can now receive large responses in WebsocketProvider by specifying a large max_size in the websocket connection parameters.

  • Misc

    • Websockets dependency upgraded to v5

    • Raise deprecation warning on getTransactionFromBlock()

    • Fix docs for waitForTransactionReceipt()

    • Developer Dockerfile now installs testing dependencies


Released June 6, 2018

  • Features

    • Support for the ABI types like: fixedMxN which is used by Vyper.

    • In-flight transaction-signing middleware: Use local keys as if they were hosted keys using the new sign_and_send_raw_middleware

    • New getUncleByBlock() API

    • New name getTransactionByBlock(), which replaces the deprecated getTransactionFromBlock()

    • Add several new Parity trace functions

    • New API to resolve ambiguous function calls, for example:

      • Two functions with the same name that accept similar argument types, like myfunc(uint8) and myfunc(int8), and you want to call contract.functions.myfunc(1).call()

      • See how to use it at: Invoke Ambiguous Contract Functions

  • Bugfixes

    • Gas estimation doesn’t crash, when 0 blocks are available. (ie~ on the genesis block)

    • Close out all HTTPProvider sessions, to squash warnings on exit

    • Stop adding Contract address twice to the filter. It was making some nodes unhappy

  • Misc

    • Friendlier json encoding/decoding failure error messages

    • Performance improvements, when the responses from the node are large (by reducing the number of times we evaluate if the response is valid json)

    • Parity CI test fixes (ugh, environment setup hell, thanks to the community for cleaning this up!)

    • Don’t crash when requesting a transaction that was created with the parity bug (which allowed an unsigned transaction to be included, so publicKey is None)

    • Doc fixes: addresses must be checksummed (or ENS names on mainnet)

    • Enable local integration testing of parity on non-Debian OS

    • README:

      • Testing setup for devs

      • Change the build badge from Travis to Circle CI

    • Cache the parity binary in Circle CI, to reduce the impact of their binary API going down

    • Dropped the dot: py.test -> pytest


Released May 9, 2018

  • Bugfixes

    • When getting a transaction with data attached and trying to modify it (say, to increase the gas price), the data was not being reattached in the new transaction.

    • web3.personal.sendTransaction() was crashing when using a transaction generated with buildTransaction()

  • Misc

    • Improved error message when connecting to a geth-style PoA network

    • Improved error message when address is not checksummed

    • Started in on support for fixedMxN ABI arguments

    • Lots of documentation upgrades, including:

      • Guide for understanding nodes/networks/connections

      • Simplified Quickstart with notes for common issues

      • A new Troubleshooting section

    • Potential pypy performance improvements (use toolz instead of cytoolz)

    • eth-tester upgraded to beta 24


Released Apr 25, 2018

  • Removed audit warning and opt-in requirement for w3.eth.account. See more in: Accounts

  • Added an API to look up contract functions: fn = contract.functions['function_name_here']

  • Upgrade Whisper (shh) module to use v6 API

  • Bugfix: set ‘to’ field of transaction to empty when using transaction = contract.constructor().buildTransaction()

  • You can now specify nonce in buildTransaction()

  • Distinguish between chain id and network id – currently always return None for chainId

  • Better error message when trying to use a contract function that has 0 or >1 matches

  • Better error message when trying to install on a python version <3.5

  • Installs pypiwin32 during pip install, for a better Windows experience

  • Cleaned up a lot of test warnings by upgrading from deprecated APIs, especially from the deprecated contract.deploy(txn_dict, args=contract_args) to the new contract.constructor(*contract_args).transact(txn_dict)

  • Documentation typo fixes

  • Better template for Pull Requests


Released Apr 9, 2018

  • New WebsocketProvider. If you’re looking for better performance than HTTP, check out websockets.

  • New w3.eth.waitForTransactionReceipt()

  • Added name collision detection to ConciseContract and ImplicitContract

  • Bugfix to allow fromBlock set to 0 in createFilter, like, ...)

  • Bugfix of ENS automatic connection

  • eth-tester support for Byzantium

  • New migration guide for v3 -> v4 upgrade

  • Various documentation updates

  • Pinned eth-account to older version


Released Apr 2, 2018

  • Marked beta.13 as stable

  • Documentation tweaks


Released Mar 27, 2018

This is intended to be the final release before the stable v4 release.

  • Add support for geth 1.8 (fixed error on getTransactionReceipt())

  • You can now call a contract method at a specific block with the block_identifier keyword argument, see: call()

  • In preparation for stable release, disable w3.eth.account by default, until a third-party audit is complete & resolved.

  • New API for contract deployment, which enables gas estimation, local signing, etc. See constructor().

  • Find contract events with$my_event.createFilter()

  • Support auto-complete for contract methods.

  • Upgrade most dependencies to stable

    • eth-abi

    • eth-utils

    • hexbytes

    • not included: eth-tester and eth-account

  • Switch the default EthereumTesterProvider backend from eth-testrpc to eth-tester: web3.providers.eth_tester.EthereumTesterProvider

  • A lot of documentation improvements

  • Test node integrations over a variety of providers

  • geth 1.8 test suite


A little hiccup on release. Skipped.


Released Feb 28, 2018

  • New methods to modify or replace pending transactions

  • A compatibility option for connecting to geth --dev – see Proof of Authority

  • A new

  • Create a filter object from an existing filter ID.

  • eth-utils v1.0.1 (stable) compatibility


Released Feb 21, 2018

  • bugfix: Compatibility with eth-utils v1-beta2 (the incompatibility was causing fresh installs to fail)

  • bugfix: crash when sending the output of contract.functions.myFunction().buildTransaction() to sendTransaction(). Now, having a chainID key does not crash sendTransaction.

  • bugfix: a TypeError when estimating gas like: contract.functions.myFunction().estimateGas() is fixed

  • Added parity integration tests to the continuous integration suite!

  • Some py3 and docs cleanup


Released Feb 8, 2018

  • Access event log parameters as attributes

  • Support for specifying nonce in eth-tester

  • Bugfix dependency conflicts between eth-utils, eth-abi, and eth-tester

  • Clearer error message when invalid keywords provided to contract constructor function

  • New docs for working with private keys + set up doctests

  • First parity integration tests

  • replace internal implementation of w3.eth.account with eth_account.account.Account


Released Feb 7, 2018, then recalled. It added 32MB of test data to git history, so the tag was deleted, as well as the corresponding release. (Although the release would not have contained that test data)


Released Jan 29, 2018

  • Support for web3.eth.Eth.getLogs() in eth-tester with py-evm

  • Process transaction receipts with Event ABI, using*args, **kwargs).processReceipt(transaction_receipt) see Event Log Object for the new type.

  • Add timeout parameter to web3.providers.ipc.IPCProvider

  • bugfix: make sure idna package is always installed

  • Replace ethtestrpc with py-evm, in all tests

  • Dockerfile fixup

  • Test refactoring & cleanup

  • Reduced warnings during tests


Released Jan 18, 2018

  • New contract function call API: my_contract.functions.my_func().call() is preferred over the now deprecated API.

  • A new, sophisticated gas estimation algorithm, based on the approach. You must opt-in to the new approach, because it’s quite slow. We recommend using the new caching middleware. See web3.gas_strategies.time_based.construct_time_based_gas_price_strategy()

  • New caching middleware that can cache based on time, block, or indefinitely.

  • Automatically retry JSON-RPC requests over HTTP, a few times.

  • ConciseContract now has the address directly

  • Many eth-tester fixes. web3.providers.eth_tester.main.EthereumTesterProvider is now a legitimate alternative to web3.providers.tester.EthereumTesterProvider.

  • ethtest-rpc removed from testing. Tests use eth-tester only, on pyethereum. Soon it will be eth-tester with py-evm.

  • Bumped several dependencies, like eth-tester

  • Documentation updates


Released Dec 28, 2017

  • Improvements to working with eth-tester, using EthereumTesterProvider:

    • Bugfix the key names in event logging

    • Add support for sendRawTransaction()

  • IPCProvider now automatically retries on a broken connection, like when you restart your node

  • New gas price engine API, laying groundwork for more advanced gas pricing strategies


Released Dec 7, 2017

  • New buildTransaction() method to prepare contract transactions, offline

  • New automatic provider detection, for w3 = Web3() initialization

  • Set environment variable WEB3_PROVIDER_URI to suggest a provider for automatic detection

  • New API to set providers like: w3.providers = [IPCProvider()]

  • Crashfix: web3.eth.Eth.filter() when retrieving logs with the argument ‘latest’

  • Bump eth-tester to v0.1.0-beta.5, with bugfix for filtering by topic

  • Removed GPL lib pylru, now believed to be in full MIT license compliance.


Released Dec 1, 2017

  • Fix encoding of ABI types: bytes[] and string[]

  • Windows connection error bugfix

  • Bugfix message signatures that were broken ~1% of the time (zero-pad r and s)

  • Autoinit web3 now produces None instead of raising an exception on from import w3

  • Clearer errors on formatting failure (includes field name that failed)

  • Python modernization, removing Py2 compatibility cruft

  • Update dependencies with changed names, now:

    • eth-abi

    • eth-keyfile

    • eth-keys

    • eth-tester

    • eth-utils

  • Faster Travis CI builds, with cached geth binary


Released Nov 22, 2017

Bug Fixes:

  • sendRawTransaction() accepts raw bytes

  • contract() accepts an ENS name as contract address

  • signTransaction() returns the expected hash (after signing the transaction)

  • Account methods can all be called statically, like: Account.sign(...)

  • getTransactionReceipt() returns the status field as an int

  • Web3.soliditySha3() looks up ENS names if they are supplied with an “address” ABI

  • If running multiple threads with the same w3 instance, ValueError: Recursively called ... is no longer raised

Plus, various python modernization code cleanups, and testing against geth 1.7.2.


  • Python 3 is now required

  • ENS names can be used anywhere that a hex address can

  • Sign transactions and messages with local private keys

  • New filter mechanism: get_all_entries() and get_new_entries()

  • Quick automatic initialization with from import w3

  • All addresses must be supplied with an EIP-55 checksum

  • All addresses are returned with a checksum

  • Renamed Web3.toDecimal() to toInt(), see: Encoding and Decoding Helpers

  • All filter calls are synchronous, gevent integration dropped

  • Contract eventFilter() has replaced both Contract.on() and Contract.pastEvents()

  • Contract arguments of bytes ABI type now accept hex strings.

  • Contract arguments of string ABI type now accept python str.

  • Contract return values of string ABI type now return python str.

  • Many methods now return a bytes-like object where they used to return a hex string, like in Web3.sha3()

  • IPC connection left open and reused, rather than opened and closed on each call

  • A number of deprecated methods from v3 were removed


  • Addition of ethereum-tester as a dependency


  • Addition of named middlewares for easier manipulation of middleware stack.

  • Provider middlewares can no longer be modified during runtime.

  • Experimental custom ABI normalization API for Contract objects.


  • Change docs to use RTD theme

  • Experimental new EthereumTesterProvider for the ethereum-tester library.

  • Bugfix for function type abi encoding via ethereum-abi-utils upgrade to v0.4.1

  • Bugfix for Web3.toHex to conform to RPC spec.


  • Fix PyPi readme text.


  • Fix PyPi readme text.


  • New stalecheck_middleware

  • Improvements to Web3.toHex and Web3.toText.

  • Improvements to Web3.sha3 signature.

  • Bugfixes for Web3.eth.sign api


  • Add experimental fixture_middleware

  • Various bugfixes introduced in middleware API introduction and migration to formatter middleware.


  • Bugfix for formatter handling of contract creation transaction.


  • Improved testing infrastructure.


  • Bugfix for retrieving filter changes for both new block filters and pending transaction filters.


  • Fix mispelled attrdict_middleware (was spelled attrdict_middlware).


  • New Middleware API

  • Support for multiple providers

  • New web3.soliditySha3

  • Remove multiple functions that were never implemented from the original web3.

  • Deprecated web3.currentProvider accessor. Use web3.provider now instead.

  • Deprecated password prompt within web3.personal.newAccount.


  • Bugfix for abi filtering to correctly handle constructor and fallback type abi entries.


  • All web3 apis which accept address parameters now enforce checksums if the address looks like it is checksummed.

  • Improvements to error messaging with when calling a contract on a node that may not be fully synced

  • Bugfix for web3.eth.syncing to correctly handle False


  • Web3 now returns web3.utils.datastructures.AttributeDict in places where it previously returned a normal dict.

  • web3.eth.contract now performs validation on the address parameter.

  • Added web3.eth.getWork API


  • Add validation for the abi parameter of eth

  • Contract return values of bytes, bytesXX and string are no longer converted to text types and will be returned in their raw byte-string format.


  • Bugfix for eth_sign double hashing input.

  • Removed deprecated DelegatedSigningManager

  • Removed deprecate PrivateKeySigningManager


  • Update pyrlp dependency to >=0.4.7

  • Update eth-testrpc dependency to >=1.2.0

  • Deprecate DelegatedSigningManager

  • Deprecate PrivateKeySigningManager


  • upstream version bump for bugfix in eth-abi-utils


  • deprecate eth.defaultAccount defaulting to the coinbase account.


  • Fix error message from contract factory creation.

  • Use ethereum-utils for utility functions.


  • Upgrade ethereum-abi-utils dependency for upstream bugfix.


  • Deprecate Contract.code: replaced by Contract.bytecode

  • Deprecate Contract.code_runtime: replaced by Contract.bytecode_runtime

  • Deprecate abi, code, code_runtime and source as arguments for the Contract object.

  • Deprecate source as a property of the Contract object

  • Add Contract.factory() API.

  • Deprecate the construct_contract_factory helper function.


  • Bugfix for how requests library is used. Now reuses session.


  • Bugfix for construction of request_kwargs within HTTPProvider


  • Allow HTTPProvider to be imported from web3 module.

  • make HTTPProvider accessible as a property of web3 instances.


  • Deprecate web3.providers.rpc.RPCProvider

  • Deprecate web3.providers.rpc.KeepAliveRPCProvider

  • Add new web3.providers.rpc.HTTPProvider

  • Remove hard dependency on gevent.


  • Bugfix for web3.eth.getTransaction when the hash is unknown.


  • Bugfix for event log data decoding to properly handle dynamic sized values.

  • New web3.tester module to access extra RPC functionality from eth-testrpc


  • Fix package so that eth-testrpc is not required.



  • Bugfix for contract instances to respect web3.eth.defaultAccount

  • Better error reporting when ABI decoding fails for contract method response.


  • New EthereumTesterProvider now available. Faster test runs than TestRPCProvider

  • Updated underlying eth-testrpc requirement.


  • web3.shh is now implemented.

  • Introduced KeepAliveRPCProvider to correctly recycle HTTP connections and use HTTP keep alive


  • Bugfix for contract transaction sending not respecting the web3.eth.defaultAccount configuration.


  • New DelegatedSigningManager and PrivateKeySigningManager classes.


  • Bugfix or IPCProvider not handling large JSON responses well.


  • Better RPC compliance to be compatable with the Parity JSON-RPC server.


  • Filter objects now support controlling the interval through which they poll using the poll_interval property


  • Bugfix generation of event topics.

  • Web3.Iban now allows access to Iban address tools.


  • Bugfix for geth.ipc path on linux systems.


  • Changes to the Contract API:
    • Contract.deploy() parameter arguments renamed to args

    • Contract.deploy() now takes args and kwargs parameters to allow constructing with keyword arguments or positional arguments.

    • Contract.pastEvents now allows you to specify a fromBlock or ``toBlock. Previously these were forced to be 'earliest' and web3.eth.blockNumber respectively.

    •, Contract.transact and Contract.estimateGas are now callable as class methods as well as instance methods. When called this way, an address must be provided with the transaction parameter.

    •, Contract.transact and Contract.estimateGas now allow specifying an alternate address for the transaction.

  • RPCProvider now supports the following constructor arguments.
    • ssl for enabling SSL

    • connection_timeout and network_timeout for controlling the timeouts for requests.


  • Bugfix: Fix KeyError in merge_args_and_kwargs helper fn.


  • Bugfix for usage of block identifiers ‘latest’, ‘earliest’, ‘pending’

  • Sphinx documentation

  • Non-data transactions now default to 90000 gas.

  • Web3 object now has helpers set as static methods rather than being set at initialization.

  • RPCProvider now takes a path parameter to allow configuration for requests to go to paths other than /.


  • TestRPCProvider no longer dumps logging output to stdout and stderr.

  • Bugfix for return types of address[]

  • Bugfix for event data types of address


  • All transactions which contain a data element will now have their gas automatically estimated with 100k additional buffer. This was previously only true with transactions initiated from a Contract object.


  • Contract functions can now be called using keyword arguments.


  • Upstream fixes for filters

  • Filter APIs on and pastEvents now callable as both instance and class methods.


  • The filters that come back from the contract on and pastEvents methods now call their callbacks with the same data format as web3.js.


  • Cast RPCProvider port to an integer.


  • Remove all monkeypatching


  • Pull in downstream updates to proper gevent usage.

  • Fix eth_sign

  • Bugfix with contract operations mutating the transaction object that is passed in.

  • More explicit linting ignore statements.


  • BugFix: fix for python3 only json.JSONDecodeError handling.


  • BugFix: RPCProvider not sending a content-type header

  • Bugfix: web3.toWei now returns an integer instead of a decimal.Decimal


  • TestRPCProvider can now be imported directly from web3


  • Add eth.admin interface.

  • Bugfix: Format the return value of web3.eth.syncing

  • Bugfix: IPCProvider socket interactions are now more robust.


  • Downstream package upgrades for eth-testrpc and ethereum-tester-client to handle configuration of the Homestead and DAO fork block numbers.


  • Rename web3.contract._Contract to web3.contract.Contract to expose it for static analysis and auto completion tools

  • Allow passing string parameters to functions

  • Automatically compute gas requirements for contract deployment and

  • transactions.

  • Contract Filters

  • Block, Transaction, and Log filters

  • web3.eth.txpool interface

  • web3.eth.mining interface

  • Fixes for encoding.


  • Bugfix to allow address types in constructor arguments.


  • Partial implementation of the web3.eth.contract interface.


  • Restructure project modules to be more flat

  • Add ability to run test suite without the slow tests.

  • Breakup encoding utils into smaller modules.

  • Basic pep8 formatting.

  • Apply python naming conventions to internal APIs

  • Lots of minor bugfixes.

  • Removal of dead code left behind from 1.0.0 refactor.

  • Removal of web3/solidity module.


  • Add missing isConnected() method.

  • Add test coverage for setProvider()


  • Specify missing pyrlp and gevent dependencies


  • Massive refactor to the majority of the app.


  • Initial release