Browse Source

ERC20 totalSupply changed from public property to a function (#666)

Fixes OpenZeppelin/zeppelin-solidity#434
Santiago Palladino 7 years ago
parent
commit
370e6a882a

+ 1 - 1
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);
   }

+ 1 - 1
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;
   }
 
 }

+ 1 - 1
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;
   }
 
 }

+ 1 - 1
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)

+ 1 - 1
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;
   }
 
 }

+ 8 - 0
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;
   }

+ 1 - 1
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;
   }
 
 }

+ 9 - 0
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.

+ 1 - 1
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);
   }
 }

+ 1 - 1
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);
   }

+ 1 - 1
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);

+ 1 - 1
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);