Buy Crypto
Markets
Spot
FuturesBTC
Earn
Event Center
More
0-Fee Fest
Extensión Enumerable: ¿Qué es la extensión Enumerable?La extensión Enumerable es una parte opcional del estándar de tokens no fungibles ERC-721 que permite a los contratos inteligentes y las aplicaciones cripto descubrir lExtensión Enumerable: ¿Qué es la extensión Enumerable?La extensión Enumerable es una parte opcional del estándar de tokens no fungibles ERC-721 que permite a los contratos inteligentes y las aplicaciones cripto descubrir l

Extensión Enumerable

2026/10/13 16:21
#Advanced
Humanity
H$0.05508-3.36%
Lagrange
LA$0.06215+12.52%
PX
PX$0.0106-5.35%
SPACE ID
ID$0.03128-5.95%
AINFT
NFT$0.0000002377+0.08%

¿Qué es la extensión Enumerable?

La extensión Enumerable es una parte opcional del estándar de tokens no fungibles ERC-721 que permite a los contratos inteligentes y las aplicaciones cripto descubrir los ID de los tokens NFT mediante consultas de índices on-chain.

Suele identificarse por el nombre de interfaz

IERC721Enumerable
o el nombre de implementación
ERC721Enumerable
.

La especificación oficial ERC-721 define esta extensión como un medio para que un contrato publique la lista completa de NFT válidos y los ID de los tokens que posee cada dirección.

La extensión añade tres funciones llamadas

totalSupply
,
tokenByIndex
y
tokenOfOwnerByIndex
.

Estas funciones complementan la interfaz básica de propiedad y transferencia de ERC-721.

No sustituyen funciones como

ownerOf
,
balanceOf
,
transferFrom
o
safeTransferFrom
.

La extensión Enumerable es opcional, por lo que un contrato NFT puede cumplir plenamente con ERC-721 sin admitirla.

¿Por qué se llama Enumerable?

Enumerar una colección significa identificar sus elementos uno por uno mediante un índice u otro método organizado.

La interfaz básica de ERC-721 puede indicar a una aplicación quién posee un ID de token conocido.

También puede indicar cuántos NFT posee una dirección.

Sin embargo, la interfaz básica no ofrece una función on-chain directa para descubrir todos los ID de tokens existentes ni todos los ID que posee un titular concreto.

La extensión Enumerable cubre esta carencia al añadir acceso indexado a la colección global y a las tenencias de cada titular.

Una aplicación puede empezar por el índice cero y seguir consultando índices superiores hasta alcanzar la oferta o el saldo del titular correspondiente.

¿Cuál es el ID de interfaz de la extensión Enumerable?

El ID de interfaz ERC-165 de la extensión Enumerable de ERC-721 es

0x780e9d63
.

Un contrato compatible debería devolver

true
cuando se llame a su función
supportsInterface
con este valor.

El estándar de detección de interfaces ERC-165 permite a las aplicaciones preguntar a un contrato inteligente qué interfaces afirma implementar.

La interfaz básica de ERC-721 tiene un ID de interfaz independiente, por lo que una aplicación puede comprobar por separado la compatibilidad con la interfaz básica y con Enumerable.

Un contrato que implemente la extensión Enumerable también debe implementar la interfaz básica de ERC-721.

Una respuesta positiva a la detección de interfaces mejora la comprobación de compatibilidad, pero no demuestra que la implementación sea correcta, segura u honesta.

Funciones que añade la extensión Enumerable

La extensión Enumerable añade únicamente tres funciones públicas de consulta.

La función

totalSupply
devuelve el número de NFT válidos que el contrato tiene registrados en ese momento.

La función

tokenByIndex
devuelve un ID de token de la lista global del contrato.

La función

tokenOfOwnerByIndex
devuelve un ID de token de las tenencias actuales de un titular.

En la interfaz estándar, las tres funciones son funciones de solo lectura de tipo view.

La extensión no añade funciones de transferencia, aprobación, acuñación, quema, metadatos ni regalías.

La función totalSupply

La función

totalSupply
devuelve el número de NFT válidos que en ese momento tienen un titular distinto de la dirección cero.

Indica la oferta activa actual, no la oferta máxima posible.

Por ejemplo, un contrato puede indicar una oferta total de 8,000 y conservar la autoridad para acuñar más NFT posteriormente.

