NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1684 most downloaded on PyPI
eth-account: Sign Ethereum transactions and messages with local private keys
Last release 1 months ago
23 Aug 2026
Release timing varies
gaps range from 2 weeks to 8 months
Most releases are documented
notes for 35 of 40 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
44 releases · first in 2018
Breaking/add remaining breaking changes for major by @fselmo in #333
Full Changelog: v0.13.7...v0.14.0
One column per quarter.
Bump version: 0.13.7 → 0.14.0-beta.1
Bump version: 0.13.7 → 0.14.0-beta.1
Drop support for Python 3.8 and 3.9 ( #328 )
Bump eth-utils requirement to >=5.3.0 to allow for CamelModel usage ( #329 )
Add support for Python 3.14 ( #328 )
Fix mypy errors with BaseModel.model_json_schema introduced with Pydantic 2.12 ( #326 )
Bump version: 0.13.6 → 0.13.7
Bump version: 0.13.6 → 0.13.7
Fix issues with the json schema generation for Pydantic models ( SignedSetCodeAuthorization ) and simplify the serialization by moving a misplaced @field_validator decorator above @classmethod (not below it). ( #318 )
Remove doc warnings and unwanted generated docs ( #321 )
Update and clarify documentation for authorization signing. ( #319 )
Bump version: 0.13.5 → 0.13.6
Bump version: 0.13.5 → 0.13.6
Adds logic to interpret the string values "False" , "false" , and "0" as False when encoding EIP712 messages. ( #303 )
Implement EIP-7702 SetCodeTransaction . ( #315 )
Bump version: 0.13.4 → 0.13.5
Bump version: 0.13.4 → 0.13.5
Make sign_typed_data available in the LocalAccount class. ( #304 )
Merge template, adding py313 support, replacing bumpversion with bump-my-version and bumping hypothesis test dep to >=6.22.0,<6.108.7 . ( #311 )
deepcopy EIP712 messages used in test to avoid unintended mutation. ( #308 )
Update node.js version used in tests from 20 to 22. ( #309 )
Bump version: 0.13.3 → 0.13.4
Bump version: 0.13.3 → 0.13.4
Change language arg to enum in Mnemonic ( #291 )
Add new list_languages_enum method to HDAccount class ( #302 )
Pin eth-keyfile <0.9.0 due to breaking changes to typing ( #299 )
Bump version: 0.13.2 → 0.13.3
Bump version: 0.13.2 → 0.13.3
Raise lower pin on eth-keyfile to >=0.7.0 where a bug was fixed in the default values for scrypt generated keyfiles. ( #297 )
Bump version: 0.13.1 → 0.13.2
Bump version: 0.13.1 → 0.13.2
Pin ckzg to >=2.0 ; update the the trusted setup and how it is loaded. ( #293 )
- Update mypy checks to run with all dev dependencies installed
Update mypy checks to run with all dev dependencies installed ( #280 )
Enforce mypy strict_optional rule ( #281 )
Updated mypy types setting disallow_untyped_defs and disallow_untyped_calls to true ( #283 )
Set mypy rules disallow_any_generics , disallow_subclassing_any , and disallow_untyped_decorators to true ( #285 )
- Expose TypedTransactions for public use
Open up Pydantic dependency ( #271 )
Expose TypedTransactions for public use ( #276 )
Merge template updates, notably adding python 3.12 support ( #274 )
#275
Remove signHash in favor of unsafe_sign_hash ( #260 )
Remove messageHash in favor of message_hash ( #265 )
Moved private _parsePrivateKey method to _parse_private_key ( #267 )
Remove SignedTransaction ’s rawTransaction attribute in favor of raw_transaction ( #268 )
Remove encode_structured_data in favor of encode_typed_data ( #269 )
Bump version: 0.12.3 → 0.12.4
Bump version: 0.12.3 → 0.12.4
Nothing published for this version
Nothing published for this version
- Update documentation to include blob transaction signing example.
Update documentation to include blob transaction signing example. ( #258 )
- Import cytoolz methods via eth_utils instead of cytoolz directly
Import cytoolz methods via eth_utils instead of cytoolz directly ( #251 )
Add encode_typed_data to list of functions that return a SignableMessage ( #247 )
Add support for type 3 , BlobTransaction , introduced by the Cancun network upgrade. ( #253 )
Bump deps to hexbytes>=1.2.0 and eth-rlp>=2.1.0 ( #254 )
Bump version: 0.11.2 → 0.11.3
Bump version: 0.11.2 → 0.11.3
Nothing published for this version
Nothing published for this version
- Remove deprecated signTransaction , it has been replaced by sign_transaction
Drop support for python 3.7 ( #248 )
Change older % and .format strings to use f-strings ( #245 )
Merge template updates, notably use pre-commit for linting and change the name of the master branch to main ( #248 )
Remove deprecated signTransaction , it has been replaced by sign_transaction ( #244 )
- Add upper pin to hexbytes dependency to due incoming breaking change
Deprecate encode_structured_data in favor of new encode_typed_data ( #235 )
Added usage notes and example for encode_structured_data ( #233 )
Add new encode_typed_data to better handle EIP712 message signing ( #235 )
Added option to call encode_typed_data with a single dict arg in addition to the existing 3-dict style ( #238 )
Add sign_typed_data as a method of the Account class ( #239 )
Added tests for encode_structured_data for easier comparison with Metamask’s SignTypedData ( #233 )
Bump version for node and ethers.js in integration tests, update ethers usage to match ( #236 )
Add build.os to readthedocs settings ( #237 )
Add upper pin to hexbytes dependency to due incoming breaking change ( #240 )
Add tests comparing output of signed EIP712 messages with metamask and ethers ( #241 )
- drop python3.6 support from setup
drop python3.6 support from setup ( #228 )
remove notices of Draft status for eips 712 and 191 ( #222 )
Add support for Python 3.11 ( #212 )
Upgrade Node from v12.x to v18.x in tests ( #217 )
pulled full new node_v18 install script ( #223 )
bump versions for docs dependencies ( #224 )
add sphinx_rtd_theme to docs/conf.py extensions list ( #225 )
merge in updates from python project template ( #288 )
- update all references to deprecated eth_abi.encode_abi to eth_abi.encode
update all references to deprecated eth_abi.encode_abi to eth_abi.encode ( #200 )
Reduce the number of pbkdf2 iterations to speed up tests ( #77 )
remove deprecated methods that were noted to go in v0.5 ( #195 )
add coverage reporting to pytest ( #192 )
Use updated circleci Python images, fix Sphinx warning ( #194 )
#197 , #198 , #199 , #202 , #203 , #204 , #206
- bump ansi-regex to 5.0.1 to fix minor ReDos vulnerability
bump ansi-regex to 5.0.1 to fix minor ReDos vulnerability ( #129 )
Enable lint runs again on CI ( #166 )
fix DoS-able regex pattern ( #178 )
Allow towncrier to build the release notes again ( #185 )
Add example to generate multiple accounts from a mnemonic ( #153 )
Pin Jinja2 at >=3.0.0,<3.1.0; pin towncrier==18.5.0; open up Sphinx requirement to allow >=1.6.5,<5. ( #156 )
added missing quotes to readme dev environment setup example ( #172 )
#79 , #155 , #162 , #164 , #165
Change bitarray dependency requirement to be >=2.4,<3 since 2.4 has wheels for all platform types. ( #154 )
Fix errors in EIP-712 signing ( #175 )
bump ansi-regex to 5.0.1 to fix minor ReDos vulnerability (#129)
Enable lint runs again on CI (#166)
fix DoS-able regex pattern (#178)
Allow towncrier to build the release notes again (#185)
Add example to generate multiple accounts from a mnemonic (#153)
Pin Jinja2 at >=3.0.0,<3.1.0; pin towncrier==18.5.0; open up Sphinx requirement to allow >=1.6.5,<5. (#156)
added missing quotes to readme dev environment setup example (#172)
- Allow encoding of structured data containing bytes
Allow encoding of structured data containing bytes ( #91 )
#68 , #144
- Add support for Python 3.9 and 3.10
Update dependencies:
eth-abi
eth-keyfile
eth-keys
eth-rlp
pyrlp
eth-utils ( #138 )
Add support for Python 3.9 and 3.10 ( #139 )
Drop support for Python 3.6 ( #139 )
### Bugfixes - fix DoS-able regex pattern ( #178 ) ### Miscellaneous changes - #183 , #184
fix DoS-able regex pattern ( #178 )
#183 , #184
### Miscellaneous changes - #163 , #168
#163 , #168
- Add support for Python 3.9 and 3.10
Add support for Python 3.9 and 3.10 ( #139 )
recover_message now raises an eth_keys.exceptions.BadSignature error if the v, r, and s points are invalid ( #142 )
- An explicit transaction type is no longer required for signing a transaction if we can implicitly determine the transaction type from the transactio
An explicit transaction type is no longer required for signing a transaction if we can implicitly determine the transaction type from the transaction parameters ( #125 )
When signing a transaction, the regular JSON-RPC structure is now expected as input and is converted to the appropriate rlp transaction structure when signing ( #125 )
Fix string interpolation in ValidationError message of _hash_eip_191_message ( #128 )
Updated docs for sign_transaction to show that transaction type can be implicitly determined based on transaction parameters if one is not provided ( #126 )
Add encode_defunct to list of example message encoders ( #127 )
- Added support for EIP-2718 (Typed Transaction) and EIP-2939 (Access List Transaction)
Added support for EIP-2718 (Typed Transaction) and EIP-2939 (Access List Transaction) ( #115 )
Added support for EIP-1559 (Dynamic Fee Transaction) ( #117 )
Structured messages (EIP-712) new permit leaving some (but not all) domain fields undefined. ( #72 )
Upgrade project template, of note: a new mypy & pydocstyle, and types being exported correctly. ( #121 )
#116
Nothing published for this version
- RLP encoding/decoding speedup by using rlp v2alpha1, which has a rust implementation.
RLP encoding/decoding speedup by using rlp v2alpha1, which has a rust implementation. ( #104 )
- Makes sure that the raw txt files needed for Mnemonics get packaged with the release.
Makes sure that the raw txt files needed for Mnemonics get packaged with the release. ( #99 )
- Replace attrdict with NamedTuple to silence a deprecation warning #76
Released 2020-04-23
Fix a crash in signing typed messages with arrays #97
Replace attrdict with NamedTuple to silence a deprecation warning #76
Run more doctests & improve docs #94
- Add opt-in support for Mnemonic seed phrases #87 (NOTE: This API is unaudited and likely to change)
Released 2020-03-30
Add Python 3.8 support #86
Add opt-in support for Mnemonic seed phrases #87 (NOTE: This API is unaudited and likely to change)
Dependency change: support eth-keys v0.3.* #69
- BREAKING CHANGE: drop python 3.5 (and therefore pypy3 support). #60 (includes other housekeeping)
Released 2019-05-06
BREAKING CHANGE: drop python 3.5 (and therefore pypy3 support). #60 (includes other housekeeping)
New message signing API: sign_message() and recover_message . #61
New eth_account.messages.encode_intended_validator() for EIP-191’s Intended Validator message-signing format. #56
New eth_account.messages.encode_structured_data() for EIP-712’s Structured Data message-signing format. #57
Add optional param iterations to encrypt() #52
Add optional param kdf to encrypt() , plus env var ETH_ACCOUNT_KDF . Default kdf switched from hmac-sha256 to scrypt. #38
Accept “to” addresses formatted as bytes in addition to checksummed, hex-encoded. #36
Released 2019-05-06
BREAKING CHANGE: drop python 3.5 (and therefore pypy3 support). #60 (includes other housekeeping)
New message signing API: ~eth_account.account.Account.sign_message and recover_message. #61
Add optional param iterations to ~eth_account.account.Account.encrypt #52
Add optional param kdf to ~eth_account.account.Account.encrypt, plus env var ETH_ACCOUNT_KDF. Default kdf switched from hmac-sha256 to scrypt. #38
Accept "to" addresses formatted as bytes in addition to checksummed, hex-encoded. #36
- Support eth_keys.datatypes.PrivateKey in params that accept a private key.
Released July 24, 2018
Support eth_keys.datatypes.PrivateKey in params that accept a private key.
New docs for Signers
Under the hood: add a new BaseAccount abstract class, so that upcoming signing classes can implement it (be on the lookout for upcoming hardware wallet support)
Released July 24, 2018
Support eth_keys.datatypes.PrivateKey in params that accept a private key.
New docs for eth_account.signers
Under the hood: add a new ~eth_account.signers.base.BaseAccount abstract class, so that upcoming signing classes can implement it (be on the lookout for upcoming hardware wallet support)
- Implement __eq__ and __hash__ for LocalAccount , so that accounts can be used in set , or as keys in dict , etc.
Released May 27, 2018
Implement eq and hash for LocalAccount , so that accounts can be used in set , or as keys in dict , etc.
Released May 27, 2018
Implement __eq__ and __hash__ for ~eth_account.signers.local.LocalAccount, so that accounts can be used in set, or as keys in dict, etc.
- Compatibility with pyrlp v0 and v1
Released Apr 25, 2018
Compatibility with pyrlp v0 and v1
- Accept ‘from’ in signTransaction, if it matches the sending private key’s address
Released Apr 23, 2018
Accept ‘from’ in signTransaction, if it matches the sending private key’s address
- Stopped requiring chainId, until tooling to automatically derive it gets better (Not that transactions without chainId are potentially replayable on
Released Apr 19, 2018
Audit cleanup is complete
Stopped requiring chainId, until tooling to automatically derive it gets better (Not that transactions without chainId are potentially replayable on fork chains)
- Ability to sign an already-hashed message
Released Apr 6, 2018
Ability to sign an already-hashed message
Moved eth_sign -style message hashing to eth_account.messages.defunct_hash_message()
Stricter transaction input validation, and better error messages. Including: to field must be checksummed.
PyPy3 support & tests
Upgrade dependencies
Moved non-public interfaces to internal module
Documentation
use getpass instead of typing in password manually
eth_account.signers.local.LocalAccount attributes
readme improvements
more
- Imported the local signing code from web3.py’s w3.eth.account
Imported the local signing code from web3.py’s w3.eth.account
Imported documentation and added more
Imported tests and pass them
- Launched repository, claimed names for pip, RTD, github, etc
Launched repository, claimed names for pip, RTD, github, etc
Your coding agent can read these notes before it upgrades. Set up the MCP server →