Skip to content
Wszystkie przewodniki po opcjach
Referencje cenowe DeFi8 min czytania

Jak wyrocznie cenowe DeFi agregują i publikują ceny

Wyjaśniamy agregację obserwacji, aktualizacje przez heartbeat i odchylenie, jednostki, kontrolę nieaktualnych danych oraz ograniczenia zabezpieczeń L2.

W tym przewodnikuWyrocznia publikuje wartość referencyjną, a nie cenę możliwą do uzyskania

Krótkie podsumowanie

Wyrocznia cenowa przekazuje zewnętrzną wartość referencyjną do smart kontraktu. W typowym modelu push kilka obserwacji spoza łańcucha trafia do podpisanego raportu, który jest publikowany onchain, a protokół odczytuje najnowszą odpowiedź. Odchylenie i heartbeat wpływają na moment publikacji; konsument musi też sprawdzić decimals, jednostkę kwotowania, `updatedAt`, a w niektórych L2 status sequencera. Te kontrole ograniczają wybrane ryzyka, ale nie dowodzą, że cena jest prawdziwa, dostatecznie świeża dla każdego zastosowania ani bezpieczna dla każdej transakcji.

Wyrocznia publikuje wartość referencyjną, a nie cenę możliwą do uzyskania

Wyrocznia łączy informacje spoza blockchaina z kodem wykonywanym onchain. Protokół pożyczkowy może odczytać feed, aby wycenić zabezpieczenie; kontrakt instrumentu pochodnego może używać odniesienia przy rozliczeniu lub limicie ryzyka. Kontrakt odczytuje wartość zarejestrowaną w stanie łańcucha, ale sam nie przegląda wszystkich zewnętrznych arkuszy zleceń, by wyznaczyć uczciwą cenę.

„Cena” może oznaczać parę aktywo/waluta kwotowania, ustalony przez protokół kurs wykupu lub inną miarę. Nie jest automatycznie ceną sprzedaży dużej pozycji. Zobacz przewodnik o wpływie ceny i poślizgu swapów DEX oraz porównanie mark price i ostatniej transakcji. Ten artykuł omawia popularne feedy push na EVM, a nie uniwersalną regułę DeFi.

Jak obserwacje stają się odpowiedzią onchain

W modelu Offchain Reporting Chainlink węzły oracle wymieniają obserwacje poza łańcuchem i uzgadniają raport. Kworum podpisuje raport, nadawca przesyła go w transakcji, a agregator weryfikuje podpisy i udostępnia odpowiedź, identyfikator rundy oraz znacznik czasu. Dokumentacja Offchain Reporting opisuje publikację mediany obserwacji w tym modelu.

Kontrakt konsumenta zwykle nie wykonuje ponownie całej agregacji, tylko wywołuje latestRoundData() na adresie proxy feedu. Agregator za proxy może się zmienić. Sprawdź właściwą sieć i feed w przewodniku EVM i referencji API. Duża liczba węzłów nie oznacza niezależnych źródeł; mogą korzystać z tych samych giełd lub dostawców.

Scena bez tekstu: obserwacje rynku przechodzą przez sieć węzłów do feedu cenowego, a potem przez bramkę kontroli do skarbca zabezpieczeń.
Obserwacje są agregowane, zanim protokół odczyta feed; aktualność ceny i stan sekwencera sprawdza się osobno.

Heartbeat i odchylenie określają wyzwalacze publikacji

Wiele feedów push łączy próg odchylenia z heartbeat. Określona zmiana procentowa od ostatniej opublikowanej wartości może uruchomić nowy raport; heartbeat może zażądać aktualizacji po upływie czasu nawet bez dużego ruchu. Aktualny katalog Data Feeds i strona adresów feedów pokazują ustawienia konkretnego aktywa, sieci i feedu.

Są to warunki właściwe dla feedu, a nie obietnica aktualizacji co N sekund. Mała zmiana może nie przekroczyć progu, a żądany raport nadal trzeba zebrać, przesłać i umieścić w bloku. Heartbeat nie gwarantuje więc dokładnego czasu dotarcia ani braku przestarzałych danych. Protokół powinien sam określić maksymalny wiek odpowiedni dla aktywa i zastosowania.

Poprawnie odczytaj answer, decimals i jednostkę kwotowania

latestRoundData() zwraca identyfikator rundy, answer, startedAt, updatedAt i answeredInRound; dokumentacja API oznacza ostatnie pole jako przestarzałe. answer jest liczbą całkowitą w formacie stałoprzecinkowym, a niekoniecznie czytelną kwotą dolarową. Sprawdź decimals() i opis wybranego feedu. Hipotetyczny feed BTC/USD z 8 miejscami zwracający 6,725,000,000,000 oznacza 67 250 USD za BTC.

Miejsca dziesiętne feedu różnią się od miejsc dziesiętnych tokena. Ilość ERC-20 może używać 18 miejsc, a odpowiedź cenowa 8; przed mnożeniem przeskaluj każdy składnik według własnej jednostki. BTC/USD oznacza dolary za bitcoina, a USD/BTC odwraca jednostkę. Przy wyprowadzaniu pary przeskaluj oba feedy i podziel we właściwej kolejności; przykład denominacji pokazuje BTC/EUR z BTC/USD i EUR/USD.

Kontrola nieaktualności to reguła aplikacji

updatedAt podaje czas aktualizacji najnowszej rundy. Konsument może porównać go ze znacznikiem czasu bieżącego bloku i odrzucić wartość starszą niż maksymalny wiek ustawiony przez aplikację. Zależnie od feedu można sprawdzić też niezerowy czas, dodatnią odpowiedź dla aktywa o dodatniej cenie i rozsądne granice. Zbyt wąski zakres może odrzucić prawidłowy ruch rynku.

