﻿---
title: "Harga oracle kedaluwarsa"
description: "Harga oracle kedaluwarsa bagi konsumen ketika waktu pembaruan terdokumentasinya lebih tua daripada usia maksimum yang diizinkan untuk tindakan tersebut; penanganan aman juga memerlukan validitas feed, pemeriksaan sequencer, sumber cadangan, dan pemulihan terkendali."
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.

# Harga oracle kedaluwarsa

> Hanya untuk tujuan edukasi; bukan merupakan nasihat investasi atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.

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

## Jawaban langsung

Nilai oracle kedaluwarsa untuk tindakan konsumen tertentu ketika `age = consumerClock - sourceTimestamp` melampaui `maxAge` yang dikonfigurasi bagi tindakan itu. Harga yang tidak berubah masih dapat mutakhir, sedangkan nilai yang baru dipublikasikan tetap dapat salah secara ekonomi. Konsumen harus lebih dahulu menolak stempel waktu yang tidak ada atau berasal dari masa depan serta jawaban tidak valid, lalu menerapkan kebijakan penerimaan khusus feed, aset, jaringan, jam pasar, dan tindakan.

Interval pembaruan berkala dan ambang deviasi merupakan pemicu publikasi, bukan jaminan kemutakhiran atau perjanjian tingkat layanan. Laporan dapat terlambat setelah pemicu tercapai, dan pasar dapat bergerak di bawah ambang deviasi sementara suatu tindakan memerlukan usia maksimum yang lebih ketat. Oracle tarik menambah batas lain: pemanggil mungkin harus mengirim pembaruan terautentikasi sebelum membaca, dan kontrak harus menolak pembaruan yang lebih tua daripada batas yang dinyatakan.

Di L2, status sequencer dan masa tenggang pemulihan membentuk gerbang terpisah. Lolos dari gerbang tersebut tidak membuktikan harga aset mutakhir, L2 telah final, atau semua pengguna memperoleh akses setara. Harga cadangan dan harga valid terakhir adalah mode degradasi terkendali, bukan kebenaran; setiap sumber dan jalur pemulihan memerlukan satuan, stempel waktu, independensi, kewenangan, tindakan yang diizinkan, dan aturan rekonsiliasi.

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

## Cara kerjanya

1. Tetapkan jaringan, blok dan jam, kontrak dan tindakan konsumen, proksi dan agregator feed, pasangan aset dan desimal, versi antarmuka, konfigurasi cadangan, serta status peningkatan kontrak.
2. Baca respons yang tepat melalui antarmuka terpasang dan tangani revert atau ketiadaan data. Validasi jawaban, status atau keyakinan bila berlaku, serta `sourceTimestamp != 0` dan `sourceTimestamp <= consumerClock` sebelum melakukan pengurangan.
3. Catat konfigurasi interval pembaruan, deviasi, jam pasar, dan publikasi, lalu tetapkan `maxAge` independen untuk setiap tindakan. Definisikan batas secara eksplisit, misalnya menerima `age <= maxAge` dan menolak `age > maxAge`.
4. Pada pemasangan L2 yang didukung, validasi inisialisasi serta status feed sequencer, hitung waktu sejak pemulihan dari bidang terdokumentasi, dan terapkan masa tenggang yang dikonfigurasi sebelum memeriksa kemutakhiran harga secara terpisah.
5. Telusuri setiap komponen yang diperlukan dalam harga komposit, rasio, dan cadangan. Normalkan arah dan satuan, lalu batasi kemutakhiran efektif berdasarkan dependensi wajib yang paling tua, bukan stempel waktu terbaru.
6. Definisikan keadaan normal, terdegradasi, dan dijeda untuk setiap tindakan. Pinjaman, pencetakan, atau leverage baru dapat ditutup sementara pelunasan atau penambahan agunan tetap tersedia; uji harga kedaluwarsa, cadangan, dan pulih terhadap eksposur, likuiditas, serta kapasitas pelaku likuidasi.
7. Pantau perubahan sumber dan proksi, latensi pembaruan, tingkat penolakan, status sequencer, perbedaan antarsumber, serta jam pasar; latih skenario gangguan, kegagalan cadangan, lompatan pemulihan, likuidasi terkonsentrasi, MEV, pembukuan utang macet, dan kembali ke mode normal.

