diff --git a/contracts/ReentrancyGuard.sol b/contracts/ReentrancyGuard.sol index 8562d46b3..6456d09b0 100644 --- a/contracts/ReentrancyGuard.sol +++ b/contracts/ReentrancyGuard.sol @@ -3,16 +3,23 @@ pragma solidity ^0.4.24; /** * @title Helps contracts guard against reentrancy attacks. - * @author Remco Bloemen + * @author Remco Bloemen , Eenae * @dev If you mark a function `nonReentrant`, you should also * mark it `external`. */ contract ReentrancyGuard { + /// @dev Constant for unlocked guard state - non-zero to prevent extra gas costs. + /// See: https://github.com/OpenZeppelin/openzeppelin-solidity/issues/1056 + uint private constant REENTRANCY_GUARD_FREE = 1; + + /// @dev Constant for locked guard state + uint private constant REENTRANCY_GUARD_LOCKED = 2; + /** * @dev We use a single lock for the whole contract. */ - bool private reentrancyLock = false; + uint private reentrancyLock = REENTRANCY_GUARD_FREE; /** * @dev Prevents a contract from calling itself, directly or indirectly. @@ -23,10 +30,10 @@ contract ReentrancyGuard { * wrapper marked as `nonReentrant`. */ modifier nonReentrant() { - require(!reentrancyLock); - reentrancyLock = true; + require(reentrancyLock == REENTRANCY_GUARD_FREE); + reentrancyLock = REENTRANCY_GUARD_LOCKED; _; - reentrancyLock = false; + reentrancyLock = REENTRANCY_GUARD_FREE; } }