¿Por qué se cambia el valor del token en Ethereum?

He creado el token ERC20 con 18 decimales. Desde web3 (front-end de la aplicación) cuando transfiero 100 tokens, en etherscan muestra 0.0000000000000001. Cuando llamo para obtener el saldo, en la interfaz de usuario se muestran 100 fichas. ¿Cómo puedo arreglar esto?

Firma del método : función de transferencia (dirección _a, uint256 _valor) devoluciones públicas (bool) { }

El siguiente es un enlace de transacción para referencia.

https://kovan.etherscan.io/tx/0x7b50a2f1a013a0b15eb702f99d09d9a1c16a39bfa179329e246b6ba5b2318b12

Respuestas (1)

Cuando llamo para obtener el saldo, en la interfaz de usuario se muestran 100 fichas.

No, le muestra 100 unidades base de su token, y dado que la resolución decimal de su token es 18, esto equivale a 100 / 10 ^ 18 (0.0000000000000001) tokens.


Para arreglar esto en su aplicación basada en web3, reemplace 100con "100e18".

Si tienes decimalsa mano, entonces también puedes usar:

`100e${decimals}`

De manera más general, usted debe:

  • Tome la entrada xque recibe del usuario y pase a la función de contrato:
`${x}e+${decimals}`
  • Tome el resultado xque recibe de la función de contrato y páselo al usuario:
`${x}e-${decimals}`
Nota al margen para futuros lectores: Truffle 4.x, que se basa en BigNumber, podría manejar cosas como "100e18". Truffle 5.x, que se basa en BN, no puede. En su lugar, debe hacer algo como new BN(100).mul(new BN(10).pow(new BN(18))), o simplemente new BN(10).pow(new BN(20)).