Lompat ke konten

Harga oracle kedaluwarsa

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.

Diperbarui

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

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.

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.

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.

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.

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.

Topik terkait

Sumber

Navigasi

Cari di wiki...