Resumen
El staking líquido de Acala te permite depositar DOT en el módulo de staking de Acala y recibir LDOT, un token derivado transferible que sigue generando recompensas de staking mientras lo usas en otras partes de DeFi. Este artículo explica cómo funciona el flujo, qué representa LDOT y la superficie de RPC y API que necesitas para leer el estado del staking o construir una integración de staking líquido. También cubre las preguntas operativas que los desarrolladores encuentran primero: qué endpoints usar, cómo consultar los tipos de cambio y el estado de unbonding, y cuándo un endpoint público compartido es suficiente frente a cuándo un nodo dedicado encaja mejor.
El staking líquido de Acala es la parte de la red Acala que te permite hacer staking de DOT sin bloquear tu capital en una única posición ilíquida. Depositas DOT, el protocolo lo pone en staking a través de su módulo de staking, y recibes LDOT — un token derivado que representa tu posición en staking y sigue siendo transferible. LDOT se puede mantener, mover o usar en otras primitivas DeFi de Acala mientras el DOT subyacente sigue acumulando recompensas de staking.
Si eres un desarrollador o un comprador de infraestructura, la parte interesante no son solo los mecanismos del token. Es la superficie de datos: cómo lees el estado del staking, cómo rastreas el tipo de cambio de LDOT, cómo detectas las ventanas de unbonding y a qué endpoint RPC apuntas tu backend. Este artículo recorre ambos lados — el modelo de staking y las llamadas API que realmente escribirás.
Recomendación rápida: ¿endpoint compartido o nodo dedicado?
Antes de escribir cualquier código de integración, decide qué tipo de carga de trabajo estás ejecutando. El staking líquido de Acala toca la cadena de dos maneras muy diferentes, y tienen necesidades de infraestructura distintas.
| Carga de trabajo | Patrón de llamada típico | Con qué empezar |
|---|---|---|
| Cartera o panel que lee saldos y tipo de cambio | Lecturas periódicas de bajo volumen | Un endpoint RPC compartido de un proveedor gestionado |
| Bot de staking que vigila colas de unbonding y acumulación de recompensas | Sondeo frecuente, a veces suscripciones | Un nodo dedicado o un plan de proveedor con rendimiento predecible |
| Indexador que rellena eventos históricos de staking | Grandes rangos de bloques, lecturas tipo archivo | Infraestructura con capacidad de archivo, no un endpoint público |
| dApp que envía extrinsics de staking en nombre de los usuarios | Ruta de escritura más seguimiento de confirmación | Un proveedor entre el que puedas hacer failover, con monitoreo |
Un endpoint compartido suele ser suficiente para paneles de solo lectura y prototipos. En el momento en que sondeas el estado del staking en un intervalo ajustado, rellenas historial o envías extrinsics de los que dependen los usuarios, la ruta compartida se convierte en el cuello de botella. Ese es el punto en el que un nodo dedicado o un plan de RPC gestionado con expectativas claras de rendimiento es la opción más segura. OnFinality ofrece tanto acceso a la API RPC como infraestructura de nodos dedicados para Acala, para que puedas empezar compartido y pasar a dedicado sin cambiar el código de tu aplicación.
Cómo funciona realmente el flujo de staking líquido de Acala
El flujo tiene cuatro partes móviles que deberías entender antes de tocar la API.
- Depósito. Envías DOT al módulo de staking. El protocolo vincula ese DOT a su conjunto de validadores.
- Acuñación. A cambio recibes LDOT al tipo de cambio actual. LDOT no es una reclamación fija 1:1 — representa una participación en la posición de staking agrupada.
- Acumulación. A medida que el DOT subyacente gana recompensas de staking, el valor que respalda cada LDOT crece. El tipo de cambio entre LDOT y DOT se desplaza al alza con el tiempo.
- Canje. Cuando quieres recuperar DOT, canjeas LDOT. Dependiendo del estado del módulo, el canje puede ser inmediato o puede entrar en una cola de unbonding que se liquida durante un período de unbonding.
La implicación clave para los desarrolladores: LDOT no es un saldo estático. Si tu interfaz muestra "1 LDOT = 1 DOT" estás mostrando el número incorrecto. Necesitas leer el tipo de cambio actual del estado de la cadena y recalcular el valor subyacente en DOT del usuario cada vez que lo muestres.
Leer el estado del staking a través de RPC
Acala es una cadena basada en Substrate, por lo que interactúas con ella a través de la interfaz JSON-RPC estilo Polkadot.js y el almacenamiento y los metadatos de extrinsics del runtime. Las claves de almacenamiento y los nombres de extrinsics exactos provienen del runtime, así que resuélvelos siempre desde los metadatos de la cadena en lugar de codificarlos desde una publicación de blog — incluida esta. El patrón a continuación muestra la forma de las llamadas.
Primero, confirma que estás hablando con la cadena correcta y que tu endpoint responde:
curl -s https://acala.api.onfinality.io/public \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "system_chain",
"params": []
}'
Una respuesta saludable devuelve el nombre de la cadena. Si obtienes un timeout o un cuerpo vacío, esa es tu primera señal de depuración — revisa el endpoint, no tu lógica de staking.
A continuación, lee la versión del runtime y los metadatos para que tu cliente sepa qué elementos de almacenamiento y extrinsics existen:
curl -s https://acala.api.onfinality.io/public \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "state_getRuntimeVersion",
"params": []
}'
A partir de ahí, un cliente de Polkadot.js puede consultar directamente el almacenamiento del módulo de staking. En JavaScript, el patrón se ve así:
import { ApiPromise, WsProvider } from '@polkadot/api';
const provider = new WsProvider('wss://acala.api.onfinality.io/public-ws');
const api = await ApiPromise.create({ provider });
// Resolve the staking module and its storage from live metadata
const staking = api.query.homa || api.query.homaLite;
// Example: read total staked and the current exchange rate
const totalStaked = await staking.totalStakingBonded();
const exchangeRate = await staking.liquidTokenExchangeRate();
console.log('Total staked:', totalStaked.toString());
console.log('LDOT exchange rate:', exchangeRate.toString());
El nombre del módulo y los nombres de los elementos de almacenamiento dependen de la versión del runtime. Si api.query.homa no está definido, inspecciona las claves de api.query en tiempo de ejecución y confirma el módulo que realmente está desplegado en la cadena a la que estás conectado. Esta es la fuente más común de errores de "mi llamada de staking no devuelve nada".
Consultar el tipo de cambio de LDOT y el estado de unbonding
Dos números son los más importantes para cualquier integración de staking líquido: el tipo de cambio y el estado de unbonding.
Tipo de cambio. Esto es lo que convierte un saldo de LDOT en su valor subyacente en DOT. Léelo del estado de la cadena, cachéalo brevemente y actualízalo con una frecuencia que coincida con la frecuencia con la que realmente cambia. Sondearlo cada bloque suele ser un desperdicio; sondearlo una vez por época suele ser demasiado lento para un panel en vivo. Elige una cadencia y documéntala.
Estado de unbonding. Cuando un usuario canjea, es posible que el DOT no esté disponible al instante. Tu interfaz debe distinguir entre "canjeable ahora" y "en cola de unbonding, se liquida en N eras". Eso significa leer la longitud de la cola y el período de unbonding del runtime, no adivinar.
| Lo que quieres mostrar | De dónde viene | Cadencia de actualización |
|---|---|---|
| Saldo de LDOT del usuario | Almacenamiento de la cuenta para el token líquido | Bajo demanda / por bloque |
| Valor subyacente en DOT | Saldo de LDOT × tipo de cambio actual | Cada pocos minutos |
| Canje pendiente | Almacenamiento de la cola de unbonding | Cada pocos minutos |
| Tiempo hasta la liquidación | Período de unbonding de las constantes del runtime | En actualización del runtime |
| Tendencia de acumulación de recompensas | Historial del tipo de cambio | Cada hora o diario |
Si necesitas tipos de cambio históricos para gráficos, ahora estás en territorio de archivo. Un endpoint público no es la herramienta adecuada para rellenar meses de estado; planifica infraestructura con capacidad de archivo.
Configuración de la cadena Acala de un vistazo
Mantén esta configuración consistente en la configuración de tu cartera, tu backend y tu monitoreo.
| Configuración | Valor |
|---|---|
| Red | Acala (parachain de Polkadot) |
| Token | ACA (nativo), DOT (activo de staking), LDOT (derivado líquido) |
| Interfaz | Substrate JSON-RPC y WebSocket |
| Endpoint HTTP público | https://acala.api.onfinality.io/public |
| Endpoint WebSocket público | wss://acala.api.onfinality.io/public-ws |
| Soporte de transporte | HTTP y WebSocket |
Puedes encontrar la lista actual de endpoints y detalles de la red en la página de la red Acala. Si te integras a través de una ruta compatible con EVM, ten en cuenta que la capa EVM de Acala es un asunto separado del módulo de staking de Substrate — el estado del staking líquido vive en el lado de Substrate, así que no esperes que una llamada estilo ERC-20 lo devuelva.
Modos de fallo comunes y cómo depurarlos
Las integraciones de staking líquido fallan de un pequeño número de formas predecibles. Aquí está la lista corta de diagnóstico.
- El elemento de almacenamiento devuelve null. Tu cliente está en un runtime donde el módulo o el nombre del elemento cambió, o estás conectado a una cadena diferente. Verifica primero
system_chainystate_getRuntimeVersion. - El tipo de cambio parece congelado. Estás leyendo un valor en caché, o tu intervalo de sondeo es más largo que la cadencia de actualización del tipo. Registra el valor bruto y el número de bloque juntos.
- El extrinsic se envía pero nunca finaliza. Estás rastreando la inclusión, no la finalización. Suscríbete a las cabezas finalizadas, no solo a las nuevas cabezas, antes de marcar una acción de staking como completa.
- WebSocket se desconecta bajo carga. Las suscripciones de larga duración necesitan lógica de reconexión con retroceso. Trata un socket caído como normal, no excepcional.
- Las lecturas se vuelven lentas en horas pico. Los endpoints compartidos absorben el tráfico de muchos llamadores. Si tu latencia es impredecible, eso es una señal para pasar a un nodo dedicado en lugar de reintentar con más fuerza.
Una sonda de monitoreo mínima te mantiene por delante de la mayoría de estos:
#!/usr/bin/env bash
# Probe Acala RPC health and record the block height
RESP=$(curl -s --max-time 5 https://acala.api.onfinality.io/public \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"chain_getHeader","params":[]}')
echo "$(date -u +%FT%TZ) $RESP" >> acala-rpc-health.log
Ejecuta esto en un horario, alerta cuando la altura deje de avanzar, y detectarás problemas de endpoint antes que tus usuarios.
Construir versus comprar para un backend de staking
Si estás ejecutando un panel de staking líquido, un rastreador de recompensas o un bot que actúa en ventanas de unbonding, tienes una decisión de construir versus comprar en infraestructura.
Ejecutar tu propio nodo de Acala te da control total y sin techo de rendimiento compartido, pero implica aprovisionamiento, sincronización, actualización en cambios de runtime y monitoreo del nodo tú mismo. Para un equipo cuyo producto es la lógica de staking, eso suele ser una distracción.
Un proveedor de RPC gestionado elimina las operaciones del nodo pero introduce una dependencia: necesitas conocer las expectativas de rendimiento del proveedor, si admiten suscripciones WebSocket, si las lecturas de archivo están disponibles y cómo hacer failover. Cuando evalúes opciones, pon las preguntas en este orden:
- ¿Admite tanto HTTP como WebSocket para Acala?
- ¿Puede manejar tu cadencia de sondeo sin latencia impredecible?
- ¿Hay una ruta de archivo si necesitas estado histórico?
- ¿Qué sucede cuando el endpoint se degrada — puedes cambiar sin volver a desplegar?
- ¿El precio es predecible con tu volumen de solicitudes?
OnFinality proporciona RPC de Acala a través de su servicio API y ofrece nodos dedicados cuando necesitas rendimiento aislado. Puedes revisar los precios de RPC y la lista completa de redes RPC compatibles para ver cómo encaja Acala junto a las otras cadenas que ejecutas. Para un marco más amplio, la guía de selección de proveedor de RPC cubre los criterios de evaluación con más profundidad.
Puntos clave
- El staking líquido de Acala convierte el DOT en staking en LDOT, un derivado transferible que sigue generando recompensas.
- LDOT no es 1:1 con DOT — lee siempre el tipo de cambio en vivo del estado de la cadena antes de mostrar el valor.
- Acala está basado en Substrate, por lo que consultas el estado del staking a través del JSON-RPC estilo Polkadot.js y los metadatos del runtime, no una llamada ERC-20.
- Resuelve los nombres de módulos y almacenamiento desde los metadatos en vivo; los nombres codificados se rompen en las actualizaciones del runtime.
- Rastrea las cabezas finalizadas, no solo las nuevas cabezas, antes de marcar un extrinsic de staking como completo.
- Los endpoints compartidos sirven para paneles y prototipos; los nodos dedicados sirven para bots, indexadores y rutas con muchas escrituras.
- Monitorea la altura de bloque en un horario para que la degradación del endpoint aparezca antes de que los usuarios la noten.
Preguntas frecuentes
¿LDOT siempre vale lo mismo que DOT? No. LDOT representa una participación en una posición de staking agrupada, por lo que su valor en DOT cambia a medida que se acumulan recompensas. Lee el tipo de cambio del estado de la cadena.
¿Puedo leer el estado del staking líquido a través de una llamada EVM? El módulo de staking vive en el lado de Substrate de Acala. Usa la interfaz JSON-RPC de Substrate en lugar de esperar que una llamada de contrato estilo ERC-20 devuelva el estado del staking.
¿Por qué mi consulta de almacenamiento de staking devuelve null?
Generalmente porque el nombre del módulo o del elemento de almacenamiento cambió en una actualización del runtime, o porque estás conectado a una cadena diferente. Verifica con system_chain y state_getRuntimeVersion.
¿Necesito un nodo dedicado para un panel de staking? No necesariamente. Un endpoint compartido está bien para lecturas de bajo volumen. Pasa a un nodo dedicado cuando tu cadencia de sondeo, número de suscripciones o ruta de escritura hagan que el rendimiento compartido sea impredecible.
¿Con qué frecuencia debo actualizar el tipo de cambio? Ajusta tu cadencia a la frecuencia con la que el valor realmente cambia. Sondear cada bloque suele ser un desperdicio; sondear una vez por época suele ser demasiado lento para una interfaz en vivo.
¿Puedo rellenar datos históricos de staking en un endpoint público? Los endpoints públicos no están pensados para grandes lecturas históricas. Planifica infraestructura con capacidad de archivo si necesitas rellenar estado o eventos.