Si se quema un NFT y se elimina de la propiedad válida, la oferta total indicada normalmente disminuirá.

Esto significa que

totalSupply
no equivale necesariamente al número de NFT acuñados hasta la fecha.

Tampoco demuestra que la colección tenga un límite permanente.

Los usuarios deben revisar la lógica de acuñación y los permisos privilegiados para verificar las afirmaciones sobre escasez.

La función tokenByIndex

La función

tokenByIndex
devuelve el ID del token situado en una posición concreta de la enumeración global del contrato.

El índice empieza en cero.

Un índice válido debe ser inferior al valor devuelto por

totalSupply
.

Si la oferta total es 100, los índices válidos van del cero al 99.

Una consulta con el índice 100 o uno superior debe fallar.

No es necesario que el ID de token devuelto coincida con el índice.

Por ejemplo, el índice cero podría devolver el ID de token 500 y el índice uno, el ID 12.

Las aplicaciones nunca deben suponer que los ID de tokens son secuenciales solo porque los índices de enumeración lo sean.

La función tokenOfOwnerByIndex

La función

tokenOfOwnerByIndex
devuelve un ID de token propiedad de una dirección especificada.

El índice empieza en cero y debe ser inferior al resultado de

balanceOf
para ese titular.

Si una dirección posee tres NFT, sus índices válidos son cero, uno y dos.

La función debe fallar si el índice queda fuera del saldo actual del titular.

También debe fallar si la dirección del titular indicada es la dirección cero.

La función permite que las aplicaciones on-chain y off-chain enumeren los NFT de una dirección sin tener que buscar todos los ID de tokens posibles.

Cómo funcionan conjuntamente las tres funciones

Una aplicación puede llamar a

totalSupply
para saber cuántos NFT válidos existen en ese momento.

A continuación, puede llamar a

tokenByIndex
una vez por cada índice, desde cero hasta uno menos que la oferta.

Para cada ID de token devuelto, puede llamar a

ownerOf
para identificar al titular actual.

Para enumerar las tenencias de una dirección, la aplicación puede llamar a

balanceOf
y después consultar
tokenOfOwnerByIndex
para cada índice válido del titular.

Este proceso permite descubrir tokens mediante funciones on-chain estandarizadas.

Las colecciones grandes pueden seguir requiriendo muchas llamadas RPC, por lo que las aplicaciones de producción suelen utilizar paginación, lotes, caché o indexación de eventos.

El orden de enumeración no está garantizado

La especificación ERC-721 no define un orden obligatorio para

tokenByIndex
o
tokenOfOwnerByIndex
.

El orden devuelto no tiene que seguir el ID del token, la fecha de acuñación o transferencia, la rareza, los metadatos ni el tiempo de propiedad.

Un contrato puede cambiar la posición de un token cuando se transfiere o se quema otro.

Las aplicaciones no deben tratar un índice de enumeración como un identificador permanente.

El ID del token es el identificador estable dentro del contrato, mientras que el índice es solo una posición de consulta actual.

Una interfaz que quiera resultados ordenados debería ordenar los ID de tokens devueltos off-chain según sus propias reglas.

Enumeración mediante swap-and-pop

Una implementación habitual utiliza una técnica llamada swap and pop para eliminar eficazmente los ID de tokens de las matrices.

Cuando se elimina un token, la implementación coloca el último token en la posición que ocupaba el token eliminado en la matriz.

A continuación, elimina la última entrada de la matriz.

Así evita desplazar todos los tokens posteriores y mantiene relativamente bajo el coste computacional de la eliminación.

Sin embargo, cambia el orden de los ID de tokens restantes.

La implementación actual de ERC721Enumerable de OpenZeppelin utiliza este método tanto para los índices globales como para los específicos de cada titular.

Por tanto, si la propiedad cambia durante un proceso de enumeración largo, la aplicación debería reiniciar la paginación o conciliarla cuidadosamente.

Ejemplo de enumeración de toda una colección

Supongamos que un contrato ERC-721 indica una oferta total de cuatro.

Una aplicación llama a

tokenByIndex
con los índices cero, uno, dos y tres.

El contrato devuelve los ID de tokens 18, 42, 7 y 105.

La aplicación ya conoce el conjunto completo de ID de tokens válidos, aunque no sean secuenciales.

