@openzeppelin/contracts-upgradeable
Advanced tools
Changelog
5.4.0 (2025-07-17)
SignatureChecker
, Governor
and Governor's extensions. (#5716).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)GovernorNoncesKeyed
: Extension of Governor
that adds support for keyed nonces when voting by sig. (#5574)ERC20Bridgeable
: Implementation of ERC-7802 that makes an ERC-20 compatible with crosschain bridges. (#5739)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)ERC7913P256Verifier
and ERC7913RSAVerifier
: Ready to use ERC-7913 verifiers that implement key verification for P256 (secp256r1) and RSA keys. (#5659)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)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)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)Changelog
5.3.0 (2025-04-09)
GovernorCountingOverridable.VoteReceipt
struct parameter member names hasOverriden
and overridenWeight
for hasOverridden
and overriddenWeight
respectively.GovernorAlreadyOverridenVote
with GovernorAlreadyOverriddenVote
.GovernorOnlyProposer
with GovernorUnableToCancel
.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)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)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)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)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)Changelog
5.2.0 (2025-01-08)
This version comes with changes to the custom error identifiers. Contracts previously depending on the following errors should be replaced accordingly:
Errors.FailedCall
with a bubbled-up revert reason in Address.sendValue
.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)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)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)ERC1363Utils
: Add helper similar to the existing ERC721Utils
and ERC1155Utils
(#5133)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)Changelog
5.1.0 (2024-10-17)
ERC1967Utils
: Removed duplicate declaration of the Upgraded
, AdminChanged
and BeaconUpgraded
events. These events are still available through the IERC1967
interface located under the contracts/interfaces/
directory. Minimum pragma version is now 0.8.21.Governor
, GovernorCountingSimple
: The _countVote
virtual function now returns an uint256
with the total votes cast. 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.This version comes with changes to the custom error identifiers. Contracts previously depending on the following errors should be replaced accordingly:
Address.FailedInnerCall
with Errors.FailedCall
Address.AddressInsufficientBalance
with Errors.InsufficientBalance
Clones.Create2InsufficientBalance
with Errors.InsufficientBalance
Clones.ERC1167FailedCreateClone
with Errors.FailedDeployment
Clones.Create2FailedDeployment
with Errors.FailedDeployment
SafeERC20
: Replace Address.AddressEmptyCode
with SafeERC20FailedOperation
if there is no code at the token's address.SafeERC20
: Replace generic Error(string)
with SafeERC20FailedOperation
if the returned data can't be decoded as bool
.SafeERC20
: Replace generic SafeERC20FailedOperation
with the revert message from the contract call if it fails.AccessManager
, VestingWallet
, TimelockController
and ERC2771Forwarder
: Added a public initializer
function in their corresponding upgradeable variants. (#5008)AccessControlEnumerable
: Add a getRoleMembers
method to return all accounts that have role
. (#4546)AccessManager
: Allow the onlyAuthorized
modifier to restrict functions added to the manager. (#5014)VestingWalletCliff
: Add an extension of the VestingWallet
contract with an added cliff. (#4870)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)Clones
: Add version of clone
and cloneDeterministic
that support sending value at creation. (#4936)TransparentUpgradeableProxy
: Make internal _proxyAdmin()
getter have view
visibility. (#4688)ProxyAdmin
: Fixed documentation for UPGRADE_INTERFACE_VERSION
getter. (#5031)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 of safeIncreaseAllowance
and safeDecreaseAllowance
when associated with ERC-7674. (#5262)ERC721Utils
and ERC1155Utils
: Add reusable libraries with functions to perform acceptance checks on IERC721Receiver
and IERC1155Receiver
implementers. (#4845)ERC1363Utils
: Add helper similar to the existing ERC721Utils and ERC1155Utils. (#5133)Arrays
: add a sort
functions for address[]
, bytes32[]
and uint256[]
memory arrays. (#4846)Arrays
: add new functions lowerBound
, upperBound
, lowerBoundMemory
and upperBoundMemory
for lookups in sorted arrays with potential duplicates. (#4842)Arrays
: deprecate findUpperBound
in favor of the new lowerBound
. (#4842)Base64
: Add encodeURL
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
: Mask computeAddress
and cloneDeterministic
outputs to produce a clean value for an address
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 of ReentrancyGuard
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)SignatureChecker
: refactor isValidSignatureNow
to avoid validating ECDSA signatures if there is code deployed at the signer's address. (#4951)MerkleProof
: Add variations of verify
, processProof
, multiProofVerify
and processMultiProof
(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
: add an invMod
function to get the modular multiplicative inverse of a number in Z/nZ. (#4839)Math
: Add modExp
function that exposes the EIP-198
precompile. Includes uint256
and bytes memory
versions. (#3298)Math
: Custom errors replaced with native panic codes. (#3298)Math
, SignedMath
: Add a branchless ternary
function that computescond ? a : b
in constant gas cost. (#4976)SafeCast
: Add toUint(bool)
for operating on bool
values as uint256
. (#4878)CircularBuffer
: Add a data structure that stores the last N
values pushed to it. (#4913)DoubleEndedQueue
: Custom errors replaced with native panic codes. (#4872)EnumerableMap
: add UintToBytes32Map
, AddressToAddressMap
, AddressToBytes32Map
and Bytes32ToAddressMap
. (#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)