github OpenZeppelin/openzeppelin-contracts v5.5.0-rc.0

pre-release13 hours ago

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)

Don't miss a new openzeppelin-contracts release

NewReleases is sending notifications on new releases.