Skip to content

Releases: OpenZeppelin/openzeppelin-contracts-upgradeable

v5.5.0-rc.1

10 Oct 13:44
Compare
Choose a tag to compare
v5.5.0-rc.1 Pre-release
Pre-release

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)

v5.5.0-rc.0

26 Sep 13:54
Compare
Choose a tag to compare
v5.5.0-rc.0 Pre-release
Pre-release

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)

v5.4.0

17 Jul 16:27
Compare
Choose a tag to compare

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)

v5.4.0-rc.1

20 Jun 11:26
Compare
Choose a tag to compare
v5.4.0-rc.1 Pre-release
Pre-release
  • Add constructors to the different signers.

v5.4.0-rc.0

18 Jun 16:15
Compare
Choose a tag to compare
v5.4.0-rc.0 Pre-release
Pre-release

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)

v5.3.0

09 Apr 16:15
Compare
Choose a tag to compare

Breaking Changes

  • Replace GovernorCountingOverridable.VoteReceipt struct parameter member names hasOverriden and overridenWeight for hasOverridden and overriddenWeight respectively.

Custom error changes

  • Replace GovernorAlreadyOverridenVote with GovernorAlreadyOverriddenVote.
  • Replace GovernorOnlyProposer with GovernorUnableToCancel.

Changes by category

