# 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="/files/JkAZPlIldk93bhmEFc5G" 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://edp.ethkipu.org/modulo-3/estandares-librerias-y-patrones/erc-721.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
