openzeppelin-contracts

Frameworks & Libraries

OpenZeppelin Contracts is a library for secure smart contract development.

Latest v5.7.0 · by OpenZeppelinWebsiteOpenZeppelin/openzeppelin-contracts

Release activity

Release activity — 9 releases across 9 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026
MondayNo releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026No releases on Aug 17, 2026
TuesdayNo releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026No releases on Aug 18, 2026
WednesdayNo releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 20261 release on Jul 15, 2026No releases on Jul 22, 20261 release on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026
ThursdayNo releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026
FridayNo releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026No releases on Aug 14, 2026
SaturdayNo releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026

9 releases in the last year

Changelog

v5.7.0

Latest
Added 8
  • BlockHeader: Add a new library for verifying and parsing block headers
  • Create3: Add a library to deploy contracts using the CREATE3 mechanism, allowing the deployment address to depend only on the salt and the deployer
  • ERC1967Clones: Add a library to deploy minimal ERC-1967 proxies via CREATE or CREATE2
  • ERC6372Utils: Add utility library for ERC-6372 clock mode validation, supporting block number and timestamp modes with consistency checks
  • 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
  • SimulateCall: Add call simulation utilities that allow inspecting return data from contract calls by executing them in a non-mutating, revert-based context
  • Memory: Add a isReserved(Slice) function that checks if the memory occupied by the slice is reserved
  • AccessManager: Allow a role admin to cancel operations that grant or revoke roles
Changed 8
  • ERC2771Forwarder: Rename custom error ERC2771ForwarderFailureInAtomicBatch to ERC2771ForwarderNoRefundReceiver
  • Governor and IGovernor: Replace GovernorQueueNotImplemented with GovernorProposalQueueingNotRequired and GovernorProposalQueueingFailed
  • Arrays: Reduce reliance on recursion to prevent stack overflow and support larger arrays
  • ERC2771Forwarder: Revert the entire atomic batch if a call with value fails
  • InteroperableAddress: Reject inputs with both chain reference and addresses empty
  • RLP: Perform a memory copy when decoding bytes objects containing a single byte instead of returning a reference to the input
  • AccessManager: Treat setAuthority differently in canCall to prevent bypassing the updateAuthority security using an execute
  • AccountERC7579: Revert the uninstallation of any module if its onUninstall callback reverts, giving modules control over their own uninstallation
Fixed 1
  • InteroperableAddress: Fix overflow in the parsing functions that caused silent misparse of large interoperable addresses
Removed 2
  • 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
  • Memory: Remove the asBytes32 and asPointer functions to reduce the risk of mistakes when manipulating memory pointers
Deprecated 1
  • Checkpoints, DoubleEndedQueue, EnumerableMap and EnumerableSet: Deprecate the at function for accessing a specific index, introducing new pos functions to replace them

