pragma solidity ^0.4.23; import 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol'; import "openzeppelin-solidity/contracts/math/SafeMath.sol"; contract StandardERC20Base is ERC20 { using SafeMath for uint256; uint256 _supply; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _approvals; function totalSupply() public view returns (uint) { return _supply; } function balanceOf(address src) public view returns (uint) { return _balances[src]; } function allowance(address src, address guy) public view returns (uint) { return _approvals[src][guy]; } function transfer(address dst, uint wad) public returns (bool) { return transferFrom(msg.sender, dst, wad); } function transferFrom(address src, address dst, uint wad) public returns (bool) { if (src != msg.sender) { _approvals[src][msg.sender] = _approvals[src][msg.sender].sub(wad); } _balances[src] = _balances[src].sub(wad); _balances[dst] = _balances[dst].add(wad); emit Transfer(src, dst, wad); return true; } function approve(address guy, uint wad) public returns (bool) { _approvals[msg.sender][guy] = wad; emit Approval(msg.sender, guy, wad); return true; } }