Puede llamar a

ownerOf
y
tokenURI
para cada ID y mostrar la titularidad y los metadatos.

Si posteriormente se quema el token con ID 42, la enumeración global podría devolver 18, 105 y 7, ya que la implementación puede mover el último elemento a la posición del eliminado.

El cambio es válido porque el estándar no garantiza el orden de enumeración.

Ejemplo de enumeración de un titular

Supongamos que Alice posee los tokens con ID 9, 30 y 88 en un contrato NFT enumerable.

La función

balanceOf
del contrato devuelve tres para la dirección de Alice.

Una aplicación consulta los índices cero, uno y dos de la titular mediante

tokenOfOwnerByIndex
.

El contrato devuelve los tres ID de tokens de Alice.

A continuación, Alice transfiere el token con ID 30 a Bob.

El saldo de Alice baja a dos y los ID de sus tokens restantes pueden aparecer en otro orden de índices.

La aplicación debería leer el saldo actualizado antes de repetir la enumeración de la titular.

Extensión Enumerable frente a ERC-721 básica

El estándar básico ERC-721 proporciona propiedad, transferencias, aprobaciones, eventos y comprobaciones de receptores seguros.

Puede responder si existe un ID de token conocido y quién es su titular.

No proporciona una lista on-chain estandarizada de todos los ID de tokens.

La extensión Enumerable añade esa capa de descubrimiento.

Una colección sin enumeración puede seguir transfiriendo NFT con normalidad y funcionar con wallets compatibles con ERC-721.

La ausencia de enumeración no hace que el NFT sea inválido ni que incumpla el estándar.

Las aplicaciones deben admitir colecciones enumerables y no enumerables si quieren ofrecer una compatibilidad amplia con ERC-721.

Extensión Enumerable frente a extensión de metadatos

La extensión Enumerable identifica los ID de tokens existentes y las tenencias de cada titular.

La extensión de metadatos proporciona el nombre de la colección, el símbolo y el URI del token.

La enumeración no describe la imagen, los atributos, el título ni el contenido externo asociado a un NFT.

La compatibilidad con metadatos no proporciona una lista completa de tokens.

Un contrato puede implementar una extensión, ambas o ninguna y seguir ofreciendo las funciones básicas de ERC-721.

Las aplicaciones deberían comprobar cada interfaz por separado.

Extensión Enumerable frente a solo totalSupply

Algunos contratos NFT añaden una función

totalSupply
personalizada sin implementar la extensión Enumerable completa.

Que el nombre de una función resulte familiar no demuestra que admita

tokenByIndex
o
tokenOfOwnerByIndex
.

El significado de una función personalizada de oferta también puede diferir de la definición de enumeración de ERC-721.

Podría indicar el número de tokens acuñados hasta la fecha, el siguiente ID de token, el tamaño máximo de la colección u otro valor específico del proyecto.

Las aplicaciones deberían usar ERC-165 para comprobar la interfaz Enumerable completa, en lugar de basarse en el selector de una sola función.

Por qué la extensión Enumerable consume más gas

La enumeración requiere que el contrato mantenga estructuras de almacenamiento adicionales.

Una implementación habitual almacena una matriz con todos los ID de tokens existentes.

También guarda la lista indexada de tokens de cada titular y las asignaciones que registran las posiciones de los tokens.

Al acuñar, hay que añadir el nuevo token tanto a la lista global como a la del titular.

Al transferir, hay que eliminar el token de la lista del titular anterior y añadirlo a la del nuevo titular.

Al quemar, hay que eliminar el token tanto de la lista del titular como de la lista global.

Estas escrituras adicionales en el almacenamiento aumentan el coste de gas de las transacciones que modifican el estado.

Las actuales directrices de implementación de ERC-721 señalan que a menudo se omite la extensión porque genera una sobrecarga de gas considerable.

¿Las consultas de enumeración son gratuitas?

Un usuario puede llamar a funciones view a través de un endpoint RPC sin enviar una transacción a la blockchain.

En ese caso no se paga ninguna comisión de gas on-chain, ya que un nodo simula la lectura localmente.

Sin embargo, el nodo sigue realizando cálculos y puede aplicar límites de frecuencia o restricciones a las solicitudes.

