Skip to content

Đọc Dữ liệu Thị trường với Oracle

Mezo cung cấp dữ liệu thị trường thông qua hai hệ thống oracle: Skip Connect cho BTC/USD và Pyth Network cho các nguồn cấp giá bổ sung.

Oracle Skip cung cấp nguồn cấp giá BTC/USD gốc trên Mezo thông qua giao diện aggregator tương thích Chainlink.

  • Cặp được hỗ trợ: Chỉ BTC/USD
  • Tần suất cập nhật: Mỗi block
  • Giao diện: Chainlink Aggregator

Oracle Pyth cung cấp nhiều nguồn cấp giá ngoài BTC/USD.

Tần suất cập nhật: Phụ thuộc vào cặp token.

Giá được cập nhật khi price_deviation vượt quá ngưỡng đã đặt (tính bằng điểm phần trăm) hoặc mỗi time_difference giây, tùy điều kiện nào đến trước.

Khi xây dựng dApp sử dụng dữ liệu oracle, hãy tuân thủ các hướng dẫn sau:

  • Xác minh tính mới: Luôn kiểm tra timestamp và số block để phát hiện dữ liệu cũ. Đặt ngưỡng thời gian hết hạn phù hợp cho trường hợp sử dụng của bạn.
  • Đặt giới hạn giá: Triển khai kiểm tra tính hợp lý trên giá trị giá để phát hiện bất thường hoặc nỗ lực thao túng.
  • Giám sát điều kiện thị trường: Chú ý đến biến động, thanh khoản và các sự kiện thao túng tiềm năng có thể yêu cầu tạm dừng ứng dụng của bạn.
  • Kiểm toán bảo mật: Đảm bảo hợp đồng và các phụ thuộc đáp ứng tiêu chuẩn bảo mật. Kiểm toán mã xử lý dữ liệu oracle để ngăn chặn khai thác.

Oracle Skip triển khai giao diện tương thích Chainlink. Gọi latestRoundData() để lấy giá mới nhất:

Hợp đồng: 0x7b7c000000000000000000000000000000000015

Giá trị trả về:

  • roundId: ID vòng khi giá được cập nhật
  • answer: Giá BTC/USD (sử dụng decimals() để lấy độ chính xác thập phân)
  • startedAt: Timestamp Unix khi vòng bắt đầu
  • updatedAt: Timestamp Unix khi vòng được cập nhật lần cuối

Sử dụng Oracle Pyth (Nhiều Nguồn cấp)

Section titled “Sử dụng Oracle Pyth (Nhiều Nguồn cấp)”

Pyth cung cấp nhiều nguồn cấp giá thông qua hợp đồng EVM. Sử dụng getPriceNoOlderThan(pair_id, maxAgeSeconds) để lấy giá với kiểm tra thời gian hết hạn tích hợp.

Hợp đồng Mezo Mainnet: 0x2880aB155794e7179c9eE2e38200202908C17B43

Hợp đồng Mezo Testnet: 0x2880aB155794e7179c9eE2e38200202908C17B43

Hợp đồng Ethereum Mainnet: 0x4305FB66699C3B2702D4d05CF36551390A4c69C6

Hợp đồng Ethereum Sepolia: 0xDd24F84d36BF92C65F92307595335bdFab5Bbd21

Ví dụ lấy giá cho một price ID:

import "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
import "@pythnetwork/pyth-sdk-solidity/PythStructs.sol";
contract ReadPythPrice {
IPyth public immutable pyth;
constructor(address pythContract) {
pyth = IPyth(pythContract); // 0x2880aB155794e7179c9eE2e38200202908C17B43 on Mezo
}
function getPrice(bytes32 priceId, uint256 maxAgeSeconds)
external
view
returns (int64 price, uint64 conf, int32 expo, uint256 publishTime)
{
PythStructs.Price memory priceData = pyth.getPriceNoOlderThan(priceId, maxAgeSeconds);
return (priceData.price, priceData.conf, priceData.expo, priceData.publishTime);
}
// Example: Get MUSD/USD price
function getMUSDPrice() external view returns (int64, uint256) {
bytes32 musdPriceId = 0x0617a9b725011a126a2b9fd53563f4236501f32cf76d877644b943394606c6de;
PythStructs.Price memory price = pyth.getPriceNoOlderThan(musdPriceId, 3600); // Max 1 hour old
return (price.price, price.publishTime);
}
}

Tham khảo: API getPriceNoOlderThan tài liệu

Bạn có thể truy vấn nguồn cấp giá và metadata trực tiếp từ Pyth Network mà không cần tương tác với blockchain:

Có sẵn trên cả Mezo mainnet và testnet:

CặpĐịa chỉ Hợp đồngMạng
BTC/USD0x7b7c000000000000000000000000000000000015Mainnet
BTC/USD0x7b7c000000000000000000000000000000000015Testnet

API Node (Chỉ Testnet): http://mezo-node-0.test.mezo.org:1317/connect/oracle/v2/get_price?currency_pair=BTC/USD

Có sẵn trên:

  • Mezo Mainnet tại 0x2880aB155794e7179c9eE2e38200202908C17B43
  • Mezo Testnet tại 0x2880aB155794e7179c9eE2e38200202908C17B43
  • Ethereum Mainnet tại 0x4305FB66699C3B2702D4d05CF36551390A4c69C6
  • Ethereum Sepolia tại 0xDd24F84d36BF92C65F92307595335bdFab5Bbd21

ID nguồn cấp giá được hỗ trợ trên Mezo:

CặpID Nguồn cấp Giá
SolvBTC/USD0xf253cf87dc7d5ed5aa14cba5a6e79aee8bcfaef885a0e1b807035a0bbecc36fa
MUSD/USD0x0617a9b725011a126a2b9fd53563f4236501f32cf76d877644b943394606c6de
BTC/USD0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43
cbBTC/USD0x2817d7bfe5c64b8ea956e9a26f573ef64e72e4d7891f2d6af9bcc93f7aff9a97
USDC/USD0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a
USDT/USD0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b
T/USD0x7a072b799215196b0ecb6a58636ec312bce8461dcc33c28c3a046b1e636d121d

ID nguồn cấp giá được hỗ trợ trên Ethereum:

CặpID Nguồn cấp Giá
MUSD/USD0x0617a9b725011a126a2b9fd53563f4236501f32cf76d877644b943394606c6de
USDT/USD0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b

Yêu cầu thêm nguồn cấp giá: Để kích hoạt thêm nguồn cấp giá Pyth, hãy duyệt danh sách đầy đủ các ID nguồn cấp giá có sẵn và liên hệ với nhóm Mezo để yêu cầu kích hoạt onchain.