﻿---
title: "Precios de oráculo obsoletos"
description: "El precio de un oráculo está obsoleto para un consumidor cuando su hora de actualización documentada supera la antigüedad máxima permitida para esa acción; un tratamiento seguro también exige validar el feed, comprobar el secuenciador, definir fuentes alternativas y controlar la recuperación."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Precios de oráculo obsoletos

> Solo con fines educativos; no constituye asesoramiento de inversión. Invertir puede ocasionar pérdidas.

<a id="answer"></a>

## Respuesta directa

El valor de un oráculo está obsoleto para una acción concreta del consumidor cuando `age = consumerClock - sourceTimestamp` supera el `maxAge` configurado para esa acción. Un precio que no ha cambiado puede seguir siendo reciente, y un valor publicado hace poco puede ser económicamente erróneo. Antes de aplicar una política de aceptación específica para el feed, el activo, la cadena, el horario de mercado y la acción, el consumidor debe rechazar marcas de tiempo ausentes o futuras y respuestas no válidas.

El heartbeat y los umbrales de desviación activan publicaciones; no garantizan la frescura ni constituyen acuerdos de nivel de servicio. Un informe puede retrasarse tras activarse, y el mercado puede moverse menos que el umbral de desviación aunque una acción exija una antigüedad máxima menor. Los oráculos pull añaden otra frontera: el llamante puede tener que presentar una actualización autenticada antes de leer y el contrato debe rechazar las que superen el límite declarado.

En una L2, el estado del secuenciador y el periodo de gracia tras su recuperación forman una barrera independiente. Superarla no demuestra que el precio sea reciente, que la L2 sea final ni que todos los usuarios hayan tenido el mismo acceso. Las fuentes fallback y los últimos precios válidos son modos controlados de degradación, no la verdad: cada fuente y ruta de recuperación necesita unidades, marcas de tiempo, independencia, permisos, acciones admitidas y reglas de conciliación.

<a id="mechanism"></a>

## Cómo funciona

1. Fije la cadena, el bloque y el reloj; el contrato consumidor y la acción; el proxy y agregador del feed; el par y sus decimales; la versión de la interfaz; la configuración fallback y el estado de actualización.
2. Lea la respuesta exacta mediante la interfaz desplegada y gestione reversiones o ausencia de datos. Valide la respuesta, el estado o la confianza cuando proceda, `sourceTimestamp != 0` y `sourceTimestamp <= consumerClock` antes de restar.
3. Registre el heartbeat, la desviación, los horarios de mercado y la configuración de publicación; después establezca un `maxAge` independiente por acción. Defina expresamente la frontera, por ejemplo aceptar `age <= maxAge` y rechazar `age > maxAge`.
4. En despliegues L2 compatibles, valide la inicialización y el estado del feed del secuenciador, calcule desde el campo documentado el tiempo transcurrido desde la recuperación y aplique el periodo de gracia antes de comprobar por separado la frescura del precio.
5. Siga cada componente necesario de precios compuestos, cocientes y fallback. Normalice dirección y unidades y limite la frescura efectiva por la dependencia necesaria más antigua, no por la marca más reciente.
6. Defina estados normal, degradado y pausado por acción. El nuevo endeudamiento, emisión o apalancamiento puede cerrarse por seguridad mientras se mantienen el reembolso o la aportación de garantía; pruebe precios obsoletos, fallback y recuperados frente a exposición, liquidez y capacidad de los keepers.
7. Vigile cambios de fuente y proxy, latencia de actualización, rechazos, secuenciador, divergencia entre fuentes y horarios; ensaye caída, fallo del fallback, salto de recuperación, liquidaciones concentradas, MEV, registro de deuda incobrable y vuelta al modo normal.

En interfaces de tipo Chainlink, `latestRoundData()` puede exponer identificador de ronda, respuesta con signo, inicio, actualización y un campo de ronda heredado. La API actual documenta `answeredInRound` como obsoleto, de modo que una desigualdad histórica no debe presentarse como regla universal vigente: hay que inspeccionar proxy, agregador e implementación exactos. Una marca de tiempo indica cuándo se actualizó el estado documentado del feed, no que el valor sea ejecutable a cualquier tamaño. En Solidity, `block.timestamp` es la marca de tiempo del bloque actual dentro de las restricciones del consenso, no un oráculo externo de hora civil.

<a id="example"></a>

## Ejemplos resueltos

- **Frontera de antigüedad máxima.** Sean `consumerClock = 1,800,000,000` y `sourceTimestamp = 1,799,999,100`; por tanto, `age = 900 seconds = 15 minutes`. Una política `maxAge = 600 seconds` lo rechaza por `300 seconds`; una política `maxAge = 1,200 seconds` lo acepta con `300 seconds` de margen. El mismo valor puede ser válido para una acción y obsoleto para otra.
- **Un disparador no garantiza frescura.** El último precio publicado es `100.00`, el umbral de desviación es `1%` y el heartbeat es `3,600 seconds`. Tras `2,700 seconds`, un precio de mercado observado de `100.80` solo dista `0.8%`, así que ninguno de los disparadores didácticos se ha activado. En `101.20`, la desviación es `1.2%` y puede iniciar la publicación, pero el consumidor sigue leyendo `100.00` hasta que se incluya un informe nuevo y válido.
- **Doble barrera en L2.** El feed del secuenciador comunica que está operativo con `startedAt = 1,799,996,400`, `consumerClock = 1,800,000,000` y `grace = 3,600 seconds`; han transcurrido exactamente `3,600 seconds`. Con una política que bloquea mientras `elapsed <= grace`, la acción sigue bloqueada y pasa a ser elegible a los `3,601 seconds`. Aun así, depende de la marca temporal del precio, la respuesta y todas las demás comprobaciones.
- **Escalón de recuperación.** Con `10 ETH` de garantía, `12,000 USD` de deuda y umbral de liquidación del `75%`, un valor obsoleto de `2,000 USD/ETH` da `healthFactor = 10 * 2,000 * 0.75 / 12,000 = 1.25`. Un valor reanudado de `1,400 USD/ETH` da `0.875`. Con estos supuestos didácticos, la cuenta pasa a ser liquidable, pero la ejecución aún depende de reglas, liquidez, keepers, gas, ordenación y disponibilidad de la cadena.

