Releases: OpenZeppelin/openzeppelin-contracts-upgradeable
Releases · OpenZeppelin/openzeppelin-contracts-upgradeable
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)
v5.1.0
Breaking changes
ERC1967Utils
: Removed duplicate declaration of theUpgraded
,AdminChanged
andBeaconUpgraded
events. These events are still available through theIERC1967
interface located under thecontracts/interfaces/
directory. Minimum pragma version is now 0.8.21.Governor
,GovernorCountingSimple
: The_countVote
virtual function now returns anuint256
with the total votes casted. This change allows for more flexibility for partial and fractional voting. Upgrading users may get a compilation error that can be fixed by adding a return statement to the_countVote
function.
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
Address.FailedInnerCall
withErrors.FailedCall
- Replace
Address.AddressInsufficientBalance
withErrors.InsufficientBalance
- Replace
Clones.Create2InsufficientBalance
withErrors.InsufficientBalance
- Replace
Clones.ERC1167FailedCreateClone
withErrors.FailedDeployment
- Replace
Clones.Create2FailedDeployment
withErrors.FailedDeployment
SafeERC20
: ReplaceAddress.AddressEmptyCode
withSafeERC20FailedOperation
if there is no code at the token's address.SafeERC20
: Replace genericError(string)
withSafeERC20FailedOperation
if the returned data can't be decoded asbool
.SafeERC20
: Replace genericSafeERC20FailedOperation
with the revert message from the contract call if it fails.
Changes by category
General
AccessManager
,VestingWallet
,TimelockController
andERC2771Forwarder
: Added a publicinitializer
function in their corresponding upgradeable variants. (#5008)
Access
AccessControlEnumerable
: Add agetRoleMembers
method to return all accounts that haverole
. (#4546)AccessManager
: Allow theonlyAuthorized
modifier to restrict functions added to the manager. (#5014)
Finance
VestingWalletCliff
: Add an extension of theVestingWallet
contract with an added cliff. (#4870)
Governance
GovernorCountingFractional
: Add a governor counting module that allows distributing voting power amongst 3 options (For, Against, Abstain). (#5045)Votes
: Set_moveDelegateVotes
visibility to internal instead of private. (#5007)
Proxy
Clones
: Add version ofclone
andcloneDeterministic
that support sending value at creation. (#4936)TransparentUpgradeableProxy
: Make internal_proxyAdmin()
getter haveview
visibility. (#4688)ProxyAdmin
: Fixed documentation forUPGRADE_INTERFACE_VERSION
getter. (#5031)
Tokens
ERC1363
: Add implementation of the token payable standard allowing execution of contract code after transfers and approvals. (#4631)ERC20TemporaryApproval
: Add an ERC-20 extension that implements temporary approval using transient storage, based on ERC7674 (draft). (#5071)SafeERC20
: Add "relaxed" function for interacting with ERC-1363 functions in a way that is compatible with EOAs. (#4631)SafeERC20
: Document risks ofsafeIncreaseAllowance
andsafeDecreaseAllowance
when associated with ERC-7674. (#5262)ERC721Utils
andERC1155Utils
: Add reusable libraries with functions to perform acceptance checks onIERC721Receiver
andIERC1155Receiver
implementers. (#4845)ERC1363Utils
: Add helper similar to the existing ERC721Utils and ERC1155Utils. (#5133)
Utils
Arrays
: add asort
functions foraddress[]
,bytes32[]
anduint256[]
memory arrays. (#4846)Arrays
: add new functionslowerBound
,upperBound
,lowerBoundMemory
andupperBoundMemory
for lookups in sorted arrays with potential duplicates. (#4842)Arrays
: deprecatefindUpperBound
in favor of the newlowerBound
. (#4842)Base64
: AddencodeURL
following section 5 of RFC4648 for URL encoding (#4822)Comparator
: A library of comparator functions, useful for customizing the behavior of the Heap structure. (#5084)Create2
: Bubbles up returndata from a deployed contract that reverted during construction. (#5052)Create2
,Clones
: MaskcomputeAddress
andcloneDeterministic
outputs to produce a clean value for anaddress
type (i.e. only use 20 bytes) (#4941)Errors
: New library of common custom errors. (#4936)Hashes
: A library with commonly used hash functions. (#3617)Packing
: Added a new utility for packing, extracting and replacing bytesXX values. (#4992)Panic
: Add a library for reverting with panic codes. (#3298)ReentrancyGuardTransient
: Added a variant ofReentrancyGuard
that uses transient storage. (#4988)Strings
: Added a utility function for converting an address to checksummed string. (#5067)SlotDerivation
: Add a library of methods for derivating common storage slots. (#4975)TransientSlot
: Add primitives for operating on the transient storage space using a typed-slot representation. (#4980)
Cryptography
SignatureChecker
: refactorisValidSignatureNow
to avoid validating ECDSA signatures if there is code deployed at the signer's address. (#4951)MerkleProof
: Add variations ofverify
,processProof
,multiProofVerify
andprocessMultiProof
(and equivalent calldata version) with support for custom hashing functions. (#4887)P256
: Library for verification and public key recovery of P256 (aka secp256r1) signatures. (#4881)RSA
: Library to verify signatures according to RFC 8017 Signature Verification Operation (#4952)
Math
Math
: add aninvMod
function to get the modular multiplicative inverse of a number in Z/nZ. (#4839)Math
: AddmodExp
function that exposes theEIP-198
precompile. Includesuint256
andbytes memory
versions. (#3298)Math
: Custom errors replaced with native panic codes. (#3298)Math
,SignedMath
: Add a branchlessternary
function that computescond ? a : b
in constant gas cost. (#4976)SafeCast
: AddtoUint(bool)
for operating onbool
values asuint256
. (#4878)
Structures
CircularBuffer
: Add a data structure that stores the lastN
values pushed to it. (#4913)DoubleEndedQueue
: Custom errors replaced with native panic codes. (#4872)EnumerableMap
: addUintToBytes32Map
,AddressToAddressMap
,AddressToBytes32Map
andBytes32ToAddressMap
. (#4843)Heap
: A data structure that implements a heap-based priority queue. (#5084)MerkleTree
: A data structure that allows inserting elements into a merkle tree and updating its root hash. (#3617)
v5.1.0-rc.0
Breaking changes
ERC1967Utils
: Removed duplicate declaration of theUpgraded
,AdminChanged
andBeaconUpgraded
events. These events are still available through theIERC1967
interface located under thecontracts/interfaces/
directory. Minimum pragma version is now 0.8.21.Governor
,GovernorCountingSimple
: The_countVotes
virtual function now returns anuint256
with the total votes casted. This change allows for more flexibility for partial and fractional voting. Upgrading users may get a compilation error that can be fixed by adding a return statement to the_countVotes
function.
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
Address.FailedInnerCall
withErrors.FailedCall
- Replace
Address.AddressInsufficientBalance
withErrors.InsufficientBalance
- Replace
Clones.Create2InsufficientBalance
withErrors.InsufficientBalance
- Replace
Clones.ERC1167FailedCreateClone
withErrors.FailedDeployment
- Replace
Clones.Create2FailedDeployment
withErrors.FailedDeployment
SafeERC20
: ReplaceAddress.AddressEmptyCode
withSafeERC20FailedOperation
if there is no code at the token's address.SafeERC20
: Replace genericError(string)
withSafeERC20FailedOperation
if the returned data can't be decoded asbool
.SafeERC20
: Replace genericSafeERC20FailedOperation
with the revert message from the contract call if it fails.
Changes by category
General
AccessManager
,VestingWallet
,TimelockController
andERC2771Forwarder
: Added a publicinitializer
function in their corresponding upgradeable variants. (#5008)
Access
AccessControlEnumerable
: Add agetRoleMembers
method to return all accounts that haverole
. (#4546)AccessManager
: Allow theonlyAuthorized
modifier to restrict functions added to the manager. (#5014)
Finance
VestingWalletCliff
: Add an extension of theVestingWallet
contract with an added cliff. (#4870)
Governance
GovernorCountingFractional
: Add a governor counting module that allows distributing voting power amongst 3 options (For, Against, Abstain). (#5045)Votes
: Set_moveDelegateVotes
visibility to internal instead of private. (#5007)
Proxy
Clones
: Add version ofclone
andcloneDeterministic
that support sending value at creation. (#4936)TransparentUpgradeableProxy
: Make internal_proxyAdmin()
getter haveview
visibility. (#4688)ProxyAdmin
: Fixed documentation forUPGRADE_INTERFACE_VERSION
getter. (#5031)
Tokens
ERC1363
: Add implementation of the token payable standard allowing execution of contract code after transfers and approvals. (#4631)ERC20TemporaryApproval
: Add an ERC-20 extension that implements temporary approval using transient storage, based on ERC7674 (draft). (#5071)SafeERC20
: Add "relaxed" function for interacting with ERC-1363 functions in a way that is compatible with EOAs. (#4631)ERC721Utils
andERC1155Utils
: Add reusable libraries with functions to perform acceptance checks onIERC721Receiver
andIERC1155Receiver
implementers. (#4845)ERC1363Utils
: Add helper similar to the existing ERC721Utils and ERC1155Utils. (#5133)
Utils
Arrays
: add asort
functions foraddress[]
,bytes32[]
anduint256[]
memory arrays. (#4846)Arrays
: add new functionslowerBound
,upperBound
,lowerBoundMemory
andupperBoundMemory
for lookups in sorted arrays with potential duplicates. (#4842)Arrays
: deprecatefindUpperBound
in favor of the newlowerBound
. (#4842)Base64
: AddencodeURL
following section 5 of RFC4648 for URL encoding (#4822)Comparator
: A library of comparator functions, useful for customizing the behavior of the Heap structure. (#5084)Create2
: Bubbles up returndata from a deployed contract that reverted during construction. (#5052)Create2
,Clones
: MaskcomputeAddress
andcloneDeterministic
outputs to produce a clean value for anaddress
type (i.e. only use 20 bytes) (#4941)Errors
: New library of common custom errors. (#4936)Hashes
: A library with commonly used hash functions. (#3617)Packing
: Added a new utility for packing, extracting and replacing bytesXX values. (#4992)Panic
: Add a library for reverting with panic codes. (#3298)ReentrancyGuardTransient
: Added a variant ofReentrancyGuard
that uses transient storage. (#4988)Strings
: Added a utility function for converting an address to checksummed string. (#5067)SlotDerivation
: Add a library of methods for derivating common storage slots. (#4975)StorageSlot
: Add primitives for operating on the transient storage space using a typed-slot representation. (#4980)
Cryptography
SignatureChecker
: refactorisValidSignatureNow
to avoid validating ECDSA signatures if there is code deployed at the signer's address. (#4951)MerkleProof
: Add variations ofverify
,processProof
,multiProofVerify
andprocessMultiProof
(and equivalent calldata version) with support for custom hashing functions. (#4887)P256
: Library for verification and public key recovery of P256 (aka secp256r1) signatures. (#4881)RSA
: Library to verify signatures according to RFC 8017 Signature Verification Operation (#4952)
Math
Math
: add aninvMod
function to get the modular multiplicative inverse of a number in Z/nZ. (#4839)Math
: AddmodExp
function that exposes theEIP-198
precompile. Includesuint256
andbytes memory
versions. (#3298)Math
: Custom errors replaced with native panic codes. (#3298)Math
,SignedMath
: Add a branchlessternary
function that computescond ? a : b
in constant gas cost. (#4976)SafeCast
: AddtoUint(bool)
for operating onbool
values asuint256
. (#4878)
Structures
CircularBuffer
: Add a data structure that stores the lastN
values pushed to it. (#4913)DoubleEndedQueue
: Custom errors replaced with native panic codes. (#4872)EnumerableMap
: addUintToBytes32Map
,AddressToAddressMap
,AddressToBytes32Map
andBytes32ToAddressMap
. (#4843)Heap
: A data structure that implements a heap-based priority queue. (#5084)MerkleTree
: A data structure that allows inserting elements into a merkle tree and updating its root hash. (#3617)
v5.0.2
v4.9.6
v4.9.5
Multicall
: Patch duplicatedAddress.functionDelegateCall
.