es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    it('Debería establecer correctamente totalSupply en: 1T', async () => {
      const totalSupply = await hardhatToken.totalSupply();
      const totalSupplyInTrillion = totalSupply.div(10 ** 9); // Dividir por 10^9 para convertir a 1T
      expect(totalSupplyInTrillion).to.be.bignumber.equal(1000000000000);
    });
    

    Esto debería convertir el valor de Solidity al número correcto de 1 billón, haciendo que tu prueba pase.

Comments are closed.