pragma solidity 0.4.20; /** * @title Helps contracts guard agains rentrancy attacks. * @author Remco Bloemen * @notice If you mark a function `nonReentrant`, you should also mark it `external`. */ contract ReentrancyGuard { /** * @dev We use a single lock for the whole contract. */ bool private rentrancyLock = false; /** * @dev Prevents a contract from calling itself, directly or indirectly. * @notice 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 a `external` wrapper marked as `nonReentrant`. */ modifier nonReentrant() { require(!rentrancyLock); rentrancyLock = true; _; rentrancyLock = false; } }