saldo de token solidity web3

Uso un código como este para obtener mi saldo de Ethereum con web3

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="./web3.min.js"></script>
    <script type="text/javascript">
        window.addEventListener('load', function () {
            if (typeof web3 !== 'undefined') {
                console.log('Web3 Detected! ' + web3.currentProvider.constructor.name)
                window.web3 = new Web3(web3.currentProvider);
            } else {
                console.log('No Web3 Detected... using HTTP Provider')
                window.web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
            }
        })
        function getBalance() {
            var address, wei, balance
            address = document.getElementById("address").value
            try {
                web3.eth.getBalance(address, function (error, wei) {
                    if (!error) {
                        var balance = web3.fromWei(wei, 'ether');
                        document.getElementById("output").innerHTML = balance + " ETH";
                    }
                });
            } catch (err) {
                document.getElementById("output").innerHTML = err;
            }
        }
    </script>
</head>
<body>
    <h1>ETH Balance Fetcher</h1>
    <p>Enter your Ethereum Address:</p>
    <input type="text" size="50" id="address" />
    <button type="button" onClick="getBalance();">Get Balance</button>
    <br />
    <br />
    <div id="output"></div>
</body>
</html>

Pero no funciona para fichas.

Por ejemplo, creo ERC20 y la dirección del contrato es 0xa318948fd693281fa6a95a409b3efb79e228edec(lo agrego en metamask y muestra el saldo de mi token)

¿Cómo puedo leerlo con web3? gracias por ayudar

¿Qué quieres decir con "no funciona para tokens"?
0xa318948fd693281fa6a95a409b3efb79e228edec es mi dirección de token, tengo 100 tokens, muestra 0
Si alguien usa el código anterior, asegúrese de incluir human_standard_token_abi.js
Esta es una pregunta aparte, por favor hágalo así :P
Si tiene una nueva pregunta, hágala haciendo clic en el botón Preguntar . Incluya un enlace a esta pregunta si ayuda a proporcionar contexto. - De la revisión

Respuestas (1)

Está utilizando mi muestra ETH-Balance , que no funcionará si está buscando un token ERC20. Esta muestra está destinada a obtener el saldo de Ether en una dirección particular.

En su lugar, debe usar mi otra muestra, ERC-20-Token-Balance, donde puede ingresar tanto la dirección del contrato como la dirección donde desea verificar el saldo de los tokens.

Puedes probarlo en vivo aquí: http://shawntabrizi.com/ethbalance/erc20/

async function getERC20Balance() {
    var address, contractAddress, contractABI, tokenContract, decimals, balance, name, symbol, adjustedBalance
    address = document.getElementById("address").value
    contractAddress = document.getElementById("contractAddress").value
    contractABI = human_standard_token_abi

    tokenContract = web3.eth.contract(contractABI).at(contractAddress)

    decimals = promisify(cb => tokenContract.decimals(cb))
    balance = promisify(cb => tokenContract.balanceOf(address, cb))
    name = promisify(cb => tokenContract.name(cb))
    symbol = promisify(cb => tokenContract.symbol(cb))

    try {
        adjustedBalance = await balance / Math.pow(10, await decimals)
        document.getElementById("output2").innerHTML = adjustedBalance;
        document.getElementById("output2").innerHTML += " " + await symbol + " (" + await name + ")";
    } catch (error) {
        document.getElementById("output2").innerHTML = error;
    }
}
wow su trabajo! muchas gracias