Thực hành tốt nhất
Các mẫu xác thực, API trạng thái sức khỏe, kiểm tra staleness, và danh sách kiểm tra tích hợp để sử dụng nguồn giá Chiliz Chain một cách an toàn.
Luôn Xác Thực Trước Khi Sử Dụng Giá
latestRoundData() revert với NoDataAvailable() nếu không có round nào tồn tại, nhưng không thực thi kiểm tra staleness hoặc tạm dừng: nó trả về các giá trị đã lưu trữ như nguyên bản. Trước khi sử dụng bất kỳ giá trị giá nào, luôn thực hiện ba kiểm tra sau:
Kiểm tra tạm dừng: gọi
paused()và từ chối nếu nguồn giá bị tạm dừng.Giá trị dương: yêu cầu
answer > 0.Kiểm tra staleness: kiểm soát bằng
getHealthStatus().isHealthy.
Ví dụ getSafePrice() trong Đọc Giá triển khai cả ba.
API Trạng Thái Sức Khỏe
Mỗi PriceFeed cung cấp một view getHealthStatus() tổng hợp thông tin về độ tươi mới trong một lần gọi:
function getHealthStatus()
external view
returns (
uint256 lastUpdateTimestamp,
uint256 totalRounds,
uint256 timeSinceLastUpdate,
bool isHealthy
);lastUpdateTimestamp
updatedAt của round gần nhất
totalRounds
Tổng số round đã ghi
timeSinceLastUpdate
block.timestamp - lastUpdateTimestamp (hoặc block.timestamp nếu không có dữ liệu)
isHealthy
true nếu timeSinceLastUpdate <= updateInterval × healthFactor
Health factor được khởi tạo là 2 theo mặc định nhưng có thể cấu hình theo từng nguồn giá bởi quản trị viên oracle qua setHealthFactor(). Không hardcode 2. đọc trực tiếp từ hợp đồng:
Cửa sổ sức khỏe là updateInterval × healthFactor, cả hai được cấu hình theo từng nguồn giá: updateInterval là khoảng cách tối thiểu on-chain nhỏ, không phải heartbeat. Nó thay đổi theo từng nguồn giá: CHZ/USDC sử dụng cửa sổ 5s × 720 = 1 giờ, PEPPER/CHZ sử dụng cửa sổ 10s × 720 = 2 giờ, trong khi pipeline off-chain đẩy theo heartbeat khoảng 1 giờ. Đừng bao giờ dùng updateInterval một mình làm cơ sở staleness: kiểm soát bằng isHealthy: xem getSafePrice() trong Đọc Giá để biết mẫu đầy đủ.
Sử dụng getAllOracleHealthStatus() trên OracleFactoryReader để theo dõi mọi nguồn giá trong hệ thống cùng một lúc: hữu ích cho dashboard và cảnh báo off-chain.
Cache decimals()
Mỗi cặp có độ chính xác thập phân riêng: luôn gọi decimals() để xác nhận trước khi diễn giải giá trị giá. Decimals được thiết lập khi triển khai và không bao giờ thay đổi, vì vậy hãy đọc chúng một lần khi khởi tạo hợp đồng thay vì mỗi lần đọc giá:
Xử Lý Trạng Thái Tạm Dừng Một Cách Thanh Lịch
Trong trường hợp khẩn cấp, quản lý oracle có thể tạm dừng một nguồn giá. Xử lý revert kết quả một cách rõ ràng thay vì âm thầm sử dụng giá trị xấu:
Sử Dụng Tracker Trong Quá Trình Phát Triển
Price Oracle Tracker cho phép bạn so sánh giá on-chain với CoinMarketCap và CoinGecko theo thời gian thực, giúp dễ dàng xác thực độ chính xác của nguồn giá trong quá trình tích hợp. Nó cũng hiển thị trạng thái sức khỏe trực tiếp, thông số heartbeat, và địa chỉ hợp đồng riêng lẻ cho mọi cặp.
Danh Sách Kiểm Tra Tích Hợp
Cập nhật lần cuối
Nội dung này có hữu ích không?