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.

prueba de casco de seguridad: no es una función

Estoy probando mis contratos en la red de Hardhat con una bifurcación de BSC.

Estoy desplegando mi contrato de token que tiene una función de creación:

// @dev Crea `_amount` tokens para `_to`. Solo puede ser llamado por el propietario (MasterChef).
function mint(address _to, uint256 _amount) public onlyOwner {
    _mint(_to, _amount);
    _moveDelegates(address(0), _delegates[_to], _amount);
}

Luego lo despliego en una prueba usando > npx hardhat test, esto ejecutará pruebas de este código:

...
it("Should deploy", async () => {
        token = await Token.deploy();
        await token.deployed();
        console.debug(`\t\t\tDirección del contrato Token: ${cyan}`, token.address);
        const suministro = await token.totalSupply()
        console.debug(`\t\t\tsuministro total del Token: ${yellow}`, suministro);
        await token.mint(owner.address, web3.utils.toWei("1000", 'ether'))
        console.debug(`\t\t\tBalance del propietario del Token: ${cyan}`, token.balanceOf(owner.address));
 });
 ...

La prueba muestra correctamente los primeros 2 console debug:

Dirección del contrato Token: 0x5FbDB2315678afecb367f032d93F642f64180aa3
suministro total del Token: 0

También funciona token.totalSupply(), por lo que el token se desplegó correctamente. Sin embargo, cuando tiene que llamar a token.mint(), aparece este error:

 TypeError: token.mint no es una función
  en Context.<anonymous> (test/general.js:102:21)
  en runMicrotasks (<anonymous>)
  en processTicksAndRejections (internal/process/task_queues.js:95:5)

He intentado limpiar todos los archivos generados ejecutando > npx hardhat clean y eliminé toda la caché, pero aún tengo el error.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la función mint no es reconocida como una función en el script de prueba. Una posible razón podría ser que el ABI del contrato no se carga correctamente en el script de prueba.

    Puedes intentar agregar la siguiente línea de código en tu script de prueba antes de llamar a la función mint:

    const tokenContract = await ethers.getContractAt("Token", token.address);
    

    Esto cargará el ABI del contrato y creará una instancia del contrato, con la cual luego podrás llamar a la función mint:

    await tokenContract.mint(owner.address, web3.utils.toWei("1000", 'ether'));
    

    Asegúrate también de importar el módulo ethers en tu script de prueba:

    const { ethers } = require("hardhat");
    

    Esto debería resolver el problema y permitirte llamar a la función mint en tu script de prueba.

Comments are closed.