Merge pull request #515 from cwhinfrey/master
Create CappedToken, a capped MintableTokenpull/577/head
commit
9001ce9d3a
@ -0,0 +1,31 @@ |
|||||||
|
pragma solidity ^0.4.11; |
||||||
|
|
||||||
|
import './MintableToken.sol'; |
||||||
|
|
||||||
|
/** |
||||||
|
* @title Capped token |
||||||
|
* @dev Mintable token with a token cap. |
||||||
|
*/ |
||||||
|
|
||||||
|
contract CappedToken is MintableToken { |
||||||
|
|
||||||
|
uint256 public cap; |
||||||
|
|
||||||
|
function CappedToken(uint256 _cap) { |
||||||
|
require(_cap > 0); |
||||||
|
cap = _cap; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @dev Function to mint tokens |
||||||
|
* @param _to The address that will receive the minted tokens. |
||||||
|
* @param _amount The amount of tokens to mint. |
||||||
|
* @return A boolean that indicates if the operation was successful. |
||||||
|
*/ |
||||||
|
function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { |
||||||
|
require(totalSupply.add(_amount) <= cap); |
||||||
|
|
||||||
|
return super.mint(_to, _amount); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
import expectThrow from './helpers/expectThrow'; |
||||||
|
import ether from './helpers/ether'; |
||||||
|
var CappedToken = artifacts.require('../contracts/Tokens/CappedToken.sol'); |
||||||
|
|
||||||
|
const BigNumber = web3.BigNumber |
||||||
|
|
||||||
|
contract('Capped', function(accounts) { |
||||||
|
const cap = ether(1000); |
||||||
|
|
||||||
|
let token; |
||||||
|
|
||||||
|
beforeEach(async function() { |
||||||
|
token = await CappedToken.new(cap); |
||||||
|
}) |
||||||
|
|
||||||
|
it('should start with the correct cap', async function() { |
||||||
|
let _cap = await token.cap(); |
||||||
|
|
||||||
|
assert.equal(cap.toNumber(), _cap.toNumber()); |
||||||
|
}) |
||||||
|
|
||||||
|
it('should mint when amount is less than cap', async function() { |
||||||
|
const result = await token.mint(accounts[0], 100); |
||||||
|
assert.equal(result.logs[0].event, 'Mint'); |
||||||
|
}) |
||||||
|
|
||||||
|
it('should fail to mint if the ammount exceeds the cap', async function() { |
||||||
|
await token.mint(accounts[0], cap.sub(1)); |
||||||
|
await expectThrow(token.mint(accounts[0], 100)); |
||||||
|
}) |
||||||
|
|
||||||
|
it('should fail to mint after cap is reached', async function() { |
||||||
|
await token.mint(accounts[0], cap); |
||||||
|
await expectThrow(token.mint(accounts[0], 1)); |
||||||
|
}) |
||||||
|
|
||||||
|
}); |
Loading…
Reference in new issue