Si otro contrato inteligente llama a una función de enumeración durante una transacción, el cálculo consume gas de la transacción.

Un bucle que consulte cientos o miles de índices de tokens on-chain puede resultar demasiado caro para completarse.

Los desarrolladores no deben confundir una lectura off-chain sin gas con una capacidad de cálculo on-chain ilimitada.

Bucles y límites de gas de bloque

Un contrato inteligente debería evitar funciones que modifiquen el estado y recorran todos los NFT de una colección o todos los NFT de una dirección sin restricciones.

El número de iteraciones puede crecer con el tiempo hasta que la transacción supere el límite de gas del bloque.

La documentación de seguridad de Solidity advierte de que los bucles dependientes del almacenamiento pueden acabar impidiendo que se completen las operaciones del contrato.

Las funciones view llamadas off-chain no generan la misma comisión de transacción, pero aun así pueden sobrecargar un proveedor RPC.

Para grandes conjuntos de datos, las aplicaciones deberían usar páginas acotadas, consultas de índices individuales o indexación off-chain.

La indexación off-chain de eventos como alternativa

Todo contrato ERC-721 que cumpla el estándar emite eventos

Transfer
cuando se acuñan, transfieren o queman NFT.

Un indexador off-chain puede procesar estos eventos desde el bloque de despliegue del contrato para reconstruir la propiedad actual.

La acuñación suele representarse mediante una transferencia desde la dirección cero.

La quema suele representarse mediante una transferencia a la dirección cero.

Las transferencias normales cambian la propiedad entre dos direcciones distintas de cero.

La indexación de eventos evita las escrituras adicionales en el almacenamiento que exige la enumeración on-chain.

También permite realizar búsquedas, ordenar, filtrar y paginar con más eficacia en colecciones grandes.

La contrapartida es que los usuarios deben confiar en el sistema de indexación u operarlo por su cuenta y asegurarse de que se mantiene sincronizado.

Extensión Enumerable frente a indexación de eventos

La enumeración on-chain ofrece a los contratos inteligentes acceso directo y estandarizado a los índices de tokens.

La indexación de eventos permite un descubrimiento off-chain más completo y escalable.

La enumeración resulta útil cuando otro contrato inteligente debe verificar o seleccionar ID de tokens sin depender de una base de datos externa.

La indexación de eventos suele ser más práctica para interfaces de wallet, páginas de colecciones, analítica y búsquedas históricas.

Un proyecto puede admitir ambos métodos.

La mejor opción depende de si la posibilidad de descubrir tokens on-chain justifica el gas adicional que se paga en cada acuñación, transferencia y quema.

¿La enumeración ofrece paginación?

La extensión no define una función que devuelva una página de ID de tokens.

Devuelve un ID de token por cada consulta de índice.

Una aplicación off-chain puede crear una paginación solicitando un intervalo limitado de índices.

Por ejemplo, la primera página podría consultar los índices del cero al 49, mientras que la segunda consultaría del 50 al 99.

La aplicación debe tener en cuenta los cambios en la oferta y el orden al pasar de una página a otra.

Una transferencia o una quema puede desplazar tokens entre índices y hacer que un proceso de paginación largo omita o repita un ID.

Cuando el sistema RPC admite llamadas históricas, utilizar datos de una altura de bloque fija puede proporcionar una instantánea más coherente.

¿La enumeración muestra a todos los titulares?

La extensión enumera globalmente los ID de tokens y los ID que posee un titular conocido.

No ofrece una función que devuelva todas las direcciones de titulares únicas.

Una aplicación puede obtener los titulares llamando a

ownerOf
para cada ID de token o procesando los eventos de transferencia.

Un mismo titular puede aparecer varias veces porque una dirección puede poseer varios NFT.

Por tanto, crear una lista única de titulares suele ser una tarea de indexación off-chain.

¿La enumeración demuestra la autenticidad de un token?

No. La enumeración solo informa de los ID de tokens registrados por un contrato inteligente concreto.

Cualquiera puede desplegar un contrato ERC-721 enumerable con nombres, imágenes, símbolos o metadatos copiados.

La red blockchain y la dirección completa del contrato siguen siendo elementos esenciales de la identidad de un NFT.

Una interfaz Enumerable correcta no demuestra que el emisor sea titular de la obra de arte, controle el activo declarado o actúe de buena fe.