Untuk antarmuka bergaya Chainlink, `latestRoundData()` dapat menampilkan pengenal putaran, jawaban bertanda, waktu mulai, waktu pembaruan, dan bidang putaran lama. API saat ini mendokumentasikan `answeredInRound` sebagai usang, sehingga pemeriksaan pertidaksamaan historis tidak boleh disajikan sebagai aturan universal yang berlaku sekarang; periksa proksi, agregator, dan implementasi yang tepat. Stempel waktu menunjukkan kapan keadaan feed terdokumentasi diperbarui, bukan bahwa nilainya dapat dieksekusi pada ukuran berapa pun. Dalam Solidity, `block.timestamp` adalah stempel waktu blok saat ini dalam batas konsensus, bukan oracle waktu eksternal.

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

## Contoh terhitung

- **Batas usia maksimum.** Misalkan `consumerClock = 1,800,000,000` dan `sourceTimestamp = 1,799,999,100`, sehingga `age = 900 seconds = 15 minutes`. Kebijakan `maxAge = 600 seconds` menolaknya dengan selisih `300 seconds`; kebijakan `maxAge = 1,200 seconds` menerimanya dengan ruang `300 seconds`. Nilai feed yang sama dapat diterima bagi satu tindakan dan kedaluwarsa bagi tindakan lain.
- **Pemicu bukan kemutakhiran.** Harga terakhir yang dipublikasikan adalah `100.00`, pemicu deviasi `1%`, dan interval pembaruan `3,600 seconds`. Setelah `2,700 seconds`, harga pasar teramati `100.80` hanya berjarak `0.8%`, sehingga kedua pemicu pengajaran belum tercapai. Pada `101.20`, deviasi menjadi `1.2%` dan dapat memulai publikasi, tetapi konsumen masih membaca `100.00` sampai laporan baru yang valid disertakan.
- **Gerbang ganda L2.** Feed sequencer melaporkan aktif dengan `startedAt = 1,799,996,400`, `consumerClock = 1,800,000,000`, dan `grace = 3,600 seconds`, sehingga waktu berlalu tepat `3,600 seconds`. Menurut kebijakan yang memblokir selama `elapsed <= grace`, tindakan tetap terblokir dan baru memenuhi syarat pada `3,601 seconds`. Kelayakan masih bergantung pada stempel waktu harga, jawaban, dan setiap pemeriksaan konsumen lainnya.
- **Lompatan pemulihan.** Dengan agunan `10 ETH`, utang `12,000 USD`, dan ambang likuidasi `75%`, nilai kedaluwarsa `2,000 USD/ETH` menghasilkan `healthFactor = 10 * 2,000 * 0.75 / 12,000 = 1.25`. Nilai pulih `1,400 USD/ETH` menghasilkan `0.875`. Akun memenuhi syarat likuidasi berdasarkan masukan pengajaran ini, tetapi eksekusi masih bergantung pada aturan protokol, likuiditas, pelaku likuidasi, gas, pengurutan, dan ketersediaan jaringan.

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

## Risiko

