# openzeppelin-contracts changelog > OpenZeppelin Contracts is a library for secure smart contract development. - Vendor: OpenZeppelin - Category: Frameworks & Libraries - Official site: https://openzeppelin.com/contracts - Tracked by: What's New (https://whatsnew.fyi/product/openzeppelin-contracts) - Harvested from: GitHub (OpenZeppelin/openzeppelin-contracts) - Entries below: 10 (newest first) 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'. ## Releases ### v5.7.0 - Date: 2026-07-29 - Version: v5.7.0 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.7.0 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.7.0 - **removed** — EIP712: Drop the storage fallback for long name/version values, requiring both parameters to fit in a ShortString (at most 31 bytes) or the constructor reverts with ShortStrings.StringTooLong - **changed** — ERC2771Forwarder: Rename custom error ERC2771ForwarderFailureInAtomicBatch to ERC2771ForwarderNoRefundReceiver - **changed** — Governor and IGovernor: Replace GovernorQueueNotImplemented with GovernorProposalQueueingNotRequired and GovernorProposalQueueingFailed - **deprecated** — Checkpoints, DoubleEndedQueue, EnumerableMap and EnumerableSet: Deprecate the at function for accessing a specific index, introducing new pos functions to replace them - **added** — BlockHeader: Add a new library for verifying and parsing block headers - **added** — Create3: Add a library to deploy contracts using the CREATE3 mechanism, allowing the deployment address to depend only on the salt and the deployer - **added** — ERC1967Clones: Add a library to deploy minimal ERC-1967 proxies via CREATE or CREATE2 - **added** — ERC6372Utils: Add utility library for ERC-6372 clock mode validation, supporting block number and timestamp modes with consistency checks - **added** — RateLimiter: Add a library that provides primitives for limiting the rate at which an action can be performed, with a refilling token bucket and a sliding window counter - **added** — SimulateCall: Add call simulation utilities that allow inspecting return data from contract calls by executing them in a non-mutating, revert-based context - **changed** — Arrays: Reduce reliance on recursion to prevent stack overflow and support larger arrays - **changed** — ERC2771Forwarder: Revert the entire atomic batch if a call with value fails - **fixed** — InteroperableAddress: Fix overflow in the parsing functions that caused silent misparse of large interoperable addresses - **changed** — InteroperableAddress: Reject inputs with both chain reference and addresses empty - **added** — Memory: Add a isReserved(Slice) function that checks if the memory occupied by the slice is reserved - **removed** — Memory: Remove the asBytes32 and asPointer functions to reduce the risk of mistakes when manipulating memory pointers - **changed** — RLP: Perform a memory copy when decoding bytes objects containing a single byte instead of returning a reference to the input - **changed** — AccessManager: Treat setAuthority differently in canCall to prevent bypassing the updateAuthority security using an execute - **added** — AccessManager: Allow a role admin to cancel operations that grant or revoke roles - **changed** — AccountERC7579: Revert the uninstallation of any module if its onUninstall callback reverts, giving modules control over their own uninstallation ###### Breaking changes - `EIP712`: Drop the storage fallback for long `name`/`version` values. Both parameters must now fit in a `ShortString` (at most 31 bytes) or the constructor reverts with `ShortStrings.StringTooLong`. Storing the domain exclusively in immutables keeps the domain (and downstream `ERC7739` verification) consistent when the contract is used behind a proxy or clone without an initializer. ([#6631](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6631)) - `ERC2771Forwarder`: custom error `ERC2771ForwarderFailureInAtomicBatch` has been renamed to `ERC2771ForwarderNoRefundReceiver`. ([#6415](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6415)) - `Governor` and `IGovernor`: Replace `GovernorQueueNotImplemented` with `GovernorProposalQueueingNotRequired` and `GovernorProposalQueueingFailed`. ([#6582](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6582)) ###### Deprecations - `Checkpoints`, `DoubleEndedQueue`, `EnumerableMap` and `EnumerableSet`: Deprecate the `at` function for accessing a specific index of the structure. We introduce new `pos` functions to replace them. ([#6494](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6494)) ###### Changes by category ###### Utils ###### Additions - `BlockHeader`: Add a new library for verifying and parsing block headers. ([#6395](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6395)) - `Create3`: Add a library to deploy contracts using the `CREATE3` mechanism, allowing the deployment address to depend only on the salt and the deployer, independently of the deployed bytecode. ([#6402](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6402)) - `ERC1967Clones`: Add a library to deploy minimal ERC-1967 proxies via `CREATE` or `CREATE2`. ([#6405](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6405)) - `ERC6372Utils`: Add utility library for ERC-6372 clock mode validation, supporting block number and timestamp modes with consistency checks. ([#6483](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6483)) - `RateLimiter`: Add a library that provides primitives for limiting the rate at which an action can be performed, with two complementary strategies: a refilling token bucket and a sliding window counter. ([#6490](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6490)) - `SimulateCall`: Add a new call simulation utilities that allow inspecting return data from contract calls by executing them in a non-mutating, revert-based context. ([#6290](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6290)) ###### Other - `Arrays`: Reduce reliance on recursion to prevent stack overflow and support larger arrays. ([#6324](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6324)) - `ERC2771Forwarder`: Revert the entire atomic batch if a call with value fails. ([#6391](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6391)) - `InteroperableAddress`: Fix overflow in the parsing functions that caused silent misparse of large interoperable addresses. ([#6372](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6372)) - `InteroperableAddress`: Reject inputs with both chain reference and addresses empty. ([#6331](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6331)) - `Memory`: Add a `isReserved(Slice)` function that checks if the memory occupied by the slice is reserved (i.e. before the free memory pointer). ([#6302](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6302)) - `Memory`: Remove the `asBytes32` and `asPointer` function to reduce the risk of mistakes when manipulating memory pointers. ([#6348](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6348)) - `RLP`: Perform a memory copy when decoding `bytes` objects containing a single byte instead of returning a reference to the input. ([#6303](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6303)) ###### Ac _[Truncated at 4000 characters — full notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.7.0]_ ### v5.7.0-rc.0 - Date: 2026-07-15 - Version: v5.7.0-rc.0 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.7.0-rc.0 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.7.0-rc.0 - Labels: Pre-release - **removed** — Replace GovernorQueueNotImplemented with GovernorProposalQueueingNotRequired and GovernorProposalQueueingFailed in Governor and IGovernor - **deprecated** — Deprecate the at function for accessing a specific index in Checkpoints, DoubleEndedQueue, EnumerableMap and EnumerableSet, replaced by new pos functions - **added** — Add BlockHeader library for verifying and parsing block headers - **added** — Add Create3 library to deploy contracts using the CREATE3 mechanism - **added** — Add ERC1967Clones library to deploy minimal ERC-1967 proxies via CREATE or CREATE2 - **added** — Add ERC6372Utils utility library for ERC-6372 clock mode validation with block number and timestamp modes - **added** — Add RateLimiter library providing primitives for limiting action rates with token bucket and sliding window counter strategies - **added** — Add SimulateCall utility for inspecting return data from contract calls in a non-mutating context - **changed** — Reduce reliance on recursion in Arrays to prevent stack overflow and support larger arrays - **changed** — Revert the entire atomic batch in ERC2771Forwarder if a call with value fails - **fixed** — Fix overflow in InteroperableAddress parsing functions that caused silent misparse of large interoperable addresses - **changed** — Reject inputs with both chain reference and addresses empty in InteroperableAddress - **added** — Add isReserved function to Memory library that checks if memory occupied by a slice is reserved - **removed** — Remove asBytes32 and asPointer functions from Memory library to reduce mistakes when manipulating memory pointers - **changed** — Perform memory copy when decoding single byte bytes objects in RLP instead of returning a reference to input - **changed** — Treat setAuthority differently in AccessManager canCall to prevent bypassing updateAuthority security using execute - **changed** — Do not revert if hook checks fail during hook module uninstallation in AccountERC7579Hooked - **changed** — Drop the draft- prefix from ERC4337Utils and IERC4337 file names now that ERC-4337 is finalized - **added** — Add Paymaster simple ERC-4337 paymaster implementation - **added** — Add PaymasterERC20 extension of Paymaster that sponsors user operations against payment in ERC-20 tokens ###### Breaking changes - `Governor` and `IGovernor`: Replace `GovernorQueueNotImplemented` with `GovernorProposalQueueingNotRequired` and `GovernorProposalQueueingFailed`. ([#6582](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6582)) ###### Deprecations - `Checkpoints`, `DoubleEndedQueue`, `EnumerableMap` and `EnumerableSet`: Deprecate the `at` function for accessing a specific index of the structure. We introduce new `pos` functions to replace them. ([#6494](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6494)) ###### Changes by category ###### Utils ###### Additions - `BlockHeader`: Add a new library for verifying and parsing block headers. ([#6395](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6395)) - `Create3`: Add a library to deploy contracts using the `CREATE3` mechanism, allowing the deployment address to depend only on the salt and the deployer, independently of the deployed bytecode. ([#6402](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6402)) - `ERC1967Clones`: Add a library to deploy minimal ERC-1967 proxies via `CREATE` or `CREATE2`. ([#6405](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6405)) - `ERC6372Utils`: Add utility library for ERC-6372 clock mode validation, supporting block number and timestamp modes with consistency checks. ([#6483](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6483)) - `RateLimiter`: Add a library that provides primitives for limiting the rate at which an action can be performed, with two complementary strategies: a refilling token bucket and a sliding window counter. ([#6490](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6490)) - `SimulateCall`: Add a new call simulation utilities that allow inspecting return data from contract calls by executing them in a non-mutating, revert-based context. ([#6290](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6290)) ###### Other - `Arrays`: Reduce reliance on recursion to prevent stack overflow and support larger arrays. ([#6324](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6324)) - `ERC2771Forwarder`: Revert the entire atomic batch if a call with value fails. ([#6391](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6391)) - `InteroperableAddress`: Fix overflow in the parsing functions that caused silent misparse of large interoperable addresses. ([#6372](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6372)) - `InteroperableAddress`: Reject inputs with both chain reference and addresses empty. ([#6331](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6331)) - `Memory`: Add a `isReserved(Slice)` function that checks if the memory occupied by the slice is reserved (i.e. before the free memory pointer). ([#6302](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6302)) - `Memory`: Remove the `asBytes32` and `asPointer` function to reduce the risk of mistakes when manipulating memory pointers. ([#6348](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6348)) - `RLP`: Perform a memory copy when decoding `bytes` objects containing a single byte instead of returning a reference to the input. ([#6303](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6303)) ###### Access - `AccessManager`: Treat `setAuthority` differently in `canCall` to prevent bypassing the `updateAuthority` security using an `execute`. ([#6388](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6388)) ###### Account - `AccountERC7579Hooked`: Do not revert if hook checks fail during the hook module uninstallation. ([#6390](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6390)) - `ERC4337Utils`, `IERC4337`: Drop the `draft-` prefix from the file names now that ERC-4337 is finalized. Imports must be updated from `account/utils/draft-ERC4337Utils.sol` to `account/utils/ERC4337Utils.sol` and from `interfaces/draft-IERC4337.sol` to `interfaces/IERC4337.sol`. ([#6581](h _[Truncated at 4000 characters — full notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.7.0-rc.0]_ ### v5.6.1 - Date: 2026-02-27 - Version: v5.6.1 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.1 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.6.1 - **fixed** — Fix overflow in InteroperableAddress parsing functions that caused silent misparse of large interoperable addresses - `InteroperableAddress`: Fix overflow in the parsing functions that caused silent misparse of large interoperable addresses. ([#6372](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6372)) ### v5.6.0 - Date: 2026-02-25 - Version: v5.6.0 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.0 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.6.0 - **changed** — Strings.escapeJSON now escapes all control characters in the range U+0000 to U+001F per RFC-4627 - **changed** — ERC1155 batch transfers with exactly one id/value now call IERC1155Receiver.onERC1155BatchReceived instead of onERC1155Received - **changed** — ERC1967Proxy and TransparentUpgradeableProxy now mandate initialization during construction and revert with ERC1967ProxyUninitialized if no initialize call is provided - **changed** — ERC721 and ERC1155 now prevent setting an operator for address(0) - **changed** — RLP.encode(bytes32) now encodes bytes32 as a fixed size item instead of as a scalar - **changed** — ERC4337Utils.parseValidationData now returns a ValidationRange as the last return tuple value - **changed** — SignerWebAuthn._rawSignatureValidation now returns false when the signature is not a valid WebAuthn authentication assertion and P256 fallback is removed - **changed** — Memory.setFreeMemoryPointer is renamed to unsafeSetFreeMemoryPointer - **removed** — Memory.asBytes32 and Memory.asPointer functions are removed - **changed** — Account default version of the ERC-4337 entrypoint updated to v0.9 - **changed** — AccountERC7579 no longer reverts and performs uninstall if the onUninstall hook of a module reverts - **added** — ERC4337Utils.paymasterSignature function to extract the signature in paymasterAndData after Entrypoint v0.9 - **added** — ERC4337Utils variants of packValidationData that receive a ValidationRange argument for timestamp or block number - **added** — ERC1155._checkAuthorized internal virtual function to encapsulate isApprovedForAll and msg.sender checks - **added** — ERC4626 internal virtual functions _transferIn and _transferOut to allow overriding underlying assets transfer mechanisms - **added** — ERC721URIStorage._suffixURI internal getter for retrieving custom tokenURI without the base prefix - **added** — ERC-165 detection for IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces - **added** — BridgeFungible, BridgeERC20 and BridgeERC7802 bridge contracts to handle crosschain movements of ERC-20 and ERC-7802 tokens - **added** — CrosschainLinked helper contract to facilitate communication between a contract on one chain and counterparts on remote chains through ERC-7786 gateways ###### Breaking changes - `Strings`: The `escapeJSON` function now escapes all control characters in the range U+0000 to U+001F per RFC-4627. Previously only backspace, tab, newline, form feed, carriage return, double quote, and backslash were escaped. Input strings containing any other control character (e.g. null `0x00`) or raw bytes in U+0001–U+001F will now produce different, longer output (e.g. `\u0000` for null). ([#6344](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6344)) - `ERC1155`: Performing batch transfers with exactly one id/value in the batch no-longer calls `IERC1155Receiver.onERC1155Received`. `IERC1155Receiver.onERC1155BatchReceived` is called instead (with arrays of length one). ([#6170](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6170)) - `ERC1967Proxy` and `TransparentUpgradeableProxy`: Mandate initialization during construction. Deployment now reverts with `ERC1967ProxyUninitialized` if an initialize call is not provided. Developers that rely on the previous behavior and want to disable this check can do so by overriding the internal `_unsafeAllowUninitialized` function to return true. ([#5906](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5906)) - `ERC721` and `ERC1155`: Prevent setting an operator for `address(0)`. In the case of `ERC721` this type of operator allowance could lead to obfuscated mint permission. ([#6171](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6171)) - `RLP`: The `encode(bytes32)` function now encodes `bytes32` as a fixed size item and not as a scalar in `encode(uint256)`. Users must replace calls to `encode(bytes32)` with `encode(uint256(bytes32))` to preserve the same behavior. ([#6167](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6167)) - `ERC4337Utils`: The `parseValidationData` now returns a `ValidationRange` as the last return tuple value indicating whether the `validationData` is compared against a timestamp or block number. Developers must update their code to handle this new return value (e.g. `(aggregator, validAfter, validUntil) -> (aggregator, validAfter, validUntil, range)`). ([#6215](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6215)) - `SignerWebAuthn`: The `_rawSignatureValidation` function now returns `false` when the signature is not a valid WebAuthn authentication assertion. P256 fallback is removed. Developers can add it back by overriding the function. ([#6337](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6337)) - `Memory`: The `setFreeMemoryPointer` function is renamed to `unsafeSetFreeMemoryPointer`. Developers should use `unsafeSetFreeMemoryPointer` instead of `setFreeMemoryPointer` after v5.6.0. ([#6348](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6348)) - `Memory`: Remove the `asBytes32` and `asPointer` function to reduce the risk of mistakes when manipulating memory pointers. ([#6340](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6340)) ###### Changes by category ###### Account - `Account`: Update default version of the ERC-4337 entrypoint to v0.9. ([#6135](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6135)) - `AccountERC7579`: Do not revert and perform the uninstall if the `onUninstall` hook of a module reverts. ([#6142](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6142)) - `ERC4337Utils`: Added the `paymasterSignature` function to extract the signature in `paymasterAndData` after Entrypoint v0.9. Similarly, a variant of `paymasterData` that receives a flag to exclude the signature from the returned data. ([#6215](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6215)) - `ERC4337Utils`: Added variants of `packValidationData(address,uint48,uint48)` and `packValidationData(bool,uint48,uint48)` that receive a `ValidationRange` argument, could be timestamp or block number. Similarly, the `parseValidationData` now returns a `ValidationRange` too. ([#6215](https://gi _[Truncated at 4000 characters — full notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.0]_ ### v5.6.0-rc.1 - Date: 2026-01-12 - Version: v5.6.0-rc.1 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.0-rc.1 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.6.0-rc.1 - Labels: Pre-release - **added** — Add ERC-165 detection for the IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces in the ERC6909ContentURI, ERC6909TokenSupply and ERC6909Metadata contracts respectively - Add ERC-165 detection for the `IERC6909ContentURI`, `IERC6909TokenSupply` and `IERC6909Metadata` interfaces in the `ERC6909ContentURI`, `ERC6909TokenSupply` and `ERC6909Metadata` contracts respectively. ([#6246](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6246)) and ([#6247](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6247)) ### v5.6.0-rc.0 - Date: 2025-12-19 - Version: v5.6.0-rc.0 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.0-rc.0 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.6.0-rc.0 - Labels: Pre-release - **changed** — ERC1155 batch transfers with exactly one id/value now call IERC1155Receiver.onERC1155BatchReceived instead of onERC1155Received - **changed** — ERC1967Proxy and TransparentUpgradeableProxy now mandate initialization during construction and revert with ERC1967ProxyUninitialized if no initialize call is provided - **changed** — ERC721 and ERC1155 now prevent setting an operator for address(0) - **changed** — RLP encode(bytes32) function now encodes bytes32 as a fixed size item instead of as a scalar - **changed** — ERC4337Utils parseValidationData now returns a ValidationRange as the last return tuple value indicating whether validationData is compared against a timestamp or block number - **changed** — Account updated default version of the ERC-4337 entrypoint to v0.9 - **changed** — AccountERC7579 no longer reverts and performs the uninstall if the onUninstall hook of a module reverts - **added** — ERC4337Utils added paymasterSignature function to extract the signature in paymasterAndData after Entrypoint v0.9 - **added** — ERC4337Utils added paymasterData variant that receives a flag to exclude the signature from the returned data - **added** — ERC4337Utils added variants of packValidationData that receive a ValidationRange argument for timestamp or block number - **added** — ERC1155 introduced _checkAuthorized internal virtual function to encapsulate isApprovedForAll and msg.sender checks - **added** — ERC4626 allows overriding underlying assets transfer mechanisms through new internal virtual functions _transferIn and _transferOut - **added** — ERC721URIStorage added _suffixURI internal getter for retrieving custom tokenURI without the base prefix - **added** — Added BridgeERC20Core, BridgeERC20 and BridgeERC7802 bridge contracts to handle crosschain movements of ERC-20 and ERC-7802 tokens - **added** — Added CrosschainLinked helper contract to facilitate communication between a contract on one chain and counterparts on remote chains through ERC-7786 gateways - **added** — Added ERC20Crosschain extension to embed an ERC-7786 based crosschain bridge directly in the token contract - **added** — MessageHashUtils added helper functions to build EIP-712 domain typehash and separator with fields selectively enabled/disabled - **added** — SignatureChecker added isValidERC1271SignatureNowCalldata variant that takes the signature from calldata - **added** — Added TrieProof library for verifying Ethereum Merkle-Patricia trie inclusion proofs - **added** — DoubleEndedQueue added tryPushBack, tryPopBack, tryPushFront, tryPopFront, tryFront, tryBack, and tryAt function variants that do not revert ###### Breaking changes - `ERC1155`: Performing batch transfers with exactly one id/value in the batch no-longer calls `IERC1155Receiver.onERC1155Received`. `IERC1155Receiver.onERC1155BatchReceived` is called instead (with arrays of length one). ([#6170](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6170)) - `ERC1967Proxy` and `TransparentUpgradeableProxy`: Mandate initialization during construction. Deployment now reverts with `ERC1967ProxyUninitialized` if an initialize call is not provided. Developers that rely on the previous behavior and want to disable this check can do so by overriding the internal `_unsafeAllowUninitialized` function to return true. ([#5906](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5906)) - `ERC721` and `ERC1155`: Prevent setting an operator for `address(0)`. In the case of `ERC721` this type of operator allowance could lead to obfuscated mint permission. ([#6171](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6171)) - `RLP`: The `encode(bytes32)` function now encodes `bytes32` as a fixed size item and not as a scalar in `encode(uint256)`. Users must replace calls to `encode(bytes32)` with `encode(uint256(bytes32))` to preserve the same behavior. ([#6167](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6167)) - `ERC4337Utils`: The `parseValidationData` now returns a `ValidationRange` as the last return tuple value indicating whether the `validationData` is compared against a timestamp or block number. Developers must update their code to handle this new return value (e.g. `(aggregator, validAfter, validUntil) -> (aggregator, validAfter, validUntil, range)`). ([#6215](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6215)) ###### Changes by category ###### Account - `Account`: Update default version of the ERC-4337 entrypoint to v0.9. ([#6135](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6135)) - `AccountERC7579`: Do not revert and perform the uninstall if the `onUninstall` hook of a module reverts. ([#6142](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6142)) - `ERC4337Utils`: Added the `paymasterSignature` function to extract the signature in `paymasterAndData` after Entrypoint v0.9. Similarly, a variant of `paymasterData` that receives a flag to exclude the signature from the returned data. ([#6215](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6215)) - `ERC4337Utils`: Added variants of `packValidationData(address,uint48,uint48)` and `packValidationData(bool,uint48,uint48)` that receive a `ValidationRange` argument, could be timestamp or block number. Similarly, the `parseValidationData` now returns a `ValidationRange` too. ([#6215](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6215)) ###### Tokens - `ERC1155`: Introduce the `_checkAuthorized` internal virtual function to encapsulate `isApprovedForAll` and `msg.sender == from` checks. ([#6133](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6133)) - `ERC1155`: Call `IERC1155Receiver.onERC1155BatchReceived` when performing a batch transfers with exactly one id/value in the batch. ([#6170](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6170)) - `ERC4626`: Allow overriding underlying assets transfer mechanisms through new internal virtual functions (`_transferIn` and `_transferOut`). ([#5970](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5970)) - `ERC721URIStorage`: Add `_suffixURI`, an internal getter for retrieving the custom tokenURI without the base prefix. ([#6175](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/6175)) ###### Cross-chain - `BridgeERC20Core`, `BridgeERC20` and `BridgeERC7802`: Added bridge contracts to handle crosschain movements of ERC-20 (and ERC-7802) tokens. ([#5914](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5914)) - `CrosschainLinked`: Added a new helper contract to facilitate communication between a c _[Truncated at 4000 characters — full notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.0-rc.0]_ ### v5.5.0 - Date: 2025-10-31 - Version: v5.5.0 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.5.0 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.5.0 - **fixed** — AccountERC7579: Prevent revert in isModuleInstalled for fallback modules when additionalContext has fewer than 4 bytes, returning false instead to ensure ERC-7579 compliance - **fixed** — ERC165Checker: Ensure supportsERC165 function returns false if the target reverts during the supportsInterface(0xffffffff) call - **changed** — Account: Add signature argument to the internal _validateUserOp function for custom signature handling logic - **changed** — AccountERC7579: Installing and uninstalling fallback modules now require initData and deInitData arguments to be at least 4 bytes long and reverts with ERC7579CannotDecodeFallbackData instead of treating missing bytes as 0x00 - **changed** — ERC6909 and its extensions are no longer marked as draft since EIP-6909 is now final, requiring updated import paths - **removed** — SignerERC7702 is renamed to SignerEIP7702, requiring updated imports and inheritance - **removed** — ERC721Holder, ERC1155Holder, ReentrancyGuard and ReentrancyGuardTransient are flagged as stateless and are no longer transpiled - **changed** — Update minimum pragma to 0.8.24 in AccessControlEnumerable, Arrays, CircularBuffer, EIP712, EnumerableMap, EnumerableSet, ERC1155, ERC1155Burnable, ERC1155Pausable, ERC1155Supply, ERC1155URIStorage, ERC20Votes, ERC4626, ERC721Burnable, ERC721Consecutive, ERC721Enumerable, ERC721Pausable, ERC721Royalty, ERC721URIStorage, ERC721Votes, ERC721Wrapper, ERC7739, Heap, MerkleTree, MessageHashUtils, Strings, Votes and VotesExtended - **deprecated** — Initializable and UUPSUpgradeable are no longer transpiled; an alias is present in the @openzeppelin/contracts-upgradeable package that will be removed in the next major release - **deprecated** — ECDSA signature malleability protection is partly deprecated - **changed** — ERC4626: Compute maxWithdraw using maxRedeem and previewRedeem so that changes to the preview functions affect the max functions - **added** — InteroperableAddress: Add a library for formatting and parsing ERC-7930 interoperable addresses - **added** — ERC7786Recipient: Generic ERC-7786 cross-chain message recipient contract - **added** — IERC7786: Add the interface for ERC-7786 Cross-Chain Messaging Gateway - **added** — SignerWebAuthn: Add an abstract signer that verifies WebAuthn signatures with a P256 fallback - **added** — Add constructors to the different signers - **added** — ERC7913WebAuthnVerifier: Add an ERC-7913 verifier that verifies WebAuthn Authentication Assertions for P256 identities - **added** — WebAuthn: Add a library for verifying WebAuthn Authentication Assertions - **added** — ECDSA: Add parse and parseCalldata to parse bytes signatures of length 65 or 64 into v, r, s components - **added** — ECDSA: Add recoverCalldata and tryRecoverCalldata, variants of recover and tryRecover that are more efficient when signatures are in calldata - **added** — SignatureChecker: Add isValidSignatureNowCalldata for efficient processing of calldata signatures ###### Bug fixes - `AccountERC7579`: Prevent revert in `isModuleInstalled` for fallback modules when `additionalContext` has fewer than 4 bytes. The function now returns `false` instead of reverting, ensuring ERC-7579 compliance. ([#5961](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5961)) - `ERC165Checker`: Ensure the `supportsERC165` function returns false if the target reverts during the `supportsInterface(0xffffffff)` call. ([#5810](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5880)) ###### Breaking changes - `Account`: Add `signature` argument to the internal `_validateUserOp` function for custom signature handling logic. Developers overriding it must now provide the signature from the user operation (i.e. `userOp.signature`) to keep compatibility. ([#5976](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5976)) - `AccountERC7579`: Installing and uninstalling fallback modules now require the corresponding `initData` and `deInitData` arguments to be at least 4 bytes long (matching the selector to which the fallback module is registered). It now reverts with `ERC7579CannotDecodeFallbackData` instead of treating the missing bytes as `0x00`. ([#5974](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5974)) - `ERC6909` and its extensions (`ERC6909ContentURI`, `ERC6909Metadata` and `ERC6909TokenSupply`) are no longer marked as draft since [EIP-6909](https://eips.ethereum.org/EIPS/eip-6909) is now final. Developers must update the import paths. Contracts behavior is not modified. ([#5929](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5929)) - `SignerERC7702` is renamed as `SignerEIP7702`. Imports and inheritance must be updated to that new name and path. Behavior is unmodified. ([#5932](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5932)) - `ERC721Holder`, `ERC1155Holder`, `ReentrancyGuard` and `ReentrancyGuardTransient` are flagged as stateless and are no longer transpiled. Developers using their upgradeable variants from `@openzeppelin/contracts-upgradeable` must update their imports to use the equivalent version available in `@openzeppelin/contracts`. ([#5944](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5944), [#5942](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5942)) - Update minimum pragma to 0.8.24 in `AccessControlEnumerable`, `Arrays`, `CircularBuffer`, `EIP712`, `EnumerableMap`, `EnumerableSet`, `ERC1155`, `ERC1155Burnable`, `ERC1155Pausable`, `ERC1155Supply`, `ERC1155URIStorage`, `ERC20Votes`, `ERC4626`,`ERC721Burnable`, `ERC721Consecutive`, `ERC721Enumerable`, `ERC721Pausable`, `ERC721Royalty`, `ERC721URIStorage`, `ERC721Votes`, `ERC721Wrapper`, `ERC7739`, `Heap`, `MerkleTree`, `MessageHashUtils`, `Strings`, `Votes` and `VotesExtended`. ([#5723](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/5723), [#5726](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5726), [#5965](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5965)) ###### Deprecation - `Initializable` and `UUPSUpgradeable` are no longer transpiled. An alias is present in the `@openzeppelin/contracts-upgradeable` package that redirect to the corresponding file in `@openzeppelin/contracts`. These alias will be removed in the next major release. Developers are advised to update their imports to get these files directly from the `@openzeppelin/contracts` package. [#5941](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5941) - `ECDSA` signature malleability protection is partly deprecated. See documentation for more details. [#5814](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5814) ###### Changes by category ###### Tokens - `ERC4626`: compute `maxWithdraw` using `maxRedeem` and `previewRedeem` so that changes to the preview functions affect the max functions. ([#5130](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5130)) ###### Cross-chain - _[Truncated at 4000 characters — full notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.5.0]_ ### v5.5.0-rc.1 - Date: 2025-10-10 - Version: v5.5.0-rc.1 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.5.0-rc.1 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.5.0-rc.1 - Labels: Pre-release - **fixed** — AccountERC7579: Prevent revert in isModuleInstalled for fallback modules when additionalContext has fewer than 4 bytes by returning false instead of reverting - **changed** — Account: Add signature argument to the internal _validateUserOp function for custom signature handling logic - **changed** — AccountERC7579: Installing and uninstalling fallback modules now require initData and deInitData arguments to be at least 4 bytes long and revert with ERC7579CannotDecodeFallbackData when bytes are missing - **added** — Arrays: Add slice and splice functions for value types (uint256[], bytes32[], address[]) ###### Bug fixes - `AccountERC7579`: Prevent revert in `isModuleInstalled` for fallback modules when `additionalContext` has fewer than 4 bytes. The function now returns `false` instead of reverting, ensuring ERC-7579 compliance. ([#5961](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5961)) ###### Breaking changes - `Account`: Add `signature` argument to the internal `_validateUserOp` function for custom signature handling logic. Developers overriding it must now provide the signature from the user operation (i.e. `userOp.signature`) to keep compatibility. ([#5976](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5976)) - `AccountERC7579`: Installing and uninstalling fallback modules now require the corresponding `initData` and `deInitData` arguments to be at least 4 bytes long (matching the selector to which the fallback module is registered). It now reverts with `ERC7579CannotDecodeFallbackData` instead of treating the missing bytes as `0x00`. ([#5974](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5974)) ###### Changes by category ###### Utils - `Arrays`: Add `slice` and `splice` functions for value types (`uint256[]`, `bytes32[]`, `address[]`). ([#5983](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5983)) ### v5.5.0-rc.0 - Date: 2025-09-26 - Version: v5.5.0-rc.0 - Original notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.5.0-rc.0 - Permalink: https://whatsnew.fyi/product/openzeppelin-contracts/releases/v5.5.0-rc.0 - Labels: Pre-release - **fixed** — ERC165Checker: Ensure the supportsERC165 function returns false if the target reverts during the supportsInterface(0xffffffff) call - **removed** — ERC6909 and its extensions (ERC6909ContentURI, ERC6909Metadata and ERC6909TokenSupply) are no longer marked as draft; update import paths - **removed** — SignerERC7702 is renamed to SignerEIP7702; update imports and inheritance - **removed** — ERC721Holder, ERC1155Holder, ReentrancyGuard and ReentrancyGuardTransient are no longer transpiled; use versions from @openzeppelin/contracts instead of @openzeppelin/contracts-upgradeable - **changed** — Update minimum pragma to 0.8.24 in Votes, VotesExtended, ERC20Votes, Strings, ERC1155URIStorage, MessageHashUtils, ERC721URIStorage, ERC721Votes, ERC721Wrapper, ERC721Burnable, ERC721Consecutive, ERC721Enumerable, ERC721Pausable, ERC721Royalty, EIP712, ERC4626 and ERC7739 - **deprecated** — Initializable and UUPSUpgradeable are no longer transpiled; use these files directly from @openzeppelin/contracts package instead of via @openzeppelin/contracts-upgradeable aliases - **deprecated** — ECDSA signature malleability protection is partly deprecated - **changed** — ERC4626: compute maxWithdraw using maxRedeem and previewRedeem so that changes to the preview functions affect the max functions - **added** — InteroperableAddress: Add a library for formatting and parsing ERC-7930 interoperable addresses - **added** — ERC7786Recipient: Generic ERC-7786 cross-chain message recipient contract - **added** — IERC7786: Add the interface for ERC-7786 Cross-Chain Messaging Gateway - **added** — SignerWebAuthn: Add an abstract signer that verifies WebAuthn signatures, with a P256 fallback - **added** — Add constructors to the different signers - **added** — ERC7913WebAuthnVerifier: Add an ERC-7913 verifier that verifies WebAuthn Authentication Assertions for P256 identities - **added** — WebAuthn: Add a library for verifying WebAuthn Authentication Assertions - **added** — ECDSA: Add parse and parseCalldata to parse bytes signatures of length 65 or 64 (erc-2098) into its v,r,s components - **added** — ECDSA: Add recoverCalldata and tryRecoverCalldata, variants of recover and tryRecover that are more efficient when signatures are in calldata - **added** — SignatureChecker: Add isValidSignatureNowCalldata(address,bytes32,bytes calldata) for efficient processing of calldata signatures ###### Bug fixes - `ERC165Checker`: Ensure the `supportsERC165` function returns false if the target reverts during the `supportsInterface(0xffffffff)` call. ([#5810](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5880)) ###### Breaking changes - `ERC6909` and its extensions (`ERC6909ContentURI`, `ERC6909Metadata` and `ERC6909TokenSupply`) are no longer marked as draft since [EIP-6909](https://eips.ethereum.org/EIPS/eip-6909) is now final. Developers must update the import paths. Contracts behavior is not modified. ([#5929](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5929)) - `SignerERC7702` is renamed as `SignerEIP7702`. Imports and inheritance must be updated to that new name and path. Behavior is unmodified. ([#5932](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5932)) - `ERC721Holder`, `ERC1155Holder`, `ReentrancyGuard` and `ReentrancyGuardTransient` are flagged as stateless and are no longer transpiled. Developers using their upgradeable variants from `@openzeppelin/contracts-upgradeable` must update their imports to use the equivalent version available in `@openzeppelin/contracts`. ([#5944](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5944), [#5942](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5942)) - Update minimum pragma to 0.8.24 in `Votes`, `VotesExtended`, `ERC20Votes`, `Strings`, `ERC1155URIStorage`, `MessageHashUtils`, `ERC721URIStorage`, `ERC721Votes`, `ERC721Wrapper`, `ERC721Burnable`, `ERC721Consecutive`, `ERC721Enumerable`, `ERC721Pausable`, `ERC721Royalty`, `ERC721Wrapper`, `EIP712`, `ERC4626` and `ERC7739`. ([#5726](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5726)) ###### Deprecation - `Initializable` and `UUPSUpgradeable` are no longer transpiled. An alias is present in the `@openzeppelin/contracts-upgradeable` package that redirect to the corresponding file in `@openzeppelin/contracts`. These alias will be removed in the next major release. Developers are advised to update their imports to get these files directly from the `@openzeppelin/contracts` package. [#5941](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5941) - `ECDSA` signature malleability protection is partly deprecated. See documentation for more details. [#5814](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5814) ###### Changes by category ###### Tokens - `ERC4626`: compute `maxWithdraw` using `maxRedeem` and `previewRedeem` so that changes to the preview functions affect the max functions. ([#5130](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5130)) ###### Cross-chain - `InteroperableAddress`: Add a library for formatting and parsing ERC-7930 interoperable addresses. ([#5736](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5736)) - `ERC7786Recipient`: Generic ERC-7786 cross-chain message recipient contract. ([#5904](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5904)) - `IERC7786`: Add the (draft) interface for ERC-7786 "Cross-Chain Messaging Gateway" ([#5737](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5737)) ###### Cryptography ###### Signers - `SignerWebAuthn`: Add an abstract signer that verifies WebAuthn signatures, with a P256 fallback. ([#5809](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5809)) - Add constructors to the different signers. ([#5757](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5757)) ###### Verifiers - `ERC7913WebAuthnVerifier`: Add an ERC-7913 verifier that verifies WebAuthn Authentication Assertions for P256 identities. ([#5809](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5809)) ###### Other - `WebAuthn`: Add a library for verifying WebAuthn Authentication Assertions. ([#5809](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/5809)) - `ECDSA`: Add `parse` and `parseCalldata` to parse bytes signatures of length 65 or 64 (erc-2098) int _[Truncated at 4000 characters — full notes: https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.5.0-rc.0]_ ### v5.4.0 - 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 - **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]_