Los usuarios deberían verificar el contrato mediante información autorizada del proyecto y revisar los permisos por su cuenta.

¿totalSupply demuestra escasez?

El recuento actual de la oferta no establece una oferta máxima permanente.

El contrato puede incluir una función pública de acuñación, un rol de administrador con capacidad de acuñación, un sistema de acuñación mediante bridge o autoridad de actualización.

Un ID de token que no tenga titular actualmente también podría acuñarse más adelante.

Los contratos actualizables pueden cambiar sus reglas de oferta tras el despliegue.

Los usuarios deberían examinar el código y el modelo de control de acceso antes de confiar en una afirmación sobre escasez.

La enumeración facilita consultar la oferta actual, pero no hace cumplir promesas económicas.

Acuñación y enumeración

Cuando se acuña un NFT nuevo, una implementación Enumerable debe añadir el ID del token al índice global y al índice del primer titular.

La oferta total aumenta entonces en uno.

El ID del token puede aparecer en cualquier índice global válido que permita la implementación.

Una política de acuñación secuencial no obliga a que el índice de enumeración siga coincidiendo con el ID del token.

La lógica de acuñación personalizada debe actualizar de forma coherente todas las estructuras de enumeración necesarias.

Una actualización incompleta puede provocar que los saldos, los registros de propiedad, la oferta total y los resultados de enumeración no coincidan.

Transferencias y enumeración

Normalmente, una transferencia no modifica la oferta total.

Elimina el ID del token de la enumeración del titular anterior y lo añade a la del destinatario.

La lista global de tokens normalmente sigue conteniendo el mismo ID.

Las posiciones de los índices específicos de cada titular pueden cambiar durante el proceso de eliminación.

Las transferencias a uno mismo requieren una implementación cuidadosa porque el remitente y el destinatario son la misma dirección.

Las implementaciones revisadas gestionan esta situación sin eliminar ni duplicar el token por error.

Quema y enumeración

La quema elimina un token de la propiedad válida de ERC-721.

Una implementación Enumerable elimina el ID del token quemado de la lista del titular y de la lista global de tokens.

La oferta total disminuye.

Los índices global y del titular que ocupaba el token deben dejar de utilizarse.

Otros tokens pueden ocupar esas posiciones mediante una eliminación swap-and-pop.

Las aplicaciones históricas deberían utilizar eventos, en lugar de la enumeración actual, cuando necesiten un registro de los NFT quemados.

Compatibilidad con la acuñación por lotes

Algunas implementaciones ERC-721 admiten la acuñación por lotes comprimida o consecutiva durante la construcción del contrato.

Estos sistemas pueden calcular la propiedad sin registrar cada token mediante la lógica ordinaria de actualización de la enumeración.

La implementación actual de OpenZeppelin advierte que su extensión de acuñación consecutiva interfiere con

ERC721Enumerable
y no debería combinarse con ella.

Su implementación Enumerable actual también rechaza la ruta de actualización de saldos por lotes no compatible.

Los desarrolladores no deberían combinar extensiones solo porque cada una funcione por separado.

La herencia, el almacenamiento, los eventos, los saldos y el comportamiento de los hooks de actualización deben revisarse conjuntamente.

Enumeración y contratos actualizables

Un contrato NFT actualizable puede añadir o modificar la lógica tras el despliegue si su sistema de gobernanza lo permite.

Hay que tener especial cuidado al añadir la enumeración cuando ya existen muchos NFT.

El nuevo almacenamiento de enumeración puede estar vacío aunque el contrato básico ya registre miles de tokens.

Puede ser necesario un proceso de migración para completar los índices globales y los específicos de cada titular.

Los bucles de migración on-chain grandes pueden superar los límites de gas.

Los errores en la distribución del almacenamiento también pueden corromper los datos existentes de propiedad o aprobación.

Los administradores de actualizaciones deberían utilizar procedimientos de migración probados, transacciones acotadas y revisiones de seguridad independientes.

Enumeración y lógica personalizada de balanceOf

La enumeración de titulares depende de que la información de saldo ERC-721 sea precisa.

Una extensión que calcule

balanceOf
mediante un método personalizado o comprimido puede entrar en conflicto con los índices de titulares almacenados.

