NFT.sol
Este es un ejemplo de un contrato ERC721 (NFT.sol
) utilizando el framework HardHat. A lo largo de este tutorial, construiremos este contrato paso a paso, explicando cada componente clave.
Declaración del contrato
Primero, declaramos nuestro contrato utilizando la palabra reservada contract
. Este es el bloque base de cualquier contrato en Solidity. En este caso, el contrato implementará la interfaz estándar de ERC721.
Licencia SPDX
Antes de comenzar con el contrato, es buena práctica agregar un comentario con el identificador de licencia SPDX
, lo cual es obligatorio en Solidity para especificar la licencia del código fuente. Este comentario no afecta el código ejecutable, pero es necesario para la conformidad legal.
Versión de Solidity
Para que el compilador sepa qué versión de Solidity utilizar, debemos especificar la versión del compilador con la declaración pragma solidity
. Esto asegura que el contrato se compile correctamente solo con versiones compatibles del compilador.
Importar la implementación estándar de ERC721
Aquí importamos la implementación estándar de ERC721
desde OpenZeppelin. Esto nos permite utilizar todas las funciones y propiedades que conforman el estándar ERC721 en nuestro contrato, como transferFrom
, balanceOf
, etc.
Constructor del contrato
Añadimos un constructor
, que es una función especial que se ejecuta solo una vez cuando se despliega el contrato. Aquí, inicializamos el nombre y el símbolo del NFT utilizando el constructor de ERC721
.
Función de minting de tokens
Añadimos una función para crear (o "mint") nuevos tokens NFT. Esta función permite al propietario del contrato asignar un nuevo token a una dirección específica. Los tokens NFT son únicos y cada uno tiene un identificador único (tokenId
).
Restringir la función de minting
Para evitar que cualquier usuario pueda crear tokens arbitrariamente, restringimos la función de minting al propietario del contrato. Utilizamos la biblioteca Ownable
de OpenZeppelin para gestionar esta propiedad.
Metadatos de los tokens
Añadimos la capacidad de definir y asignar metadatos a cada token NFT. Los metadatos son típicamente una URL que apunta a un archivo JSON que describe el NFT, incluyendo su nombre, descripción y otros atributos.
Capacidad de pausado del contrato
Añadimos la capacidad de pausar el contrato en situaciones críticas, utilizando la biblioteca Pausable
de OpenZeppelin. Esto nos permite detener las transferencias de tokens en caso de emergencia.
Modificación de transferencias con capacidad de pausado
Modificamos la función interna _beforeTokenTransfer
para incluir la verificación de que el contrato no esté pausado antes de permitir transferencias de tokens. Esto se realiza anulando la función de ERC721
e incluyendo la verificación de whenNotPaused
.
contract MyNFT {}
NFT.sol
Hemos completado el contrato NFT.sol
. Este contrato es un ejemplo detallado de cómo implementar un token ERC721 siguiendo el estándar más utilizado en Ethereum. Hemos cubierto las partes fundamentales y progresivas del contrato, desde la inicialización del NFT hasta la implementación de funciones adicionales como mint
, pause
y transfer
. Este ejemplo proporciona una base sólida para construir funcionalidades más avanzadas en contratos de tokens no fungibles.