¿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
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 comopayable
para indicar que puede recibir transferencias de ether y también estamos usando la palabra clavememory
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:Esto debería resolver el problema y permitirte emitir el NFT a la dirección correcta.