Saltar al contenido
0%

Cómo crear un NFT

Última actualización: 7 de octubre de 20218 min de lectura

Este tutorial te guiará a través de la escritura y el despliegue de un contrato inteligente de Token No Fungible (ERC721) usando Ethereum e Inter Planetary File System (IPFS).

Tiempo estimado para completar esta guía: ~15 minutos

Incluso si has estado viviendo debajo de una roca, habrás notado que todos los medios de noticias importantes han estado cubriendo el auge de los NFTs.

Con los NFTs llevando blockchain a la vista del público, ahora es una excelente oportunidad para entender el fenómeno tú mismo publicando tu propio NFT (Token ERC-721) en la blockchain de Ethereum.

En este tutorial, recorreremos la creación y el despliegue de un contrato inteligente ERC-721 en la red de prueba Sepolia usando Metamask, Solidity, Hardhat, Pinata y Alchemy (no te preocupes si todavía no entiendes qué significa todo esto; lo explicaremos). En la Parte II de este tutorial, veremos cómo podemos usar nuestro contrato inteligente para mintear un NFT, y en la Parte III cubriremos cómo ver tu NFT en Metamask.

Y por supuesto, si tienes preguntas en cualquier momento, visita el centro de soporte de Alchemy.

Paso 1: conéctate a la red de Ethereum

Hay muchas formas de hacer solicitudes a la blockchain de Ethereum, pero para simplificar las cosas, usaremos una cuenta gratuita en Alchemy, una plataforma y API para desarrolladores de blockchain que nos permite comunicarnos con la cadena de Ethereum sin tener que correr nuestros propios nodos.

En este tutorial, también aprovecharemos las herramientas de desarrollo de Alchemy para monitoreo y análisis, para entender qué está pasando por debajo en el despliegue de nuestro contrato inteligente. Si todavía no tienes una cuenta de Alchemy, puedes registrarte gratis aquí.

Paso 2: crea tu app (y tu API key)

Una vez que hayas creado una cuenta de Alchemy, puedes generar una API key creando una app. Esto nos permitirá hacer solicitudes a la red de prueba Sepolia. Consulta esta guía si tienes curiosidad por aprender más sobre las redes de prueba.

  1. Navega a la página "Create App" en tu Alchemy Dashboard pasando el mouse sobre "Apps" en la barra de navegación y haciendo clic en "Create App"
Dashboard de Alchemy: creación de una nueva app desde el menú Apps
Crear una nueva app
  1. Nombra tu app (nosotros elegimos "My First NFT!"), ofrece una breve descripción, selecciona "Staging" para el Environment (usado para llevar el registro de tus apps), y elige "Sepolia" para tu red.
Pantalla antigua de creación de apps del dashboard de Alchemy con selector de red de prueba
Nombra y describe tu app
  1. Haz clic en "Create app" y listo. Tu app debería aparecer en la tabla de abajo.

Paso 3: crea una cuenta de Ethereum (dirección)

Necesitamos una cuenta de Ethereum para enviar y recibir transacciones. Para este tutorial, usaremos Metamask, una billetera virtual en el navegador usada para manejar tu dirección de cuenta de Ethereum. Si quieres entender más sobre cómo funcionan las transacciones en Ethereum, consulta esta página de la fundación Ethereum.

Puedes descargar y crear una cuenta de Metamask gratis aquí. Cuando estés creando una cuenta, o si ya tienes una, asegúrate de cambiar a la red de prueba Sepolia (para no estar lidiando con dinero real).

Pantalla antigua de configuración de MetaMask con el selector de red de prueba
Descarga y crea una cuenta de Metamask

Paso 4: agrega ether desde un faucet

Para poder desplegar nuestro contrato inteligente en la red de prueba, necesitaremos algo de Eth falso. Para conseguir Eth puedes ir al faucet de Sepolia, ingresar tu dirección de cuenta de Sepolia, y solicitar Eth de Sepolia. ¡Deberías ver Eth en tu cuenta de Metamask poco después!

Paso 5: revisa tu balance

Para verificar que nuestro balance esté ahí, hagamos una solicitud eth_getBalance usando la herramienta composer de Alchemy. Esto retornará la cantidad de Eth en nuestra billetera. Después de ingresar tu dirección de cuenta de Metamask y hacer clic en "Send Request", deberías ver una respuesta como esta:

