¿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
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
No sustituyen funciones como
¿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
Un contrato compatible debería devolver
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
La función
La función
La función totalSupply
La función
Esto significa que
La función tokenByIndex
La función
Un índice válido debe ser inferior al valor devuelto por
La función tokenOfOwnerByIndex
La función
El índice empieza en cero y debe ser inferior al resultado de
Cómo funcionan conjuntamente las tres funciones
Una aplicación puede llamar a
A continuación, puede llamar a
Para cada ID de token devuelto, puede llamar a
Para enumerar las tenencias de una dirección, la aplicación puede llamar a
El orden de enumeración no está garantizado
La especificación ERC-721 no define un orden obligatorio para
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
Puede llamar a
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
Una aplicación consulta los índices cero, uno y dos de la titular mediante
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
Que el nombre de una función resulte familiar no demuestra que admita
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
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
¿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
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
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
Las pruebas de invariantes deberían verificar que
También deberían comprobar que el número de tokens enumerables de cada titular coincide con
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
El cuarto paso es comparar
El quinto paso es comparar el resultado de
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
Un séptimo error es suponer que una función personalizada
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
¿Qué funciones añade la extensión?
Añade
¿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
La extensión añade
También te puede interesar
WhatsMiner M30S++
Dominios Web3
Proyectos Web3
POPULAR
Criptomonedas de moda que están acaparando la atención del mercado
Volumen TOP
Las criptomonedas con mayor volumen de trading
Recién Añadidos
Criptomonedas recientemente listadas y disponibles para operar