Las directrices de implementación actuales advierten específicamente de que las extensiones que utilizan una lógica de saldo personalizada pueden ser incompatibles con la enumeración.

Los desarrolladores deben confirmar que cada acuñación, transferencia y quema actualiza los recuentos de propiedad y los índices mediante rutas de código compatibles.

Un contrato que indique que un titular tiene cinco NFT, pero almacene solo cuatro ID de tokens indexados, es internamente incoherente.

Riesgos de seguridad para las aplicaciones integradas

Una aplicación debería comprobar que el contrato admite Enumerable antes de llamar a las funciones de la extensión.

Debería gestionar los errores por índices fuera de rango, en lugar de suponer que un índice observado anteriormente sigue siendo válido.

No debería basarse en el orden de enumeración para calcular la rareza, la prioridad o valores financieros.

Debería protegerse frente a resultados duplicados o ausentes cuando el estado cambie durante la paginación.

También debería comprobar que cada ID de token devuelto pertenece al contrato y a la red esperados.

Para decisiones de gran valor, la aplicación puede necesitar una instantánea coherente de un bloque y un nivel de finalidad adecuado.

RPC y coherencia de los datos

Según la red y la configuración de la solicitud, un endpoint RPC puede devolver datos de enumeración correspondientes a un bloque reciente, seguro, finalizado o histórico.

Dos llamadas realizadas a distintas alturas de bloque pueden producir listas diferentes de oferta o titulares.

Un NFT transferido recientemente puede aparecer bajo titulares distintos en fuentes de datos no sincronizadas.

Cuando la coherencia sea importante, las aplicaciones deberían registrar el número de bloque utilizado para la enumeración con varias llamadas.

Los sistemas críticos pueden comparar varios nodos o utilizar un nodo verificado de forma independiente.

La enumeración elimina la dependencia de una API específica de la colección, pero no elimina todas las consideraciones de confianza relacionadas con RPC.

Ventajas de la extensión Enumerable

La extensión proporciona un método estandarizado para descubrir todos los ID de tokens actuales.

Permite que otro contrato inteligente consulte las tenencias de NFT de un titular sin un indexador externo.

Proporciona una función estándar para consultar la oferta actual.

Puede simplificar el funcionamiento de colecciones pequeñas, juegos on-chain, sistemas de membresía y aplicaciones que necesitan seleccionar tokens directamente.

También permite realizar consultas básicas del inventario de NFT aunque desaparezcan la web del proyecto o su base de datos privada.

Limitaciones de la extensión Enumerable

La extensión aumenta el coste de gas de las acuñaciones, transferencias y quemas.

No garantiza un orden estable de los tokens.

No incluye paginación, ordenación, filtrado ni enumeración de titulares.

Informa de los tokens actuales, no de un historial completo.

Puede ser incompatible con la acuñación por lotes comprimida o con sistemas de saldo personalizados.

Los bucles on-chain grandes siguen estando limitados por el gas de la transacción.

Tampoco proporciona metadatos, regalías, listas de titulares, registros históricos ni garantías sobre el límite de la oferta.

¿Cuándo debería utilizar un proyecto la enumeración?

La enumeración puede beneficiar a un proyecto cuando los contratos inteligentes necesitan descubrir directamente los ID de tokens on-chain.

También puede ser razonable para una colección pequeña en la que resulte aceptable el coste adicional de las transferencias.

Un juego puede utilizarla cuando la lógica del contrato necesite seleccionar por índice uno de los NFT de un jugador.

Un contrato de membresía puede utilizarla cuando un proceso on-chain necesite inspeccionar los tokens de membresía actuales de un titular.

Aun así, el proyecto debería limitar los bucles y valorar si un mapping más sencillo o un índice específico de la aplicación sería más eficiente.

¿Cuándo podría evitarla un proyecto?

Una colección NFT grande puede evitar la enumeración para reducir el coste de cada acuñación, transferencia y quema.

Un proyecto también puede evitarla si todas las funciones de descubrimiento y búsqueda ya dependen de un indexador de eventos off-chain.

Los sistemas de acuñación por lotes comprimida pueden utilizar modelos de propiedad que no funcionan eficazmente con el almacenamiento de enumeración estándar.

Un proyecto que nunca necesite listar tokens on-chain puede obtener pocas ventajas a cambio de pagar por índices on-chain permanentes.

