Las billeteras informan 0 saldo para la dirección pero balanceOf es correcto

Dado este contrato usando Openzeppelin lib:

contract Token is StandardToken, Ownable {

    string public name = "";
    string public symbol = "";
    uint8 public decimals = 18;

    constructor(string _name, string _symbol, uint256 _supply, address creator) public {
        owner = creator;
        name = _name;
        symbol = _symbol;
        totalSupply_ = _supply;
        balances[owner] = totalSupply_;
        Transfer(0x0, owner, balances[owner]);
    }

trufa(rinkeby)> Token.at('0xdc190d1ac0355bc3b9b4bba96738484cd07690ea').balanceOf.call('0xD587f68bE865c8a4F34CC2a53150dE0DA5771957'); NúmeroGrande { s: 1, e: 2, c: [ 665 ] }

Metamask y la billetera Coinbase informan un saldo de 0 cuando lo agrega como un token personalizado con la dirección del propietario.

Al ejecutar la consola de trufas, el propietario es correcto y al ejecutar balanceOf informa el balance correcto.

¿Es un problema porque está asignado en el constructor y no hay transferencia tx? Entonces, ¿el problema está en las billeteras o en mi código?

El código pasa todas las pruebas de trufas para balances, etc. antes de implementarse.

Tenga en cuenta que este contrato se implementa a partir de un contrato "madre", por eso el propietario no es msg.sender, pero ¿por qué sería eso un problema?

Intenté actualizar con un evento de transferencia para que fuera compatible con el protocolo ERC20, pero no cambió nada.

¿Está seguro de que está comprobando el saldo del token y no el saldo de Ether? Además, OpenZeppelin no tiene una variable tokenURI_que yo sepa.
tokenURI es mi adición pero irrelevante. Sí, estoy comprobando el saldo de la consola de truffle (dirección) en el contrato y está por encima de 0. Luego lo agrego como un token personalizado tanto en Metamask como en Coinbase Wallet y el saldo es cero.
¿Qué red estás usando? ¿Supongo que estás seguro de que la red que usas es la misma? Una cosa que podría intentar es emitir una costumbre Eventen el constructor con valor de balances[owner]y ver qué le da.
¿Podría compartir truffle.js y el comando que usa para ejecutar la consola de truffle?
consola de trufas --network rinkeby. Entonces Token.at('dirección').balanceOf.call('dirección del propietario') informa el saldo correcto.
¿Quiere compartir la dirección del contrato y la dirección del propietario para que podamos intentarlo nosotros mismos?
Claro que sí. en rinkeby rinkeby.etherscan.io/address/… y la dirección del propietario es 0xD587f68bE865c8a4F34CC2a53150dE0DA5771957 y también hay un evento emitido en el constructor.truffle(rinkeby)> Token.at('0xdc190d1ac0355bc3b9b4bba96738484cd07690ea').balanceOf.call('0xD587f68bE865c8a4F34CC2a53150dE0DA5771957'); BigNumber { s: 1, e: 2, c: [ 665 ] }
para ser honesto, todavía no está claro cómo conectas truffle a rinkeby, porque truffle no tiene configuraciones predefinidas, solo hay identificaciones de red definidas. ¿podrías compartir el archivo de configuración de trufa?
Etherscan muestra un saldo distinto de cero rinkeby.etherscan.io/token/… . Es posible que etherscan no actualice los saldos de tokens para las redes de prueba con frecuencia.
@Ismael eso es lo que me está volviendo loco. Etherscan es correcto. Monedero Coinbase y Metamask muestran 0.
@Aquila, este no es el punto ya que Etherscan también informa el saldo correctamente, pero aquí tienesrinkeby: { provider: function() { return new HDWalletProvider( mnemonic, "https://rinkeby.infura.io/v3/f0eca74029fc435a9709d267f3b8caca" ); },
@arisalexis El monto transferido es muy pequeño, es posible que Metamask no muestre un valor tan pequeño. No puedo comprobar coinbase.
@Ismael Actualicé una respuesta porque al final tenías razón. Gracias
mi saldo es 2,277,013,208.347918119101191473 eMax, pero mi Valor es $0 en MetaMask, que puedo hacer? Gracias

Respuestas (1)

Resulta que invocar al constructor anterior con un número normal de web3js 1.0 convierte uint initial_supply en un número mucho más pequeño.

Llamarlo con web3.utils.toWei(number,"ether")está funcionando.

Metamask y la billetera coinbase informaban 0 porque el número era demasiado pequeño.