From openzeppelin-contracts

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 approves sponsoring of user operation based on ownership of an ERC-721 NFT. (#6576)
  • PaymasterSigner: Add extension of Paymaster that approves sponsoring of user operation based on a cryptographic signature verified by the paymaster. (#6576)
Cryptography
  • ERC7739: Reject signatures whose contentsDescr fails to parse into a non-empty contentsName, preventing a malformed descriptor from degrading verification to a constant structHash that no longer binds the message contents or the account's EIP-712 domain. (#6618)
  • ERC7913WebAuthnVerifier: Add an internal _requireUV function that can be overridden to disable the UV check. (#6596)
  • MultiSignerERC7913: Decode the multisignature payload directly from calldata and return false on malformed encoding instead of reverting during abi.decode, so paymaster/account validation can surface SIG_VALIDATION_FAILED rather than bubble up a revert. The _validateSignatures and _validateThreshold override parameters change from bytes[] memory to bytes[] calldata. (#6642)
  • RSA: Return false from pkcs1Sha256 instead of reverting when modular exponentiation fails. (#6638)
  • SignatureChecker: Zero-pad the ERC-1271 signature calldata to a 32-byte boundary when performing the ERC-1271 static call, so the encoded bytes argument conforms to the ABI spec. (#6646)
  • WebAuthn: Verification now returns false instead of reverting when client data contains an out-of-bounds challengeIndex. (#6329)
Cross-chain
  • BridgeERC20Core: Rename BridgeERC20Core to BridgeFungible. (#6328)
  • BridgeNonFungible and BridgeERC721: Add bridge contracts to handle crosschain movements of ERC-721 tokens. (#6259)
  • BridgeMultiToken and BridgeERC1155: Add bridge contracts to handle crosschain movements of ERC-1155 tokens. (#6281)
  • CrosschainRemoteExecutor: Add a new executor contract that relays transaction from a controller on a remote chain. (#6272)
Governance
  • Governor: Strictly enforce the expected proposal state depending on proposalNeedsQueuing when calling execute. (#6386)
  • GovernorCrosschain: Add governor module that facilitates the execution of crosschain operations through CrosschainRemoteExecutors and ERC-7786 gateways. (#6272)
  • GovernorPreventLateQuorum: Bound lateQuorumVoteExtension by a new internal virtual _maxLateQuorumVoteExtension (default votingPeriod()) to cap the total voting duration to twice the voting period, thus preventing a large extension from bricking governance. Integrators can override _maxLateQuorumVoteExtension to enforce a different bound. (#6644)
Structures
  • Accumulator: Check that slices being added (shift or push) are in the reserved space. (#6302)
  • DoubleEndedQueue: Add values(deque, start, end) to return a slice of the queue as an array, mirroring the paginated values accessor in EnumerableSet. Out-of-bound values for start and end are clamped to the queue length. (#6522)
Token
  • ERC20TransferAuthorization: Add an ERC-20 extension implementing ERC-3009's transfer with authorization using parallel nonces. (#6354)
  • ERC721Crosschain: Add an ERC-721 extension to embed an ERC-7786 based crosschain bridge directly in the token contract. (#6259)
  • ERC1155Crosschain: Add an ERC-1155 extension to embed an ERC-7786 based crosschain bridge directly in the token contract. (#6281)
  • ERC1155Burnable: Use _checkAuthorized to correctly apply authorization overrides. (#6435)
  • SafeERC20: Add tryGetDecimals helper that safely queries a token's decimals() without reverting. (#6482)
  • ERC6909ContentURI, ERC6909TokenSupply and ERC6909Metadata: Add ERC-165 detection for the IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces. (#6246)
View originalPermalink
How v5.7.0 went

v5.7.0-rc.0

Pre-release
Added 9
  • Add BlockHeader library for verifying and parsing block headers
  • Add Create3 library to deploy contracts using the CREATE3 mechanism
  • Add ERC1967Clones library to deploy minimal ERC-1967 proxies via CREATE or CREATE2
  • Add ERC6372Utils utility library for ERC-6372 clock mode validation with block number and timestamp modes
  • Add RateLimiter library providing primitives for limiting action rates with token bucket and sliding window counter strategies
  • Add SimulateCall utility for inspecting return data from contract calls in a non-mutating context
Changed 7
  • Reduce reliance on recursion in Arrays to prevent stack overflow and support larger arrays
  • Revert the entire atomic batch in ERC2771Forwarder if a call with value fails
  • Reject inputs with both chain reference and addresses empty in InteroperableAddress
  • Perform memory copy when decoding single byte bytes objects in RLP instead of returning a reference to input
  • Treat setAuthority differently in AccessManager canCall to prevent bypassing updateAuthority security using execute
  • Do not revert if hook checks fail during hook module uninstallation in AccountERC7579Hooked
  • Drop the draft- prefix from ERC4337Utils and IERC4337 file names now that ERC-4337 is finalized
Fixed 1
  • Fix overflow in InteroperableAddress parsing functions that caused silent misparse of large interoperable addresses
Removed 2
  • Replace GovernorQueueNotImplemented with GovernorProposalQueueingNotRequired and GovernorProposalQueueingFailed in Governor and IGovernor
  • Remove asBytes32 and asPointer functions from Memory library to reduce mistakes when manipulating memory pointers
Deprecated 1
  • Deprecate the at function for accessing a specific index in Checkpoints, DoubleEndedQueue, EnumerableMap and EnumerableSet, replaced by new pos functions

From openzeppelin-contracts

Breaking changes
  • 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)
Account
  • AccountERC7579Hooked: Do not revert if hook checks fail during the hook module uninstallation. (#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)
  • 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 approves sponsoring of user operation based on ownership of an ERC-721 NFT. (#6576)
  • PaymasterSigner: Add extension of Paymaster that approves sponsoring of user operation based on a cryptographic signature verified by the paymaster. (#6576)
Cryptography
  • ERC7913WebAuthnVerifier: Add an internal _requireUV function that can be overridden to disable the UV check. (#6596)
  • WebAuthn: Verification now returns false instead of reverting when client data contains an out-of-bounds challengeIndex. (#6329)
Cross-chain
  • BridgeERC20: Rename BridgeERC20 to BridgeFungible. (#6328)
  • BridgeNonFungible and BridgeERC721: Add bridge contracts to handle crosschain movements of ERC-721 tokens. (#6259)
  • BridgeMultiToken and BridgeERC1155: Add bridge contracts to handle crosschain movements of ERC-1155 tokens. (#6281)
  • CrosschainRemoteExecutor: Add a new executor contract that relays transaction from a controller on a remote chain. (#6272)
Governance
  • Governor: Strictly enforce the expected proposal state depending on proposalNeedsQueuing when calling execute. (#6386)
  • GovernorCrosschain: Add governor module that facilitates the execution of crosschain operations through CrosschainRemoteExecutors and ERC-7786 gateways. (#6272)
Structures
  • Accumulator: Check that slices being added (shift or push) are in the reserved space. (#6302)
  • DoubleEndedQueue: Add values(deque, start, end) to return a slice of the queue as an array, mirroring the paginated values accessor in EnumerableSet. Out-of-bound values for start and end are clamped to the queue length. (#6522)
Token
  • ERC20TransferAuthorization: Add an ERC-20 extension implementing ERC-3009's transfer with authorization using parallel nonces. (#6354)
  • ERC721Crosschain: Add an ERC-721 extension to embed an ERC-7786 based crosschain bridge directly in the token contract. (#6259)
  • ERC1155Crosschain: Add an ERC-1155 extension to embed an ERC-7786 based crosschain bridge directly in the token contract. (#6281)
  • ERC1155Burnable: Use _checkAuthorized to correctly apply authorization overrides. (#6435)
  • SafeERC20: Add tryGetDecimals helper that safely queries a token's decimals() without reverting. (#6482)
  • ERC6909ContentURI, ERC6909TokenSupply and ERC6909Metadata: Add ERC-165 detection for the IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces. (#6246)
View originalPermalink
How v5.7.0-rc.0 went

v5.6.1

Fixed 1
  • Fix overflow in InteroperableAddress parsing functions that caused silent misparse of large interoperable addresses

From openzeppelin-contracts

  • InteroperableAddress: Fix overflow in the parsing functions that caused silent misparse of large interoperable addresses. (#6372)
View originalPermalink
How v5.6.1 went

v5.6.0

Added 8
  • ERC4337Utils.paymasterSignature function to extract the signature in paymasterAndData after Entrypoint v0.9
  • ERC4337Utils variants of packValidationData that receive a ValidationRange argument for timestamp or block number
  • ERC1155._checkAuthorized internal virtual function to encapsulate isApprovedForAll and msg.sender checks
  • ERC4626 internal virtual functions _transferIn and _transferOut to allow overriding underlying assets transfer mechanisms
  • ERC721URIStorage._suffixURI internal getter for retrieving custom tokenURI without the base prefix
  • ERC-165 detection for IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces
  • BridgeFungible, BridgeERC20 and BridgeERC7802 bridge contracts to handle crosschain movements of ERC-20 and ERC-7802 tokens
  • CrosschainLinked helper contract to facilitate communication between a contract on one chain and counterparts on remote chains through ERC-7786 gateways
Changed 10
  • Strings.escapeJSON now escapes all control characters in the range U+0000 to U+001F per RFC-4627
  • ERC1155 batch transfers with exactly one id/value now call IERC1155Receiver.onERC1155BatchReceived instead of onERC1155Received
  • ERC1967Proxy and TransparentUpgradeableProxy now mandate initialization during construction and revert with ERC1967ProxyUninitialized if no initialize call is provided
  • ERC721 and ERC1155 now prevent setting an operator for address(0)
  • RLP.encode(bytes32) now encodes bytes32 as a fixed size item instead of as a scalar
  • ERC4337Utils.parseValidationData now returns a ValidationRange as the last return tuple value
Removed 1
  • Memory.asBytes32 and Memory.asPointer functions are removed

From openzeppelin-contracts

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)
  • 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)
  • 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)
  • 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)
  • 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)
  • 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)
  • 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)
  • Memory: The setFreeMemoryPointer function is renamed to unsafeSetFreeMemoryPointer. Developers should use unsafeSetFreeMemoryPointer instead of setFreeMemoryPointer after v5.6.0. (#6348)
  • Memory: Remove the asBytes32 and asPointer function to reduce the risk of mistakes when manipulating memory pointers. (#6340)
Changes by category
Account
  • Account: Update default version of the ERC-4337 entrypoint to v0.9. (#6135)
  • AccountERC7579: Do not revert and perform the uninstall if the onUninstall hook of a module reverts. (#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)
  • 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)
Tokens
  • ERC1155: Introduce the _checkAuthorized internal virtual function to encapsulate isApprovedForAll and msg.sender == from checks. (#6133)
  • ERC1155: Call IERC1155Receiver.onERC1155BatchReceived when performing a batch transfers with exactly one id/value in the batch. (#6170)
  • ERC4626: Allow overriding underlying assets transfer mechanisms through new internal virtual functions (_transferIn and _transferOut). (#5970)
  • ERC721URIStorage: Add _suffixURI, an internal getter for retrieving the custom tokenURI without the base prefix. (#6175)
  • Add ERC-165 detection for the IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces in the ERC6909ContentURI, ERC6909TokenSupply and ERC6909Metadata contracts respectively. (#6246) and (#6247)
Cross-chain
  • BridgeFungible, BridgeERC20 and BridgeERC7802: Added bridge contracts to handle crosschain movements of ERC-20 (and ERC-7802) tokens. (#5914) (#6328)
  • CrosschainLinked: Added a new helper contract to facilitate communication between a contract on one chain and counterparts on remote chains through ERC-7786 gateways. (#5914)
  • ERC20Crosschain: Added an ERC-20 extension to embed an ERC-7786 based crosschain bridge directly in the token contract. (#5914)
  • InteroperableAddress: Reject inputs with both chain reference and addresses empty. (#6340)
Cryptography
  • MessageHashUtils: Add helper functions to build EIP-712 domain typehash and separator with fields selectively enabled/disabled. (#5908)
  • SignatureChecker: Add isValidERC1271SignatureNowCalldata, a variant of isValidERC1271SignatureNow that takes the signature from calldata. (#6123)
  • TrieProof: Add library for verifying Ethereum Merkle-Patricia trie inclusion proofs. (#5826)
  • WebAuthn: Verification now returns false instead of reverting when client data contains an out-of-bounds challengeIndex. (#6329)
Structures
  • Accumulator: Check that slices being added (shift or push) are in the reserved space. (#6302)
  • DoubleEndedQueue: Add tryPushBack, tryPopBack, tryPushFront, tryPopFront, tryFront, tryBack, and tryAt function variants that do not revert. (#6020)
  • EnumerableMap: Add support for Bytes4ToAddressMap types. (#6091)
  • EnumerableSet: Add support for Bytes4Set type. (#6091)
Utils
  • Arrays: Add replace functions enabling in-place array modification of address[], bytes32[] and uint256[] arrays, with new content from another array. (#5995)
  • Arrays: Add slice and splice functions for value types (uint256[], bytes32[], address[]). (#5965)
  • Bytes: Add replace functions that replaces a portion of a bytes buffer with content from another buffer. (#5995)
  • Bytes: Add the toNibbles function that expands the nibbles (4 bits chunk) of a bytes buffer. Used for manipulating Patricia Merkle Trees keys and paths. (#5826)
  • 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)
  • RLP: Encode bytes32 as a fixed size item and not as a scalar in encode(bytes32). Scalar RLP encoding remains available by casting to a uint256 and using the encode(uint256) function. (#6167)
  • RLP: Fix RLP encoding validity check when decoding long lists or strings (#6051)
  • RLP: Perform a memory copy when decoding bytes objects containing a single byte instead of returning a reference to the input. (#6303)
View originalPermalink
How v5.6.0 went

v5.6.0-rc.1

Pre-release
Added 1
  • Add ERC-165 detection for the IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces in the ERC6909ContentURI, ERC6909TokenSupply and ERC6909Metadata contracts respectively

From openzeppelin-contracts

  • Add ERC-165 detection for the IERC6909ContentURI, IERC6909TokenSupply and IERC6909Metadata interfaces in the ERC6909ContentURI, ERC6909TokenSupply and ERC6909Metadata contracts respectively. (#6246) and (#6247)
View originalPermalink
How v5.6.0-rc.1 went

v5.6.0-rc.0

Pre-release
Added 13
  • ERC4337Utils added paymasterSignature function to extract the signature in paymasterAndData after Entrypoint v0.9
  • ERC4337Utils added paymasterData variant that receives a flag to exclude the signature from the returned data
  • ERC4337Utils added variants of packValidationData that receive a ValidationRange argument for timestamp or block number
  • ERC1155 introduced _checkAuthorized internal virtual function to encapsulate isApprovedForAll and msg.sender checks
  • ERC4626 allows overriding underlying assets transfer mechanisms through new internal virtual functions _transferIn and _transferOut
  • ERC721URIStorage added _suffixURI internal getter for retrieving custom tokenURI without the base prefix
Changed 7
  • ERC1155 batch transfers with exactly one id/value now call IERC1155Receiver.onERC1155BatchReceived instead of onERC1155Received
  • ERC1967Proxy and TransparentUpgradeableProxy now mandate initialization during construction and revert with ERC1967ProxyUninitialized if no initialize call is provided
  • ERC721 and ERC1155 now prevent setting an operator for address(0)
  • RLP encode(bytes32) function now encodes bytes32 as a fixed size item instead of as a scalar
  • ERC4337Utils parseValidationData now returns a ValidationRange as the last return tuple value indicating whether validationData is compared against a timestamp or block number
  • Account updated default version of the ERC-4337 entrypoint to v0.9
  • AccountERC7579 no longer reverts and performs the uninstall if the onUninstall hook of a module reverts

From openzeppelin-contracts

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)
  • 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)
  • 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)
  • 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)
  • 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)
Changes by category
Account
  • Account: Update default version of the ERC-4337 entrypoint to v0.9. (#6135)
  • AccountERC7579: Do not revert and perform the uninstall if the onUninstall hook of a module reverts. (#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)
  • 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)
Tokens
  • ERC1155: Introduce the _checkAuthorized internal virtual function to encapsulate isApprovedForAll and msg.sender == from checks. (#6133)
  • ERC1155: Call IERC1155Receiver.onERC1155BatchReceived when performing a batch transfers with exactly one id/value in the batch. (#6170)
  • ERC4626: Allow overriding underlying assets transfer mechanisms through new internal virtual functions (_transferIn and _transferOut). (#5970)
  • ERC721URIStorage: Add _suffixURI, an internal getter for retrieving the custom tokenURI without the base prefix. (#6175)
Cross-chain
  • BridgeERC20Core, BridgeERC20 and BridgeERC7802: Added bridge contracts to handle crosschain movements of ERC-20 (and ERC-7802) tokens. (#5914)
  • CrosschainLinked: Added a new helper contract to facilitate communication between a contract on one chain and counterparts on remote chains through ERC-7786 gateways. (#5914)
  • ERC20Crosschain: Added an ERC-20 extension to embed an ERC-7786 based crosschain bridge directly in the token contract. (#5914)
Cryptography
  • MessageHashUtils: Add helper functions to build EIP-712 domain typehash and separator with fields selectively enabled/disabled. (#5908)
  • SignatureChecker: Add isValidERC1271SignatureNowCalldata, a variant of isValidERC1271SignatureNow that takes the signature from calldata. (#6123)
  • TrieProof: Add library for verifying Ethereum Merkle-Patricia trie inclusion proofs. (#5826)
Structures
  • DoubleEndedQueue: Add tryPushBack, tryPopBack, tryPushFront, tryPopFront, tryFront, tryBack, and tryAt function variants that do not revert. (#6020)
  • EnumerableMap: Add support for Bytes4ToAddressMap types. (#6091)
  • EnumerableSet: Add support for Bytes4Set type. (#6091)
Utils
  • Arrays: Add replace functions enabling in-place array modification of address[], bytes32[] and uint256[] arrays, with new content from another array. (#5995)
  • Arrays: Add slice and splice functions for value types (uint256[], bytes32[], address[]). (#5965)
  • Bytes: Add replace functions that replaces a portion of a bytes buffer with content from another buffer. (#5995)
  • Bytes: Add the toNibbles function that expands the nibbles (4 bits chunk) of a bytes buffer. Used for manipulating Patricia Merkle Trees keys and paths. (#5826)
  • RLP: Encode bytes32 as a fixed size item and not as a scalar in encode(bytes32). Scalar RLP encoding remains available by casting to a uint256 and using the encode(uint256) function. (#6167)
  • RLP: Fix RLP encoding validity check when decoding long lists or strings (#6051)
View originalPermalink
How v5.6.0-rc.0 went

v5.5.0

Added 10
  • InteroperableAddress: Add a library for formatting and parsing ERC-7930 interoperable addresses
  • ERC7786Recipient: Generic ERC-7786 cross-chain message recipient contract
  • IERC7786: Add the interface for ERC-7786 Cross-Chain Messaging Gateway
  • SignerWebAuthn: Add an abstract signer that verifies WebAuthn signatures with a P256 fallback
  • Add constructors to the different signers
  • ERC7913WebAuthnVerifier: Add an ERC-7913 verifier that verifies WebAuthn Authentication Assertions for P256 identities
Changed 5
  • Account: Add signature argument to the internal _validateUserOp function for custom signature handling logic
  • 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
  • ERC6909 and its extensions are no longer marked as draft since EIP-6909 is now final, requiring updated import paths
  • 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
  • ERC4626: Compute maxWithdraw using maxRedeem and previewRedeem so that changes to the preview functions affect the max functions
Fixed 2
  • AccountERC7579: Prevent revert in isModuleInstalled for fallback modules when additionalContext has fewer than 4 bytes, returning false instead to ensure ERC-7579 compliance
  • ERC165Checker: Ensure supportsERC165 function returns false if the target reverts during the supportsInterface(0xffffffff) call
Removed 2
  • SignerERC7702 is renamed to SignerEIP7702, requiring updated imports and inheritance
  • ERC721Holder, ERC1155Holder, ReentrancyGuard and ReentrancyGuardTransient are flagged as stateless and are no longer transpiled
Deprecated 2
  • 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
  • ECDSA signature malleability protection is partly deprecated

From openzeppelin-contracts

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)
  • ERC165Checker: Ensure the supportsERC165 function returns false if the target reverts during the supportsInterface(0xffffffff) call. (#5810)
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)
  • 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)
  • ERC6909 and its extensions (ERC6909ContentURI, ERC6909Metadata and ERC6909TokenSupply) are no longer marked as draft since EIP-6909 is now final. Developers must update the import paths. Contracts behavior is not modified. (#5929)
  • SignerERC7702 is renamed as SignerEIP7702. Imports and inheritance must be updated to that new name and path. Behavior is unmodified. (#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, #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, #5726, #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
  • ECDSA signature malleability protection is partly deprecated. See documentation for more details. #5814
Changes by category
Tokens
  • ERC4626: compute maxWithdraw using maxRedeem and previewRedeem so that changes to the preview functions affect the max functions. (#5130)
Cross-chain
  • InteroperableAddress: Add a library for formatting and parsing ERC-7930 interoperable addresses. (#5736)
  • ERC7786Recipient: Generic ERC-7786 cross-chain message recipient contract. (#5904)
  • IERC7786: Add the (draft) interface for ERC-7786 "Cross-Chain Messaging Gateway" (#5737)
Cryptography
Signers
  • SignerWebAuthn: Add an abstract signer that verifies WebAuthn signatures, with a P256 fallback. (#5809)
  • Add constructors to the different signers. (#5757)
Verifiers
  • ERC7913WebAuthnVerifier: Add an ERC-7913 verifier that verifies WebAuthn Authentication Assertions for P256 identities. (#5809)
Other
  • WebAuthn: Add a library for verifying WebAuthn Authentication Assertions. (#5809)
  • ECDSA: Add parse and parseCalldata to parse bytes signatures of length 65 or 64 (erc-2098) into its v,r,s components. (#5814)
  • ECDSA: Add recoverCalldata and tryRecoverCalldata, variants of recover and tryRecover that are more efficient when signatures are in calldata. (#5788)
  • SignatureChecker: Add isValidSignatureNowCalldata(address,bytes32,bytes calldata) for efficient processing of calldata signatures. (#5788)
Structures
  • Checkpoints: Add a new checkpoint variant Checkpoint256 using uint256 type for the value and key. (#5748)
  • Accumulators: A library for merging an arbitrary dynamic number of bytes buffers. (#5680)
Utils
  • Arrays: Add slice and splice functions for value types (uint256[], bytes32[], address[]). (#5983)
  • Base58: Add a library for encoding and decoding bytes buffers into base58 strings. (#5762)
  • Base64: Add a new decode function that parses base64 encoded strings. (#5765)
  • Bytes: Add concat that merges a bytes[] array of buffers into a single bytes buffer. (#5882)
  • Bytes: Add reverseBytes32, reverseBytes16, reverseBytes8, reverseBytes4, and reverseBytes2 functions to reverse byte order for converting between little-endian and big-endian representations. (#5724)
  • Bytes: Add splice(bytes,uint256) and splice(bytes,uint256,uint256) functions that move a specified range of bytes to the start of the buffer and truncate it in place, as an alternative to slice. (#5733)
  • Bytes: Add a clz function to count the leading zero bits in a bytes buffer. (#5725)
  • Bytes: Add an equal function to compare byte buffers. (#5726)
  • Bytes: Fix lastIndexOf(bytes,byte,uint256) with empty buffers and finite position to correctly return type(uint256).max instead of accessing uninitialized memory sections. (#5797)
  • IERC7751: Add the interface for custom error wrapping of bubbled up reverts. (#5816)
  • LowLevelCall: Add a library to perform low-level calls and deal with the returndata more granularly. (#5094)
  • Math: Add a clz function to count the leading zero bits in a uint256 value. (#5725)
  • Memory: Add library with utilities to manipulate memory (#5189)
  • Memory: Add a UDVT for handling slices on memory space similarly to calldata slices. (#5680)
  • ReentrancyGuard and ReentrancyGuardTransient: Add nonReentrantView, a read-only version of the nonReentrant modifier. (#5800)
  • ReentrancyGuard, ReentrancyGuardTransient: Add an internal _reentrancyGuardStorageSlot function allowing slot customization via override. (#5892)
  • RelayedCall: Add a library to perform indirect calls through minimal and predictable relayers. (#5630)
  • RLP: Add a library for encoding and decoding data in Ethereum's Recursive Length Prefix format. (#5680)
  • Strings: Add toHexString(bytes). (#5761)
View originalPermalink
How v5.5.0 went

v5.5.0-rc.1

Pre-release
Added 1
  • Arrays: Add slice and splice functions for value types (uint256[], bytes32[], address[])
Changed 2
  • Account: Add signature argument to the internal _validateUserOp function for custom signature handling logic
  • 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
Fixed 1
  • AccountERC7579: Prevent revert in isModuleInstalled for fallback modules when additionalContext has fewer than 4 bytes by returning false instead of reverting

From openzeppelin-contracts

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)
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)
  • 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)
Changes by category
Utils
  • Arrays: Add slice and splice functions for value types (uint256[], bytes32[], address[]). (#5983)
View originalPermalink
How v5.5.0-rc.1 went

v5.5.0-rc.0

Pre-release
Added 10
  • InteroperableAddress: Add a library for formatting and parsing ERC-7930 interoperable addresses
  • ERC7786Recipient: Generic ERC-7786 cross-chain message recipient contract
  • IERC7786: Add the interface for ERC-7786 Cross-Chain Messaging Gateway
  • SignerWebAuthn: Add an abstract signer that verifies WebAuthn signatures, with a P256 fallback
  • Add constructors to the different signers
  • ERC7913WebAuthnVerifier: Add an ERC-7913 verifier that verifies WebAuthn Authentication Assertions for P256 identities
Changed 2
  • 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
  • ERC4626: compute maxWithdraw using maxRedeem and previewRedeem so that changes to the preview functions affect the max functions
Fixed 1
  • ERC165Checker: Ensure the supportsERC165 function returns false if the target reverts during the supportsInterface(0xffffffff) call
Removed 3
  • ERC6909 and its extensions (ERC6909ContentURI, ERC6909Metadata and ERC6909TokenSupply) are no longer marked as draft; update import paths
  • SignerERC7702 is renamed to SignerEIP7702; update imports and inheritance
  • ERC721Holder, ERC1155Holder, ReentrancyGuard and ReentrancyGuardTransient are no longer transpiled; use versions from @openzeppelin/contracts instead of @openzeppelin/contracts-upgradeable
Deprecated 2
  • Initializable and UUPSUpgradeable are no longer transpiled; use these files directly from @openzeppelin/contracts package instead of via @openzeppelin/contracts-upgradeable aliases
  • ECDSA signature malleability protection is partly deprecated

From openzeppelin-contracts

Bug fixes
  • ERC165Checker: Ensure the supportsERC165 function returns false if the target reverts during the supportsInterface(0xffffffff) call. (#5810)
Breaking changes
  • ERC6909 and its extensions (ERC6909ContentURI, ERC6909Metadata and ERC6909TokenSupply) are no longer marked as draft since EIP-6909 is now final. Developers must update the import paths. Contracts behavior is not modified. (#5929)
  • SignerERC7702 is renamed as SignerEIP7702. Imports and inheritance must be updated to that new name and path. Behavior is unmodified. (#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, #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)
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
  • ECDSA signature malleability protection is partly deprecated. See documentation for more details. #5814
Changes by category
Tokens
  • ERC4626: compute maxWithdraw using maxRedeem and previewRedeem so that changes to the preview functions affect the max functions. (#5130)
Cross-chain
  • InteroperableAddress: Add a library for formatting and parsing ERC-7930 interoperable addresses. (#5736)
  • ERC7786Recipient: Generic ERC-7786 cross-chain message recipient contract. (#5904)
  • IERC7786: Add the (draft) interface for ERC-7786 "Cross-Chain Messaging Gateway" (#5737)
Cryptography
Signers
  • SignerWebAuthn: Add an abstract signer that verifies WebAuthn signatures, with a P256 fallback. (#5809)
  • Add constructors to the different signers. (#5757)
Verifiers
  • ERC7913WebAuthnVerifier: Add an ERC-7913 verifier that verifies WebAuthn Authentication Assertions for P256 identities. (#5809)
Other
  • WebAuthn: Add a library for verifying WebAuthn Authentication Assertions. (#5809)
  • ECDSA: Add parse and parseCalldata to parse bytes signatures of length 65 or 64 (erc-2098) into its v,r,s components. (#5814)
  • ECDSA: Add recoverCalldata and tryRecoverCalldata, variants of recover and tryRecover that are more efficient when signatures are in calldata. (#5788)
  • SignatureChecker: Add isValidSignatureNowCalldata(address,bytes32,bytes calldata) for efficient processing of calldata signatures. (#5788)
Structures
  • Checkpoints: Add a new checkpoint variant Checkpoint256 using uint256 type for the value and key. (#5748)
  • Accumulators: A library for merging an arbitrary dynamic number of bytes buffers. (#5680)
Utils
  • Base58: Add a library for encoding and decoding bytes buffers into base58 strings. (#5762)
  • Base64: Add a new decode function that parses base64 encoded strings. (#5765)
  • Bytes: Add concat that merges a bytes[] array of buffers into a single bytes buffer. (#5882)
  • Bytes: Add reverseBytes32, reverseBytes16, reverseBytes8, reverseBytes4, and reverseBytes2 functions to reverse byte order for converting between little-endian and big-endian representations. (#5724)
  • Bytes: Add splice(bytes,uint256) and splice(bytes,uint256,uint256) functions that move a specified range of bytes to the start of the buffer and truncate it in place, as an alternative to slice. (#5733)
  • Bytes: Add a clz function to count the leading zero bits in a bytes buffer. (#5725)
  • Bytes: Add an equal function to compare byte buffers. (#5726)
  • Bytes: Fix lastIndexOf(bytes,byte,uint256) with empty buffers and finite position to correctly return type(uint256).max instead of accessing uninitialized memory sections. (#5797)
  • IERC7751: Add the interface for custom error wrapping of bubbled up reverts. (#5816)
  • LowLevelCall: Add a library to perform low-level calls and deal with the returndata more granularly. (#5094)
  • Math: Add a clz function to count the leading zero bits in a uint256 value. (#5725)
  • Memory: Add library with utilities to manipulate memory (#5189)
  • Memory: Add a UDVT for handling slices on memory space similarly to calldata slices. (#5680)
  • ReentrancyGuard and ReentrancyGuardTransient: Add nonReentrantView, a read-only version of the nonReentrant modifier. (#5800)
  • ReentrancyGuard, ReentrancyGuardTransient: Add an internal _reentrancyGuardStorageSlot function allowing slot customization via override. (#5892)
  • RelayedCall: Add a library to perform indirect calls through minimal and predictable relayers. (#5630)
  • RLP: Add a library for encoding and decoding data in Ethereum's Recursive Length Prefix format. (#5680)
  • Strings: Add toHexString(bytes). (#5761)
View originalPermalink
How v5.5.0-rc.0 went

v5.4.0

Added 22
  • Add Account, a simple ERC-4337 account implementation with minimal logic to process user operations
  • Add AccountERC7579, an extension of Account that implements support for ERC-7579 modules of type executor, validator, and fallback handler
  • Add AccountERC7579Hooked, an extension of AccountERC7579 that implements support for ERC-7579 hook modules
  • Add EIP7702Utils library for checking if an address has an EIP-7702 delegation in place
  • Add IERC7821 and ERC7821 interface and logic for minimal batch execution
  • Add GovernorNoncesKeyed extension of Governor that adds support for keyed nonces when voting by sig
Changed 2
  • Update minimum pragma to 0.8.24 in SignatureChecker, Governor and Governor's extensions
  • Reduce pragma requirement of interface files
Fixed 1
  • 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

From openzeppelin-contracts

Breaking changes
  • Update minimum pragma to 0.8.24 in SignatureChecker, Governor and Governor's extensions. (#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)
  • AccountERC7579: Extension of Account that implements support for ERC-7579 modules of type executor, validator, and fallback handler. (#5657)
  • AccountERC7579Hooked: Extension of AccountERC7579 that implements support for ERC-7579 hook modules. (#5657)
  • EIP7702Utils: Add a library for checking if an address has an EIP-7702 delegation in place. (#5587)
  • IERC7821, ERC7821: Interface and logic for minimal batch execution. No support for additional opData is included. (#5657)
Governance
  • GovernorNoncesKeyed: Extension of Governor that adds support for keyed nonces when voting by sig. (#5574)
Tokens
  • ERC20Bridgeable: Implementation of ERC-7802 that makes an ERC-20 compatible with crosschain bridges. (#5739)
Cryptography
Signers
  • AbstractSigner, SignerECDSA, SignerP256, and SignerRSA: Add an abstract contract and various implementations for contracts that deal with signature verification. (#5657)
  • SignerERC7702: Implementation of AbstractSigner for Externally Owned Accounts (EOAs). Useful with ERC-7702. (#5657)
  • SignerERC7913: Abstract signer that verifies signatures using the ERC-7913 workflow. (#5659)
  • MultiSignerERC7913: Implementation of AbstractSigner that supports multiple ERC-7913 signers with a threshold-based signature verification system. (#5659)
  • MultiSignerERC7913Weighted: Extension of MultiSignerERC7913 that supports assigning different weights to each signer, enabling more flexible governance schemes. (#5741)
Verifiers
  • ERC7913P256Verifier and ERC7913RSAVerifier: Ready to use ERC-7913 verifiers that implement key verification for P256 (secp256r1) and RSA keys. (#5659)
Other
  • SignatureChecker: Add support for ERC-7913 signatures alongside existing ECDSA and ERC-1271 signature verification. (#5659)
  • ERC7739: An abstract contract to validate signatures following the rehashing scheme from ERC7739Utils. (#5664)
  • ERC7739Utils: Add a library that implements a defensive rehashing mechanism to prevent replayability of smart contract signatures based on the ERC-7739. (#5664)
Structures
  • EnumerableMap: Add support for BytesToBytesMap type. (#5658)
  • EnumerableMap: Add keys(uint256,uint256) that returns a subset (slice) of the keys in the map. (#5713)
  • EnumerableSet: Add support for StringSet and BytesSet types. (#5658)
  • EnumerableSet: Add values(uint256,uint256) that returns a subset (slice) of the values in the set. (#5713)
Utils
  • Arrays: Add unsafeAccess, unsafeMemoryAccess and unsafeSetLength for bytes[] and string[]. (#5568)
  • Blockhash: Add a library that provides access to historical block hashes using EIP-2935's history storage, extending the standard 256-block limit to 8191 blocks. (#5642)
  • Bytes: Fix lastIndexOf(bytes,byte,uint256) with empty buffers and finite position to correctly return type(uint256).max instead of accessing uninitialized memory sections. (#5797)
View originalPermalink
How v5.4.0 went
View all

Discussion

If you publish openzeppelin-contracts, you can claim this product by proving you administer its repository.