La decisión debería basarse en las necesidades reales de la aplicación, no en la suposición de que todas las extensiones opcionales son necesarias.

Cómo deberían implementar la extensión los desarrolladores

Los desarrolladores deberían empezar con una implementación Enumerable de ERC-721 revisada y mantenida activamente.

Deberían asegurarse de que

supportsInterface
devuelve
0x780e9d63
.

Todas las rutas de acuñación, transferencia y quema deben actualizar correctamente la enumeración global y la específica de cada titular.

Hay que comprobar si las extensiones personalizadas entran en conflicto con la propiedad, los saldos, la acuñación por lotes, el wrapping, las pausas y las actualizaciones.

Las pruebas deberían cubrir los primeros y últimos índices, los índices fuera de rango, las transferencias a uno mismo, las quemas, las reacuñaciones cuando estén permitidas y los cambios repetidos de titularidad.

Las pruebas de invariantes deberían verificar que

totalSupply
coincide con el número de tokens enumerables a escala global.

También deberían comprobar que el número de tokens enumerables de cada titular coincide con

balanceOf
.

Cómo pueden comprobar los usuarios la compatibilidad con Enumerable

El primer paso es verificar la dirección del contrato NFT y la red blockchain.

El segundo paso es llamar a

supportsInterface
con
0x780e9d63
.

El tercer paso es confirmar que también se admite la interfaz básica de ERC-721.

El cuarto paso es comparar

totalSupply
con una pequeña muestra de índices válidos.

El quinto paso es comparar el resultado de

balanceOf
de un titular con los ID de tokens que devuelve la enumeración de ese titular.

Estas comprobaciones pueden detectar incoherencias evidentes, pero no sustituyen una revisión completa del contrato.

Errores frecuentes con la extensión Enumerable

Un error frecuente es suponer que todos los contratos ERC-721 admiten enumeración.

Otro error es tratar un índice de enumeración como un ID de token permanente.

Un tercer error es suponer que los ID de tokens aparecen en orden numérico o de acuñación.

Un cuarto error es tratar

totalSupply
como un límite permanente de la oferta.

Un quinto error es recorrer una colección ilimitada dentro de una transacción que modifica el estado.

Un sexto error es ignorar los cambios de orden durante la paginación.

Un séptimo error es suponer que una función personalizada

totalSupply
demuestra la compatibilidad con toda la extensión.

Un octavo error es combinar implementaciones incompatibles de acuñación por lotes y enumeración.

Un noveno error es añadir la enumeración a una colección actualizable sin migrar los tokens anteriores.

Un décimo error es tratar la compatibilidad con la interfaz Enumerable como prueba de que una colección NFT es auténtica o valiosa.

Preguntas frecuentes

¿Qué significa Enumerable Extension en el ámbito cripto?

Normalmente se refiere a la extensión opcional de ERC-721 que permite a las aplicaciones enumerar todos los ID de tokens NFT actuales y los ID que posee una dirección especificada.

¿Es obligatoria la extensión Enumerable para ERC-721?

No. Un contrato NFT puede cumplir el estándar básico ERC-721 sin admitir la enumeración.

¿Cuál es el ID de interfaz de la extensión Enumerable?

El ID de interfaz ERC-165 es

0x780e9d63
.

¿Qué funciones añade la extensión?

Añade

totalSupply
,
tokenByIndex
y
tokenOfOwnerByIndex
.

¿Qué devuelve totalSupply?

Devuelve el número de NFT válidos actuales que registra el contrato.

¿totalSupply indica la oferta máxima posible?

No. Indica la oferta actual y no demuestra que sea imposible acuñar tokens en el futuro.

¿Qué devuelve tokenByIndex?

Devuelve el ID de token almacenado en un índice de enumeración global especificado.

¿Qué devuelve tokenOfOwnerByIndex?

Devuelve un ID de token propiedad de una dirección especificada en un índice concreto de ese titular.

¿Los índices de enumeración empiezan en cero?

Sí. Los índices válidos empiezan en cero y terminan una posición por debajo de la oferta o el saldo correspondiente.

¿Un índice de enumeración es lo mismo que un ID de token?

No. Un índice es una posición temporal en una lista, mientras que el ID identifica el NFT dentro del contrato.

¿Los ID de tokens se devuelven en orden numérico?

