Cómo los oráculos de precios DeFi agregan y publican precios
Descubre cómo se agregan observaciones, cuándo heartbeat y desviación activan actualizaciones, cómo comprobar unidades y antigüedad y qué no garantizan estas defensas.
En esta guíaEl oráculo publica una referencia, no un precio ejecutable
Resumen breve
Un oráculo de precios lleva una referencia externa a un contrato inteligente. En un diseño push habitual, varias observaciones offchain se combinan en un informe firmado, se publican onchain y el protocolo lee la última respuesta. La desviación y el heartbeat influyen en cuándo se publica; quien consume el dato también debe comprobar decimales, unidad de cotización, `updatedAt` y, en algunas L2, el estado del secuenciador. Estos controles reducen riesgos concretos, pero no demuestran que el precio sea verdadero, suficientemente reciente para cualquier uso o seguro para toda transacción.
El oráculo publica una referencia, no un precio ejecutable
El oráculo conecta información externa a una cadena con código que debe ejecutarse en ella. Un protocolo de préstamos puede leer un feed para valorar garantías; un contrato derivado puede usar una referencia para liquidar o aplicar un límite de riesgo. El contrato puede leer el valor publicado en la cadena, pero no consulta por sí mismo todos los libros de órdenes externos ni determina qué precio es justo.
«Precio» puede significar un activo frente a una moneda de cotización, una tasa de rescate definida por el protocolo u otra medida. No equivale automáticamente al precio al que se vendería una posición grande. La guía sobre impacto y slippage en swaps DEX y la comparación entre mark price y última operación explican otras diferencias. Este artículo se centra en feeds push EVM comunes, no en una regla universal de DeFi.
Cómo las observaciones se convierten en una respuesta onchain
En el diseño Offchain Reporting de Chainlink, los nodos intercambian observaciones fuera de la cadena y acuerdan un informe. Un quórum lo firma; un transmisor lo envía como transacción; el agregador verifica las firmas y expone una respuesta, identificador de ronda y marca de tiempo. La documentación de Offchain Reporting describe la mediana de las observaciones publicada por ese diseño.
El contrato consumidor normalmente no vuelve a realizar toda la agregación: llama a latestRoundData() en la dirección proxy del feed. El agregador subyacente puede cambiar detrás del proxy. Consulta la guía EVM, la referencia de API y la dirección de la red concreta. Varios nodos no implican fuentes independientes: pueden usar los mismos proveedores o mercados.

