본문으로 이동

오라클 가격 노후화

기록된 업데이트 시각이 특정 작업의 허용 최대 경과 시간을 넘으면 해당 오라클 가격은 소비자에게 노후화된 값입니다. 안전한 처리에는 피드 유효성, 시퀀서 확인, 대체 경로 및 통제된 복구도 필요합니다.

업데이트

교육 목적으로만 제공되며 투자 조언이 아닙니다. 투자에는 손실이 발생할 수 있습니다.

핵심 답변

age = consumerClock - sourceTimestamp가 해당 작업에 설정된 maxAge를 넘으면 오라클 값은 특정 소비자 작업에 대해 노후화된 값입니다. 가격이 변하지 않았어도 최신일 수 있고, 최근 게시된 값도 경제적으로 틀릴 수 있습니다. 소비자는 누락되거나 미래인 타임스탬프와 무효한 응답값을 먼저 거부한 뒤 피드, 자산, 체인, 시장 운영 시간 및 작업별 수용 정책을 적용해야 합니다.

하트비트와 편차 임계값은 게시 트리거이지 최신성 보장이나 서비스 수준 계약이 아닙니다. 트리거 후에도 보고가 지연될 수 있고, 작업은 더 짧은 최대 경과 시간을 요구하지만 시장 변동은 편차 임계값 아래일 수 있습니다. 풀 방식 오라클에는 다른 경계도 있습니다. 호출자가 읽기 전에 인증된 업데이트를 제출해야 할 수 있으며 컨트랙트는 정해진 한도보다 오래된 업데이트를 거부해야 합니다.

L2에서는 시퀀서 상태와 복구 유예 기간이 별도 관문을 이룹니다. 이 관문을 통과해도 자산 가격의 최신성, L2 최종성 또는 모든 사용자의 동등한 접근이 입증되지는 않습니다. 대체 가격과 최종 정상 가격은 통제된 성능 저하 모드이지 진실 자체가 아닙니다. 모든 출처와 복구 경로에는 단위, 타임스탬프, 독립성, 권한, 허용 작업 및 대사 규칙이 필요합니다.

작동 방식

  1. 체인, 블록과 시계, 소비자 컨트랙트와 작업, 피드 프록시와 집계기, 자산 쌍과 소수 자릿수, 인터페이스 버전, 대체 설정 및 업그레이드 상태를 고정합니다.
  2. 배포된 인터페이스로 정확한 응답을 읽고 되돌리기나 데이터 없음 상태를 처리합니다. 응답값, 상태나 해당되는 신뢰도, sourceTimestamp != 0, sourceTimestamp <= consumerClock를 검증한 다음 뺄셈합니다.
  3. 하트비트, 편차, 시장 운영 시간 및 게시 설정을 기록하고 작업별로 독립적인 maxAge를 정합니다. 예를 들어 age <= maxAge는 수용하고 age > maxAge는 거부하는 식으로 경계를 명시합니다.
  4. 지원되는 L2 배포에서는 시퀀서 피드 초기화와 상태를 검증하고 문서화된 필드로 복구 후 경과 시간을 계산합니다. 설정된 유예 기간을 적용한 뒤 가격 최신성을 별도로 확인합니다.
  5. 복합, 비율 및 대체 가격에 필요한 모든 항을 추적합니다. 방향과 단위를 정규화하고 가장 최신인 타임스탬프가 아니라 필요한 종속 항목 중 가장 오래된 항목으로 실효 최신성을 제한합니다.
  6. 작업별로 정상, 성능 저하 및 일시 중지 상태를 정의합니다. 신규 차입, 발행이나 레버리지는 안전하게 중단하되 상환이나 담보 추가는 허용할 수 있습니다. 오래된 가격, 대체 가격 및 복구 가격을 익스포저, 유동성 및 청산자 처리 능력에 대해 검사합니다.
  7. 출처와 프록시 변경, 업데이트 지연, 거부율, 시퀀서 상태, 출처 간 편차 및 시장 운영 시간을 감시합니다. 중단, 대체 경로 실패, 급변 복구, 청산 집중, MEV, 부실채권 회계 및 정상 모드 복귀를 훈련합니다.

Chainlink 형식 인터페이스에서 latestRoundData()는 라운드 식별자, 부호 있는 응답값, 시작 시각, 업데이트 시각 및 구형 라운드 필드를 제공할 수 있습니다. 현재 API는 answeredInRound를 폐기 예정으로 명시하므로 과거의 부등식 검사를 현재의 보편 규칙으로 제시해서는 안 됩니다. 정확한 프록시, 집계기 및 구현을 확인해야 합니다. 타임스탬프는 문서상 피드 상태가 업데이트된 시각일 뿐, 임의 규모에서 체결 가능한 값임을 뜻하지 않습니다. Solidity의 block.timestamp는 합의 한계 안의 현재 블록 타임스탬프이지 외부 실제 시각 오라클이 아닙니다.

