Refactor unlimited allowance logic out of ERC20Token
This commit is contained in:
		@@ -8,7 +8,7 @@ contract DummyToken_v2 is Mintable_v2, Ownable_v2 {
 | 
			
		||||
    string public symbol;
 | 
			
		||||
    uint public decimals;
 | 
			
		||||
 | 
			
		||||
    function DummyToken(
 | 
			
		||||
    function DummyToken_v2(
 | 
			
		||||
        string _name,
 | 
			
		||||
        string _symbol,
 | 
			
		||||
        uint _decimals,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
pragma solidity 0.4.18;
 | 
			
		||||
 | 
			
		||||
import "./../tokens/ERC20Token.sol";
 | 
			
		||||
import "./../tokens/UnlimitedAllowanceToken_v2.sol";
 | 
			
		||||
import "./../lib/SafeMath_v2.sol";
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Mintable
 | 
			
		||||
 * Base contract that creates a mintable UnlimitedAllowanceToken
 | 
			
		||||
 */
 | 
			
		||||
contract Mintable_v2 is ERC20Token, SafeMath_v2 {
 | 
			
		||||
contract Mintable_v2 is UnlimitedAllowanceToken_v2, SafeMath_v2 {
 | 
			
		||||
    function mint(uint _value) 
 | 
			
		||||
        public
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,9 @@
 | 
			
		||||
pragma solidity ^0.4.18;
 | 
			
		||||
pragma solidity 0.4.18;
 | 
			
		||||
 | 
			
		||||
import "./Token_v2.sol";
 | 
			
		||||
 | 
			
		||||
contract ERC20Token is Token_v2 {
 | 
			
		||||
 | 
			
		||||
    uint constant MAX_UINT = 2**256 - 1;
 | 
			
		||||
 | 
			
		||||
    function transfer(address _to, uint _value)
 | 
			
		||||
        public
 | 
			
		||||
        returns (bool) 
 | 
			
		||||
@@ -17,22 +15,14 @@ contract ERC20Token is Token_v2 {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance. See https://github.com/ethereum/EIPs/issues/717
 | 
			
		||||
    /// @param _from Address to transfer from.
 | 
			
		||||
    /// @param _to Address to transfer to.
 | 
			
		||||
    /// @param _value Amount to transfer.
 | 
			
		||||
    /// @return Success of transfer.
 | 
			
		||||
    function transferFrom(address _from, address _to, uint _value)
 | 
			
		||||
        public 
 | 
			
		||||
        returns (bool) 
 | 
			
		||||
    {
 | 
			
		||||
        uint allowance = allowed[_from][msg.sender];
 | 
			
		||||
        require(balances[_from] >= _value && allowance >= _value && balances[_to] + _value >= balances[_to]); 
 | 
			
		||||
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value >= balances[_to]); 
 | 
			
		||||
        balances[_to] += _value;
 | 
			
		||||
        balances[_from] -= _value;
 | 
			
		||||
        if (allowance < MAX_UINT) {
 | 
			
		||||
            allowed[_from][msg.sender] -= _value;
 | 
			
		||||
        }
 | 
			
		||||
        allowed[_from][msg.sender] -= _value;
 | 
			
		||||
        Transfer(_from, _to, _value);
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,10 +18,10 @@
 | 
			
		||||
 | 
			
		||||
pragma solidity 0.4.18;
 | 
			
		||||
 | 
			
		||||
import "./ERC20Token.sol";
 | 
			
		||||
import "./UnlimitedAllowanceToken_v2.sol";
 | 
			
		||||
import "./../lib/SafeMath_v2.sol";
 | 
			
		||||
 | 
			
		||||
contract EtherToken_v2 is ERC20Token, SafeMath_v2 {
 | 
			
		||||
contract EtherToken_v2 is UnlimitedAllowanceToken_v2, SafeMath_v2 {
 | 
			
		||||
 | 
			
		||||
    string constant public name = "Ether Token";
 | 
			
		||||
    string constant public symbol = "WETH";
 | 
			
		||||
@@ -46,7 +46,7 @@ contract EtherToken_v2 is ERC20Token, SafeMath_v2 {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Sells tokens in exchange for Ether, exchanging them 1:1.
 | 
			
		||||
    /// @param amount Number of tokens to sell.
 | 
			
		||||
    /// @param _value Number of tokens to sell.
 | 
			
		||||
    function withdraw(uint _value)
 | 
			
		||||
        public
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,46 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2017 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity 0.4.18;
 | 
			
		||||
 | 
			
		||||
import "./ERC20Token.sol";
 | 
			
		||||
 | 
			
		||||
contract UnlimitedAllowanceToken_v2 is ERC20Token {
 | 
			
		||||
 | 
			
		||||
    uint constant MAX_UINT = 2**256 - 1;
 | 
			
		||||
 | 
			
		||||
    /// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance. See https://github.com/ethereum/EIPs/issues/717
 | 
			
		||||
    /// @param _from Address to transfer from.
 | 
			
		||||
    /// @param _to Address to transfer to.
 | 
			
		||||
    /// @param _value Amount to transfer.
 | 
			
		||||
    /// @return Success of transfer.
 | 
			
		||||
    function transferFrom(address _from, address _to, uint _value)
 | 
			
		||||
        public 
 | 
			
		||||
        returns (bool) 
 | 
			
		||||
    {
 | 
			
		||||
        uint allowance = allowed[_from][msg.sender];
 | 
			
		||||
        require(balances[_from] >= _value && allowance >= _value && balances[_to] + _value >= balances[_to]); 
 | 
			
		||||
        balances[_to] += _value;
 | 
			
		||||
        balances[_from] -= _value;
 | 
			
		||||
        if (allowance < MAX_UINT) {
 | 
			
		||||
            allowed[_from][msg.sender] -= _value;
 | 
			
		||||
        }
 | 
			
		||||
        Transfer(_from, _to, _value);
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -14,7 +14,7 @@ const web3: Web3 = (global as any).web3;
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
 | 
			
		||||
contract('ERC20Token', (accounts: string[]) => {
 | 
			
		||||
contract('UnlimitedAllowanceTokenV2', (accounts: string[]) => {
 | 
			
		||||
    const config = {
 | 
			
		||||
        networkId: constants.TESTRPC_NETWORK_ID,
 | 
			
		||||
    };
 | 
			
		||||
		Reference in New Issue
	
	Block a user