Resumen
Una API NFT de Base es el conjunto de métodos RPC y servicios de datos indexados que se utilizan para leer la propiedad, los metadatos y el historial de transferencias de NFT en la red Base. Las llamadas JSON-RPC estándar como eth_call, eth_getLogs y eth_getBalance cubren las lecturas on-chain, mientras que las API de tipo indexador añaden datos de propiedad y colección preagregados. Este artículo explica qué enfoque se adapta a cada carga de trabajo y cómo conectarse de forma fiable.
Verás cómo consultar contratos ERC-721 y ERC-1155 directamente a través de Base RPC, cuándo un indexador es la mejor herramienta y cómo configurar un endpoint de producción. OnFinality proporciona acceso a la API RPC de Base e infraestructura de nodos dedicados si necesitas un rendimiento constante para el tráfico de lectura intensivo de NFT.
Si has buscado una API NFT de Base, probablemente necesites leer datos NFT en Base: quién posee un token, qué contiene una colección o cómo se movió un token entre carteras. No existe una única "API NFT" en Base. En su lugar, combinas llamadas JSON-RPC estándar a la red Base con servicios de indexación opcionales que preagregan la propiedad y los metadatos. Esta página muestra qué hace cada capa, cómo conectarse y cómo mantener estable el tráfico de lectura de NFT en producción.
Qué enfoque se adapta a tu carga de trabajo NFT
Antes de escribir código, decide si necesitas lecturas on-chain sin procesar o datos preindexados. La elección correcta depende de cuánta agregación quieras hacer tú mismo y de la frescura que necesiten los datos.
| Carga de trabajo | Mejor opción | Por qué |
|---|---|---|
| Leer el propietario o el saldo de un token | Base RPC (eth_call) | Lectura directa del contrato, siempre actualizada en el bloque consultado |
| Listar todos los tokens que posee una cartera | API de indexador o tu propio indexador | RPC por sí solo no puede enumerar tenencias sin escanear logs |
| Obtener metadatos e imágenes de una colección | API de indexador o tokenURI + obtención off-chain | Los metadatos a menudo residen en IPFS o HTTP, no completamente on-chain |
| Rastrear transferencias en tiempo real | Base RPC (eth_getLogs o WebSocket) | Los logs te dan los eventos Transfer sin procesar a medida que ocurren |
| Rellenar el historial completo de transferencias | RPC con capacidad de archivo o indexador | Las consultas históricas de logs necesitan estado de archivo y paginación cuidadosa |
| Verificar un mint o una venta on-chain | Base RPC (eth_getTransactionReceipt) | Los recibos confirman lo que realmente se ejecutó |
Un patrón práctico es usar Base RPC para lecturas autoritativas en un punto en el tiempo y un indexador para consultas de tipo lista. Muchos equipos ejecutan ambos: RPC para la corrección y el indexador para la velocidad en vistas agregadas.
Configuración de la cadena Base de un vistazo
Utiliza estos valores al añadir Base a una cartera, configuración de backend o entorno de pruebas. Coinciden con la configuración de red que OnFinality publica para Base.
| Configuración | Base mainnet | Base Sepolia testnet |
|---|---|---|
| Chain ID | 8453 | 84532 |
| Moneda nativa | ETH (18 decimales) | ETH (18 decimales) |
| Explorador de bloques | https://basescan.org | https://sepolia.basescan.org |
| RPC público (OnFinality) | https://base.api.onfinality.io/public | https://base-sepolia.api.onfinality.io/public |
| Transporte | HTTP | HTTP |
Para obtener un endpoint gestionado y detalles de la red, consulta la página de red Base RPC y la página de red Base Sepolia RPC.
Leer datos NFT con JSON-RPC
La mayoría de las lecturas de ERC-721 y ERC-1155 se realizan mediante eth_call con un selector de función codificado. Las tres llamadas que más usarás son ownerOf, balanceOf y tokenURI para ERC-721, y balanceOf más uri para ERC-1155.
Aquí tienes un ejemplo mínimo de curl que llama a ownerOf(uint256) en un contrato ERC-721. El selector de ownerOf es 0x6352211e, seguido del ID del token rellenado a 32 bytes.
curl -s https://base.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_call",
"params": [
{
"to": "0xYOUR_NFT_CONTRACT",
"data": "0x6352211e0000000000000000000000000000000000000000000000000000000000000001"
},
"latest"
]
}'
La respuesta está codificada en ABI. Decodifícala como una dirección. Si el token no existe, la llamada se revierte y obtienes un objeto de error en lugar de un valor, así que maneja ambos casos.
En JavaScript, viem y ethers se encargan de la codificación por ti. Este ejemplo lee el propietario y el token URI de un token ERC-721:
import { createPublicClient, http, parseAbi } from "viem";
import { base } from "viem/chains";
const client = createPublicClient({
chain: base,
transport: http("https://base.api.onfinality.io/public"),
});
const abi = parseAbi([
"function ownerOf(uint256) view returns (address)",
"function tokenURI(uint256) view returns (string)",
]);
const owner = await client.readContract({
address: "0xYOUR_NFT_CONTRACT",
abi,
functionName: "ownerOf",
args: [1n],
});
const uri = await client.readContract({
address: "0xYOUR_NFT_CONTRACT",
abi,
functionName: "tokenURI",
args: [1n],
});
console.log(owner, uri);
tokenURI normalmente devuelve un enlace ipfs:// o https://. Resolverlo es una obtención off-chain, no una llamada RPC, así que planifica el almacenamiento en caché y los tiempos de espera.
Enumerar transferencias y propiedad con logs
Para encontrar transferencias, consulta eth_getLogs filtrado por el tema del evento Transfer de ERC-721 o ERC-1155 y la dirección del contrato. Así es como la mayoría de los indexadores construyen tablas de propiedad.
const logs = await client.getLogs({
address: "0xYOUR_NFT_CONTRACT",
fromBlock: 0n,
toBlock: "latest",
});
Dos restricciones importan. Primero, los proveedores limitan el rango de bloques por solicitud eth_getLogs, por lo que debes paginar a través del historial en fragmentos. Segundo, las consultas históricas profundas necesitan estado de archivo; un nodo sin archivo puede rechazarlas o fallar. Si estás rellenando una colección grande, fragmenta por rango de bloques y persiste tu progreso para que una solicitud fallida no fuerce un reinicio completo.
Para feeds de transferencias en vivo, una suscripción WebSocket a logs evita el polling. No todos los endpoints exponen transporte WebSocket, así que confirma el soporte de transporte antes de diseñar en torno a ello. Si necesitas suscripciones persistentes, la infraestructura de nodos dedicados suele ser una mejor opción que un endpoint público compartido.
Cuándo un endpoint RPC sin procesar no es suficiente
RPC te da corrección pero no comodidad. No puede responder "enumera cada NFT que posee esta cartera" sin que escanees logs y reconstruyas el estado. Ese es el trabajo de un indexador o una API de datos NFT.
Razones comunes por las que los equipos añaden una capa de indexador sobre Base RPC:
- Vistas de cartera que deben devolverse rápidamente para muchas colecciones.
- Páginas de mercado o galería que necesitan metadatos y recuentos a nivel de colección.
- Análisis que agregan transferencias a través de miles de contratos.
- Almacenamiento en caché de metadatos para no resolver
tokenURIen cada carga de página.
Puedes ejecutar tu propio indexador contra un endpoint Base RPC, o usar un servicio de datos NFT alojado. De cualquier manera, el endpoint RPC subyacente aún necesita manejar tu carga de indexación, que suele ser mucho más pesada que una sola solicitud de usuario.
Lista de verificación de preparación para producción para tráfico de lectura NFT
Las cargas de trabajo NFT son intensivas en lectura y a ráfagas. Un drop o una nueva colección pueden multiplicar el volumen de solicitudes en minutos. Antes de lanzar, revisa estos elementos.
| Verificación | Qué verificar |
|---|---|
| Capacidad del endpoint | Tu proveedor puede absorber lecturas en ráfaga de carteras, galerías e indexadores |
| Acceso a archivo | Las consultas históricas de logs y estado son compatibles si haces backfill |
| Transporte | HTTP para lecturas, WebSocket si te suscribes a logs en vivo |
| Conmutación por error | Un segundo endpoint o proveedor está configurado para reintento automático |
| Almacenamiento en caché | Las respuestas de metadatos y tokenURI se almacenan en caché con TTL razonables |
| Procesamiento por lotes | Múltiples lecturas se agrupan con solicitudes por lotes JSON-RPC cuando es posible |
| Monitoreo | Realizas seguimiento de tasas de error, latencia y respuestas de límite de tasa |
Si esperas un volumen de lectura NFT constante o alto, compara un endpoint público compartido con un plan gestionado y nodos dedicados. OnFinality ofrece acceso a la API RPC de Base y nodos dedicados; consulta Precios de RPC y la lista completa de redes RPC compatibles para planificar la capacidad.
Modos de fallo comunes y cómo depurarlos
La mayoría de los problemas de la API NFT de Base se dividen en unas pocas categorías repetibles.
| Síntoma | Causa probable | Solución |
|---|---|---|
eth_call se revierte | El token no existe o el contrato es incorrecto | Confirma el ID del token y la dirección del contrato |
| Resultados de log vacíos | Tema o rango de bloques incorrecto | Verifica el hash del tema Transfer y amplía el rango |
| Solicitud rechazada en bloques antiguos | Nodo sin archivo | Usa un endpoint con capacidad de archivo |
| Errores de límite de tasa bajo carga | Límites de endpoint compartido | Agrupa solicitudes, almacena en caché o cambia a un plan gestionado |
| Los metadatos no se cargan | Gateway IPFS o tiempo de espera HTTP | Añade un gateway de respaldo y almacena en caché los resultados |
| Propiedad inconsistente | Lectura en bloques diferentes | Fija un número de bloque para instantáneas consistentes |
Un diagnóstico rápido es reproducir la llamada fallida contra un bloque conocido como bueno y comparar. Si tiene éxito allí, el problema suele ser la profundidad del estado o el rango, no tu codificación ABI.
Pruebas en Base Sepolia
Construye y prueba contra Base Sepolia antes de mainnet. El chain ID es 84532, y el endpoint público de OnFinality es https://base-sepolia.api.onfinality.io/public. Despliega un ERC-721 de prueba, acuña algunos tokens y ejecuta tus rutas ownerOf, balanceOf y eth_getLogs contra él. Prueba tu lógica de paginación aquí, donde los errores son baratos, en lugar de en mainnet donde un mal backfill puede ser costoso.
Puntos clave
- Una API NFT de Base es una combinación de llamadas JSON-RPC de Base y, opcionalmente, un indexador para datos agregados.
- Usa
eth_callparaownerOf,balanceOfytokenURI; usaeth_getLogspara transferencias. - RPC no puede enumerar las tenencias de una cartera por sí solo; eso necesita un indexador o tu propio trabajo de indexación.
- Las consultas históricas de logs necesitan estado de archivo y paginación por rango de bloques.
- Confirma el soporte de transporte antes de depender de suscripciones WebSocket.
- Planifica el tráfico de lectura a ráfagas con almacenamiento en caché, procesamiento por lotes y conmutación por error.
- Prueba en Base Sepolia (chain ID 84532) antes de mainnet.
Preguntas frecuentes
¿Existe una única API NFT de Base?
No. Base expone JSON-RPC estándar de Ethereum, por lo que las lecturas de NFT usan los mismos métodos que cualquier cadena EVM. Los datos NFT agregados provienen de indexadores o servicios de datos alojados superpuestos.
¿Puedo listar todos los NFT que posee una cartera usando solo RPC?
No directamente. Tendrías que escanear los logs de Transfer y reconstruir la propiedad tú mismo. Un indexador es la opción práctica para consultas de tipo cartera.
¿Necesito un nodo de archivo para el historial de NFT?
Si consultas bloques antiguos o rellenas el historial de transferencias, sí. Los endpoints con capacidad de archivo sirven estado histórico que un nodo podado no puede.
¿Base RPC admite suscripciones WebSocket?
El soporte de transporte varía según el endpoint. Consulta la documentación de tu proveedor antes de diseñar en torno a suscripciones de logs en vivo.
¿Cómo evito los límites de tasa durante un backfill?
Agrupa solicitudes, pagina a través de logs en fragmentos, almacena en caché los metadatos y considera un endpoint gestionado o dedicado para una carga de indexación sostenida.
¿Dónde puedo encontrar los detalles de endpoint y cadena de Base?
Consulta la página de red Base RPC y la página de red Base Sepolia RPC para configuraciones de cadena y endpoints.