No. El estándar no exige ningún orden de enumeración concreto.

¿Puede cambiar el orden de enumeración?

Sí. Las transferencias y las quemas pueden cambiar las posiciones de los índices, especialmente en las implementaciones que utilizan la eliminación swap-and-pop.

¿Quemar un NFT reduce totalSupply?

Sí. Un contrato Enumerable correctamente implementado elimina el NFT quemado y reduce la oferta total actual.

¿Transferir un NFT modifica totalSupply?

No. Una transferencia normal cambia la enumeración del titular, pero no modifica el número de NFT existentes.

¿Por qué es costosa la extensión?

Requiere escrituras adicionales en el almacenamiento para mantener los índices globales y los de cada titular durante las acuñaciones, transferencias y quemas.

¿Las llamadas de enumeración son gratuitas?

Las lecturas RPC off-chain no requieren pagar gas on-chain, pero las llamadas de contratos inteligentes realizadas durante una transacción consumen gas.

¿Puede un contrato recorrer todos los NFT enumerables?

Puede intentarlo, pero un bucle on-chain sin límites puede acabar superando el límite de gas del bloque.

¿La extensión ofrece paginación?

No. Las aplicaciones crean la paginación consultando intervalos de índices seleccionados.

¿La extensión enumera a todos los titulares de NFT?

No. Enumera globalmente los ID de tokens y los de un titular conocido, pero no devuelve una lista única de todas las direcciones de titulares.

¿La indexación de eventos puede sustituir a la enumeración?

Sí. Un indexador off-chain puede reconstruir la oferta y la propiedad de los tokens a partir de los eventos Transfer de ERC-721.

¿La enumeración incluye metadatos NFT?

No. Los metadatos se proporcionan mediante otra extensión opcional de ERC-721.

¿La enumeración demuestra la autenticidad de un NFT?

No. Cualquiera puede desplegar un contrato Enumerable, por lo que los usuarios deben verificar la red, la dirección del contrato, el emisor y los permisos.

¿Se puede añadir la enumeración después del despliegue?

Un contrato actualizable puede añadirla, pero los tokens existentes deben migrarse de forma segura a las nuevas estructuras de indexación.

¿ERC721Enumerable es compatible con todas las extensiones ERC-721?

No. La acuñación por lotes comprimida y las implementaciones de saldo personalizadas pueden entrar en conflicto con el almacenamiento Enumerable estándar.

¿Cuándo resulta más útil la extensión Enumerable?

Es especialmente útil cuando los contratos o las aplicaciones necesitan acceso on-chain estandarizado a la lista actual de tokens o a los ID de tokens de un titular.

Conclusión

La extensión Enumerable es una función opcional de ERC-721 que permite descubrir los ID de tokens NFT mediante consultas on-chain estandarizadas.

Su ID de interfaz es

0x780e9d63
.

La extensión añade

totalSupply
,
tokenByIndex
y
tokenOfOwnerByIndex
.

Estas funciones pueden enumerar la colección actual y los ID de tokens propiedad de una dirección conocida.

Los índices de enumeración no son identificadores permanentes y el estándar no garantiza su orden.

La extensión tampoco proporciona metadatos, regalías, listas de titulares, registros históricos ni pruebas de una oferta fija.

Mantener los índices globales y los específicos de cada titular requiere escrituras adicionales en el almacenamiento, lo que aumenta el coste de gas de las acuñaciones, transferencias y quemas.

Las aplicaciones grandes suelen utilizar los eventos Transfer de ERC-721 y la indexación off-chain, en lugar de pagar por una enumeración on-chain completa.

Los desarrolladores que implementen la extensión deben mantener sincronizadas todas las estructuras de propiedad, saldo e índices en cada ruta que modifique el estado.

Los usuarios deberían verificar por separado la compatibilidad de la interfaz, la identidad del contrato, la autoridad de acuñación, los permisos de actualización y la oferta actual.

Comprender la extensión Enumerable ayuda a los usuarios cripto a distinguir el descubrimiento directo de NFT on-chain de los metadatos, el historial de propiedad, la escasez y los servicios de indexación off-chain.
BTC ETFs See $679M in Outflows
BTC ETFs See $679M in OutflowsBTC ETFs See $679M in Outflows
Citi sees BTC at $113K. What do institutions see?