123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- pragma solidity ^0.5.7;
- import "../../math/SafeMath.sol";
- import "../Crowdsale.sol";
- /**
- * @title TimedCrowdsale
- * @dev Crowdsale accepting contributions only within a time frame.
- */
- contract TimedCrowdsale is Crowdsale {
- using SafeMath for uint256;
- uint256 private _openingTime;
- uint256 private _closingTime;
- /**
- * Event for crowdsale extending
- * @param newClosingTime new closing time
- * @param prevClosingTime old closing time
- */
- event TimedCrowdsaleExtended(uint256 prevClosingTime, uint256 newClosingTime);
- /**
- * @dev Reverts if not in crowdsale time range.
- */
- modifier onlyWhileOpen {
- require(isOpen());
- _;
- }
- /**
- * @dev Constructor, takes crowdsale opening and closing times.
- * @param openingTime Crowdsale opening time
- * @param closingTime Crowdsale closing time
- */
- constructor (uint256 openingTime, uint256 closingTime) public {
- // solhint-disable-next-line not-rely-on-time
- require(openingTime >= block.timestamp);
- require(closingTime > openingTime);
- _openingTime = openingTime;
- _closingTime = closingTime;
- }
- /**
- * @return the crowdsale opening time.
- */
- function openingTime() public view returns (uint256) {
- return _openingTime;
- }
- /**
- * @return the crowdsale closing time.
- */
- function closingTime() public view returns (uint256) {
- return _closingTime;
- }
- /**
- * @return true if the crowdsale is open, false otherwise.
- */
- function isOpen() public view returns (bool) {
- // solhint-disable-next-line not-rely-on-time
- return block.timestamp >= _openingTime && block.timestamp <= _closingTime;
- }
- /**
- * @dev Checks whether the period in which the crowdsale is open has already elapsed.
- * @return Whether crowdsale period has elapsed
- */
- function hasClosed() public view returns (bool) {
- // solhint-disable-next-line not-rely-on-time
- return block.timestamp > _closingTime;
- }
- /**
- * @dev Extend parent behavior requiring to be within contributing period.
- * @param beneficiary Token purchaser
- * @param weiAmount Amount of wei contributed
- */
- function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal onlyWhileOpen view {
- super._preValidatePurchase(beneficiary, weiAmount);
- }
- /**
- * @dev Extend crowdsale.
- * @param newClosingTime Crowdsale closing time
- */
- function _extendTime(uint256 newClosingTime) internal {
- require(!hasClosed());
- require(newClosingTime > _closingTime);
- emit TimedCrowdsaleExtended(_closingTime, newClosingTime);
- _closingTime = newClosingTime;
- }
- }
|