Załóżmy hipotetyczny rynek pożyczek z czterema jednostkami zabezpieczenia i współczynnikiem 75%. Ostatnia odpowiedź 200,000,000,000 przy 8 miejscach oznacza 2 000 USD za jednostkę; limit pożyczki to 4 × $2,000 × 75% = $6,000. Spadek rynku do 1 820 USD wynosi 9%. Przy założonym odchyleniu 10% i heartbeat 60 minut nowy raport może jeszcze nie być wymagany; przy niższej cenie limit wynosi 5 460 USD.

Jeśli aplikacja odrzuca ceny starsze niż pięć minut, a runda ma dwadzieścia minut, może zablokować nowe pożyczki zamiast używać 2 000 USD. Kontrola nie aktualizuje feedu; zmienia dozwolone działania, gdy dane przekraczają limit wieku. Pożyczki, wypłaty, likwidacje i spłaty mogą wymagać różnych reakcji, bo całkowite zatrzymanie też szkodzi. Liczby i wyzwalacze są hipotetyczne, nie opisują aktualnych ustawień ani zaleceń.

Kontrola sequencera L2 dotyczy innego ryzyka przerwy

W wielu L2 użytkownicy wysyłają transakcje przez sequencer. Podczas awarii lub przywracania działania transakcje mogą się opóźniać, normalne korzystanie może być utrudnione, a oczekujące zlecenia mogą zostać wykonane po zmianie rynku. Odpowiedź cenowa wyglądająca na świeżą nie dowodzi, że ścieżka wykonania działała lub wszyscy mogli działać równocześnie.

Chainlink opisuje osobny L2 Sequencer Uptime Feed: answer == 0 oznacza działanie, a answer == 1 awarię. startedAt zapisuje zmianę stanu; przykład konsumenta sprawdza status i czeka na ustalony przez aplikację okres karencji po przywróceniu działania, zanim odczyta cenę. Sprawdź adres i zachowanie sieci w przewodniku uptime feedów L2. Karencja nie gwarantuje odświeżenia ceny ani zakończenia oczekujących transakcji.

Te kontrole nie gwarantują prawidłowego ani sprawiedliwego wyniku

Kworum, mediana, odchylenie, heartbeat, limit wieku i status sequencera odpowiadają na ograniczone pytania. Nie gwarantują płynności rynku, właściwej identyfikacji aktywa, niezależności dostawców ani ceny możliwej do uzyskania dla określonej wielkości zlecenia. Świeży znacznik czasu może towarzyszyć błędnej lub zmanipulowanej wartości; stara wartość może pozostać bliska cenie na spokojnym rynku.

Żaden wyzwalacz nie usuwa luk cenowych, przeciążenia sieci ani błędów skalowania, wyboru pary, kontroli świeżości czy likwidacji. Wskazówki wyboru jakościowych Data Feeds zalecają ocenę płynności i zależności oraz przygotowanie na dane stare, opóźnione, brakujące lub nieoczekiwane. Nadal istnieją ryzyka kontraktu, zarządzania, mostu, zabezpieczenia i likwidacji. Cena oracle stablecoina nie gwarantuje wykupu po wartości nominalnej; zobacz przewodnik depegu.

Przed zaufaniem prześledź całą ścieżkę ceny

Ustal łańcuch, proxy feedu, parę aktywa, walutę kwotowania, decimals odpowiedzi i adres kontraktu. Sprawdź, czy opis feedu pasuje do aktywa; nie kopiuj adresu z innej sieci. W razie potrzeby przejrzyj model źródeł i historię aktualizacji. Chainlink wskazuje, że agregatory różnią się między sieciami, więc ważne są kod i konfiguracja.

Następnie prześledź użycie odpowiedzi: przeliczenie ilości i jednostek cenowych, kontrolę updatedAt, maksymalny wiek i reakcję na nieprawidłową wartość. Na L2 sprawdź feed uptime, czas wznowienia, karencję i opóźnione transakcje. W rzeczywistym kontrakcie przeanalizuj zarówno starą cenę, jak i awarię oraz powrót działania. Różne pola cenowe opisuje porównanie mark price i ostatniej transakcji.

Częste pytania

Q1Czy heartbeat oznacza, że cena nigdy nie będzie starsza niż ten interwał?

Nie. To czasowy wyzwalacz aktualizacji, a nie gwarancja publikacji i umieszczenia w bloku w dokładnym momencie ani zgodności z rynkiem na żywo. Sprawdź updatedAt i określ odpowiednią politykę świeżości.

Q2Czy mediana feedu oracle może być błędna?

Tak. Mediana może ograniczyć wpływ niektórych wartości odstających, ale nie naprawi wspólnego problemu źródła, płytkiego rynku, błędnej pary ani błędu w logice konsumenta.

Q3Czy feed uptime sequencera L2 to to samo co kontrola nieaktualnej ceny?

Nie. Feed uptime informuje o stanie sequencera i czasie zmiany; kontrola wieku porównuje updatedAt ceny z bieżącym czasem. Aplikacja może potrzebować obu i okresu karencji.

Źródła i dalsza lektura

Zgłoś problem

Przygotujemy e-mail z linkiem do tego artykułu. Mark otrzyma zgłoszenie dopiero po jego wysłaniu

Szybki test

Przeczytano? Sprawdź się w 3 pytaniach

Pytanie 1 / 3

Pytanie 01

Feed BTC/USD z 8 miejscami zwraca `6,725,000,000,000`. Jaka jest przeskalowana cena?

Wybierz odpowiedź, aby zobaczyć wyjaśnienie

Słownik opcji