El contrato devuelve totalSupply desde Solidity como BigNumber, pero es necesario validarla sin los decimales.
Solidity devuelve totalSupply() como 1 billón + los 9 decimales, es decir, 1 billón concatenado con 9 ceros.
Entonces, cuando intento hacer una prueba de mocha para verificar que el suministro sea de 1T, falla porque el número tiene 9 ceros extra al final y no tiene punto decimal.
Entonces, ¿cómo cambiar BigNumber { value: “1000000000000000000000” } a 1000000000000 para que mi prueba pase?
Esta es mi prueba que falla:
it('Should correctly set totalSupply to: 1T', async () => {
const totalSupply = await hardhatToken.totalSupply();
var tokenBalance = totalSupply.toString();
console.log(tokenBalance);
console.log(ethers.BigNumber.from(totalSupply, 9));
expect(totalSupply).should.be.bignumber.equal(1000000000000);
});
Tengo la biblioteca BN.js pero ¡no puedo entender el proceso! Me gustaría hacerlo correctamente sin simplemente eliminar los últimos 9 dígitos, ya que habrá otras pruebas que escribir con problemas similares.
davy.ai
Para convertir el valor BigNumber de Solidity a 1 billón, simplemente puedes dividir el valor por 10^9. Aquí tienes una versión actualizada de tu prueba para reflejar esta conversión:
Esto debería convertir el valor de Solidity al número correcto de 1 billón, haciendo que tu prueba pase.