diff --git a/contracts/crowdsale/Crowdsale.sol b/contracts/crowdsale/Crowdsale.sol index 9aa550519..a0c227607 100644 --- a/contracts/crowdsale/Crowdsale.sol +++ b/contracts/crowdsale/Crowdsale.sol @@ -3,6 +3,7 @@ pragma solidity ^0.4.24; import "../token/ERC20/IERC20.sol"; import "../math/SafeMath.sol"; import "../token/ERC20/SafeERC20.sol"; +import "../utils/ReentrancyGuard.sol"; /** * @title Crowdsale @@ -16,7 +17,7 @@ import "../token/ERC20/SafeERC20.sol"; * the methods to add functionality. Consider using 'super' where appropriate to concatenate * behavior. */ -contract Crowdsale { +contract Crowdsale is ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; @@ -111,9 +112,11 @@ contract Crowdsale { /** * @dev low level token purchase ***DO NOT OVERRIDE*** + * This function has a non-reentrancy guard, so it shouldn't be called by + * another `nonReentrant` function. * @param beneficiary Recipient of the token purchase */ - function buyTokens(address beneficiary) public payable { + function buyTokens(address beneficiary) public nonReentrant payable { uint256 weiAmount = msg.value; _preValidatePurchase(beneficiary, weiAmount); diff --git a/contracts/utils/ReentrancyGuard.sol b/contracts/utils/ReentrancyGuard.sol index 368f2720f..7a2895da2 100644 --- a/contracts/utils/ReentrancyGuard.sol +++ b/contracts/utils/ReentrancyGuard.sol @@ -19,11 +19,10 @@ contract ReentrancyGuard { /** * @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`. + * 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;