Saltar al contenido

Precios de oráculo obsoletos

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.

Actualizado

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

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.

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.

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.

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.

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.

Temas relacionados

Fuentes

Navegación

Buscar en la wiki...