Releases: OpenZeppelin/openzeppelin-contracts-upgradeable
Releases · OpenZeppelin/openzeppelin-contracts-upgradeable
v5.5.0-rc.1
Bug fixes
AccountERC7579
: Prevent revert inisModuleInstalled
for fallback modules whenadditionalContext
has fewer than 4 bytes. The function now returnsfalse
instead of reverting, ensuring ERC-7579 compliance. (#5961)
Breaking changes
Account
: Addsignature
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 correspondinginitData
anddeInitData
arguments to be at least 4 bytes long (matching the selector to which the fallback module is registered). It now reverts withERC7579CannotDecodeFallbackData
instead of treating the missing bytes as0x00
. (#5974)
Changes by category
Utils
Arrays
: Addslice
andsplice
functions for value types (uint256[]
,bytes32[]
,address[]
). (#5983)
v5.5.0-rc.0
Bug fixes
ERC165Checker
: Ensure thesupportsERC165
function returns false if the target reverts during thesupportsInterface(0xffffffff)
call. (#5810)
Breaking changes
ERC6909
and its extensions (ERC6909ContentURI
,ERC6909Metadata
andERC6909TokenSupply
) 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 asSignerEIP7702
. Imports and inheritance must be updated to that new name and path. Behavior is unmodified. (#5932)ERC721Holder
,ERC1155Holder
,ReentrancyGuard
andReentrancyGuardTransient
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
andERC7739
. (#5726)
Deprecation
Initializable
andUUPSUpgradeable
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. #5941ECDSA
signature malleability protection is partly deprecated. See documentation for more details. #5814
Changes by category
Tokens
ERC4626
: computemaxWithdraw
usingmaxRedeem
andpreviewRedeem
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
: Addparse
andparseCalldata
to parse bytes signatures of length 65 or 64 (erc-2098) into its v,r,s components. (#5814)ECDSA
: AddrecoverCalldata
andtryRecoverCalldata
, variants ofrecover
andtryRecover
that are more efficient when signatures are in calldata. (#5788)SignatureChecker
: AddisValidSignatureNowCalldata(address,bytes32,bytes calldata)
for efficient processing of calldata signatures. (#5788)
Structures
Checkpoints
: Add a new checkpoint variantCheckpoint256
usinguint256
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 newdecode
function that parses base64 encoded strings. (#5765)Bytes
: Addconcat
that merges abytes[]
array of buffers into a singlebytes
buffer. (#5882)Bytes
: AddreverseBytes32
,reverseBytes16
,reverseBytes8
,reverseBytes4
, andreverseBytes2
functions to reverse byte order for converting between little-endian and big-endian representations. (#5724)Bytes
: Addsplice(bytes,uint256)
andsplice(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 toslice
. (#5733)Bytes
: Add aclz
function to count the leading zero bits in abytes
buffer. (#5725)Bytes
: Add anequal
function to compare byte buffers. (#5726)Bytes
: FixlastIndexOf(bytes,byte,uint256)
with empty buffers and finite position to correctly returntype(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 thereturndata
more granularly. (#5094)Math
: Add aclz
function to count the leading zero bits in auint256
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
andReentrancyGuardTransient
: AddnonReentrantView
, a read-only version of thenonReentrant
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
: AddtoHexString(bytes)
. (#5761)
v5.4.0
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 ofAccount
that implements support for ERC-7579 modules of type executor, validator, and fallback handler. (#5657)AccountERC7579Hooked
: Extension ofAccountERC7579
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 additionalopData
is included. (#5657)
Governance
GovernorNoncesKeyed
: Extension ofGovernor
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
, andSignerRSA
: Add an abstract contract and various implementations for contracts that deal with signature verification. (#5657)SignerERC7702
: Implementation ofAbstractSigner
for Externally Owned Accounts (EOAs). Useful with ERC-7702. (#5657)SignerERC7913
: Abstract signer that verifies signatures using the ERC-7913 workflow. (#5659)MultiSignerERC7913
: Implementation ofAbstractSigner
that supports multiple ERC-7913 signers with a threshold-based signature verification system. (#5659)MultiSignerERC7913Weighted
: Extension ofMultiSignerERC7913
that supports assigning different weights to each signer, enabling more flexible governance schemes. (#5741)
Verifiers
ERC7913P256Verifier
andERC7913RSAVerifier
: 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 fromERC7739Utils
. (#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 forBytesToBytesMap
type. (#5658)EnumerableMap
: Addkeys(uint256,uint256)
that returns a subset (slice) of the keys in the map. (#5713)EnumerableSet
: Add support forStringSet
andBytesSet
types. (#5658)EnumerableSet
: Addvalues(uint256,uint256)
that returns a subset (slice) of the values in the set. (#5713)
Utils
Arrays
: AddunsafeAccess
,unsafeMemoryAccess
andunsafeSetLength
forbytes[]
andstring[]
. (#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
: FixlastIndexOf(bytes,byte,uint256)
with empty buffers and finite position to correctly returntype(uint256).max
instead of accessing uninitialized memory sections. (#5797)
v5.4.0-rc.1
- Add constructors to the different signers.
v5.4.0-rc.0
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 ofAccount
that implements support for ERC-7579 modules of type executor, validator, and fallback handler. (#5657)AccountERC7579Hooked
: Extension ofAccountERC7579
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 additionalopData
is included. (#5657)
Governance
GovernorNoncesKeyed
: Extension ofGovernor
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
, andSignerRSA
: Add an abstract contract and various implementations for contracts that deal with signature verification. (#5657)SignerERC7702
: Implementation ofAbstractSigner
for Externally Owned Accounts (EOAs). Useful with ERC-7702. (#5657)SignerERC7913
: Abstract signer that verifies signatures using the ERC-7913 workflow. (#5659)MultiSignerERC7913
: Implementation ofAbstractSigner
that supports multiple ERC-7913 signers with a threshold-based signature verification system. (#5659)MultiSignerERC7913Weighted
: Extension ofMultiSignerERC7913
that supports assigning different weights to each signer, enabling more flexible governance schemes. (#5741)
Verifiers
ERC7913P256Verifier
andERC7913RSAVerifier
: 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 fromERC7739Utils
. (#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 forBytesToBytesMap
type. (#5658)EnumerableMap
: Addkeys(uint256,uint256)
that returns a subset (slice) of the keys in the map. (#5713)EnumerableSet
: Add support forStringSet
andBytesSet
types. (#5658)EnumerableSet
: Addvalues(uint256,uint256)
that returns a subset (slice) of the values in the set. (#5713)
Utils
v5.3.0
Breaking Changes
- Replace
GovernorCountingOverridable.VoteReceipt
struct parameter member nameshasOverriden
andoverridenWeight
forhasOverridden
andoverriddenWeight
respectively.
Custom error changes
- Replace
GovernorAlreadyOverridenVote
withGovernorAlreadyOverriddenVote
. - Replace
GovernorOnlyProposer
withGovernorUnableToCancel
.
Changes by category
Account
ERC4337Utils
: Update thehash
function to callgetUserOpHash
on the specified entrypoint and add anENTRYPOINT_V08
constant. (#5614)ERC7579Utils
: Add ABI decoding checks on calldata bounds withindecodeBatch
. (#5371)ERC7579Utils
: Replaceaddress(0)
withaddress(this)
during execution for calldata compression efficiency. (#5614)
Governance
IGovernor
: Add thegetProposalId
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 aGovernor
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 theSucceeded
state before the proposal deadline. (#5526)GovernorVotesSuperQuorumFraction
: Add a variant of theGovernorSuperQuorum
extensions where the super quorum is expressed as a fraction of the total supply. (#5526)TimelockController
: Receive function is now virtual. (#5509)
Structures
EnumerableSet
: Addclear
function to EnumerableSets which deletes all values in the set. (#5486)EnumerableMap
: Addclear
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 theasset
getter intotalAssets
,_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
: AddtrySafeTransfer
andtrySafeTransferFrom
that do not revert and return false if the transfer is not successful. (#5483)
Other
Address
: bubble up revert data onsendValue
failed call. (#5379)Calldata
: Library withemptyBytes
andemptyString
functions to generate emptybytes
andstring
calldata types. (#5422)ERC2771Forwarder
: Expose the_isTrustedByTarget
internal function to check whether a target trusts the forwarder. (#5416)Hashes
: ExposeefficientKeccak256
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 anoverride
. (#5526)Math
: Addadd512
,mul512
andmulShr
. (#5526)Math
: Add saturating arithmetic operationssaturatingAdd
,saturatingSub
andsaturatingMul
. (#5526)MessageHashUtils
: AddtoDataWithIntendedValidatorHash(address, bytes32)
. (#5526)P256
: Adjust precompile detection inverifyNative
to consider emptyreturndata
on invalid verification. Previously, invalid signatures would've reverted with aMissingPrecompile
error in chains with RIP-7212 support. (#5620)Pausable
: Stop explicitly settingpaused
tofalse
during construction. (#5448)Strings
: AddespaceJSON
that escapes special characters in JSON strings. (#5526)
v5.3.0-rc.0
Breaking Changes
- Replace
GovernorCountingOverridable.VoteReceipt
struct parameter member nameshasOverriden
andoverridenWeight
forhasOverridden
andoverriddenWeight
respectively.
Custom error changes
- Replace
GovernorAlreadyOverridenVote
withGovernorAlreadyOverriddenVote
.
Changes by category
Account
ERC7579Utils
: Add ABI decoding checks on calldata bounds withindecodeBatch
. (#5371)
Governance
IGovernor
: Add thegetProposalId
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 aGovernor
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 theSucceeded
state before the proposal deadline. (#5526)GovernorVotesSuperQuorumFraction
: Add a variant of theGovernorSuperQuorum
extensions where the super quorum is expressed as a fraction of the total supply. (#5526)TimelockController
: Receive function is now virtual. (#5509)
Structures
EnumerableSet
: Addclear
function to EnumerableSets which deletes all values in the set. (#5486)EnumerableMap
: Addclear
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 theasset
getter intotalAssets
,_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
: AddtrySafeTransfer
andtrySafeTransferFrom
that do not revert and return false if the transfer is not successful. (#5483)
Other
Address
: bubble up revert data onsendValue
failed call. (#5379)Calldata
: Library withemptyBytes
andemptyString
functions to generate emptybytes
andstring
calldata types. (#5422)ERC2771Forwarder
: Expose the_isTrustedByTarget
internal function to check whether a target trusts the forwarder. (#5416)Hashes
: ExposeefficientKeccak256
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 anoverride
. (#5526)Math
: Addadd512
,mul512
andmulShr
. (#5526)Math
: Add saturating arithmetic operationssaturatingAdd
,saturatingSub
andsaturatingMul
. (#5526)MessageHashUtils
: AddtoDataWithIntendedValidatorHash(address, bytes32)
. (#5526)Pausable
: Stop explicitly settingpaused
tofalse
during construction. (#5448)Strings
: AddespaceJSON
that escapes special characters in JSON strings. (#5526)
v5.2.0
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 inAddress.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 ofVotes
which checkpoints balances and delegates. (#5192)
Proxy
Clones
: AddcloneWithImmutableArgs
andcloneDeterministicWithImmutableArgs
variants that create clones with per-instance immutable arguments. The immutable arguments can be retrieved usingfetchCloneArgs
. The correspondingpredictDeterministicWithImmutableArgs
function is also included. (#5109)
Tokens
ERC1363Utils
: Add helper similar to the existingERC721Utils
andERC1155Utils
(#5133)
Utils
Address
: bubble up revert data onsendValue
failed call (#5418)Bytes
: Add a library of common operations that operate onbytes
objects. (#5252)CAIP2
andCAIP10
: Add libraries for formatting and parsing CAIP-2 and CAIP-10 identifiers. (#5252)NoncesKeyed
: Add a variant ofNonces
that implements the ERC-4337 entrypoint nonce system. (#5272)Packing
: Add variants for packingbytes10
andbytes22
(#5274)Strings
: AddparseUint
,parseInt
,parseHexUint
andparseAddress
to parse strings into numbers and addresses. Also provide variants of these functions that parse substrings, andtryXxx
variants that do not revert on invalid input. (#5166)
v5.2.0-rc.1
ERC7579Utils
: Add ABI decoding checks on calldata bounds withindecodeBatch
(#5367)
v5.2.0-rc.0
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 ofVotes
which checkpoints balances and delegates. (#5192)
Proxy
Clones
: AddcloneWithImmutableArgs
andcloneDeterministicWithImmutableArgs
variants that create clones with per-instance immutable arguments. The immutable arguments can be retrieved usingfetchCloneArgs
. The correspondingpredictDeterministicWithImmutableArgs
function is also included. (#5109)
Tokens
ERC1363Utils
: Add helper similar to the existingERC721Utils
andERC1155Utils
(#5133)
Utils
Bytes
: Add a library of common operation that operate onbytes
objects. (#5252)CAIP2
andCAIP10
: Add libraries for formatting and parsing CAIP-2 and CAIP-10 identifiers. (#5252)NoncesKeyed
: Add a variant ofNonces
that implements the ERC-4337 entrypoint nonce system. (#5272)Packing
: Add variants for packingbytes10
andbytes22
(#5274)Strings
: AddparseUint
,parseInt
,parseHexUint
andparseAddress
to parse strings into numbers and addresses. Also provide variants of these functions that parse substrings, andtryXxx
variants that do not revert on invalid input. (#5166)