Przejdź do głównej treści
Logo Avana

Price Oracles

Jak protokół zamienia stan pozycji LP w wartości zabezpieczenia istotne dla kredytu.

Przegląd

Avana wycenia zabezpieczenie LP, rekonstruując pozycję i wyceniając aktywa w niej. Dla fungible LP protokół wyprowadza wartość z zewnętrznych cen aktywów i rekonstrukcji sald poola. Dla concentrated liquidity rozkłada pozycję według płynności, zakresu, bieżącego ticka, ekspozycji tokenowej i naliczonych opłat.

Wynik jest dyskontowany do odzyskiwalnej wartości zabezpieczenia. Moc pożyczkowa opiera się na tym, co pozycja realistycznie może wspierać przy założeniach ryzyka rynku — nie na optymistycznej wartości aktywów netto.

To rozróżnienie między wartością mark a wartością odzyskiwalną utrzymuje oracle użytecznym dla lendingu, a nie tylko analytics. LP ERC-20, LP NFT i poole multi-asset mogą dzielić jeden high-level interfejs tylko dlatego, że każda klasa przechodzi własne kontrole walidacji i odporności na manipulację, zanim wartość dotrze do spoke.

LP collateral value depends on:

  • Ceny bazowych aktywów
  • Rezerwy poola lub podział inventory
  • Fee accrual
  • Dla concentrated liquidity — bieżący tick względem zakresu pozycji
  • Czy pozycja jest in-range, czy głównie jednostronna

Interfejs Oracle: IOracle

Borrow Spokes potrzebują jednej powierzchni kontraktowej, nawet gdy formaty LP mocno różnią się między DEX-ami. `IOracle` daje ten wspólny kształt i trzyma osobno wartość principalu, naliczone opłaty oraz zarezerwowane bufory — dzięki temu późniejsza logika ryzyka nie musi zgadywać, na którą część pozycji patrzy:

function getValue(uint256 tokenId, address asset)
  external view returns (
    uint256 fullValue,
    uint256 feeValue,
    uint256 reserveValue
  );
fullValueZrekonstruowana wartość płynności principalu, zanim zastosowane zostaną późniejsze korekty stresu likwidacji.
feeValueWartość opłat naliczonych przez pozycję, które można rozpoznać obok principalu.
reserveValueZarezerwowana część zatrzymana na bufory ryzyka oracle, unwindu i protokołu.

Interfejs ukrywa plumbing właściwy dla DEX-a przed spoke. Dzięki temu ten sam caller obsługuje LP ERC-20, LP NFT i poole multi-asset przez jeden kształt zwrotu, zostawiając miejsce na konserwatywne traktowanie właściwe dla rodziny zabezpieczenia za kulisami.

Architektura wielowarstwowa

Wycena LP to proces etapowy, a nie pojedynczy odczyt ceny spot. Ścieżka oracle przechodzi przez następujące kroki:

1

Wyceniaj bazowe aktywa z zewnętrznych solidnych oracle

Zaczynaj od odpornych zewnętrznych feedów dla bazowych aktywów, żeby zabezpieczenie nie dziedziczyło pełnego szumu ani manipulowalności surowego stanu spot poola.

2

Wyprowadzaj wartość LP konserwatywnie

Odbuduj salda fungible LP albo rozłóż pozycje concentrated liquidity z rezerw, płynności, zakresu i opłat — deterministyczną ścieżką, którą spoke może rozumować.

3

Haircut na impermanent loss i slippage likwidacji

Zdyskontuj zrekonstruowaną wycenę do odzyskiwalnej wartości zabezpieczenia, która zakłada stres, slippage i niedoskonałe wyjścia — a nie czyste wykupienie przy teoretycznym NAV.

4

Ogranicz ekspozycję według rodziny LP i głębokości poola

Stosuj kontrole według rodziny LP, klasy poola i dostępnej głębokości, żeby cieńsze lub bardziej złożone rynki nie dostawały tych samych limitów pożyczki co głębsze i prostsze.

5

Likwiduj na podstawie odzyskiwalnej wartości unwindu, nie optymistycznego NAV

Przy przyznawaniu mocy pożyczkowej i decyzji o likwidacji używaj wartości, którą da się rozsądnie zrealizować ścieżką unwindu — a nie najlepszej możliwej wyceny mark.

Obsługa właściwa dla DEX-a

Różne DEX-y udostępniają różne elementy stanu, a oracle używa tych wejść do rekonstrukcji pozycji i weryfikacji pricingu. Dane wyprowadzone z poola nie są przyjmowane ślepo jako bezpośredni mark zabezpieczenia.