Heartbeat y desviación definen los disparadores de publicación
Muchos feeds push combinan un umbral de desviación con un heartbeat. Un movimiento porcentual configurado frente al último valor publicado puede activar un informe; el heartbeat puede solicitar una actualización tras cierto tiempo aunque no haya un gran movimiento. El directorio actual de Data Feeds y la página de direcciones muestran parámetros por activo, red y feed.
Son disparadores propios de cada feed, no una promesa general de actualizar cada N segundos. Un cambio pequeño quizá no active la desviación y un informe solicitado aún debe observarse, transmitirse e incluirse en un bloque. Por eso el heartbeat no garantiza una hora exacta de llegada ni evita que el precio quede obsoleto. El protocolo debe definir una antigüedad máxima adecuada a la rapidez del activo y al uso.
Interpreta answer, decimales y unidad de cotización
latestRoundData() devuelve identificador de ronda, answer, startedAt, updatedAt y answeredInRound; la referencia API marca el último campo como obsoleto. answer es un entero de punto fijo, no necesariamente una cifra legible en dólares. Lee decimals() y la descripción del feed exacto. Si un feed hipotético BTC/USD devuelve 6,725,000,000,000 con 8 decimales, equivale a 67.250 dólares por BTC.
Los decimales del feed no son los del token. Una cantidad ERC-20 puede usar 18 decimales y la respuesta de precio, 8; hay que escalar cada dato según su unidad antes de multiplicar. BTC/USD expresa dólares por bitcoin; USD/BTC invierte la unidad. Para derivar un par, escala ambos feeds y divide en el orden correcto. El ejemplo de denominación de precios deriva BTC/EUR a partir de BTC/USD y EUR/USD.
Comprobar antigüedad es una regla de la aplicación
updatedAt registra cuándo se actualizó la ronda más reciente. El consumidor puede compararlo con la marca de tiempo del bloque actual y rechazar respuestas más antiguas que el máximo definido por la aplicación. También puede comprobar una hora distinta de cero, un valor positivo para un activo con precio positivo y límites razonables. Los límites deben ajustarse al producto: uno demasiado estrecho puede rechazar movimientos válidos.
Supongamos un mercado de préstamos hipotético con cuatro unidades de garantía y un factor del 75%. La última respuesta es 200,000,000,000 con 8 decimales, o $2.000 por unidad; el límite de préstamo es 4 × $2.000 × 75% = $6.000. Si el mercado cae a $1.820, la baja es del 9%. Con supuestos de 10% de desviación y un heartbeat de 60 minutos, quizá aún no se haya pedido un informe nuevo. Al precio más bajo, el límite sería $5.460.
Si la aplicación rechaza precios de más de cinco minutos y la ronda tiene veinte minutos, puede bloquear préstamos nuevos en vez de usar $2.000. La comprobación no actualiza el feed: modifica las acciones permitidas mientras el dato supera la antigüedad admitida. Préstamos, retiros, liquidaciones y pagos pueden necesitar respuestas distintas, porque pausar todo también puede causar daño. Las cifras y condiciones son hipotéticas, no parámetros actuales ni recomendaciones.
Los controles del secuenciador L2 cubren otro tipo de interrupción
En muchas L2, las transacciones pasan por un secuenciador. Durante una caída o recuperación pueden retrasarse, el uso normal puede interrumpirse y órdenes pendientes pueden ejecutarse bajo condiciones de mercado diferentes. Una respuesta de precio que parezca reciente no prueba que la ruta de ejecución estuviera disponible ni que todos pudieran actuar a la vez.
Chainlink documenta un feed separado de disponibilidad del secuenciador L2: answer == 0 significa activo y answer == 1, caído. startedAt registra el cambio de estado; el ejemplo de consumidor verifica el estado y espera un periodo de gracia definido por la aplicación tras la recuperación antes de leer el precio. Comprueba la red y dirección en la guía de L2 Sequencer Uptime Feeds. El periodo no garantiza que el precio se haya actualizado ni que las transacciones pendientes hayan terminado.
Estos controles no garantizan un resultado correcto o justo
Quórum, mediana, desviación, heartbeat, antigüedad y estado del secuenciador responden preguntas limitadas. No garantizan liquidez, identidad correcta del activo, independencia de proveedores ni precio ejecutable para un tamaño concreto. Una marca de tiempo reciente puede acompañar un valor erróneo o manipulado; uno antiguo puede seguir cerca del mercado en una sesión tranquila.
Ningún disparador elimina brechas de precio, congestión o errores de escala, selección de par, antigüedad o liquidación. La guía para seleccionar feeds de calidad recomienda evaluar liquidez y dependencias y preparar respuestas a datos obsoletos, tardíos, ausentes o inesperados. Persisten riesgos de contrato, gobernanza, puente, garantía y liquidación. El precio de un oráculo de stablecoin tampoco garantiza rescate a la par; consulta la guía de desvinculación.
Sigue toda la ruta del precio antes de confiar en ella
Identifica la cadena, proxy, par, moneda de cotización, decimales de answer y dirección del contrato. Comprueba que la descripción del feed corresponda al activo y no copies una dirección de otra red. Si hace falta, revisa el modelo de fuentes y el historial de actualizaciones. Chainlink señala que los agregadores pueden diferir entre redes, por lo que importa revisar código y configuración.
Después sigue el uso del valor: conversión de unidades, verificación de updatedAt, antigüedad máxima y respuesta ante datos inválidos. En L2, revisa feed de disponibilidad, hora de recuperación, periodo de gracia y transacciones retrasadas. Analiza con el contrato real los casos de precio obsoleto y caída/recuperación. Para distinguir referencias, consulta mark price frente a la última operación.
Preguntas frecuentes
Q1¿Heartbeat significa que el precio siempre tiene como máximo esa antigüedad?
No. Es un disparador temporal del diseño de actualización, no una garantía de publicación e inclusión en bloque en un instante exacto ni de coincidencia con un mercado en vivo. Revisa updatedAt y define una política adecuada.
Q2¿Puede estar equivocado un feed de oráculo basado en mediana?
Sí. La mediana limita algunos valores atípicos, pero no corrige problemas de fuentes compartidas, mercados poco líquidos, pares equivocados o fallos del código consumidor.
Q3¿El feed de disponibilidad del secuenciador L2 es igual a comprobar un precio obsoleto?
No. El primero informa del estado del secuenciador y del momento del cambio; la comprobación de antigüedad compara updatedAt del precio con la hora actual. Quizá se necesiten ambos y un periodo de gracia.
Fuentes
Informar de un problema
Prepararemos un correo con el enlace de este artículo. Mark recibirá el aviso cuando lo envíes
Comprobación rápida
¿Ya leíste la guía? Compruébalo con 3 preguntas
Pregunta 01
Un feed BTC/USD devuelve `6,725,000,000,000` con 8 decimales. ¿Cuál es el precio escalado?
Elige una respuesta para ver la explicación