OpenZeppelin Contracts v5.7.0
- Version
v5.7.0- Repository
- OpenZeppelin/openzeppelin-contracts
Release notes
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)
• ERC2771Forwarder: custom error ERC2771ForwarderFailureInAtomicBatch has been renamed to ERC2771ForwarderNoRefundReceiver. (#6415)
• Governor and IGovernor: Replace GovernorQueueNotImplemented with GovernorProposalQueueingNotRequired and GovernorProposalQueueingFailed. (#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)
Changes by category
Utils
Additions
• BlockHeader: Add a new library for verifying and parsing block headers. (#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)
• ERC1967Clones: Add a library to deploy minimal ERC-1967 proxies via CREATE or CREATE2. (#6405)
• ERC6372Utils: Add utility library for ERC-6372 clock mode validation, supporting block number and timestamp modes with consistency checks. (#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)
• 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)
Other
• Arrays: Reduce reliance on recursion to prevent stack overflow and support larger arrays. (#6324)
• ERC2771Forwarder: Revert the entire atomic batch if a call with value fails. (#6391)
• InteroperableAddress: Fix overflow in the parsing functions that caused silent misparse of large interoperable addresses. (#6372)
• InteroperableAddress: Reject inputs with both chain reference and addresses empty. (#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)
• Memory: Remove the asBytes32 and asPointer function to reduce the risk of mistakes when manipulating memory pointers. (#6348)
• RLP: Perform a memory copy when decoding bytes objects containing a single byte instead of returning a reference to the input. (#6303)
Access
• AccessManager: Treat setAuthority differently in canCall to prevent bypassing the updateAuthority security using an execute. (#6388)
• AccessManager: Allow a role admin to cancel operations that grant or revoke roles. (#6573)
Account
• AccountERC7579: Revert the uninstallation of any module (validator, executor, fallback, or hook) if its onUninstall callback reverts, giving modules control over their own uninstallation. A forced uninstallation that bypasses the callback can still be performed through a delegate call via execute. (#6628)
• 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)
• Paymaster: Add a simple ERC-4337 paymaster implementation with minimal logic. (#6576)
• PaymasterERC20: Add extension of Paymaster that sponsors user operations against payment in ERC-20 tokens. (#6576)
• PaymasterERC20Guarantor: Add extension of PaymasterERC20 that enables third parties to guarantee user operations by prefunding gas costs upfront, with repayment handling for successful operations. (#6576)
• PaymasterERC721Owner: Add extension of Paymaster that…