1234567891011121314151617181920212223242526272829303132333435 |
- pragma solidity ^0.4.24;
- /**
- * @title Helps contracts guard against reentrancy attacks.
- * @author Remco Bloemen <remco@2π.com>, Eenae <alexey@mixbytes.io>
- * @dev If you mark a function `nonReentrant`, you should also
- * mark it `external`.
- */
- contract ReentrancyGuard {
- /// @dev counter to allow mutex lock with only one SSTORE operation
- uint256 private _guardCounter;
- constructor() internal {
- // The counter starts at one to prevent changing it from zero to a non-zero
- // value, which is a more expensive operation.
- _guardCounter = 1;
- }
- /**
- * @dev Prevents a contract from calling itself, directly or indirectly.
- * If you mark a function `nonReentrant`, you should also
- * mark it `external`. Calling one `nonReentrant` function from
- * another is not supported. Instead, you can implement a
- * `private` function doing the actual work, and an `external`
- * wrapper marked as `nonReentrant`.
- */
- modifier nonReentrant() {
- _guardCounter += 1;
- uint256 localCounter = _guardCounter;
- _;
- require(localCounter == _guardCounter);
- }
- }
|