계산 예시

  • 최대 경과 시간 경계. consumerClock = 1,800,000,000, sourceTimestamp = 1,799,999,100이면 age = 900 seconds = 15 minutes입니다. maxAge = 600 seconds 정책은 300 seconds 초과로 거부하고, maxAge = 1,200 seconds 정책은 300 seconds의 여유를 두고 수용합니다. 따라서 같은 피드 값이 한 작업에는 유효하지만 다른 작업에는 오래된 값일 수 있습니다.
  • 트리거는 최신성이 아니다. 마지막 게시 가격이 100.00, 편차 트리거가 1%, 하트비트가 3,600 seconds라고 하겠습니다. 2,700 seconds 뒤 관측 시장 가격 100.800.8%만 차이 나므로 두 설명용 트리거 모두 발동하지 않습니다. 101.20에서는 편차가 1.2%여서 게시를 시작할 수 있지만, 유효한 새 보고가 포함되기 전까지 소비자는 100.00을 읽습니다.
  • L2 이중 관문. 시퀀서 피드가 가동 중이라고 보고하고 startedAt = 1,799,996,400, consumerClock = 1,800,000,000, grace = 3,600 seconds이면 경과 시간은 정확히 3,600 seconds입니다. elapsed <= grace인 동안 차단하는 정책에서는 작업이 여전히 차단되고 3,601 seconds에 적격이 됩니다. 그 후에도 별도의 가격 타임스탬프, 응답값 및 기타 소비자 검사를 충족해야 합니다.
  • 복구 절벽. 담보 10 ETH, 부채 12,000 USD, 청산 임계값 75%에서 오래된 2,000 USD/ETH 가격은 healthFactor = 10 * 2,000 * 0.75 / 12,000 = 1.25를 냅니다. 복구된 1,400 USD/ETH 가격은 0.875입니다. 이 설명용 조건에서는 계정이 청산 대상이 되지만 실행은 프로토콜 규칙, 유동성, 청산자, 가스, 순서 및 체인 가용성에 달려 있습니다.

위험

  • 체인, 피드, 프록시, 집계기, 자산 쌍 또는 인터페이스 버전이 잘못되었습니다.
  • 소비자가 타임스탬프나 문서화된 상태 없이 응답값을 읽습니다.
  • 0, 미래 타임스탬프 또는 뺄셈 언더플로를 거부하지 않습니다.
  • 자산, 작업, 시장 운영 시간 또는 변동성에 비해 최대 경과 시간이 너무 깁니다.
  • 최대 경과 시간이 너무 짧아 서비스 거부나 위험 축소 방해를 일으킵니다.
  • 하트비트를 게시 기한이나 서비스 수준의 보장으로 취급합니다.
  • 편차 트리거 미만의 드리프트나 베이시스가 누적됩니다.
  • 출처, 서명자, 네트워크, 가스, 릴레이 또는 체인 장애로 보고가 지연됩니다.
  • 폐기 예정이거나 구현에 고유한 라운드 검사를 보편적으로 적용합니다.
  • 피드, 프록시, 집계기, 하트비트, 편차 또는 인터페이스 설정 변경을 놓칩니다.
  • 휴장, 공휴일, 거래 중지 또는 이월 데이터 의미를 무시합니다.
  • 복합 또는 비율 가격의 필수 항 하나가 오래됐지만 전체가 최신처럼 보입니다.
  • L2 시퀀서 상태를 무시하거나 미초기화, 지연 또는 잘못된 네트워크에서 읽습니다.
  • 복구 유예가 없거나 잘못 설정되거나 경계가 하나 어긋납니다.
  • 시퀀서 상태는 통과하지만 자산 가격은 여전히 오래됐거나 사용할 수 없습니다.
  • L1, L2, 관측, 게시 및 실제 시각을 혼동합니다.
  • 풀 업데이트가 없거나 너무 오래됐거나 선택적으로 제출되거나 형식 오류 또는 자금 부족입니다.
  • 대체 가격이 오래됐거나 상관되고 스케일이 다르거나 순환합니다.
  • 열린 실패는 위험 작업을 허용하고 일괄 닫힌 실패는 상환이나 담보 추가를 막습니다.
  • 복구 급변, 청산 집중, MEV, 얕은 유동성, 일시 중지 경합 또는 부실채권 대사가 2차 손실을 냅니다.

흔한 오해

  • “하트비트마다 최신 업데이트가 보장된다.” 업데이트 트리거 설정일 뿐이며 출처나 체인 장애로 게시가 지연될 수 있습니다.
  • “최근 타임스탬프면 정확하고 체결 가능한 가격이다.” 문서상 업데이트 시각만 증명하며 출처 품질, 단위, 신뢰도, 시장 깊이 및 소비자 로직은 별개입니다.
  • “하나의 최대 경과 시간을 모든 피드와 작업에 쓸 수 있다.” 자산, 시장 운영 시간, 체인, 차입, 청산, 거래 및 결제에는 서로 다른 지연과 가동성 요구가 있습니다.
  • “시퀀서가 복구되면 모든 작업을 즉시 재개할 수 있다.” 복구 유예와 가격 최신성은 독립된 관문이며 프로토콜이나 체인 안전 정책이 더 추가될 수 있습니다.
  • “대체 경로나 모든 함수의 되돌리기가 항상 가장 안전하다.” 취약한 대체 경로는 위험을 잘못 평가하고 무차별 실패는 상환이나 담보 비율 개선을 막습니다.

관련 주제

출처

탐색

위키 검색...