Saltar al contenido
0%

Cómo crear un NFT con ethers.js

Última actualización: 30 de agosto de 20213 min de lectura

Este tutorial describe cómo acuñar un NFT en la blockchain de Ethereum usando Ethers mediante la librería ethers.js, y nuestro contrato inteligente de la Parte I: How to Create an NFT. También exploraremos pruebas básicas.

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

Además, no dejes de revisar el resto de nuestra serie de tutoriales de NFT:

En otro tutorial, aprendimos a acuñar un NFT usando Web3 y la librería de contratos de OpenZeppelin. En este ejercicio, te guiaremos a través de una implementación alternativa usando la versión 4 de la librería de OpenZeppelin, así como la librería de Ethereum Ethers.js en lugar de Web3.

También cubriremos los fundamentos de probar tu contrato con Hardhat y Waffle. Para este tutorial estoy usando Yarn, pero puedes usar npm/npx si lo prefieres.

Por último, usaremos TypeScript. Esto está bastante bien documentado, así que no lo cubriremos aquí.

En todos los demás aspectos, este tutorial funciona igual que la versión con Web3, incluyendo herramientas como Pinata e IPFS.

Un recordatorio rápido

Como recordatorio, "acuñar un NFT" es el acto de publicar una instancia única de tu token ERC721 en la blockchain. Este tutorial asume que ya desplegaste con éxito un contrato inteligente en la red Ropsten en la Parte I de la serie de tutoriales de NFT, lo cual incluye instalar Ethers.

Paso 1: crea tu contrato en Solidity

OpenZeppelin es una librería para el desarrollo seguro de contratos inteligentes. Simplemente heredas sus implementaciones de estándares populares como ERC20 o ERC721, y extiendes el comportamiento según tus necesidades. Vamos a colocar este archivo en contracts/MyNFT.sol.

Paso 2: crea tareas de Hardhat para desplegar nuestro contrato y acuñar NFT's

Crea el archivo tasks/nft.ts con lo siguiente:

Paso 3: crea los helpers

Notarás que nuestras tareas importaron algunos helpers. Aquí están.

contract.ts

env.ts

provider.ts

Nota que la función final getProvider() usa la red ropsten. Este argumento es opcional y por defecto usa "homestead" si se omite. Nosotros usamos Alchemy, por supuesto, pero hay varias alternativas soportadas.

wallet.ts

Paso 4: crea las pruebas

En tu directorio de test, crea estos archivos. Ten en cuenta que estas pruebas no son exhaustivas. Prueban un pequeño subconjunto de la funcionalidad de ERC721 que ofrece la librería de OpenZeppelin, y están pensadas para darte las piezas básicas para crear pruebas más robustas.

test/MyNFT.spec.ts (unit tests)

tasks.spec.ts (integration specs)

test-helpers.ts Ten en cuenta que esto requiere las librerías de NPM importadas, incluyendo sinon, chai y sinon-chai. La llamada a sinon.restore() es necesaria debido al uso de stubbing.

Paso 5: configuración

Aquí está nuestro hardhat.config.ts bastante minimalista.

Nota el condicional para invocar dotenv solo si no estamos ejecutando pruebas. Puede que no quieras ejecutar esto en producción, pero ten la seguridad de que dotenv ignorará silenciosamente esto si el archivo .env no está presente.

Ejecutando nuestras tareas

Ahora que hemos puesto estos archivos en su lugar, podemos ejecutar hardhat para ver nuestras tareas (excluyendo las tareas integradas por brevedad).

¿Olvidaste los argumentos de tu tarea? No hay problema.

Ejecutando nuestras pruebas

Para ejecutar nuestras pruebas, ejecutamos hardhat test.

Resumen

En este tutorial, hemos creado una base sólida para una infraestructura de NFT bien probada basada en Solidity. La billetera proporcionada por waffle.provider.getWallets() se vincula a una cuenta local simulada de Hardhat Network que convenientemente viene precargada con un saldo de eth que podemos usar para financiar nuestras transacciones de prueba.

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.