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

Đọc giá

Tìm địa chỉ hợp đồng PriceFeed, kết nối bằng giao diện Chainlink, và đọc giá hiện tại với xác thực đúng cách.

Bước 1: Tìm Địa Chỉ Oracle

Ba cách để tìm địa chỉ hợp đồng PriceFeed cho một cặp nhất định:

  • Price Oracle Tracker (dễ nhất trong khi phát triển): price-oracle-tracker.vercel.app — hiển thị tất cả các cặp đã triển khai, giá trực tiếp, decimals, heartbeat, và địa chỉ.

  • On-chain qua OracleFactory: gọi pairToOracle(string pair). Ký hiệu cặp phải được truyền bằng chữ hoa (ví dụ: "PSG/USDT") — factory không chuẩn hóa đầu vào khi đọc.

  • Bulk on-chain qua OracleFactoryReader: gọi getActiveOracles() để lấy tất cả các cặp đang hoạt động và địa chỉ của chúng trong một lần gọi.

interface IOracleFactory {
    function pairToOracle(string memory pair) external view returns (address);
    function getOracleCount() external view returns (uint256);
}

function resolveFeed(address factory, string memory pair)
    external view returns (address)
{
    // Pair symbol must be passed in uppercase (e.g. "PSG/USDT").
    return IOracleFactory(factory).pairToOracle(pair);
}

Bước 2: Kết Nối Bằng Giao Diện

Hợp đồng PriceFeed triển khai IAggregatorV3Interface chuẩn của Chainlink, cộng với các phần mở rộng riêng của Chiliz cho trạng thái sức khỏe và tạm dừng.

Bước 3: Đọc Giá

Hàm chính là latestRoundData(), trả về giá hiện tại cùng với metadata round và timestamp.

Nếu giao thức của bạn sử dụng decimals gốc của nguồn giá thay vì chuẩn hóa về 18:

Dữ Liệu Lịch Sử

Oracle lưu trữ tất cả dữ liệu round lịch sử on-chain. Mỗi lần cập nhật giá tạo ra một round mới với roundId tăng dần.

Các hàm helper view bổ sung được cung cấp bởi Chiliz feed:

Hàm
Trả về

latestAnswer()

Giá mới nhất, hoặc 0 nếu không có

latestTimestamp()

updatedAt mới nhất, hoặc 0 nếu không có

latestRound()

ID round hiện tại

getAnswer(uint80 roundId)

Giá cho một round cụ thể, hoặc 0

getTimestamp(uint80 roundId)

Timestamp cho một round cụ thể, hoặc 0

getRoundsData(uint80[] roundIds)

Mảng RoundData hàng loạt

roundExists(uint80 roundId)

true nếu updatedAt > 0

Sự Kiện

Mỗi hợp đồng PriceFeed phát ra:

  • AnswerUpdated(int256 indexed current, uint80 indexed roundId, uint256 updatedAt): phát ra mỗi lần cập nhật giá. Lọc theo giá hoặc round.

  • NewRound(uint80 indexed roundId, address indexed startedBy, uint256 startedAt): phát ra khi bắt đầu một round mới. Lọc theo round hoặc theo địa chỉ đã bắt đầu nó.

Hàm Khám Phá (OracleFactoryReader)

Hàm
Mô tả

getActiveOracles()

Trả về tất cả các cặp đang hoạt động với địa chỉ oracle của chúng

getAllOracles()

Trả về tất cả oracle, bao gồm cả các oracle không hoạt động

getOraclesByPairs(string[] pairs)

Phân giải nhiều tên cặp thành địa chỉ oracle trong một lần gọi

getOracleHealthStatus(address oracle)

Trạng thái sức khỏe cho một oracle duy nhất

getAllOracleHealthStatus()

Trạng thái sức khỏe cho mọi oracle trong hệ thống

Cập nhật lần cuối

Nội dung này có hữu ích không?