Fiyat Okuma
PriceFeed sözleşme adresini bulun, Chainlink arayüzüyle bağlanın ve gerekli doğrulamayla mevcut fiyatı okuyun.
Adım 1: Oracle Adresini Bulma
Belirli bir çift için PriceFeed sözleşme adresini bulmanın üç yolu:
Price Oracle Tracker (geliştirme sırasında en kolay): price-oracle-tracker.vercel.app (dağıtılmış tüm çiftleri, canlı fiyatları, ondalık basamakları, heartbeat değerlerini ve adresleri gösterir).
Zincir üstünde OracleFactory aracılığıyla:
pairToOracle(string pair)işlevini çağırın. Çift sembolleri büyük harfle girilmelidir (örn."PSG/USDT"): fabrika, okuma sırasında girdiyi normalleştirmez.Toplu olarak zincir üstünde OracleFactoryReader aracılığıyla: tek bir çağrıda tüm aktif çiftleri ve adreslerini almak için
getActiveOracles()işlevini çağırın.
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);
}Adım 2: Arayüzü Kullanarak Bağlanma
PriceFeed sözleşmesi, standart Chainlink IAggregatorV3Interface arayüzünü ve sağlık ile duraklatma durumu için Chiliz'e özgü uzantıları uygular.
Adım 3: Fiyatı Okuma
Besleme, bayat veya duraklatılmış durumda hata döndürmez: bu tasarım gereğidir. latestRoundData(), henüz round mevcut değilse NoDataAvailable() hatasıyla döner; ancak beslemenin duraklatılıp duraklatılmadığını veya bayat olup olmadığını kontrol etmez. Bu, Chainlink AggregatorV3Interface tasarımıyla örtüşür: fiyatı kullanmadan önce paused() ve getHealthStatus() kontrollerini yapmak tüketicinin sorumluluğundadır. Not: skaler yardımcılar (latestAnswer(), latestTimestamp(), getAnswer(), getTimestamp()), veri yokken hata döndürmek yerine 0 döndürür. Tam doğrulama örüntüsü için En İyi Uygulamalar sayfasına bakın.
Temel işlev, mevcut fiyatı round ve zaman damgası meta verileriyle birlikte döndüren latestRoundData() işlevidir.
Protokolünüz 18'e normalleştirmek yerine beslemenin yerel ondalık basamaklarını kullanıyorsa:
Geçmiş Veriler
Oracle, tüm geçmiş round verilerini zincir üstünde saklar. Her fiyat güncellemesi artan bir roundId ile yeni bir round oluşturur.
Chiliz beslemesinin sunduğu ek yardımcı görünümler:
latestAnswer()
Son fiyat veya yoksa 0
latestTimestamp()
Son updatedAt değeri veya yoksa 0
latestRound()
Mevcut round ID
getAnswer(uint80 roundId)
Belirli bir round için fiyat veya yoksa 0
getTimestamp(uint80 roundId)
Belirli bir round için zaman damgası veya yoksa 0
getRoundsData(uint80[] roundIds)
Toplu RoundData dizisi
roundExists(uint80 roundId)
updatedAt > 0 ise true
Olaylar (Events)
Her PriceFeed sözleşmesi şu olayları yayar:
AnswerUpdated(int256 indexed current, uint80 indexed roundId, uint256 updatedAt): her fiyat güncellemesinde yayılır. Fiyata veya round'a göre filtreleyin.NewRound(uint80 indexed roundId, address indexed startedBy, uint256 startedAt): yeni bir round başladığında yayılır. Round'a veya başlatan adrese göre filtreleyin.
Keşif İşlevleri (OracleFactoryReader)
getActiveOracles()
Oracle adresleriyle birlikte tüm aktif çiftleri döndürür
getAllOracles()
Pasif olanlar dahil tüm oracle'ları döndürür
getOraclesByPairs(string[] pairs)
Birden fazla çift adını tek çağrıda oracle adreslerine çözer
getOracleHealthStatus(address oracle)
Tek bir oracle için sağlık durumu
getAllOracleHealthStatus()
Sistemdeki her oracle için sağlık durumu
Son güncelleme
Bu yararlı oldu mu?