Resumen
Las API de datos NFT en Solana dependen de llamadas RPC más pesadas que las transferencias simples: consultas de cuentas de tokens, lecturas de metadatos, pruebas de NFT comprimidos y suscripciones a logs. El proveedor que elijas debe manejar esas cargas de trabajo sin descartar solicitudes ni ocultar límites de velocidad. Este artículo mapea los métodos RPC que los indexadores NFT realmente llaman, los modos de falla que rompen los flujos de acuñación y transferencia, y los criterios de evaluación que separan un endpoint compartido de un nodo dedicado. También muestra cómo probar un endpoint de Solana con llamadas JSON-RPC reales antes de comprometerte.
Recomendación rápida
Si estás construyendo una API de datos NFT en Solana, la decisión del proveedor de RPC se reduce a tres cosas: si el endpoint puede sostener tu patrón de lectura, si expone los métodos que necesitas sin limitación silenciosa, y si puedes hacer failover sin romper solicitudes en curso.
Para la mayoría de los equipos, una API de RPC de Solana gestionada es el punto de partida correcto. Obtienes un endpoint mantenido, soporte WebSocket y un camino hacia un nodo dedicado cuando tu carga de trabajo de indexación o acuñación supera la capacidad compartida. OnFinality ofrece tanto RPC de Solana compartido como opciones de nodo dedicado, para que puedas comenzar en el endpoint compartido y pasar a un nodo privado sin cambiar el código de tu cliente.
Usa la siguiente lista de verificación para decidir si un endpoint compartido es suficiente o si necesitas infraestructura dedicada.
| Señal | RPC compartido probablemente sea suficiente | Pasar a un nodo dedicado |
|---|---|---|
| Volumen de solicitudes | Ráfagas, RPS sostenido bajo | RPS alto constante o escaneos grandes de getProgramAccounts |
| Mezcla de métodos | Lecturas estándar de cuentas y transacciones | getProgramAccounts pesado, getTokenAccountsByOwner, suscripciones a logs |
| Uso de WebSocket | Suscripciones ocasionales | Flujos continuos de logsSubscribe o accountSubscribe |
| Sensibilidad a la latencia | Lecturas de UI y trabajos en segundo plano | Flujos de acuñación, liquidación de mercado, indexación en tiempo real |
| Necesidades de aislamiento | Sin aislamiento estricto de inquilinos | Necesitas capacidad predecible y sin vecinos ruidosos |
Si dos o más filas caen en la columna derecha, planifica un nodo dedicado. Consulta Nodos dedicados para saber cómo funciona.
Lo que las API de datos NFT realmente le piden al RPC
Una API de datos NFT no es una sola llamada. Es un pipeline. Un backend típico de NFT en Solana hace alguna combinación de:
- Resolver cuentas de tokens con
getTokenAccountsByOwnerogetTokenAccountsByMint - Leer cuentas de metadatos, a menudo mediante
getAccountInfoen el programa de metadatos de Metaplex - Escanear cuentas propiedad del programa con
getProgramAccounts, que es la llamada más costosa del conjunto - Rastrear cambios de propiedad con
accountSubscribeologsSubscribesobre WebSocket - Confirmar transacciones con
getTransactionygetSignatureStatuses - Manejar NFT comprimidos, que agregan búsquedas de pruebas y árboles además de lo anterior
Cada una de estas tiene un perfil de costo diferente. getAccountInfo es barata y cacheable. getProgramAccounts puede devolver miles de cuentas y es la llamada con más probabilidad de alcanzar un límite del proveedor. Las suscripciones WebSocket son baratas por mensaje pero requieren una conexión estable y lógica de reconexión.
Esa mezcla es la razón por la que una afirmación genérica de "RPC rápido" no es suficiente. Necesitas un proveedor que documente cómo maneja escaneos grandes de cuentas y suscripciones de larga duración.
Métodos RPC de Solana que importan para cargas de trabajo NFT
| Método | Uso típico en NFT | Perfil de costo | A tener en cuenta |
|---|---|---|---|
getAccountInfo | Metadatos, cuentas de acuñación | Bajo | Cachear agresivamente |
getTokenAccountsByOwner | Tenencias NFT de la billetera | Medio | Paginación y propietarios grandes |
getTokenAccountsByMint | Poseedores de la colección | Medio | Tamaño del resultado |
getProgramAccounts | Indexación de colecciones | Alto | Límites y tiempos de espera del proveedor |
getSignaturesForAddress | Historial y procedencia | Medio | Profundidad de paginación |
getTransaction | Detalle de transferencia y acuñación | Medio | Disponibilidad de archivo |
accountSubscribe | Cambios de propiedad | Bajo por mensaje | Manejo de reconexión |
logsSubscribe | Eventos de acuñación y venta | Bajo por mensaje | Diseño de filtros |
Si tu API depende de getProgramAccounts o de un historial profundo de getTransaction, confirma que el proveedor los soporte en tu volumen esperado antes de construir sobre él.
Probar un endpoint de Solana antes de comprometerte
No elijas un proveedor por una lista de características. Envía solicitudes reales. Comienza con una verificación básica de salud contra el endpoint de Solana mainnet:
curl -s https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getHealth",
"params": []
}'
Luego prueba la llamada que realmente estresa tu carga de trabajo. Para un indexador NFT, eso suele ser un escaneo de cuentas de programa:
curl -s https://solana.api.onfinality.io/public \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getProgramAccounts",
"params": [
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
{ "encoding": "jsonParsed", "filters": [{ "dataSize": 165 }] }
]
}'
Ejecútala repetidamente y observa tres cosas: estabilidad del tiempo de respuesta, si los resultados se truncan y si obtienes errores de límite de velocidad bajo carga. Un proveedor que responde rápido una vez pero se degrada bajo repetición no es confiable para un indexador.
Para suscripciones WebSocket, prueba la conexión por separado:
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "logsSubscribe",
params: [{ mentions: ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"] }, { commitment: "confirmed" }]
}));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.method === "logsNotification") {
// route to your NFT event pipeline
}
};
ws.onclose = () => {
// implement reconnect with backoff
};
Si el socket se cae y no se recupera limpiamente, tu indexador perderá eventos silenciosamente. Prueba el comportamiento de reconexión explícitamente.
Matriz de evaluación de proveedores para datos NFT en Solana
| Proveedor | Endpoint compartido | Opción de nodo dedicado | WebSocket | Archivo / historial | Notas |
|---|---|---|---|---|---|
| OnFinality | Sí, API RPC de Solana | Sí | Sí | Confirmar alcance actual en la página de la red | RPC gestionado más nodos dedicados, misma configuración de cliente |
| Endpoints de clúster público | Sí | No | Limitado | Limitado | Bien para prototipos, no para indexación |
| Proveedores generales de RPC gestionado | Varía | Varía | A menudo | Varía | Verificar límites de métodos y suscripciones |
| Validador o RPC autoalojado | No | Sí | Sí | Depende de tu configuración | Mayor control, mayor costo operativo |
OnFinality aparece primero porque ofrece tanto una API RPC de Solana gestionada como nodos dedicados bajo una misma cuenta, lo que elimina el paso de migración cuando tu carga de trabajo crece. Compara los planes actuales en Precios de RPC y verifica la cobertura de red en Redes RPC compatibles.
Límites de velocidad, caché y las llamadas que fallan primero
La mayoría de las interrupciones de API NFT en Solana se remontan a las mismas pocas causas:
getProgramAccountssin límites. Un escaneo que devuelve decenas de miles de cuentas expirará o será limitado. Filtra por tamaño de datos, usa filtrosmemcmpy pagina cuando sea posible.- Límites de velocidad ocultos. Algunos proveedores aplican límites por método que no son obvios en la página de precios. Prueba bajo concurrencia realista.
- Rotación de WebSocket. Las suscripciones de larga duración se caen. Sin lógica de reconexión y relleno, pierdes eventos.
- Fallos de caché en metadatos. Los metadatos cambian raramente. Cachéalos y reduce significativamente tu volumen de RPC.
- Desajuste de commitment. Leer en
processedmientras se escribe enconfirmedproduce un estado NFT inconsistente. Elige un nivel de commitment y mantente consistente.
Una sonda de monitoreo simple te ayuda a detectar estos problemas temprano:
async function probe() {
const start = Date.now();
const res = await fetch("https://solana.api.onfinality.io/public", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "getHealth", params: [] })
});
const latency = Date.now() - start;
const body = await res.json();
return { ok: body.result === "ok", latency, status: res.status };
}
Registra la latencia y la tasa de errores por método, no solo por endpoint. Eso es lo que te dice qué llamada está causando problemas.
Failover y configuración multiproveedor
Para API NFT en producción, un solo endpoint es un único punto de falla. Una configuración práctica es:
- Un endpoint gestionado primario para tráfico normal
- Un endpoint secundario de un proveedor o región diferente
- Verificaciones de salud que cambian el tráfico cuando la tasa de errores o la latencia cruzan un umbral
- Un nodo dedicado para la carga de trabajo más pesada, como la indexación completa de colecciones
Mantén la lógica de failover a nivel de cliente o gateway, y asegúrate de que ambos endpoints soporten los mismos métodos. Un failover que aterriza en un endpoint sin soporte de getProgramAccounts es peor que no tener failover.
Si quieres evitar la complejidad multiproveedor, un nodo dedicado de Solana te da capacidad aislada y comportamiento predecible. Consulta Nodos dedicados para conocer las ventajas y desventajas.
Puntos clave
- Las API de datos NFT en Solana dependen de una mezcla específica de métodos, y
getProgramAccountsmás las suscripciones WebSocket son las llamadas con más probabilidad de alcanzar los límites del proveedor. - Prueba a los proveedores con llamadas JSON-RPC reales, no con listas de características. Verifica la estabilidad de la latencia, el truncamiento de resultados y el comportamiento de los límites de velocidad bajo carga.
- El RPC compartido está bien para lecturas en ráfagas y de bajo volumen. Pasa a un nodo dedicado cuando ejecutes indexación continua, flujos de acuñación o escaneos grandes de cuentas.
- La lógica de reconexión y relleno de WebSocket es obligatoria para cualquier pipeline NFT basado en eventos.
- OnFinality ofrece tanto RPC de Solana gestionado como nodos dedicados, para que puedas comenzar compartido y escalar sin cambiar el código del cliente. Comienza desde la página de la red Solana.
Preguntas frecuentes
¿Necesito un nodo dedicado para construir una API de datos NFT en Solana?
No siempre. Si tu carga de trabajo es en ráfagas y principalmente lecturas de cuentas, un endpoint gestionado compartido es suficiente. Pasa a un nodo dedicado cuando ejecutes indexación continua, escaneos grandes de getProgramAccounts o necesites capacidad predecible.
¿Por qué falla getProgramAccounts en algunos proveedores?
Es una llamada costosa que puede devolver conjuntos de resultados grandes. Algunos proveedores limitan el tamaño del resultado, aplican límites de velocidad por método o expiran. Siempre pruébala en tu volumen esperado antes de comprometerte.
¿Se requiere soporte WebSocket para la indexación NFT?
Para el seguimiento de propiedad y acuñación en tiempo real, sí. accountSubscribe y logsSubscribe te permiten reaccionar a eventos en lugar de hacer polling. Asegúrate de que tu cliente maneje reconexiones y rellene los slots perdidos.
¿Cómo pruebo un proveedor de RPC de Solana para cargas de trabajo NFT?
Envía getHealth, luego getProgramAccounts con filtros realistas, luego abre una suscripción WebSocket y fuerza una reconexión. Mide la estabilidad de la latencia y la tasa de errores por método.
¿Dónde puedo ver las opciones de RPC de Solana de OnFinality? La página de la red Solana cubre los detalles del endpoint y el transporte, y Precios de RPC cubre las opciones de planes.