{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"}

NOTA: Este resultado está en wei, no en eth. Wei se usa como la denominación más pequeña de ether. La conversión de wei a eth es: 1 eth = 10¹⁸ wei. Entonces si convertimos 0xde0b6b3a7640000 a decimal obtenemos 110¹⁸ lo cual equivale a 1 eth.

¡Uf! ¡Todo nuestro dinero falso está ahí! 🤑

Paso 6: inicializa nuestro proyecto

Primero, necesitaremos crear una carpeta para nuestro proyecto. Navega a tu línea de comandos y escribe:

Ahora que estamos dentro de nuestra carpeta de proyecto, usaremos npm init para inicializar el proyecto. Si todavía no tienes npm instalado, sigue estas instrucciones (también necesitaremos Node.js, ¡así que descárgalo también!).

No importa mucho cómo respondas las preguntas de instalación, aquí está cómo lo hicimos nosotros como referencia:

Aprueba el package.json, ¡y listo!

Paso 7: descarga Hardhat

Hardhat es un entorno de desarrollo para compilar, desplegar, probar y depurar tu software de Ethereum. Ayuda a los desarrolladores al construir contratos inteligentes y apps localmente antes de desplegar a la cadena en vivo.

Navega a la terminal y asegúrate de estar dentro de la carpeta del proyecto my-nft, luego ejecuta:

Consulta esta página para más detalles sobre las instrucciones de instalación.

Paso 8: crea el proyecto de Hardhat

Dentro de nuestra carpeta de proyecto ejecuta:

Deberías ver entonces un mensaje de bienvenida y la opción de seleccionar qué quieres hacer. Selecciona "create an empty hardhat.config.js":

Esto generará un archivo hardhat.config.js para nosotros, que es donde especificaremos toda la configuración de nuestro proyecto (en el paso 13).

Paso 9: agrega carpetas de proyecto

Para mantener nuestro proyecto organizado, crearemos dos carpetas nuevas. Navega al directorio raíz de tu proyecto en tu línea de comandos y escribe:

contracts/ es donde mantendremos el código de nuestro contrato inteligente NFT

scripts/ es donde mantendremos los scripts para desplegar e interactuar con nuestro contrato inteligente

Paso 10: escribe nuestro contrato

Ahora que nuestro entorno está configurado, vamos a lo más emocionante: escribir el código de nuestro contrato inteligente.

Abre el proyecto my-nft en tu editor favorito (a nosotros nos gusta VSCode). Los contratos inteligentes se escriben en un lenguaje llamado Solidity, que es el que usaremos para escribir nuestro contrato inteligente MyNFT.sol.‌

  1. Navega a la carpeta "contracts" y crea un nuevo archivo llamado MyNFT.sol

  2. Abajo está el código de nuestro contrato inteligente NFT, que está basado en la implementación de ERC721 de la librería OpenZeppelin. Copia y pega el contenido de abajo en tu archivo MyNFT.sol.

NOTA: Si quieres asociar un precio al NFT a través del contrato inteligente, consulta este tutorial.

  1. Como estamos heredando clases de la librería de contratos de OpenZepplin, en tu línea de comandos ejecuta lo siguiente para instalar la librería en nuestra carpeta:

textnpm install @openzeppelin/contracts@3.1.0-solc-0.7

Entonces, ¿qué hace exactamente este código? Repasémoslo línea por línea.

En las líneas 5-7, nuestro código hereda tres clases de contrato inteligente de OpenZepplin:

  • @openzeppelin/contracts/token/ERC721/ERC721.sol contiene la implementación del estándar ERC721, que nuestro contrato inteligente NFT heredará. (Para ser un NFT válido, tu contrato inteligente debe implementar todos los métodos del estándar ERC721.) Para aprender más sobre las funciones ERC721 heredadas, consulta la definición de la interfaz aquí.

  • @openzeppelin/contracts/utils/Counters.sol provee contadores que solo pueden ser incrementados o decrementados de a uno. Nuestro contrato inteligente usa un contador para llevar la cuenta del número total de NFTs minteados y asignar el ID único a nuestro nuevo NFT. Cada NFT minteado usando un contrato inteligente debe tener asignado un ID único —aquí nuestro ID único simplemente está determinado por el número total de NFTs en existencia. Por ejemplo, el primer NFT que minteamos con nuestro contrato inteligente tiene un ID de "1," nuestro segundo NFT tiene un ID de "2," etc.

  • @openzeppelin/contracts/access/Ownable.sol configura control de acceso en nuestro contrato inteligente, de forma que solo el dueño del contrato inteligente (tú) puede mintear NFTs. Nota que incluir control de acceso es enteramente una preferencia. Si quieres que cualquiera pueda mintear un NFT usando tu contrato inteligente, elimina la palabra Ownable en la línea 10 y onlyOwner en la línea 17.

En las líneas 10-28, tenemos nuestro contrato inteligente NFT personalizado, el cual es sorprendentemente corto —solo contiene un contador, un constructor, ¡y una sola función! Esto es gracias a nuestros contratos heredados de OpenZepplin, que implementan la mayoría de los métodos que necesitamos para crear un NFT, como ownerOf (retorna el dueño del NFT) y transferFrom (transfiere la propiedad del NFT).

En la línea 14, notarás que pasamos 2 strings, "MyNFT" y "NFT" al constructor de ERC721. La primera variable es el nombre del contrato inteligente, y la segunda es su símbolo. Puedes nombrar cada una de estas variables como quieras.

Finalmente, empezando en la línea 16, tenemos nuestra función mintNFT() que nos permite mintear un NFT. Notarás que esta función recibe dos variables:

  • address recipient especifica la dirección que recibirá tu NFT recién minteado

  • string memory tokenURI es un string que debería resolver a un documento JSON que describe los metadatos del NFT. Los metadatos de un NFT son realmente lo que le da vida, permitiéndole tener propiedades adicionales, como un nombre, descripción, imagen, y otros atributos. En la parte 2 de este tutorial, describiremos cómo configurar estos metadatos.

mintNFT llama a algunos métodos de la librería ERC721 heredada, y finalmente retorna un número que representa el ID del NFT recién minteado.

Paso 11: conecta MetaMask y Alchemy a tu proyecto

Ahora que hemos creado una billetera de Metamask, una cuenta de Alchemy, y escrito nuestro contrato inteligente, es hora de conectar los tres.

Cada transacción enviada desde tu billetera virtual requiere una firma usando tu clave privada única. Para darle a nuestro programa este permiso, podemos guardar de forma segura nuestra clave privada (y nuestra API key de Alchemy) en un archivo de entorno.

Para aprender más sobre el envío de transacciones, consulta este tutorial sobre el envío de transacciones usando web3.

Primero, instala el paquete dotenv en el directorio de tu proyecto:

Luego, crea un archivo .env en el directorio raíz de nuestro proyecto, y agrégale tu clave privada de Metamask y la URL HTTP de la API de Alchemy.

NOTA: Tu archivo .env debe llamarse .env. No cambies el nombre a xx.env

  • Sigue estas instrucciones para exportar tu clave privada desde Metamask

  • Ve abajo para obtener la URL HTTP de la API de Alchemy y cópiala a tu portapapeles

Dashboard de Alchemy: copiando la URL HTTP de la API de la app para el archivo .env
Copia tu API key de Alchemy

Tu .env debería verse así:

Paso 12: instala Ethers.js

Ethers.js es una librería que facilita interactuar y hacer solicitudes a Ethereum, envolviendo los métodos JSON-RPC estándar con métodos más amigables para el usuario.

Hardhat hace que sea muy fácil integrar Plugins para herramientas adicionales y funcionalidad extendida. Aprovecharemos el plugin de Ethers para el despliegue de contratos (Ethers.js tiene métodos de despliegue de contratos muy limpios).

En el directorio de tu proyecto escribe:

También necesitaremos ethers en nuestro hardhat.config.js en el siguiente paso.

Paso 13: actualiza hardhat.config.js

Hemos agregado varias dependencias y plugins hasta ahora, ahora necesitamos actualizar hardhat.config.js para que nuestro proyecto sepa de todos ellos.

Actualiza tu hardhat.config.js para que se vea así:

Paso 14: compila nuestro contrato

Para asegurarnos de que todo está funcionando hasta ahora, compilemos nuestro contrato. La tarea compile es una de las tareas integradas de hardhat.

Desde la línea de comandos ejecuta:

Puede que recibas una advertencia sobre que no se proporcionó el identificador de licencia SPDX en el archivo fuente, pero no hay que preocuparse por eso —¡esperamos que todo lo demás se vea bien! Si no, puedes abrir un ticket de soporte desde el Alchemy Dashboard.

Paso 15: escribe nuestro script de despliegue

Ahora que nuestro contrato está escrito y nuestro archivo de configuración está listo, es hora de escribir el script de despliegue de nuestro contrato.

Navega a la carpeta scripts/ y crea un nuevo archivo llamado deploy.js, agregándole el siguiente contenido:

Hardhat hace un trabajo increíble explicando qué hace cada una de estas líneas de código en su tutorial de Contracts, hemos adoptado sus explicaciones aquí.

Un ContractFactory en ethers.js es una abstracción usada para desplegar nuevos contratos inteligentes, así que MyNFT aquí es una factory para instancias de nuestro contrato NFT. Al usar el plugin hardhat-ethers, las instancias de ContractFactory y Contract están conectadas al primer signer por defecto.

Llamar a deploy() en un ContractFactory iniciará el despliegue, y retornará una Promise que se resuelve a un Contract. Este es el objeto que tiene un método por cada una de las funciones de nuestro contrato inteligente.

Paso 16: despliega nuestro contrato

¡Finalmente estamos listos para desplegar nuestro contrato inteligente! Navega de vuelta a la raíz del directorio de tu proyecto, y en la línea de comandos ejecuta:

Deberías ver entonces algo como esto:

Si vamos a Sepolia Etherscan y buscamos la dirección de nuestro contrato, deberíamos poder ver que se ha desplegado exitosamente. La transacción se verá algo así:

Vista de transacción en Etherscan confirmando que el smart contract del NFT se desplegó correctamente
Dirección desplegada correctamente

La dirección From debería coincidir con tu dirección de cuenta de Metamask y el campo To dirá "Contract Creation." Si hacemos clic en la transacción, veremos la dirección de nuestro contrato en el campo To:

¡Siiii! Acabas de desplegar tu smart contract de NFT en la cadena de Ethereum 🎉
¡Siiii! Acabas de desplegar tu smart contract de NFT en la cadena de Ethereum 🎉

Para entender qué está pasando por debajo, naveguemos a la pestaña Explorer en nuestro Alchemy dashboard. Si tienes múltiples apps de Alchemy, asegúrate de filtrar por app y seleccionar "MyNFT".

Pestaña Explorer del dashboard de Alchemy con las llamadas JSON-RPC hechas durante el despliegue del contrato
Ve a la pestaña Explorer en nuestro dashboard de Alchemy

Aquí verás varias llamadas JSON-RPC que Hardhat/Ethers hizo por nosotros por debajo cuando llamamos a la función .deploy().

Dos importantes para destacar aquí son eth_sendRawTransaction, que es la solicitud para efectivamente escribir nuestro contrato inteligente en la cadena de Sepolia, y eth_getTransactionByHash que es una solicitud para leer información sobre nuestra transacción dado el hash (un patrón típico al enviar transacciones).

Para aprender más sobre el envío de transacciones, consulta este tutorial sobre el envío de transacciones usando Web3.

Eso es todo para la Parte I de este tutorial. En la Parte II, interactuaremos de verdad con nuestro contrato inteligente minteando un NFT, y en la Parte III explicaremos cómo ver tu NFT en Metamask. 🤑

Boletín de Alchemy

Entérate primero de los lanzamientos

Suscríbete a nuestro boletín

Recibe las últimas actualizaciones de productos y recursos de Alchemy

A
O
D
+
Más de 80,000 suscriptores

Al ingresar tu correo electrónico, aceptas recibir nuestras comunicaciones de marketing y actualizaciones de productos. Reconoces que Alchemy procesa la información que recibimos de acuerdo con nuestro Aviso de Privacidad. Puedes cancelar tu suscripción en cualquier momento.