- Jaringan, feed, proksi, agregator, pasangan aset, atau versi antarmuka salah.
- Konsumen membaca jawaban tanpa stempel waktu atau status terdokumentasi.
- Stempel waktu nol atau masa depan maupun underflow pengurangan tidak ditolak.
- Usia maksimum terlalu longgar bagi aset, tindakan, jam pasar, atau volatilitas.
- Usia maksimum terlalu ketat sehingga menimbulkan penolakan layanan atau menghambat pengurangan risiko.
- Interval pembaruan dianggap sebagai tenggat publikasi terjamin atau perjanjian tingkat layanan.
- Pergeseran atau basis di bawah ambang menumpuk ketika pemicu deviasi tidak tercapai.
- Laporan yang terpicu tertunda karena sumber, penanda tangan, jaringan, gas, relai, atau kegagalan jaringan.
- Pemeriksaan putaran yang usang atau khusus implementasi diterapkan secara universal.
- Perubahan feed, proksi, agregator, interval, deviasi, atau konfigurasi antarmuka tidak terdeteksi.
- Semantik pasar tutup, hari libur, pasar dijeda, atau data yang diteruskan diabaikan.
- Harga komposit atau rasio tampak mutakhir saat salah satu komponen wajib telah kedaluwarsa.
- Status sequencer L2 diabaikan, belum diinisialisasi, terlambat, atau dibaca dari jaringan yang salah.
- Masa tenggang pemulihan tidak ada, salah konfigurasi, atau memiliki kesalahan batas satu langkah.
- Status sequencer lolos sementara harga aset tetap kedaluwarsa atau tidak tersedia.
- Waktu L1, waktu blok L2, waktu observasi sumber, waktu publikasi, dan waktu nyata disamakan.
- Pembaruan tarik tidak ada, terlalu tua, dipilih secara selektif, rusak, atau kekurangan dana.
- Harga cadangan atau harga valid terakhir kedaluwarsa, berkorelasi, berbeda skala, atau melingkar.
- Kegagalan terbuka mengizinkan tindakan berbahaya, sedangkan penutupan menyeluruh menghalangi pelunasan, penambahan agunan, atau pemulihan tertib.
- Lompatan pemulihan, likuidasi terkonsentrasi, MEV, likuiditas tipis, perlombaan jeda, atau rekonsiliasi utang macet menimbulkan kerugian sekunder.

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

## Kesalahpahaman umum

- **"Interval pembaruan menjamin pembaruan mutakhir pada setiap periode."** Itu adalah konfigurasi pemicu pembaruan; gangguan sumber atau jaringan tetap dapat menunda publikasi.
- **"Stempel waktu baru membuktikan harga eksekusi yang benar."** Itu hanya membuktikan waktu pembaruan terdokumentasi; kualitas sumber, satuan, keyakinan, kedalaman pasar, dan logika konsumen tetap terpisah.
- **"Satu usia maksimum cocok untuk semua feed dan tindakan."** Aset, jam pasar, jaringan, serta tindakan peminjaman, likuidasi, perdagangan, dan penyelesaian memiliki kebutuhan latensi dan ketersediaan berbeda.
- **"Sequencer aktif berarti semua tindakan dapat segera dilanjutkan."** Masa tenggang pemulihan dan kemutakhiran harga adalah gerbang independen, dan kebijakan protokol atau jaringan dapat menambah syarat.
- **"Sumber cadangan atau membuat semua fungsi revert selalu paling aman."** Cadangan lemah salah menilai risiko, sedangkan kegagalan menyeluruh dapat mencegah pengguna melunasi atau memperbaiki rasio agunan.

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

## Topik terkait

- [Oracle](/id/crypto/oracle/)
- [Serangan oracle](/id/crypto/oracle-attack/)
- [Respons terhadap gangguan sequencer](/id/crypto/sequencer-downtime-response/)

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

## Sumber

- [Chainlink Data Feeds](https://docs.chain.link/data-feeds) - Chainlink Documentation (diakses: 2026-08-13)
- [Data Feeds API Reference](https://docs.chain.link/data-feeds/api-reference) - Chainlink Documentation (diakses: 2026-08-13)
- [Developer Responsibilities](https://docs.chain.link/data-feeds/developer-responsibilities) - Chainlink Documentation (diakses: 2026-08-13)
- [L2 Sequencer Uptime Feeds](https://docs.chain.link/data-feeds/l2-sequencer-feeds) - Chainlink Documentation (diakses: 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 (diakses: 2026-08-13)
- [Best Practices](https://docs.pyth.network/price-feeds/core/best-practices) - Pyth Developer Hub (diakses: 2026-08-13)
- [Units and Globally Available Variables](https://docs.soliditylang.org/en/latest/units-and-global-variables.html) - Solidity Documentation (diakses: 2026-08-13)
- [SC03:2026 Price Oracle Manipulation](https://scs.owasp.org/sctop10/SC03-PriceOracleManipulation/) - OWASP Smart Contract Security (diakses: 2026-08-13)

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