openzeppelin-solidity
Advanced tools
Changelog
4.3.0 (2021-08-17)
ERC2771Context
: use private variable from storage to store the forwarder address. Fixes issues where _msgSender()
was not callable from constructors. (#2754)EnumerableSet
: add values()
functions that returns an array containing all values in a single call. (#2768)Governor
: added a modular system of Governor
contracts based on GovernorAlpha
and GovernorBravo
. (#2672)interfaces
folder containing solidity interfaces to final ERCs. (#2517)ECDSA
: add tryRecover
functions that will not throw if the signature is invalid, and will return an error flag instead. (#2661)SignatureChecker
: Reduce gas usage of the isValidSignatureNow
function for the "signature by EOA" case. (#2661)Changelog
4.2.0 (2021-06-30)
ERC20Votes
: add a new extension of the ERC20
token with support for voting snapshots and delegation. (#2632)ERC20VotesComp
: Variant of ERC20Votes
that is compatible with Compound's Comp
token interface but restricts supply to uint96
. (#2706)ERC20Wrapper
: add a new extension of the ERC20
token which wraps an underlying token. Deposit and withdraw guarantee that the total supply is backed by a corresponding amount of underlying token. (#2633)EnumerableSet
and EnumerableMap
.EnumerableSet
and EnumerableMap
.Counter
: add a reset method. (#2678)unchecked
blocks.Math
: Add a ceilDiv
method for performing ceiling division.ERC1155Supply
: add a new ERC1155
extension that keeps track of the totalSupply of each tokenId. (#2593)BitMaps
: add a new BitMaps
library that provides a storage efficient datastructure for uint256
to bool
mapping with contiguous keys. (#2710)ERC20FlashMint
is no longer a Draft ERC. (#2673))How to update: Change your import paths by removing the draft-
prefix from @openzeppelin/contracts/token/ERC20/extensions/draft-ERC20FlashMint.sol
.
Changelog
4.1.0 (2021-04-29)
IERC20Metadata
: add a new extended interface that includes the optional name()
, symbol()
and decimals()
functions. (#2561)ERC777
: make reception acquirement optional in _mint
. (#2552)ERC20Permit
: add a _useNonce
to enable further usage of ERC712 signatures. (#2565)ERC20FlashMint
: add an implementation of the ERC3156 extension for flash-minting ERC20 tokens. (#2543)SignatureChecker
: add a signature verification library that supports both EOA and ERC1271 compliant contracts as signers. (#2532)Multicall
: add abstract contract with multicall(bytes[] calldata data)
function to bundle multiple calls together (#2608)ECDSA
: add support for ERC2098 short-signatures. (#2582)AccessControl
: add an onlyRole
modifier to restrict specific function to callers bearing a specific role. (#2609)StorageSlot
: add a library for reading and writing primitive types to specific storage slots. (#2542)UUPSUpgradeable
to implement the UUPS proxy pattern together with EIP1967Proxy
. (#2542)This release includes two small breaking changes in TimelockController
.
onlyRole
modifier in this contract was designed to let anyone through if the role was granted to address(0)
,
allowing the possibility to make a role "open", which can be used for EXECUTOR_ROLE
. This modifier is now
replaced by AccessControl.onlyRole
, which does not have this ability. The previous behavior was moved to the
modifier TimelockController.onlyRoleOrOpenRole
.PROPOSER_ROLE
an open role (as described in the previous item) if it was granted to
address(0)
. This would affect the schedule
, scheduleBatch
, and cancel
operations in TimelockController
.
This ability was removed as it does not make sense to open up the PROPOSER_ROLE
in the same way that it does for
EXECUTOR_ROLE
.Changelog
4.0.0 (2021-03-23)
Context
: making _msgData
return bytes calldata
instead of bytes memory
(#2492)ERC20
: removed the _setDecimals
function and the storage slot associated to decimals. (#2502)Strings
: addition of a toHexString
function. (#2504)EnumerableMap
: change implementation to optimize for key → value
lookups instead of enumeration. (#2518)GSN
: deprecate GSNv1 support in favor of upcoming support for GSNv2. (#2521)ERC165
: remove uses of storage in the base ERC165 implementation. ERC165 based contracts now use storage-less virtual functions. Old behavior remains available in the ERC165Storage
extension. (#2505)Initializable
: make initializer check stricter during construction. (#2531)ERC721
: remove enumerability of tokens from the base implementation. This feature is now provided separately through the ERC721Enumerable
extension. (#2511)AccessControl
: removed enumerability by default for a more lightweight contract. It is now opt-in through AccessControlEnumerable
. (#2512)ERC2771Context
and a MinimalForwarder
for meta-transactions. (#2508)ERC20Capped
: optimize gas usage by enforcing the check directly in _mint
. (#2524)UpgradeableProxy
to ERC1967Proxy
. (#2547)ERC777
: optimize the gas costs of the constructor. (#2551)ERC721URIStorage
: add a new extension that implements the _setTokenURI
behavior as it was available in 3.4.0. (#2555)AccessControl
: added ERC165 interface detection. (#2562)ERC1155
: make uri
public so overloading function can call it using super. (#2576)AccessControlEnumerable
: Fixed renounceRole
not updating enumerable set of addresses for a role. (#2572)Since this version has moved a few contracts to different directories, users upgrading from a previous version will need to adjust their import statements. To make this easier, the package includes a script that will migrate import statements automatically. After upgrading to the latest version of the package, run:
npx openzeppelin-contracts-migrate-imports
Make sure you're using git or another version control system to be able to recover from any potential error in our script.