Account

  • ERC4337Utils: Update the hash function to call getUserOpHash on the specified entrypoint and add an ENTRYPOINT_V08 constant. (#5614)
  • ERC7579Utils: Add ABI decoding checks on calldata bounds within decodeBatch. (#5371)
  • ERC7579Utils: Replace address(0) with address(this) during execution for calldata compression efficiency. (#5614)

Governance

  • IGovernor: Add the getProposalId function to the governor interface. (#5290)
  • GovernorProposalGuardian: Add a governance extension that defines a proposal guardian who can cancel proposals at any stage in their lifecycle. (#5303)
  • GovernorSequentialProposalId: Adds a Governor extension that sequentially numbers proposal ids instead of using the hash. (#5290)
  • GovernorSuperQuorum: Add a governance extension to support a super quorum. Proposals that meet the super quorum (and have a majority of for votes) advance to the Succeeded state before the proposal deadline. (#5526)
  • GovernorVotesSuperQuorumFraction: Add a variant of the GovernorSuperQuorum extensions where the super quorum is expressed as a fraction of the total supply. (#5526)
  • TimelockController: Receive function is now virtual. (#5509)

Structures

  • EnumerableSet: Add clear function to EnumerableSets which deletes all values in the set. (#5486)
  • EnumerableMap: Add clear function to EnumerableMaps which deletes all entries in the map. (#5486)
  • MerkleTree: Add an update function that replaces a previously inserted leaf with a new value, updating the tree root along the way. (#5526)

Tokens

  • ERC4626: Use the asset getter in totalAssets, _deposit and _withdraw. (#5322)
  • IERC6909: Add the interface for ERC-6909. (#5343)
  • ERC6909: Add a standard implementation of ERC6909. (#5394)
  • ERC6909TokenSupply: Add an extension of ERC6909 which tracks total supply for each token id. (#5394)
  • ERC6909Metadata: Add an extension of ERC6909 which adds metadata functionality. (#5394)
  • ERC6909ContentURI: Add an extension of ERC6909 which adds content URI functionality. (#5394)
  • SafeERC20: Add trySafeTransfer and trySafeTransferFrom that do not revert and return false if the transfer is not successful. (#5483)

Other

  • Address: bubble up revert data on sendValue failed call. (#5379)
  • Calldata: Library with emptyBytes and emptyString functions to generate empty bytes and string calldata types. (#5422)
  • ERC2771Forwarder: Expose the _isTrustedByTarget internal function to check whether a target trusts the forwarder. (#5416)
  • Hashes: Expose efficientKeccak256 for hashing non-commutative pairs of bytes32 without allocating extra memory. (#5442)
  • Initializable: Add _initializableStorageSlot function that returns a pointer to the storage struct. The function allows customizing with a custom storage slot with an override. (#5526)
  • Math: Add add512, mul512 and mulShr. (#5526)
  • Math: Add saturating arithmetic operations saturatingAdd, saturatingSub and saturatingMul. (#5526)
  • MessageHashUtils: Add toDataWithIntendedValidatorHash(address, bytes32). (#5526)
  • P256: Adjust precompile detection in verifyNative to consider empty returndata on invalid verification. Previously, invalid signatures would've reverted with a MissingPrecompile error in chains with RIP-7212 support. (#5620)
  • Pausable: Stop explicitly setting paused to false during construction. (#5448)
  • Strings: Add espaceJSON that escapes special characters in JSON strings. (#5526)

v5.3.0-rc.0

19 Mar 17:39
Compare
Choose a tag to compare
v5.3.0-rc.0 Pre-release
Pre-release

Breaking Changes

  • Replace GovernorCountingOverridable.VoteReceipt struct parameter member names hasOverriden and overridenWeight for hasOverridden and overriddenWeight respectively.

Custom error changes

  • Replace GovernorAlreadyOverridenVote with GovernorAlreadyOverriddenVote.

Changes by category

Account

  • ERC7579Utils: Add ABI decoding checks on calldata bounds within decodeBatch. (#5371)

Governance

  • IGovernor: Add the getProposalId function to the governor interface. (#5290)
  • GovernorProposalGuardian: Add a governance extension that defines a proposal guardian who can cancel proposals at any stage in their lifecycle. (#5303)
  • GovernorSequentialProposalId: Adds a Governor extension that sequentially numbers proposal ids instead of using the hash. (#5290)
  • GovernorSuperQuorum: Add a governance extension to support a super quorum. Proposals that meet the super quorum (and have a majority of for votes) advance to the Succeeded state before the proposal deadline. (#5526)
  • GovernorVotesSuperQuorumFraction: Add a variant of the GovernorSuperQuorum extensions where the super quorum is expressed as a fraction of the total supply. (#5526)
  • TimelockController: Receive function is now virtual. (#5509)

Structures

  • EnumerableSet: Add clear function to EnumerableSets which deletes all values in the set. (#5486)
  • EnumerableMap: Add clear function to EnumerableMaps which deletes all entries in the map. (#5486)
  • MerkleTree: Add an update function that replaces a previously inserted leaf with a new value, updating the tree root along the way. (#5526)

Tokens

  • ERC4626: Use the asset getter in totalAssets, _deposit and _withdraw. (#5322)
  • IERC6909: Add the interface for ERC-6909. (#5343)
  • ERC6909: Add a standard implementation of ERC6909. (#5394)
  • ERC6909TokenSupply: Add an extension of ERC6909 which tracks total supply for each token id. (#5394)
  • ERC6909Metadata: Add an extension of ERC6909 which adds metadata functionality. (#5394)
  • ERC6909ContentURI: Add an extension of ERC6909 which adds content URI functionality. (#5394)
  • SafeERC20: Add trySafeTransfer and trySafeTransferFrom that do not revert and return false if the transfer is not successful. (#5483)

Other

  • Address: bubble up revert data on sendValue failed call. (#5379)
  • Calldata: Library with emptyBytes and emptyString functions to generate empty bytes and string calldata types. (#5422)
  • ERC2771Forwarder: Expose the _isTrustedByTarget internal function to check whether a target trusts the forwarder. (#5416)
  • Hashes: Expose efficientKeccak256 for hashing non-commutative pairs of bytes32 without allocating extra memory. (#5442)
  • Initializable: Add _initializableStorageSlot function that returns a pointer to the storage struct. The function allows customizing with a custom storage slot with an override. (#5526)
  • Math: Add add512, mul512 and mulShr. (#5526)
  • Math: Add saturating arithmetic operations saturatingAdd, saturatingSub and saturatingMul. (#5526)
  • MessageHashUtils: Add toDataWithIntendedValidatorHash(address, bytes32). (#5526)
  • Pausable: Stop explicitly setting paused to false during construction. (#5448)
  • Strings: Add espaceJSON that escapes special characters in JSON strings. (#5526)

v5.2.0

09 Jan 15:24
Compare
Choose a tag to compare

Breaking Changes

Custom error changes

This version comes with changes to the custom error identifiers. Contracts previously depending on the following errors should be replaced accordingly:

  • Replace Errors.FailedCall with a bubbled-up revert reason in Address.sendValue.

Changes by category

General

  • Update some pragma directives to ensure that all file requirements match that of the files they import. (#5273)

Account

  • ERC4337Utils: Add a reusable library to manipulate user operations and interact with ERC-4337 contracts (#5274)
  • ERC7579Utils: Add a reusable library to interact with ERC-7579 modular accounts (#5274)

Governance

  • GovernorCountingOverridable: Add a governor counting module that enables token holders to override the vote of their delegate. (#5192)
  • VotesExtended: Create an extension of Votes which checkpoints balances and delegates. (#5192)

Proxy

  • Clones: Add cloneWithImmutableArgs and cloneDeterministicWithImmutableArgs variants that create clones with per-instance immutable arguments. The immutable arguments can be retrieved using fetchCloneArgs. The corresponding predictDeterministicWithImmutableArgs function is also included. (#5109)

Tokens

  • ERC1363Utils: Add helper similar to the existing ERC721Utils and ERC1155Utils (#5133)

Utils

  • Address: bubble up revert data on sendValue failed call (#5418)
  • Bytes: Add a library of common operations that operate on bytes objects. (#5252)
  • CAIP2 and CAIP10: Add libraries for formatting and parsing CAIP-2 and CAIP-10 identifiers. (#5252)
  • NoncesKeyed: Add a variant of Nonces that implements the ERC-4337 entrypoint nonce system. (#5272)
  • Packing: Add variants for packing bytes10 and bytes22 (#5274)
  • Strings: Add parseUint, parseInt, parseHexUint and parseAddress to parse strings into numbers and addresses. Also provide variants of these functions that parse substrings, and tryXxx variants that do not revert on invalid input. (#5166)

v5.2.0-rc.1

16 Dec 20:49
Compare
Choose a tag to compare
v5.2.0-rc.1 Pre-release
Pre-release
  • ERC7579Utils: Add ABI decoding checks on calldata bounds within decodeBatch (#5367)

v5.2.0-rc.0

05 Dec 15:25
Compare
Choose a tag to compare
v5.2.0-rc.0 Pre-release
Pre-release

Changes by category

General

  • Update some pragma directives to ensure that all file requirements match that of the files they import. (#5273)

Account

  • ERC4337Utils: Add a reusable library to manipulate user operations and interact with ERC-4337 contracts (#5274)
  • ERC7579Utils: Add a reusable library to interact with ERC-7579 modular accounts (#5274)

Governance

  • GovernorCountingOverridable: Add a governor counting module that enables token holders to override the vote of their delegate. (#5192)
  • VotesExtended: Create an extension of Votes which checkpoints balances and delegates. (#5192)

Proxy

  • Clones: Add cloneWithImmutableArgs and cloneDeterministicWithImmutableArgs variants that create clones with per-instance immutable arguments. The immutable arguments can be retrieved using fetchCloneArgs. The corresponding predictDeterministicWithImmutableArgs function is also included. (#5109)

Tokens

  • ERC1363Utils: Add helper similar to the existing ERC721Utils and ERC1155Utils (#5133)

Utils

  • Bytes: Add a library of common operation that operate on bytes objects. (#5252)
  • CAIP2 and CAIP10: Add libraries for formatting and parsing CAIP-2 and CAIP-10 identifiers. (#5252)
  • NoncesKeyed: Add a variant of Nonces that implements the ERC-4337 entrypoint nonce system. (#5272)
  • Packing: Add variants for packing bytes10 and bytes22 (#5274)
  • Strings: Add parseUint, parseInt, parseHexUint and parseAddress to parse strings into numbers and addresses. Also provide variants of these functions that parse substrings, and tryXxx variants that do not revert on invalid input. (#5166)