From cb75f007ea992bcb44f0036cabacb4cc713bef29 Mon Sep 17 00:00:00 2001 From: Francisco Giordano Date: Sun, 12 Aug 2018 13:16:28 -0300 Subject: [PATCH] make StandardToken state variables private --- contracts/examples/SimpleToken.sol | 4 +--- contracts/mocks/BurnableTokenMock.sol | 3 +-- contracts/mocks/ERC223TokenMock.sol | 3 +-- contracts/mocks/PausableTokenMock.sol | 2 +- contracts/mocks/StandardTokenMock.sol | 3 +-- contracts/token/ERC20/BurnableToken.sol | 16 +++------------- contracts/token/ERC20/CappedToken.sol | 2 +- contracts/token/ERC20/MintableToken.sol | 4 +--- contracts/token/ERC20/StandardToken.sol | 24 +++++++++++++++++++++--- 9 files changed, 31 insertions(+), 30 deletions(-) diff --git a/contracts/examples/SimpleToken.sol b/contracts/examples/SimpleToken.sol index 835396f2e..73df121dd 100644 --- a/contracts/examples/SimpleToken.sol +++ b/contracts/examples/SimpleToken.sol @@ -22,9 +22,7 @@ contract SimpleToken is StandardToken { * @dev Constructor that gives msg.sender all of existing tokens. */ constructor() public { - totalSupply_ = INITIAL_SUPPLY; - balances[msg.sender] = INITIAL_SUPPLY; - emit Transfer(address(0), msg.sender, INITIAL_SUPPLY); + _mint(msg.sender, INITIAL_SUPPLY); } } diff --git a/contracts/mocks/BurnableTokenMock.sol b/contracts/mocks/BurnableTokenMock.sol index f7bdd59d9..a148f17f4 100644 --- a/contracts/mocks/BurnableTokenMock.sol +++ b/contracts/mocks/BurnableTokenMock.sol @@ -6,8 +6,7 @@ import "../token/ERC20/BurnableToken.sol"; contract BurnableTokenMock is BurnableToken { constructor(address _initialAccount, uint256 _initialBalance) public { - balances[_initialAccount] = _initialBalance; - totalSupply_ = _initialBalance; + _mint(_initialAccount, _initialBalance); } } diff --git a/contracts/mocks/ERC223TokenMock.sol b/contracts/mocks/ERC223TokenMock.sol index 410348cc0..2f92bc5f1 100644 --- a/contracts/mocks/ERC223TokenMock.sol +++ b/contracts/mocks/ERC223TokenMock.sol @@ -11,8 +11,7 @@ contract ERC223ContractInterface { contract ERC223TokenMock is StandardToken { constructor(address _initialAccount, uint256 _initialBalance) public { - balances[_initialAccount] = _initialBalance; - totalSupply_ = _initialBalance; + _mint(_initialAccount, _initialBalance); } // ERC223 compatible transfer function (except the name) diff --git a/contracts/mocks/PausableTokenMock.sol b/contracts/mocks/PausableTokenMock.sol index f1a1d53dd..24ef281ba 100644 --- a/contracts/mocks/PausableTokenMock.sol +++ b/contracts/mocks/PausableTokenMock.sol @@ -7,7 +7,7 @@ import "../token/ERC20/PausableToken.sol"; contract PausableTokenMock is PausableToken { constructor(address _initialAccount, uint _initialBalance) public { - balances[_initialAccount] = _initialBalance; + _mint(_initialAccount, _initialBalance); } } diff --git a/contracts/mocks/StandardTokenMock.sol b/contracts/mocks/StandardTokenMock.sol index 6a7dd5aa1..7fe1104e2 100644 --- a/contracts/mocks/StandardTokenMock.sol +++ b/contracts/mocks/StandardTokenMock.sol @@ -7,8 +7,7 @@ import "../token/ERC20/StandardToken.sol"; contract StandardTokenMock is StandardToken { constructor(address _initialAccount, uint256 _initialBalance) public { - balances[_initialAccount] = _initialBalance; - totalSupply_ = _initialBalance; + _mint(_initialAccount, _initialBalance); } } diff --git a/contracts/token/ERC20/BurnableToken.sol b/contracts/token/ERC20/BurnableToken.sol index ad49ff11d..329f7b66a 100644 --- a/contracts/token/ERC20/BurnableToken.sol +++ b/contracts/token/ERC20/BurnableToken.sol @@ -25,21 +25,11 @@ contract BurnableToken is StandardToken { * @param _value uint256 The amount of token to be burned */ function burnFrom(address _from, uint256 _value) public { - require(_value <= allowed[_from][msg.sender]); - // Should https://github.com/OpenZeppelin/zeppelin-solidity/issues/707 be accepted, - // this function needs to emit an event with the updated approval. - allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); - _burn(_from, _value); + _burnFrom(_from, _value); } function _burn(address _who, uint256 _value) internal { - require(_value <= balances[_who]); - // no need to require value <= totalSupply, since that would imply the - // sender's balance is greater than the totalSupply, which *should* be an assertion failure - - balances[_who] = balances[_who].sub(_value); - totalSupply_ = totalSupply_.sub(_value); + super._burn(_who, _value); emit Burn(_who, _value); - emit Transfer(_who, address(0), _value); } -} \ No newline at end of file +} diff --git a/contracts/token/ERC20/CappedToken.sol b/contracts/token/ERC20/CappedToken.sol index 497b6fdc4..1af8bdcb6 100644 --- a/contracts/token/ERC20/CappedToken.sol +++ b/contracts/token/ERC20/CappedToken.sol @@ -29,7 +29,7 @@ contract CappedToken is MintableToken { public returns (bool) { - require(totalSupply_.add(_amount) <= cap); + require(totalSupply().add(_amount) <= cap); return super.mint(_to, _amount); } diff --git a/contracts/token/ERC20/MintableToken.sol b/contracts/token/ERC20/MintableToken.sol index 1821058ff..18abb83b2 100644 --- a/contracts/token/ERC20/MintableToken.sol +++ b/contracts/token/ERC20/MintableToken.sol @@ -41,10 +41,8 @@ contract MintableToken is StandardToken, Ownable { canMint returns (bool) { - totalSupply_ = totalSupply_.add(_amount); - balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); - emit Transfer(address(0), _to, _amount); + _mint(_to, _amount); return true; } diff --git a/contracts/token/ERC20/StandardToken.sol b/contracts/token/ERC20/StandardToken.sol index 88b215473..e54d9a2b8 100644 --- a/contracts/token/ERC20/StandardToken.sol +++ b/contracts/token/ERC20/StandardToken.sol @@ -14,11 +14,11 @@ import "../../math/SafeMath.sol"; contract StandardToken is ERC20 { using SafeMath for uint256; - mapping(address => uint256) balances; + mapping (address => uint256) private balances; - mapping (address => mapping (address => uint256)) internal allowed; + mapping (address => mapping (address => uint256)) private allowed; - uint256 totalSupply_; + uint256 private totalSupply_; /** * @dev Total number of tokens in existence @@ -156,4 +156,22 @@ contract StandardToken is ERC20 { return true; } + function _mint(address _account, uint256 _amount) internal { + totalSupply_ = totalSupply_.add(_amount); + balances[_account] = balances[_account].add(_amount); + emit Transfer(address(0), _account, _amount); + } + + function _burn(address _account, uint256 _amount) internal { + totalSupply_ = totalSupply_.sub(_amount); + balances[_account] = balances[_account].sub(_amount); + emit Transfer(_account, address(0), _amount); + } + + function _burnFrom(address _account, uint256 _amount) internal { + // Should https://github.com/OpenZeppelin/zeppelin-solidity/issues/707 be accepted, + // this function needs to emit an event with the updated approval. + allowed[_account][msg.sender] = allowed[_account][msg.sender].sub(_amount); + _burn(_account, _amount); + } }