constructor(uint256 rate, uint256 bonusRate, uint256 bonusCap, uint256 openingTime, uint256 bonusEndTime, uint256 closingTime, address wallet, IERC20 token) public {
    require(rate > 0);
    require(bonusRate > 0);
    require(bonusCap > 0);
    require(openingTime >= block.timestamp);
    require(bonusEndTime >= openingTime);
    require(closingTime >= bonusEndTime);
    require(wallet != address(0));

    _rate = rate;
    _bonusRate = bonusRate;
    _bonusCap = bonusCap;
    _wallet = wallet;
    _token = token;
    _openingTime = openingTime;
    _closingTime = closingTime;
    _bonusEndTime = bonusEndTime;
  }