You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.0 KiB
56 lines
2.0 KiB
pragma solidity ^0.4.24;
|
|
|
|
import "../validation/TimedCrowdsale.sol";
|
|
import "../../math/SafeMath.sol";
|
|
|
|
|
|
/**
|
|
* @title IncreasingPriceCrowdsale
|
|
* @dev Extension of Crowdsale contract that increases the price of tokens linearly in time.
|
|
* Note that what should be provided to the constructor is the initial and final _rates_, that is,
|
|
* the amount of tokens per wei contributed. Thus, the initial rate must be greater than the final rate.
|
|
*/
|
|
contract IncreasingPriceCrowdsale is TimedCrowdsale {
|
|
using SafeMath for uint256;
|
|
|
|
uint256 public initialRate;
|
|
uint256 public finalRate;
|
|
|
|
/**
|
|
* @dev Constructor, takes initial and final rates of tokens received per wei contributed.
|
|
* @param _initialRate Number of tokens a buyer gets per wei at the start of the crowdsale
|
|
* @param _finalRate Number of tokens a buyer gets per wei at the end of the crowdsale
|
|
*/
|
|
constructor(uint256 _initialRate, uint256 _finalRate) public {
|
|
require(_finalRate > 0);
|
|
require(_initialRate >= _finalRate);
|
|
initialRate = _initialRate;
|
|
finalRate = _finalRate;
|
|
}
|
|
|
|
/**
|
|
* @dev Returns the rate of tokens per wei at the present time.
|
|
* Note that, as price _increases_ with time, the rate _decreases_.
|
|
* @return The number of tokens a buyer gets per wei at a given time
|
|
*/
|
|
function getCurrentRate() public view returns (uint256) {
|
|
// solium-disable-next-line security/no-block-members
|
|
uint256 elapsedTime = block.timestamp.sub(openingTime);
|
|
uint256 timeRange = closingTime.sub(openingTime);
|
|
uint256 rateRange = initialRate.sub(finalRate);
|
|
return initialRate.sub(elapsedTime.mul(rateRange).div(timeRange));
|
|
}
|
|
|
|
/**
|
|
* @dev Overrides parent method taking into account variable rate.
|
|
* @param _weiAmount The value in wei to be converted into tokens
|
|
* @return The number of tokens _weiAmount wei will buy at present time
|
|
*/
|
|
function _getTokenAmount(uint256 _weiAmount)
|
|
internal view returns (uint256)
|
|
{
|
|
uint256 currentRate = getCurrentRate();
|
|
return currentRate.mul(_weiAmount);
|
|
}
|
|
|
|
}
|
|
|