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

Lecture des prix

Trouvez l'adresse d'un contrat PriceFeed, connectez-vous via l'interface Chainlink et lisez le prix actuel avec une validation adéquate.

Étape 1 : Trouver l'adresse de l'oracle

Trois façons de trouver l'adresse d'un contrat PriceFeed pour une paire donnée :

  • Price Oracle Tracker (le plus simple pendant le développement) : price-oracle-tracker.vercel.app — affiche toutes les paires déployées, les prix en direct, les décimales, le heartbeat et les adresses.

  • On-chain via OracleFactory : appelez pairToOracle(string pair). Les symboles de paire doivent être passés en majuscules (p. ex. "PSG/USDT") — la factory ne normalise pas l'entrée en lecture.

  • En masse on-chain via OracleFactoryReader : appelez getActiveOracles() pour récupérer toutes les paires actives et leurs adresses en un seul appel.

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

Étape 2 : Se connecter via l'interface

Le contrat PriceFeed implémente la IAggregatorV3Interface standard de Chainlink, ainsi que des extensions spécifiques à Chiliz pour l'état de santé et le statut de pause.

Étape 3 : Lire le prix

La fonction principale est latestRoundData(), qui retourne le prix actuel avec les métadonnées de round et d'horodatage.

Si votre protocole utilise les décimales natives du flux plutôt que de normaliser à 18 :

Données historiques

L'oracle stocke toutes les données de rounds historiques on-chain. Chaque mise à jour de prix crée un nouveau round avec un roundId incrémental.

Vues d'aide supplémentaires exposées par le flux Chiliz :

Fonction
Retourne

latestAnswer()

Dernier prix, ou 0 si aucun

latestTimestamp()

Dernier updatedAt, ou 0 si aucun

latestRound()

ID du round actuel

getAnswer(uint80 roundId)

Prix pour un round spécifique, ou 0

getTimestamp(uint80 roundId)

Horodatage pour un round spécifique, ou 0

getRoundsData(uint80[] roundIds)

Tableau RoundData en masse

roundExists(uint80 roundId)

true si updatedAt > 0

Événements

Chaque contrat PriceFeed émet :

  • AnswerUpdated(int256 indexed current, uint80 indexed roundId, uint256 updatedAt) : émis à chaque mise à jour de prix. Filtrez par prix ou par round.

  • NewRound(uint80 indexed roundId, address indexed startedBy, uint256 startedAt) : émis lors du démarrage d'un nouveau round. Filtrez par round ou par l'adresse qui l'a démarré.

Fonctions de découverte (OracleFactoryReader)

Fonction
Description

getActiveOracles()

Retourne toutes les paires actives avec leurs adresses d'oracle

getAllOracles()

Retourne tous les oracles, y compris les inactifs

getOraclesByPairs(string[] pairs)

Résout plusieurs noms de paires en adresses d'oracle en un seul appel

getOracleHealthStatus(address oracle)

État de santé d'un oracle unique

getAllOracleHealthStatus()

État de santé de chaque oracle dans le système

Mis à jour

Ce contenu vous a-t-il été utile ?