<a id="risks"></a>

## Riesgos

- Cadena, feed, proxy, agregador, par de activos o versión de interfaz incorrectos.
- El consumidor lee una respuesta sin marca temporal ni estado documentado.
- No se rechaza una marca cero, futura o una resta con desbordamiento inferior.
- La antigüedad máxima es demasiado amplia para el activo, la acción, el horario o la volatilidad.
- La antigüedad máxima es demasiado estricta y causa denegación de servicio o impide reducir riesgo.
- Se interpreta el heartbeat como plazo de publicación garantizado o acuerdo de servicio.
- Se acumulan deriva o basis inferiores al umbral sin activar la desviación.
- Un informe activado se retrasa por la fuente, firmantes, red, gas, relé o cadena.
- Se aplica universalmente una comprobación de ronda obsoleta o específica de una implementación.
- Cambian inadvertidamente feed, proxy, agregador, heartbeat, desviación o interfaz.
- Se ignoran cierres, festivos, pausas o datos arrastrados del mercado.
- Un precio compuesto o cociente parece reciente aunque un componente requerido esté obsoleto.
- El estado del secuenciador L2 se ignora, no está inicializado, llega tarde o procede de otra red.
- Falta el periodo de gracia, está mal configurado o presenta un error de frontera.
- El secuenciador supera la prueba mientras el precio sigue obsoleto o no disponible.
- Se confunden hora L1, hora de bloque L2, observación, publicación y hora civil.
- Una actualización pull falta, es antigua, se selecciona sesgadamente, está mal formada o carece de fondos.
- Un fallback o último valor válido es antiguo, correlacionado, tiene otra escala o es circular.
- Fail-open permite acciones inseguras, mientras un fail-closed indiscriminado bloquea reembolso, aportación de garantía o recuperación ordenada.
- El salto de recuperación, liquidaciones agrupadas, MEV, poca liquidez, carreras de pausa o conciliación de deuda incobrable causan pérdidas secundarias.

<a id="misconceptions"></a>

## Errores frecuentes

- **«El heartbeat garantiza una actualización reciente en cada intervalo».** Es una configuración que activa actualizaciones; fallos de fuente o cadena aún pueden retrasar la publicación.
- **«Una marca temporal reciente demuestra un precio correcto y ejecutable».** Solo prueba la hora documentada; calidad, unidades, confianza, profundidad y lógica del consumidor siguen separadas.
- **«Una única antigüedad máxima sirve para todos los feeds y acciones».** Activos, horarios, cadenas y acciones de préstamo, liquidación, negociación y liquidación financiera tienen necesidades distintas.
- **«Secuenciador operativo significa reanudar todo de inmediato».** El periodo de gracia y la frescura del precio son barreras independientes, y puede haber políticas adicionales.
- **«Usar fallback o revertir toda función siempre es lo más seguro».** Un fallback débil valora mal el riesgo y un fallo indiscriminado puede impedir reembolsar o mejorar la garantía.

<a id="related"></a>

## Temas relacionados

- [Oráculo](/es/crypto/oracle/)
- [Ataques a oráculos](/es/crypto/oracle-attack/)
- [Respuesta a una caída del secuenciador](/es/crypto/sequencer-downtime-response/)

<a id="sources"></a>

## Fuentes

- [Chainlink Data Feeds](https://docs.chain.link/data-feeds) - Chainlink Documentation (consultado: 2026-08-13)
- [Data Feeds API Reference](https://docs.chain.link/data-feeds/api-reference) - Chainlink Documentation (consultado: 2026-08-13)
- [Developer Responsibilities](https://docs.chain.link/data-feeds/developer-responsibilities) - Chainlink Documentation (consultado: 2026-08-13)
- [L2 Sequencer Uptime Feeds](https://docs.chain.link/data-feeds/l2-sequencer-feeds) - Chainlink Documentation (consultado: 2026-08-13)
- [How to Use Real-Time Data in EVM Contracts](https://docs.pyth.network/price-feeds/core/use-real-time-data/pull-integration/evm) - Pyth Developer Hub (consultado: 2026-08-13)
- [Best Practices](https://docs.pyth.network/price-feeds/core/best-practices) - Pyth Developer Hub (consultado: 2026-08-13)
- [Units and Globally Available Variables](https://docs.soliditylang.org/en/latest/units-and-global-variables.html) - Solidity Documentation (consultado: 2026-08-13)
- [SC03:2026 Price Oracle Manipulation](https://scs.owasp.org/sctop10/SC03-PriceOracleManipulation/) - OWASP Smart Contract Security (consultado: 2026-08-13)

Source: https://wiki.fcontext.com/es/crypto/oracle-price-staleness/index.mdx
