# ERC-721

El estándar ERC-721, conocido como el estándar para tokens no fungibles (NFTs) en Ethereum, introduce un mecanismo para representar la propiedad y la transferencia de activos únicos. A diferencia de los tokens ERC-20, que son fungibles y cada token es idéntico a los demás, cada token ERC-721 es único, permitiendo así la representación digital de activos únicos y la propiedad de estos en la blockchain.

### **Características Clave del ERC-721**

* **Unicidad:** Cada token tiene un identificador único (a menudo llamado "tokenId") que lo distingue de todos los demás tokens dentro del mismo contrato.
* **Propiedad:** El contrato lleva un registro de quién es el propietario de cada token, permitiendo la propiedad digital verificable de activos únicos.
* **Transferibilidad:** Los tokens pueden ser transferidos entre cuentas, lo que permite el comercio, la venta y la transferencia de propiedad de activos digitales únicos.
* **Interoperabilidad:** El estándar asegura que los tokens NFT sean interoperables con el ecosistema más amplio de Ethereum, incluyendo mercados y otras plataformas que admiten el estándar ERC-721.

El estándar ERC-721 define un conjunto de funciones y eventos que un contrato inteligente debe implementar para ser compatible con ERC-721:

### **Funciones Requeridas:**

* **`balanceOf(address _owner)`**: Devuelve el número de tokens que posee una dirección.
* **`ownerOf(uint256 _tokenId)`**: Devuelve el propietario de un token específico.
* **`transferFrom(address _from, address _to, uint256 _tokenId)`**: Transfiere la propiedad de un token de una dirección a otra.
* **`approve(address _approved, uint256 _tokenId)`**: Permite a una dirección transferir un token específico en nombre del propietario.
* **`getApproved(uint256 _tokenId)`**: Devuelve la dirección autorizada para transferir un token específico.
* **`setApprovalForAll(address _operator, bool _approved)`**: Permite o prohíbe a un operador gestionar todos los tokens de un propietario.
* **`isApprovedForAll(address _owner, address _operator)`**: Consulta si un operador está autorizado a gestionar todos los tokens de un propietario.

### **Eventos Requeridos:**

* **`Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId)`**: Emitido cuando se transfiere la propiedad de un token.
* **`Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)`**: Emitido cuando se autoriza a una dirección para transferir un token específico.
* **`ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)`**: Emitido cuando se autoriza o revoca la autorización a un operador para gestionar todos los tokens de un propietario.

<figure><img src="https://495929358-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcQaFIdmRnxQda0t6MjKJ%2Fuploads%2Fsnw7MA6ewgir8U3QeR8Z%2FModulo%203-2.png?alt=media&#x26;token=6ee0e38f-4390-4c10-b545-8bf200df78ed" alt=""><figcaption></figcaption></figure>

### **Implementación y Uso**

Los tokens ERC-721 han ganado popularidad en aplicaciones que requieren la representación de activos únicos y la propiedad verificable en la blockchain, como arte digital, coleccionables, bienes inmuebles virtuales y más. La implementación del estándar ERC-721 permite a los desarrolladores crear contratos inteligentes que gestionan la propiedad, transferencia y acceso a activos digitales únicos, facilitando la creación de un mercado vibrante y diverso de NFTs en Ethereum.
