diff options
Diffstat (limited to 'packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol')
-rw-r--r-- | packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol | 80 |
1 files changed, 61 insertions, 19 deletions
diff --git a/packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol b/packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol index 0e5b87aa4..6497d3c7a 100644 --- a/packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol +++ b/packages/contracts/src/contracts/current/tokens/ERC20Token/ERC20Token.sol @@ -1,45 +1,90 @@ -pragma solidity ^0.4.18; +/* -import { Token } from "../Token/Token.sol"; + Copyright 2018 ZeroEx Intl. -contract ERC20Token is Token { + 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 - function transfer(address _to, uint _value) + 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.23; +pragma experimental ABIEncoderV2; + +import "./IERC20Token.sol"; + +contract ERC20Token is IERC20Token { + + string constant INSUFFICIENT_BALANCE = "Insufficient balance to complete transfer."; + string constant INSUFFICIENT_ALLOWANCE = "Insufficient allowance to complete transfer."; + string constant OVERFLOW = "Transfer would result in an overflow."; + + mapping (address => uint256) balances; + mapping (address => mapping (address => uint256)) allowed; + + uint256 public totalSupply; + + function transfer(address _to, uint256 _value) public returns (bool) { - require(balances[msg.sender] >= _value && balances[_to] + _value >= balances[_to]); + require( + balances[msg.sender] >= _value, + INSUFFICIENT_BALANCE + ); + require( + balances[_to] + _value >= balances[_to], + OVERFLOW + ); balances[msg.sender] -= _value; balances[_to] += _value; - Transfer(msg.sender, _to, _value); + emit Transfer(msg.sender, _to, _value); return true; } - function transferFrom(address _from, address _to, uint _value) + function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value >= balances[_to]); + require( + balances[_from] >= _value, + INSUFFICIENT_BALANCE + ); + require( + allowed[_from][msg.sender] >= _value, + INSUFFICIENT_ALLOWANCE + ); + require( + balances[_to] + _value >= balances[_to], + OVERFLOW + ); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; - Transfer(_from, _to, _value); + emit Transfer(_from, _to, _value); return true; } - function approve(address _spender, uint _value) + function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; - Approval(msg.sender, _spender, _value); + emit Approval(msg.sender, _spender, _value); return true; } function balanceOf(address _owner) - public - view - returns (uint) + public view + returns (uint256) { return balances[_owner]; } @@ -47,12 +92,9 @@ contract ERC20Token is Token { function allowance(address _owner, address _spender) public view - returns (uint) + returns (uint256) { return allowed[_owner][_spender]; } - - mapping (address => uint) balances; - mapping (address => mapping (address => uint)) allowed; - uint public totalSupply; } + |