Fixed how allowance crowdsale checks remaining tokens. (#1449)

(cherry picked from commit 1ac1ac984e)
This commit is contained in:
Nicolás Venturo
2018-10-19 15:12:16 -03:00
committed by Leo Arias
parent 984fe23a46
commit 47b5d61844
2 changed files with 16 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import "../Crowdsale.sol";
import "../../token/ERC20/IERC20.sol"; import "../../token/ERC20/IERC20.sol";
import "../../token/ERC20/SafeERC20.sol"; import "../../token/ERC20/SafeERC20.sol";
import "../../math/SafeMath.sol"; import "../../math/SafeMath.sol";
import "../../math/Math.sol";
/** /**
* @title AllowanceCrowdsale * @title AllowanceCrowdsale
@ -36,7 +37,10 @@ contract AllowanceCrowdsale is Crowdsale {
* @return Amount of tokens left in the allowance * @return Amount of tokens left in the allowance
*/ */
function remainingTokens() public view returns (uint256) { function remainingTokens() public view returns (uint256) {
return token().allowance(_tokenWallet, this); return Math.min(
token().balanceOf(_tokenWallet),
token().allowance(_tokenWallet, this)
);
} }
/** /**

View File

@ -69,6 +69,17 @@ contract('AllowanceCrowdsale', function ([_, investor, wallet, purchaser, tokenW
await this.crowdsale.buyTokens(investor, { value: value, from: purchaser }); await this.crowdsale.buyTokens(investor, { value: value, from: purchaser });
(await this.crowdsale.remainingTokens()).should.be.bignumber.equal(remainingAllowance); (await this.crowdsale.remainingTokens()).should.be.bignumber.equal(remainingAllowance);
}); });
context('when the allowance is larger than the token amount', function () {
beforeEach(async function () {
const amount = await this.token.balanceOf(tokenWallet);
await this.token.approve(this.crowdsale.address, amount.plus(1), { from: tokenWallet });
});
it('should report the amount instead of the allowance', async function () {
(await this.crowdsale.remainingTokens()).should.be.bignumber.equal(await this.token.balanceOf(tokenWallet));
});
});
}); });
describe('when token wallet is different from token address', function () { describe('when token wallet is different from token address', function () {