Typ DEX / LPŹródło OracleUwagi
Curve Stable/Stable ERC-20 LPsZewnętrzne feedy stablecoinów + kontrole stanu poola + weryfikacja TWAPZewnętrzne ceny zakotwiczają aktywa, a salda poola i naliczanie opłat określają zdyskontowaną wartość zabezpieczenia.
Uniswap V2 ERC-20 LPsChainlink + rekonstrukcja rezerw + weryfikacja TWAPStandardowe tokeny LP są wyceniane ze zrekonstruowanych sald bazowych, a TWAP służy jako odporny na manipulację cross-check.
Uniswap V3 NFT LPsChainlink + dekompozycja pozycji + kontrole tick/TWAPNFT jest rozkładane według płynności, aktywnego zakresu i bieżącej ceny, a potem dostaje haircut do odzyskiwalnej wartości likwidacji.
Balancer Multi-Asset LPsChainlink + rekonstrukcja ważonego inventoryPoole multi-token używają zewnętrznych cen i ważonego inventory poola, by oszacować konserwatywną wartość zabezpieczenia.
SushiSwap / AerodromeChainlink + rekonstrukcja rezerw + weryfikacja TWAPObserwacje wyprowadzone z poola weryfikują zrekonstruowaną wartość i pomagają opierać się nadużyciom same-transaction na rynkach o niższej płynności.
PancakeSwapChainlink + weryfikacja TWAP oparta na blokachZewnętrzne ceny pozostają kotwicą, a obserwacje oparte na blokach walidują stan pozycji i założenia unwindu.

Obliczanie TWAP według DEX-a

TWAP-y to wejścia weryfikacyjne. Siedzą obok zewnętrznych cen aktywów i deterministycznej rekonstrukcji pozycji, by sprawdzić, czy obserwowany stan poola jest spójny z wiarygodną ścieżką unwindu. Pomagają odrzucać podejrzane lub krótkotrwałe zniekształcenia, ale same nie zastępują szerszego modelu oracle.

Uniswap V2 & SushiSwap

On-chain cumulative price data over a 1-hour window is used to cross-check the reconstructed reserve picture and reduce sensitivity to flash swaps or other short-lived pool distortions.

Uniswap V3

Kontrole świadome pozycji uwzględniają zakres ticków, rozkład płynności i naliczone opłaty, żeby protokół mógł zweryfikować rozłożoną ekspozycję tokenową każdego LP NFT — zamiast traktować NFT jak black box.

Balancer

Ważone obserwacje tokenów są łączone z wagami poola, by zwalidować podziały inventory multi-asset, zanim oracle przypisze konserwatywną wartość zabezpieczenia.

Curve

Obserwacje stablecoinów służą głównie do wykrywania stale feedów, dryfu rezerw i krótkoterminowych anomalii, podczas gdy zewnętrzne ceny pozostają główną kotwicą.

Trader Joe & Aerodrome

Skumulowane obserwacje cen w oknie 30–60 minut pomagają walidować stan pooli o niższej płynności i opierać się manipulacji same-transaction podczas kontroli zabezpieczenia.

Bezpieczeństwo i zapobieganie manipulacji

  • Progi odchylenia

    Nowe pożyczki lub likwidacje mogą zostać wstrzymane, gdy dane weryfikacyjne wyprowadzone z poola oddalą się zbyt daleko od zewnętrznych cen referencyjnych poza maxDifference.

  • maxPoolPriceDifference

    To utrzymuje stan implied przez pool w zgodzie z cenami bazowych tokenów i ogranicza natychmiastową manipulację poola lub nadużycie oracle w tej samej transakcji.

  • Capy open interest

    Ekspozycja jest ograniczana według rodziny LP, głębokości poola i złożoności zabezpieczenia, żeby cieńsze rynki dostawały ciaśniejsze limity pożyczki.

  • Recovery Haircuts

    Oracle dyskontuje teoretyczną wartość LP o impermanent loss, slippage unwindu i założenia stresowej likwidacji, zanim przyznana zostanie jakakolwiek moc pożyczkowa.

  • Oracle Sentinel

    Oracle Sentinel obserwuje zdrowie feedów i wejścia weryfikacyjne oraz może uruchomić zachowanie fallback, gdy dane są stale, skompromitowane lub niespójne z kontrolami stanu pozycji.

Konfigurowalne parametry Oracle

Ustawienia oracle właściwe dla poola są konfigurowane per token przez setTokenConfig. Tabela poniżej pokazuje parametry, które definiują, jak token i powiązany pool powinny być sprawdzane:

ParametrOpis
TokenAdres tokena zabezpieczenia
AggregatorV3InterfaceFeed Chainlink dla bazowego tokena
maxFeedAgeMaksymalny akceptowalny wiek feedu Chainlink
PoolKonkretny pool DEX (Uniswap V3, Balancer, Curve itd.)
twapSecondsOkno obliczania TWAP
ModeTryb operacyjny oracle (standard/fallback)
maxDifferenceMaksymalne dozwolone odchylenie między ceną DEX a ceną weryfikacji

W praktyce zachowanie oracle wynika z połączenia zewnętrznego pricingu aktywów, logiki rekonstrukcji LP, traktowania wartości odzyskiwalnej oraz ustawień per token skonfigurowanych przezsetTokenConfig.