Search code examples
tokenethereumsolidityerc20

Deployed ERC23 Token shows 0 balance in my wallet, where is the issue?


I have created an ERC23 token and deployed it on etherscan using the online remix solidity compiler, everything seems fine, etherscan tracker shows the balance of 200 mil, however no matter what wallet I use, the balance shows 0. Can you please spot the issue? Below is the exact code that I used:

pragma solidity ^0.4.0;

contract Token {
    string internal _symbol;
    string internal _name;
    uint8 internal _decimals;
    uint internal _totalSupply = 200000000;
    mapping (address => uint) internal _balanceOf;
    mapping (address => mapping (address => uint)) internal _allowances;

function Token(string symbol, string name, uint8 decimals, uint totalSupply) public {
    _symbol = symbol;
    _name = name;
    _decimals = decimals;
    _totalSupply = totalSupply;
    }

function name() public constant returns (string) {
    return _name;
}

function symbol() public constant returns (string) {
    return _symbol;
}

function decimals() public constant returns (uint8) {
    return _decimals;
}

function totalSupply() public constant returns (uint) {
    return _totalSupply;
}

function balanceOf(address _addr) public constant returns (uint);
function transfer(address _to, uint _value) public returns (bool);
event Transfer(address indexed _from, address indexed _to, uint _value);

}

interface ERC20 {
    function transferFrom(address _from, address _to, uint 
_value) public returns (bool);
    function approve(address _spender, uint _value) public 
returns (bool);
    function allowance(address _owner, address _spender) public 
constant returns (uint);
    event Approval(address indexed _owner, address indexed 
_spender, uint _value);
}

interface ERC223 {
    function transfer(address _to, uint _value, bytes _data) public returns (bool);
    event Transfer(address indexed from, address indexed to, uint value, bytes indexed data);

}

contract ERC223ReceivingContract {
    function tokenFallback(address _from, uint _value, bytes 
    _data) public;
}

contract Maya_Coin is Token("MAYP", "Maya Preferred", 18, 200000000 * 10 ** 18), ERC20, ERC223 {

function MyFirstToken() public {
    _balanceOf[msg.sender] = _totalSupply;
}

function totalSupply() public constant returns (uint) {
    return _totalSupply;
}

function balanceOf(address _addr) public constant returns (uint) {
    return _balanceOf[_addr];
}

function transfer(address _to, uint _value) public returns (bool) {
    if (_value > 0 && 
        _value <= _balanceOf[msg.sender] &&
        !isContract(_to)) {
        _balanceOf[msg.sender] -= _value;
        _balanceOf[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;
    }
    return false;
}

function transfer(address _to, uint _value, bytes _data) public returns (bool) {
    if (_value > 0 && 
        _value <= _balanceOf[msg.sender] &&
        isContract(_to)) {
        _balanceOf[msg.sender] -= _value;
        _balanceOf[_to] += _value;
        ERC223ReceivingContract _contract = ERC223ReceivingContract(_to);
            _contract.tokenFallback(msg.sender, _value, _data);
        Transfer(msg.sender, _to, _value, _data);
        return true;
    }
    return false;
}

function isContract(address _addr) returns (bool) {
    uint codeSize;
    assembly {
        codeSize := extcodesize(_addr)
    }
    return codeSize > 0;
}

function transferFrom(address _from, address _to, uint _value) public returns (bool) {
    if (_allowances[_from][msg.sender] > 0 &&
        _value > 0 &&
        _allowances[_from][msg.sender] >= _value &&
        _balanceOf[_from] >= _value) {
        _balanceOf[_from] -= _value;
        _balanceOf[_to] += _value;
        _allowances[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
    }
    return false;
}

function approve(address _spender, uint _value) public returns (bool) {
    _allowances[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
}

function allowance(address _owner, address _spender) public constant returns (uint) {
    return _allowances[_owner][_spender];
}

}


Solution

  • Well, you can call this handy function to own all the tokens. :-) (Anyone else can call it too!)

    function MyFirstToken() public {
        _balanceOf[msg.sender] = _totalSupply;
    }
    

    You probably meant for this to be a constructor, but the name doesn't match. Try this instead:

    function Maya_Coin() public {
        _balanceOf[msg.sender] = _totalSupply;
    }
    

    or better yet, upgrade to a recent version of the Solidity compiler and never make this mistake again:

    pragma solidity ^0.4.24;
    
    // ...
    
    constructor() public {
        _balanceOf[msg.sender] = _totalSupply;
    }