Marktgegevens lezen met orakels
Mezo biedt marktgegevens via twee orakelsystemen: Skip Connect voor BTC/USD en Pyth Network voor aanvullende prijsfeeds.
Overzicht
Section titled “Overzicht”Skip-orakel
Section titled “Skip-orakel”Het Skip-orakel biedt native BTC/USD-prijsfeeds op Mezo via een Chainlink-compatibele aggregator-interface.
- Ondersteund paar: Alleen BTC/USD
- Updatefrequentie: Elk blok
- Interface: Chainlink Aggregator
Pyth-orakel
Section titled “Pyth-orakel”Het Pyth-orakel biedt meerdere prijsfeeds naast BTC/USD.
Updatefrequentie: Afhankelijk van het tokenpaar.
- Op Mezo zie configuratiebestand voor details.
- Op Ethereum zie configuratiebestand voor details.
De prijs wordt bijgewerkt wanneer de price_deviation meer dan een ingestelde drempel (in procentpunten) afwijkt of elke time_difference seconden, afhankelijk van wat het eerst optreedt.
Best practices
Section titled “Best practices”Bij het bouwen van dApps die orakelgegevens gebruiken, volg deze richtlijnen:
- Versheid valideren: Controleer altijd tijdstempels en bloknummers om verouderde gegevens te detecteren. Stel geschikte verouderingsdrempels in voor uw gebruik.
- Prijsgrenzen instellen: Implementeer plausibiliteitscontroles op prijswaarden om anomalieën of manipulatiepogingen te detecteren.
- Marktomstandigheden monitoren: Wees u bewust van volatiliteit, liquiditeit en potentiële manipulatie-evenementen die het pauzeren van uw applicatie kunnen vereisen.
- Beveiligingsaudits: Zorg ervoor dat uw contracten en afhankelijkheden aan beveiligingsnormen voldoen. Audit code die orakelgegevens verwerkt om exploits te voorkomen.
Prijsfeeds lezen
Section titled “Prijsfeeds lezen”Skip-orakel gebruiken (BTC/USD)
Section titled “Skip-orakel gebruiken (BTC/USD)”Het Skip-orakel implementeert een Chainlink-compatibele interface. Roep latestRoundData() aan om de laatste prijs op te halen:
Contract: 0x7b7c000000000000000000000000000000000015
Retourwaarden:
roundId: De ronde-ID toen de prijs werd bijgewerktanswer: De BTC/USD-prijs (gebruikdecimals()om de decimale precisie te krijgen)startedAt: Unix-tijdstempel wanneer de ronde begonupdatedAt: Unix-tijdstempel wanneer de ronde voor het laatst werd bijgewerkt
Pyth-orakel gebruiken (Meerdere feeds)
Section titled “Pyth-orakel gebruiken (Meerdere feeds)”Pyth biedt meerdere prijsfeeds via zijn EVM-contracten. Gebruik getPriceNoOlderThan(pair_id, maxAgeSeconds) om prijzen op te halen met ingebouwde versheidscontroles.
Contract Mezo Mainnet: 0x2880aB155794e7179c9eE2e38200202908C17B43
Contract Mezo Testnet: 0x2880aB155794e7179c9eE2e38200202908C17B43
Contract Ethereum Mainnet: 0x4305FB66699C3B2702D4d05CF36551390A4c69C6
Contract Ethereum Sepolia: 0xDd24F84d36BF92C65F92307595335bdFab5Bbd21
Voorbeeld om de prijs op te halen voor een gegeven prijs-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); }}Referentie: getPriceNoOlderThan API-documentatie
Offchain-prijsgegevens
Section titled “Offchain-prijsgegevens”U kunt prijsfeeds en metadata rechtstreeks van het Pyth Network opvragen zonder interactie met de blockchain:
- Hermes API: https://hermes.pyth.network/docs/#/rest/price_feeds_metadata
- Prijs-feed-ID’s: https://docs.pyth.network/price-feeds/price-feeds#feed-ids
Beschikbare prijsfeeds
Section titled “Beschikbare prijsfeeds”Skip-orakel-feeds
Section titled “Skip-orakel-feeds”Beschikbaar op zowel Mezo mainnet als testnet:
| Paar | Contractadres | Netwerk |
|---|---|---|
| BTC/USD | 0x7b7c000000000000000000000000000000000015 | Mainnet |
| BTC/USD | 0x7b7c000000000000000000000000000000000015 | Testnet |
Node API (alleen testnet): http://mezo-node-0.test.mezo.org:1317/connect/oracle/v2/get_price?currency_pair=BTC/USD
Pyth-orakel-feeds
Section titled “Pyth-orakel-feeds”Beschikbaar op:
- Mezo Mainnet op
0x2880aB155794e7179c9eE2e38200202908C17B43 - Mezo Testnet op
0x2880aB155794e7179c9eE2e38200202908C17B43. - Ethereum Mainnet op
0x4305FB66699C3B2702D4d05CF36551390A4c69C6 - Ethereum Sepolia op
0xDd24F84d36BF92C65F92307595335bdFab5Bbd21.
Ondersteunde prijs-feed-ID’s Mezo:
| Paar | Prijs-feed-ID |
|---|---|
| SolvBTC/USD | 0xf253cf87dc7d5ed5aa14cba5a6e79aee8bcfaef885a0e1b807035a0bbecc36fa |
| MUSD/USD | 0x0617a9b725011a126a2b9fd53563f4236501f32cf76d877644b943394606c6de |
| BTC/USD | 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 |
| cbBTC/USD | 0x2817d7bfe5c64b8ea956e9a26f573ef64e72e4d7891f2d6af9bcc93f7aff9a97 |
| USDC/USD | 0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a |
| USDT/USD | 0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b |
| T/USD | 0x7a072b799215196b0ecb6a58636ec312bce8461dcc33c28c3a046b1e636d121d |
Ondersteunde prijs-feed-ID’s Ethereum:
| Paar | Prijs-feed-ID |
|---|---|
| MUSD/USD | 0x0617a9b725011a126a2b9fd53563f4236501f32cf76d877644b943394606c6de |
| USDT/USD | 0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b |
Aanvullende prijsfeeds aanvragen: Om aanvullende Pyth-prijsfeeds in te schakelen, blader door de volledige lijst van beschikbare prijs-feed-ID’s en neem contact op met het Mezo-team om onchain-activering aan te vragen.