El recuento de tokens de Crowdsale no se reduce, incluso el usuario obtiene los tokens en su cuenta

Creé 100 millones de tokens y creé un contrato para crowdsale en la red de prueba

Si el usuario envía 1 ether usando la dirección del contrato, puedo recibir 1 ether y enviar 1000 tokens al usuario que envía a través de metamask.

https://ropsten.etherscan.io/address/0x44db21d5cc6a773ec7ec68d5059e88325cc2a5a6

Cuando el usuario envía 1 ether, obtengo 1 ether en mi cuenta y puedo enviar 1000 tokens al usuario, pero en mi saldo, 1000 tokens no se redujeron en mi cuenta

¿Qué función debo usar para actualizar el saldo de tokens de crowdsale en admin en metamask?

Sin el código fuente del contrato es imposible saberlo, pero generalmente si los tokens se acuñan en la dirección de crowdsale, la ejecución token.transfer(msg.sender, token_amount);es el camino.
A veces, cambiar la red MetaMask a cualquiera y luego volver a cambiarla me ayuda a ver el saldo de token relevante.

Respuestas (3)

MetaMask actualiza los saldos de tokens en cada bloque, por lo que si sus saldos no se actualizan, probablemente sea un problema con su contrato inteligente, no con MetaMask.

La función de transferencia de tokens es responsable de disminuir el saldo del remitente y aumentar el saldo del destinatario. Verifique el código de esta función o compártalo con su pregunta.

En caso de que haya un error en su código, una función de transferencia de token ERC20 típica que usa la biblioteca SafeMath se ve así:

function transfer(address _to, uint256 _value) public returns (bool success) {
    require(balances[msg.sender] >= _value && _to != 0x0);
    balances[_to] = balances[_to].add(_value);
    balances[msg.sender] = balances[msg.sender].sub(_value);
    Transfer(msg.sender, _to, _value);
    return true;
}