This minor release includes a way to store token balances and supply so that they can be later queried in a gas-efficient manner , allows safe interaction with some old, non-compliant tokens , prevents user errors when using ECDSA signatures (the magic behind metatransactions! ), and provides multiple minor additions and improvements to the API.
To install the release candidate run npm install openzeppelin-solidity@next
.
We would love your help by reviewing newly added contracts, their interface and documentation so that we can make names clearer, features easier to use, and the library better as a whole! Your feedback is extremely useful to us
Highlights
New features
-
ERC20Snapshot
: this variant allows for snapshots to be created on demand, storing the current token balances and total supply so that they can be later retrieved in a gas-efficient manner and e.g. calculate dividends at a past time. (#1617) -
SafeERC20
: theERC20
standard requires that all function calls (e.g.transfer
,approve
, etc.) return a boolean value indicating success. However, they are multiple widely used tokens out there that return no such value: they simplyrevert
when encountering an error condition. Since Solidity v0.4.22, special code was needed to interact with this non-compliant tokens: now, all ofSafeERC20
can be used to safely call both compliant and non-compliant tokens, without the developer having to worry about it. (#1655) -
TimedCrowdsale
: an internal_extendTime(uint256 newClosingTime)
function was added (with a correspondingTimedCrowdsaleExtended(uint256 prevClosingTime, uint256 newClosingTime)
event) allowing for users to safely develop mechanisms to extend the durations of unclosed crowdsales. Note that due to it being internal, thereβs no out-of-the-box way to do it: this feature is opt-in and must be explicitly invoked by users.
Improvements
-
ECDSA
:recover
no longer accepts malleable signatures (those using upper-range values fors
, or 0/1 forv
). This helps prevent multiple issues when using signatures as unique identifiers. Read more about common ECDSA issues here. (#1622) -
ERC721
's transfers are now more gas efficient due to removal of unnecessarySafeMath
calls. (#1610)
Bugfixes:
- (minor)
SafeERC20
:safeApprove
wasnβt properly checking for a zero allowance when attempting to set a non-zero allowance. This bug was reported independently by @nikeshnazareth. Thanks a lot! (#1647)
Breaking changes:
-
TokenMetadata
(in drafts) has been renamed toERC20Metadata
. (#1618)
You can also see all details of this release in our changelog.