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

Odczytywanie cen

Znajdź adres kontraktu PriceFeed, połącz się za pomocą interfejsu Chainlink i odczytaj aktualną cenę z właściwą walidacją.

Krok 1: Znajdź adres oracle

Trzy sposoby na znalezienie adresu kontraktu PriceFeed dla danej pary:

  • Price Oracle Tracker (najłatwiejszy podczas developmentu): price-oracle-tracker.vercel.app — pokazuje wszystkie wdrożone pary, ceny na żywo, decimals, heartbeat i adresy.

  • On-chain przez OracleFactory: wywołaj pairToOracle(string pair). Symbole par muszą być przekazane wielkimi literami (np. "PSG/USDT") — fabryka nie normalizuje danych wejściowych przy odczycie.

  • Zbiorowo on-chain przez OracleFactoryReader: wywołaj getActiveOracles(), aby pobrać wszystkie aktywne pary i ich adresy jednym wywołaniem.

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);
}

Krok 2: Połącz się za pomocą interfejsu

Kontrakt PriceFeed implementuje standardowy Chainlink IAggregatorV3Interface, plus rozszerzenia specyficzne dla Chiliz dotyczące stanu zdrowia i statusu pauzy.

Krok 3: Odczytaj cenę

Podstawową funkcją jest latestRoundData(), która zwraca aktualną cenę wraz z metadanymi rundy i znacznikiem czasu.

Jeśli Twój protokół używa natywnych dziesiętnych feedu zamiast normalizacji do 18:

Dane historyczne

Oracle przechowuje wszystkie historyczne dane rund on-chain. Każda aktualizacja ceny tworzy nową rundę z rosnącym roundId.

Dodatkowe funkcje pomocnicze widoku udostępniane przez feed Chiliz:

Funkcja
Zwraca

latestAnswer()

Ostatnia cena lub 0, jeśli brak danych

latestTimestamp()

Ostatni updatedAt lub 0, jeśli brak danych

latestRound()

Aktualny identyfikator rundy

getAnswer(uint80 roundId)

Cena dla konkretnej rundy lub 0

getTimestamp(uint80 roundId)

Znacznik czasu dla konkretnej rundy lub 0

getRoundsData(uint80[] roundIds)

Zbiorcza tablica RoundData

roundExists(uint80 roundId)

true, jeśli updatedAt > 0

Zdarzenia

Każdy kontrakt PriceFeed emituje:

  • AnswerUpdated(int256 indexed current, uint80 indexed roundId, uint256 updatedAt): emitowane przy każdej aktualizacji ceny. Filtruj według ceny lub rundy.

  • NewRound(uint80 indexed roundId, address indexed startedBy, uint256 startedAt): emitowane po rozpoczęciu nowej rundy. Filtruj według rundy lub adresu, który ją rozpoczął.

Funkcje odkrywania (OracleFactoryReader)

Funkcja
Opis

getActiveOracles()

Zwraca wszystkie aktywne pary z ich adresami oracle

getAllOracles()

Zwraca wszystkie oracle, łącznie z nieaktywnymi

getOraclesByPairs(string[] pairs)

Rozwiązuje wiele nazw par na adresy oracle jednym wywołaniem

getOracleHealthStatus(address oracle)

Stan zdrowia dla pojedynczego oracle

getAllOracleHealthStatus()

Stan zdrowia każdego oracle w systemie

Ostatnia aktualizacja

Czy to było pomocne?