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
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 100
con "100e18"
.
Si tienes decimals
a mano, entonces también puedes usar:
`100e${decimals}`
De manera más general, usted debe:
x
que recibe del usuario y pase a la función de contrato:`${x}e+${decimals}`
x
que recibe de la función de contrato y páselo al usuario:`${x}e-${decimals}`
buena vibración
BigNumber
, podría manejar cosas como"100e18"
. Truffle 5.x, que se basa enBN
, no puede. En su lugar, debe hacer algo comonew BN(100).mul(new BN(10).pow(new BN(18)))
, o simplementenew BN(10).pow(new BN(20))
.