1234567891011121314151617181920212223242526272829303132333435363738 |
- pragma solidity ^0.5.0;
- /**
- * @dev Contract module that helps prevent reentrant calls to a function.
- *
- * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
- * available, which can be aplied to functions to make sure there are no nested
- * (reentrant) calls to them.
- *
- * Note that because there is a single `nonReentrant` guard, functions marked as
- * `nonReentrant` may not call one another. This can be worked around by making
- * those functions `private`, and then adding `external` `nonReentrant` entry
- * points to them.
- */
- contract ReentrancyGuard {
- // 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.
- * Calling a `nonReentrant` function from another `nonReentrant`
- * function is not supported. It is possible to prevent this from happening
- * by making the `nonReentrant` function external, and make it call a
- * `private` function that does the actual work.
- */
- modifier nonReentrant() {
- _guardCounter += 1;
- uint256 localCounter = _guardCounter;
- _;
- require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
- }
- }
|