Skip to content

Commit

Permalink
InitialRate must be strictly larger than finalRate. (#1441)
Browse files Browse the repository at this point in the history
(cherry picked from commit a936cbf)
  • Loading branch information
nventuro authored and come-maiz committed Oct 20, 2018
1 parent 47b5d61 commit ecae760
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
10 changes: 9 additions & 1 deletion contracts/crowdsale/price/IncreasingPriceCrowdsale.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,19 @@ contract IncreasingPriceCrowdsale is TimedCrowdsale {
*/
constructor(uint256 initialRate, uint256 finalRate) internal {
require(finalRate > 0);
require(initialRate >= finalRate);
require(initialRate > finalRate);
_initialRate = initialRate;
_finalRate = finalRate;
}

/**
* The base rate function is overridden to revert, since this crowdsale doens't use it, and
* all calls to it are a mistake.
*/
function rate() public view returns(uint256) {
revert();
}

/**
* @return the initial rate of the crowdsale.
*/
Expand Down
14 changes: 12 additions & 2 deletions test/crowdsale/IncreasingPriceCrowdsale.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,19 @@ contract('IncreasingPriceCrowdsale', function ([_, investor, wallet, purchaser])
this.token = await SimpleToken.new();
});

it('rejects a final rate larger than the initial rate', async function () {
it('reverts with a final rate larger than the initial rate', async function () {
await shouldFail.reverting(IncreasingPriceCrowdsaleImpl.new(
this.startTime, this.closingTime, wallet, this.token.address, initialRate, initialRate.plus(1)
));
});

it('rejects a final rate of zero', async function () {
it('reverts with a final equal to the initial rate', async function () {
await shouldFail.reverting(IncreasingPriceCrowdsaleImpl.new(
this.startTime, this.closingTime, wallet, this.token.address, initialRate, initialRate
));
});

it('reverts with a final rate of zero', async function () {
await shouldFail.reverting(IncreasingPriceCrowdsaleImpl.new(
this.startTime, this.closingTime, wallet, this.token.address, initialRate, 0
));
Expand All @@ -59,6 +65,10 @@ contract('IncreasingPriceCrowdsale', function ([_, investor, wallet, purchaser])
(await this.crowdsale.finalRate()).should.be.bignumber.equal(finalRate);
});

it('reverts when the base Crowdsale\'s rate function is called', async function () {
await shouldFail.reverting(this.crowdsale.rate());
});

it('returns a rate of 0 before the crowdsale starts', async function () {
(await this.crowdsale.getCurrentRate()).should.be.bignumber.equal(0);
});
Expand Down

0 comments on commit ecae760

Please sign in to comment.