Parcourir la source

InitialRate must be strictly larger than finalRate. (#1441)

Nicolás Venturo il y a 7 ans
Parent
commit
a936cbf5fb

+ 9 - 1
contracts/crowdsale/price/IncreasingPriceCrowdsale.sol

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

+ 12 - 2
test/crowdsale/IncreasingPriceCrowdsale.test.js

@@ -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
       ));
@@ -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);
       });