# openzeppelin-contracts v5.4.0 - Product: openzeppelin-contracts (https://whatsnew.fyi/product/openzeppelin-contracts) - Vendor: OpenZeppelin - Date: 2025-07-17 - Version: v5.4.0 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.4.0 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.4.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — Update minimum pragma to 0.8.24 in SignatureChecker, Governor and Governor's extensions - **changed** — Reduce pragma requirement of interface files - **added** — Add Account, a simple ERC-4337 account implementation with minimal logic to process user operations - **added** — Add AccountERC7579, an extension of Account that implements support for ERC-7579 modules of type executor, validator, and fallback handler - **added** — Add AccountERC7579Hooked, an extension of AccountERC7579 that implements support for ERC-7579 hook modules - **added** — Add EIP7702Utils library for checking if an address has an EIP-7702 delegation in place - **added** — Add IERC7821 and ERC7821 interface and logic for minimal batch execution - **added** — Add GovernorNoncesKeyed extension of Governor that adds support for keyed nonces when voting by sig - **added** — Add ERC20Bridgeable implementation of ERC-7802 that makes an ERC-20 compatible with crosschain bridges - **added** — Add AbstractSigner, SignerECDSA, SignerP256, and SignerRSA abstract contract and various implementations for contracts that deal with signature verification - **added** — Add SignerERC7702 implementation of AbstractSigner for Externally Owned Accounts (EOAs) - **added** — Add SignerERC7913 abstract signer that verifies signatures using the ERC-7913 workflow - **added** — Add MultiSignerERC7913 implementation of AbstractSigner that supports multiple ERC-7913 signers with a threshold-based signature verification system - **added** — Add MultiSignerERC7913Weighted extension of MultiSignerERC7913 that supports assigning different weights to each signer - **added** — Add ERC7913P256Verifier and ERC7913RSAVerifier ready to use ERC-7913 verifiers that implement key verification for P256 (secp256r1) and RSA keys - **added** — Add support for ERC-7913 signatures to SignatureChecker alongside existing ECDSA and ERC-1271 signature verification - **added** — Add ERC7739 abstract contract to validate signatures following the rehashing scheme from ERC7739Utils - **added** — Add ERC7739Utils library that implements a defensive rehashing mechanism to prevent replayability of smart contract signatures based on the ERC-7739 - **added** — Add BytesToBytesMap type support to EnumerableMap - **added** — Add keys(uint256,uint256) to EnumerableMap that returns a subset (slice) of the keys in the map - **added** — Add StringSet and BytesSet types support to EnumerableSet - **added** — Add values(uint256,uint256) to EnumerableSet that returns a subset (slice) of the values in the set - **added** — Add unsafeAccess, unsafeMemoryAccess and unsafeSetLength to Arrays for bytes[] and string[] - **added** — Add Blockhash library that provides access to historical block hashes using EIP-2935's history storage, extending the standard 256-block limit to 8191 blocks - **fixed** — Fix lastIndexOf(bytes,byte,uint256) in Bytes with empty buffers and finite position to correctly return type(uint256).max instead of accessing uninitialized memory sections ###### Breaking changes - Update minimum pragma to 0.8.24 in `SignatureChecker`, `Governor` and Governor's extensions. ([#5716](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5716)). ###### Pragma changes - Reduced pragma requirement of interface files ###### Changes by category ###### Account - `Account`: Added a simple ERC-4337 account implementation with minimal logic to process user operations. ([#5657](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5657)) - `AccountERC7579`: Extension of `Account` that implements support for ERC-7579 modules of type executor, validator, and fallback handler. ([#5657](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5657)) - `AccountERC7579Hooked`: Extension of `AccountERC7579` that implements support for ERC-7579 hook modules. ([#5657](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5657)) - `EIP7702Utils`: Add a library for checking if an address has an EIP-7702 delegation in place. ([#5587](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5587)) - `IERC7821`, `ERC7821`: Interface and logic for minimal batch execution. No support for additional `opData` is included. ([#5657](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5657)) ###### Governance - `GovernorNoncesKeyed`: Extension of `Governor` that adds support for keyed nonces when voting by sig. ([#5574](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5574)) ###### Tokens - `ERC20Bridgeable`: Implementation of ERC-7802 that makes an ERC-20 compatible with crosschain bridges. ([#5739](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5739)) ###### Cryptography ###### Signers - `AbstractSigner`, `SignerECDSA`, `SignerP256`, and `SignerRSA`: Add an abstract contract and various implementations for contracts that deal with signature verification. ([#5657](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5657)) - `SignerERC7702`: Implementation of `AbstractSigner` for Externally Owned Accounts (EOAs). Useful with ERC-7702. ([#5657](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5657)) - `SignerERC7913`: Abstract signer that verifies signatures using the ERC-7913 workflow. ([#5659](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5659)) - `MultiSignerERC7913`: Implementation of `AbstractSigner` that supports multiple ERC-7913 signers with a threshold-based signature verification system. ([#5659](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5659)) - `MultiSignerERC7913Weighted`: Extension of `MultiSignerERC7913` that supports assigning different weights to each signer, enabling more flexible governance schemes. ([#5741](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5741)) ###### Verifiers - `ERC7913P256Verifier` and `ERC7913RSAVerifier`: Ready to use ERC-7913 verifiers that implement key verification for P256 (secp256r1) and RSA keys. ([#5659](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5659)) ###### Other - `SignatureChecker`: Add support for ERC-7913 signatures alongside existing ECDSA and ERC-1271 signature verification. ([#5659](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5659)) - `ERC7739`: An abstract contract to validate signatures following the rehashing scheme from `ERC7739Utils`. ([#5664](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5664)) - `ERC7739Utils`: Add a library that implements a defensive rehashing mechanism to prevent replayability of smart contract signatures based on the ERC-7739. ([#5664](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5664)) ###### Structures - `EnumerableMap`: Add support for `BytesToBytesMap` type. ([#5658](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5658)) - `EnumerableMap`: Add `keys(uint256,uint256)` that returns a subset (slice) of the keys in the map. ([#5713](https://github.com/OpenZeppelin/openze _[Truncated at 4000 characters — full notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.4.0]_