web3.py v6 Release Announcement

web3.py v6.0.0 release: feature highlights, breaking changes, and a look ahead.

gm v6! 🌞

We sneks are pleased to announce the release of web3.py v6.0.0! Keep reading for feature highlights, breaking changes, and a look ahead.

Feature highlights

Many of these features were introduced in a v5 release, but there's a good chance that one or more may have slipped under your radar.

  • Smol rebrand – Mirroring similar libraries, web3.py (with a lowercase "w") is how the library will be universally referenced now. Very hip.
  • Modern Python support – Python 3.10 and 3.11 versions supported.
  • Async support – The AsyncHTTPProvider is ready for prime time!
  • The Mergeβ„’ support – "safe" and "finalized" block identifiers are available for use in relevant RPC calls.
  • Multithreading – If in need of concurrency, but unable to use asyncio, web3.py has improved multithreading support.
  • Improved customization – If you want to add or edit functionality within web3.py, you've now got a number of options.
  • CCIP Read support – web3.py supports contracts that reference off-chain data.

Breaking changes

With a major version update comes breaking changes, and we saved up a good few for this release. Here's what you're most likely to bump into when upgrading web3.py within your application:

  • Snake case syntax – Once upon a time, web3.py was a Python port of web3.js and with that came a bunch of JavaScript and JSON-RPC-inspired camelCase syntax. The last of that has been updated to snake_case.
  • Dependencies – Pinned upper limit versions were removed where possible, and some dependencies were updated as required by newer versions of Python.
  • Strict byte checking – Once an option, now a default setting: if an ABI expects a particular length byte argument, web3.py will no longer attempt to convert ambiguous values. Safety first, though this functionality can be toggled off.
  • Base Exceptions – The varied exceptions across the library now inherit from Web3Exception. Similarly, ENSException and EthPMException were introduced in those respective modules.
  • Validation Errors – New Web3ValidationError, ENSValidationError, and EthPMValidationError all inherit from the generic eth_utils.exceptions.ValidationError.
  • Full deprecations – A few methods, auto-providers, and modules have been removed in this release.

For a full list of breaking changes, check out the migration guide.

The road ahead

While we hope the v6 release solves some of your biggest headaches and helps you get a little closer to nirvana, we're already starting to look ahead to what's next.

Like any open source library, there's a steady diet of issue triage and bug fixing, but there are a couple of big themes that will continue to be prioritized, namely: Ethereum protocol upgrades ("Shanghai" up next), improved asynchronous support, and typing improvements throughout.

To get a better sense of what should be on our radar beyond those items, we launched the first web3.py User Survey. Those results and more long-winded takeaways can be found here.

Finally, thanks for being a web3.py user and a member of the Ethereum Python community! If you haven't already, make sure to join the Ethereum Python Community Discord server to meet other Pythonistas, give and receive technical help, and share a gm.