Modify ReentrancyGuard to reduce contract size (#3515)
Co-authored-by: Hadrien Croubois <hadrien.croubois@gmail.com> Co-authored-by: Francisco <frangio.1@gmail.com>
This commit is contained in:
@ -9,6 +9,7 @@
|
|||||||
* `ERC20`: optimize `_transfer`, `_mint` and `_burn` by using `unchecked` arithmetic when possible. ([#3513](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3513))
|
* `ERC20`: optimize `_transfer`, `_mint` and `_burn` by using `unchecked` arithmetic when possible. ([#3513](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3513))
|
||||||
* `ERC721`: optimize transfers by making approval clearing implicit instead of emitting an event. ([#3481](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3481))
|
* `ERC721`: optimize transfers by making approval clearing implicit instead of emitting an event. ([#3481](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3481))
|
||||||
* `ERC721`: optimize burn by making approval clearing implicit instead of emitting an event. ([#3538](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3538))
|
* `ERC721`: optimize burn by making approval clearing implicit instead of emitting an event. ([#3538](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3538))
|
||||||
|
* `ReentrancyGuard`: Reduce code size impact of the modifier by using internal functions. ([#3515](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3515))
|
||||||
|
|
||||||
### Compatibility Note
|
### Compatibility Note
|
||||||
|
|
||||||
|
|||||||
@ -48,14 +48,20 @@ abstract contract ReentrancyGuard {
|
|||||||
* `private` function that does the actual work.
|
* `private` function that does the actual work.
|
||||||
*/
|
*/
|
||||||
modifier nonReentrant() {
|
modifier nonReentrant() {
|
||||||
|
_nonReentrantBefore();
|
||||||
|
_;
|
||||||
|
_nonReentrantAfter();
|
||||||
|
}
|
||||||
|
|
||||||
|
function _nonReentrantBefore() private {
|
||||||
// On the first call to nonReentrant, _notEntered will be true
|
// On the first call to nonReentrant, _notEntered will be true
|
||||||
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
|
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
|
||||||
|
|
||||||
// Any calls to nonReentrant after this point will fail
|
// Any calls to nonReentrant after this point will fail
|
||||||
_status = _ENTERED;
|
_status = _ENTERED;
|
||||||
|
}
|
||||||
|
|
||||||
_;
|
function _nonReentrantAfter() private {
|
||||||
|
|
||||||
// By storing the original value once again, a refund is triggered (see
|
// By storing the original value once again, a refund is triggered (see
|
||||||
// https://eips.ethereum.org/EIPS/eip-2200)
|
// https://eips.ethereum.org/EIPS/eip-2200)
|
||||||
_status = _NOT_ENTERED;
|
_status = _NOT_ENTERED;
|
||||||
|
|||||||
Reference in New Issue
Block a user