Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crowdsale.buyTokens is now nonReentrant. #1438

Merged
merged 5 commits into from
Oct 19, 2018

Conversation

nventuro
Copy link
Contributor

@nventuro nventuro commented Oct 18, 2018

This doesn't affect anything right now, but potentially could, with standards such as ERC677, and is hard to think about. Forbidding reentrancy altogether disallows all kinds of nasty behaviors.

Thanks @cwhinfrey and the Level K team for spotting this!

@nventuro nventuro added this to the v2.0 milestone Oct 18, 2018
@nventuro nventuro added contracts Smart contract code. breaking change Changes that break backwards compatibility of the public API. labels Oct 18, 2018
@come-maiz
Copy link
Contributor

The nonReentrant modifier has the following comment:

   * @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`.

We need to figure out first if that comment about not supported if it's not external makes sense.

@nventuro
Copy link
Contributor Author

It has been sitting there since the original PR, where the implementation was very similar to today's: #171

@come-maiz come-maiz merged commit 6d415c5 into OpenZeppelin:master Oct 19, 2018
come-maiz pushed a commit that referenced this pull request Oct 21, 2018
vittominacori added a commit to vittominacori/zeppelin-solidity that referenced this pull request Nov 21, 2018
…lidity into feature/token-recover

* 'master' of https://github.com/vittominacori/zeppelin-solidity: (98 commits)
  Renamed roles private variables to adhere to code style. (OpenZeppelin#1507)
  Remove extraneous quantity check, fixes OpenZeppelin#1454 (OpenZeppelin#1455)
  Remove redundant require statements (OpenZeppelin#1409)
  Add the step to delete the build dir to the RELEASE notes (OpenZeppelin#1467)
  add an address typecast to this per issue OpenZeppelin#1457 (OpenZeppelin#1471)
  add improvement in simpletoken example OpenZeppelin#1458 (OpenZeppelin#1473)
  SafeMath Test Coverage Improved (OpenZeppelin#1477)
  The beneficiary parameter of claimRefund is replaced with refundee (OpenZeppelin#1481)
  fix ERC20.sol#L174 and ERC20.sol#L187 should be casted to an address type. (OpenZeppelin#1470)
  Fix/add comment erc721 burnable OpenZeppelin#1464 (OpenZeppelin#1469)
  Release v2.0.0
  Release candidate v2.0.0-rc.4
  Improved some ERC721 internal shenanigans (OpenZeppelin#1450)
  Add warning about trading tokens before refundable crowdsale goal is met (OpenZeppelin#1452)
  Crowdsale.buyTokens is now nonReentrant. (OpenZeppelin#1438)
  InitialRate must be strictly larger than finalRate. (OpenZeppelin#1441)
  Fixed how allowance crowdsale checks remaining tokens. (OpenZeppelin#1449)
  Deleted unnecessary import. (OpenZeppelin#1437)
  Made SampleCrowdsale a bit clearer. (OpenZeppelin#1448)
  Now setting the finalized flag before doing finalization to prevent possbile reentrancy issues. (OpenZeppelin#1447)
  ...
@nventuro nventuro deleted the reentrancy-crowdsale branch December 4, 2018 14:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
breaking change Changes that break backwards compatibility of the public API. contracts Smart contract code.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants