For the complete documentation index, see llms.txt. This page is also available as Markdown.

แนวทางปฏิบัติที่ดี

รูปแบบการตรวจสอบ Health status API การตรวจสอบความเก่า และ checklist การรวมระบบ สำหรับการใช้งาน Chiliz Chain price feeds อย่างปลอดภัย

ตรวจสอบก่อนใช้ราคาเสมอ

latestRoundData() revert ด้วย NoDataAvailable() หากยังไม่มี round แต่ไม่บังคับตรวจสอบความเก่าหรือการ pause — คืนค่าที่เก็บไว้ตามที่เป็น ก่อนใช้ค่าราคาใดๆ ให้ตรวจสอบสามข้อเหล่านี้เสมอ:

  1. ตรวจสอบ pause: เรียก paused() และปฏิเสธหาก feed ถูก paused

  2. ตรวจสอบ answer เป็นบวก: กำหนดให้ answer > 0

  3. ตรวจสอบความเก่า: ใช้ getHealthStatus().isHealthy เป็นเงื่อนไข

ตัวอย่าง getSafePrice() ใน การอ่านราคา รองรับทั้งสามข้อ

Health Status API

PriceFeed แต่ละรายการเปิดเผย view getHealthStatus() ที่รวบรวมข้อมูลความสดในการเรียกครั้งเดียว:

function getHealthStatus()
    external view
    returns (
        uint256 lastUpdateTimestamp,
        uint256 totalRounds,
        uint256 timeSinceLastUpdate,
        bool isHealthy
    );
ฟิลด์
คำอธิบาย

lastUpdateTimestamp

updatedAt ของ round ล่าสุด

totalRounds

จำนวน round ทั้งหมดที่เขียน

timeSinceLastUpdate

block.timestamp - lastUpdateTimestamp (หรือ block.timestamp หากไม่มีข้อมูล)

isHealthy

true หาก timeSinceLastUpdate <= updateInterval × healthFactor

health factor ถูกกำหนดค่าเริ่มต้นเป็น 2 แต่สามารถกำหนดค่าต่อ feed โดย oracle admin ผ่าน setHealthFactor() อย่า hardcode 2 — อ่านโดยตรงจาก contract:

health window คือ updateInterval × healthFactor ซึ่งกำหนดค่าต่อ feed — updateInterval คือระยะห่างขั้นต่ำ on-chain ขนาดเล็ก ไม่ใช่ heartbeat ซึ่งแตกต่างกันต่อ feed: CHZ/USDC ใช้ 5s × 720 = window 1 ชั่วโมง PEPPER/CHZ ใช้ 10s × 720 = window 2 ชั่วโมง ในขณะที่ off-chain pipeline ส่งข้อมูลตาม heartbeat ~1 ชั่วโมง อย่าใช้ updateInterval เพียงอย่างเดียวเป็นเกณฑ์ความเก่า — ใช้ isHealthy เป็นเงื่อนไข — ดู getSafePrice() ใน การอ่านราคา สำหรับรูปแบบฉบับสมบูรณ์

ใช้ getAllOracleHealthStatus() บน OracleFactoryReader เพื่อตรวจสอบทุก feed ในระบบพร้อมกัน — มีประโยชน์สำหรับ dashboard และการแจ้งเตือน off-chain

Cache decimals()

คู่แต่ละคู่มีความแม่นยำ decimal ของตัวเอง — เรียก decimals() เสมอเพื่อยืนยันก่อนตีความค่าราคา Decimals ถูกกำหนดในช่วง deployment และไม่เปลี่ยนแปลง ดังนั้นให้อ่านครั้งเดียวตอน contract initialization แทนการอ่านทุกครั้งที่อ่านราคา:

จัดการสถานะ Paused อย่างสง่างาม

ในกรณีฉุกเฉิน oracle manager สามารถ pause feed ได้ จัดการ revert ที่เกิดขึ้นอย่างสะอาดแทนการใช้ค่าที่ไม่ดีโดยเงียบ:

ใช้ Tracker ระหว่างการพัฒนา

Price Oracle Tracker ให้คุณเปรียบเทียบราคา on-chain กับ CoinMarketCap และ CoinGecko แบบเรียลไทม์ ทำให้ง่ายต่อการตรวจสอบความแม่นยำของ feed ระหว่างการรวมระบบ รวมถึงแสดงสถานะสุขภาพสด พารามิเตอร์ heartbeat และที่อยู่ contract แต่ละรายการสำหรับทุกคู่

Checklist การรวมระบบ

อัปเดตล่าสุด

สิ่งนี้มีประโยชน์หรือไม่?