From 3e1149911a72459d3b963ed6dc0645196f84867d Mon Sep 17 00:00:00 2001 From: Santiago Palladino Date: Thu, 11 Jan 2018 09:47:34 -0300 Subject: [PATCH] ERC20 totalSupply changed from public property to a function Fixes OpenZeppelin/zeppelin-solidity#434 --- contracts/examples/SimpleToken.sol | 2 +- contracts/mocks/BasicTokenMock.sol | 2 +- contracts/mocks/BurnableTokenMock.sol | 2 +- contracts/mocks/ERC223TokenMock.sol | 2 +- contracts/mocks/ERC827TokenMock.sol | 2 +- contracts/mocks/SafeERC20Helper.sol | 8 ++++++++ contracts/mocks/StandardTokenMock.sol | 2 +- contracts/token/BasicToken.sol | 9 +++++++++ contracts/token/BurnableToken.sol | 2 +- contracts/token/CappedToken.sol | 2 +- contracts/token/ERC20/ERC20Basic.sol | 2 +- contracts/token/MintableToken.sol | 2 +- 12 files changed, 27 insertions(+), 10 deletions(-) diff --git a/contracts/examples/SimpleToken.sol b/contracts/examples/SimpleToken.sol index cdc29479a66..4f03e06dc92 100644 --- a/contracts/examples/SimpleToken.sol +++ b/contracts/examples/SimpleToken.sol @@ -22,7 +22,7 @@ contract SimpleToken is StandardToken { * @dev Constructor that gives msg.sender all of existing tokens. */ function SimpleToken() public { - totalSupply = INITIAL_SUPPLY; + totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; Transfer(0x0, msg.sender, INITIAL_SUPPLY); } diff --git a/contracts/mocks/BasicTokenMock.sol b/contracts/mocks/BasicTokenMock.sol index dc0d74a9119..073f1628991 100644 --- a/contracts/mocks/BasicTokenMock.sol +++ b/contracts/mocks/BasicTokenMock.sol @@ -9,7 +9,7 @@ contract BasicTokenMock is BasicToken { function BasicTokenMock(address initialAccount, uint256 initialBalance) public { balances[initialAccount] = initialBalance; - totalSupply = initialBalance; + totalSupply_ = initialBalance; } } diff --git a/contracts/mocks/BurnableTokenMock.sol b/contracts/mocks/BurnableTokenMock.sol index 07b5bf02ea4..2cbb03603da 100644 --- a/contracts/mocks/BurnableTokenMock.sol +++ b/contracts/mocks/BurnableTokenMock.sol @@ -7,7 +7,7 @@ contract BurnableTokenMock is BurnableToken { function BurnableTokenMock(address initialAccount, uint initialBalance) public { balances[initialAccount] = initialBalance; - totalSupply = initialBalance; + totalSupply_ = initialBalance; } } diff --git a/contracts/mocks/ERC223TokenMock.sol b/contracts/mocks/ERC223TokenMock.sol index 259faf2ab87..d400e29d46d 100644 --- a/contracts/mocks/ERC223TokenMock.sol +++ b/contracts/mocks/ERC223TokenMock.sol @@ -12,7 +12,7 @@ contract ERC223TokenMock is BasicToken { function ERC223TokenMock(address initialAccount, uint256 initialBalance) public { balances[initialAccount] = initialBalance; - totalSupply = initialBalance; + totalSupply_ = initialBalance; } // ERC223 compatible transfer function (except the name) diff --git a/contracts/mocks/ERC827TokenMock.sol b/contracts/mocks/ERC827TokenMock.sol index 9ac16cc6399..19da46d0fea 100644 --- a/contracts/mocks/ERC827TokenMock.sol +++ b/contracts/mocks/ERC827TokenMock.sol @@ -9,7 +9,7 @@ contract ERC827TokenMock is ERC827Token { function ERC827TokenMock(address initialAccount, uint256 initialBalance) public { balances[initialAccount] = initialBalance; - totalSupply = initialBalance; + totalSupply_ = initialBalance; } } diff --git a/contracts/mocks/SafeERC20Helper.sol b/contracts/mocks/SafeERC20Helper.sol index 1a9bcdfc2ba..ac2339a9f14 100644 --- a/contracts/mocks/SafeERC20Helper.sol +++ b/contracts/mocks/SafeERC20Helper.sol @@ -5,6 +5,10 @@ import "../token/ERC20/SafeERC20.sol"; contract ERC20FailingMock is ERC20 { + function totalSupply() public view returns (uint256) { + return 0; + } + function transfer(address, uint256) public returns (bool) { return false; } @@ -28,6 +32,10 @@ contract ERC20FailingMock is ERC20 { contract ERC20SucceedingMock is ERC20 { + function totalSupply() public view returns (uint256) { + return 0; + } + function transfer(address, uint256) public returns (bool) { return true; } diff --git a/contracts/mocks/StandardTokenMock.sol b/contracts/mocks/StandardTokenMock.sol index 1d7546c9bec..7fc996b3782 100644 --- a/contracts/mocks/StandardTokenMock.sol +++ b/contracts/mocks/StandardTokenMock.sol @@ -9,7 +9,7 @@ contract StandardTokenMock is StandardToken { function StandardTokenMock(address initialAccount, uint256 initialBalance) public { balances[initialAccount] = initialBalance; - totalSupply = initialBalance; + totalSupply_ = initialBalance; } } diff --git a/contracts/token/BasicToken.sol b/contracts/token/BasicToken.sol index 46e8bf87016..4dafb89beaa 100644 --- a/contracts/token/BasicToken.sol +++ b/contracts/token/BasicToken.sol @@ -14,6 +14,15 @@ contract BasicToken is ERC20Basic { mapping(address => uint256) balances; + uint256 totalSupply_; + + /** + * @dev total number of tokens in existence + */ + function totalSupply() public view returns (uint256) { + return totalSupply_; + } + /** * @dev transfer token for a specified address * @param _to The address to transfer to. diff --git a/contracts/token/BurnableToken.sol b/contracts/token/BurnableToken.sol index 9cbc2be056c..eedccd1c40b 100644 --- a/contracts/token/BurnableToken.sol +++ b/contracts/token/BurnableToken.sol @@ -22,7 +22,7 @@ contract BurnableToken is BasicToken { address burner = msg.sender; balances[burner] = balances[burner].sub(_value); - totalSupply = totalSupply.sub(_value); + totalSupply_ = totalSupply_.sub(_value); Burn(burner, _value); } } diff --git a/contracts/token/CappedToken.sol b/contracts/token/CappedToken.sol index ee55e202d98..9c3b2ebaec5 100644 --- a/contracts/token/CappedToken.sol +++ b/contracts/token/CappedToken.sol @@ -24,7 +24,7 @@ contract CappedToken is MintableToken { * @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); + require(totalSupply_.add(_amount) <= cap); return super.mint(_to, _amount); } diff --git a/contracts/token/ERC20/ERC20Basic.sol b/contracts/token/ERC20/ERC20Basic.sol index c972edac66f..49e6050d76d 100644 --- a/contracts/token/ERC20/ERC20Basic.sol +++ b/contracts/token/ERC20/ERC20Basic.sol @@ -7,7 +7,7 @@ pragma solidity ^0.4.18; * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { - uint256 public totalSupply; + function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); diff --git a/contracts/token/MintableToken.sol b/contracts/token/MintableToken.sol index fa9f43b9c29..3cc4c20ab35 100644 --- a/contracts/token/MintableToken.sol +++ b/contracts/token/MintableToken.sol @@ -32,7 +32,7 @@ contract MintableToken is StandardToken, Ownable { * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { - totalSupply = totalSupply.add(_amount); + totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount);