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.

¿Cómo podemos convertir una dirección Ethereum (cadena de texto) al tipo de dirección de Solidity en Javascript para pasarlo como argumento a una función de contrato?

Tengo una función en un contrato inteligente de Solidity como esta:

function mint (address _recipient, string _name) public onlyOwner {

 uint256 newItemId = _tokenIds.current();
_safemint(_recipient, newItemId);

// etc

}

Intento pasar desde el frontend:

import { ethers } from "ethers";
let tmpdata = ethers.utils.getAddress("0x6f...etc"); //

let nftTxn = await connectedContract.mintNFT(tmpdata, "some string");
await nftTxn.wait();

Copio y pego las direcciones para asegurarme de que son correctas, pero esto arroja un error cada vez. Y creo que no funciona porque necesitaríamos un tipo de dirección como primer argumento, ¿verdad? No puedo averiguar cómo lograrlo, ¿alguien puede ayudarme y señalarme en la dirección correcta aquí?

La consola me muestra:

data: “0x08c379a00000000000000……etc”
message: “execution reverted: ERC721: mint to to zero address

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con pasar la dirección como una cadena en lugar de como un tipo de dirección real en la llamada a la función del contrato inteligente. Para solucionar esto, puedes cambiar la firma de la función a function mint (address payable _recipient, string memory _name) public onlyOwner. Aquí, estamos especificando el tipo de dirección como payable para indicar que puede recibir transferencias de ether y también estamos usando la palabra clave memory para el parámetro de tipo cadena que indica que solo se utiliza dentro de la función y no se almacena en el estado.

    Luego, en el frontend, puedes usar la función ethers.utils.getAddress para convertir la cadena de dirección en un tipo de dirección real y pasarla a la llamada de la función del contrato de esta manera:

    import { ethers } from "ethers";
    
    let recipientAddress = ethers.utils.getAddress("0x6f...etc");
    let nftTxn = await connectedContract.mint(recipientAddress, "alguna cadena");
    await nftTxn.wait();
    

    Esto debería resolver el problema y permitirte emitir el NFT a la dirección correcta.

Comments are closed.