ECDSA
: when receiving an invalid signature, recover
now reverts instead of returning the zero address. (#2114)Ownable
: moved to the access
directory. (#2120)Ownable
: removed isOwner
. (#2120)Secondary
: removed from the library, use Ownable
instead. (#2120)Escrow
, ConditionalEscrow
, RefundEscrow
: these now use Ownable
instead of Secondary
, their external API changed accordingly. (#2120)ERC20
: removed _burnFrom
. (#2119)SafeCast.toUintXX
: new library for integer downcasting, which allows for safe operation on smaller types (e.g. uint32
) when combined with SafeMath
. (#1926)ERC721Metadata
: added baseURI
, which can be used for dramatic gas savings when all token URIs share a prefix (e.g. http://api.myapp.com/tokens/<id>
). (#1970)EnumerableSet
: new library for storing enumerable sets of values. Only AddressSet
is supported in this release. (#2061)Create2
: simple library to make usage of the CREATE2
opcode easier. (#1744)ERC777
: _burn
is now internal, providing more flexibility and making it easier to create tokens that deflate. (#1908)ReentrancyGuard
: greatly improved gas efficiency by using the net gas metering mechanism introduced in the Istanbul hardfork. (#1992, #1996)ERC777
: improve extensibility by making _send
and related functions internal
. (#2027)ERC721
: improved revert reason when transferring tokens to a non-recipient contract. (#2018)ERC165Checker
now requires a minimum Solidity compiler version of 0.5.10. (#1829)Address.toPayable
: added a helper to convert between address types without having to resort to low-level casting. (#1773)Address.sendValue
: added a replacement to Solidity's transfer
, removing the fixed gas stipend. (#1962)PullPayment.withdrawPaymentsWithGas(address payable payee)
Escrow.withdrawWithGas(address payable payee)
SafeMath
: added support for custom error messages to sub
, div
and mod
functions. (#1828)Address.isContract
: switched from extcodesize
to extcodehash
for less gas usage. (#1802)ERC20
and ERC777
updated to throw custom errors on subtraction overflows. (#1828)PullPayment.withdrawPayments(address payable payee)
Escrow.withdraw(address payable payee)
Address
now requires a minimum Solidity compiler version of 0.5.5. (#1802)SignatureBouncer
has been removed from drafts, both to avoid confusions with the GSN and GSNRecipientSignature
(previously called GSNBouncerSignature
) and because the API was not very clear. (#1879)The final 2.4.0 release includes a refactor of the GSN contracts that will be a breaking change for 2.4.0-beta users.
_preRelayedCall
and _postRelayedCall
were removed and must now be explicitly implemented always in custom recipients. If your custom recipient didn't include an implementation, you can provide an empty one.GSNRecipient
, GSNBouncerBase
, and GSNContext
were all merged into GSNRecipient
.GSNBouncerSignature
and GSNBouncerERC20Fee
were renamed to GSNRecipientSignature
and GSNRecipientERC20Fee
.GSNRecipient
when using GSNRecipientSignature
and GSNRecipientERC20Fee
.For example, a contract using GSNBouncerSignature
would have to be changed in the following way.
-contract MyDapp is GSNRecipient, GSNBouncerSignature {
+contract MyDapp is GSNRecipientSignature {
Refer to the table below to adjust your inheritance list.
2.4.0-beta | 2.4.0 |
---|---|
GSNRecipient, GSNBouncerSignature |
GSNRecipientSignature |
GSNRecipient, GSNBouncerERC20Fee |
GSNRecipientERC20Fee |
GSNBouncerBase |
GSNRecipient |
ERC1820
: added support for interacting with the ERC1820 registry contract (IERC1820Registry
), as well as base contracts that can be registered as implementers there. (#1677)ERC777
: support for the ERC777 token, which has multiple improvements over ERC20
(but is backwards compatible with it) such as built-in burning, a more straightforward permission system, and optional sender and receiver hooks on transfer (mandatory for contracts!). (#1684)PostDeliveryCrowdsale
: some validations where skipped when paired with other crowdsale flavors, such as AllowanceCrowdsale
, or MintableCrowdsale
and ERC20Capped
, which could cause buyers to not be able to claim their purchased tokens. (#1721)ERC20._transfer
: the from
argument was allowed to be the zero address, so it was possible to internally trigger a transfer of 0 tokens from the zero address. This address is not a valid destinatary of transfers, nor can it give or receive allowance, so this behavior was inconsistent. It now reverts. (#1752)ERC20Snapshot
: create snapshots on demand of the token balances and total supply, to later retrieve and e.g. calculate dividends at a past time. (#1617)SafeERC20
: ERC20
contracts with no return value (i.e. that revert on failure) are now supported. (#1655)ERC20
: added internal _approve(address owner, address spender, uint256 value)
, allowing derived contracts to set the allowance of arbitrary accounts. (#1609)ERC20Metadata
: added internal _setTokenURI(string memory tokenURI)
. (#1618)TimedCrowdsale
: added internal _extendTime(uint256 newClosingTime)
as well as TimedCrowdsaleExtended(uint256 prevClosingTime, uint256 newClosingTime)
event allowing to extend the crowdsale, as long as it hasn't already closed.ECDSA
: recover
no longer accepts malleable signatures (those using upper-range values for s
, or 0/1 for v
). (#1622)ERC721
's transfers are now more gas efficient due to removal of unnecessary SafeMath
calls. (#1610)SafeERC20
: safeApprove
wasn't properly checking for a zero allowance when attempting to set a non-zero allowance. (#1647)TokenMetadata
has been renamed to ERC20Metadata
. (#1618)Counter
has been renamed to Counters
and its API has been improved. See an example in ERC721
, lines 17 and 204. (#1610)SafeERC20.safeApprove
bugfix. (#1647)PublicRole.behavior.js
, which may be useful to users testing their own Roles
.WhitelistCrowdsale
: a crowdsale where only whitelisted accounts (WhitelistedRole
) can purchase tokens. Adding or removing accounts from the whitelist is done by whitelist admins (WhitelistAdminRole
). Similar to the pre-2.0 WhitelistedCrowdsale
. (#1525, #1589)RefundablePostDeliveryCrowdsale
: replacement for RefundableCrowdsale
(deprecated, see below) where tokens are only granted once the crowdsale ends (if it meets its goal). (#1543)PausableCrowdsale
: allows for pausers (PauserRole
) to pause token purchases. Other crowdsale operations (e.g. withdrawals and refunds, if applicable) are not affected. (#832)ERC20
: transferFrom
and _burnFrom
now emit Approval
events, to represent the token's state comprehensively through events. (#1524)ERC721
: added _burn(uint256 tokenId)
, replacing the similar deprecated function (see below). (#1550)ERC721
: added _tokensOfOwner(address owner)
, allowing to internally retrieve the array of an account's owned tokens. (#1522)public
, meaning it is not necessary to extend these contracts in order to deploy them. The exception is FinalizableCrowdsale
, since it is meaningless unless extended. (#1564)SignedSafeMath
: added overflow-safe operations for signed integers (int256
). (#1559, #1588)Array
was behind the rest of the libray so it was updated to v0.4.24
. (#1553)ERC20
: more gas efficient due to removed redundant require
s. (#1409)ERC721
: fixed a bug that prevented internal data structures from being properly cleaned, missing potential gas refunds. (#1539 and #1549)ERC721
: general gas savings on transferFrom
, _mint
and _burn
, due to redudant require
s and SSTORE
s. (#1549)