가격 오라클
프로토콜이 LP 포지션 상태를 신용 관련 담보 가치로 변환하는 방식.
개요
Avana는 포지션을 재구성하고 그 안의 자산을 평가하여 LP 담보의 가격을 산정합니다. 대체 가능한 LP의 경우, 프로토콜은 외부 자산 가격과 풀 잔액 재구성을 통해 가치를 도출합니다. 집중 유동성의 경우, 유동성, 범위, 현재 틱, 토큰 노출 및 누적 수수료별로 포지션을 분해합니다. 결과는 시장의 위험 가정 하에서 회수 가능한 담보 가치를 추정하기 위해 할인됩니다. 따라서 차입 가능 한도는 포지션의 기초 자산과 청산 과정에서 이를 회수할 수 있는 조건을 모두 반영합니다. 포지션 가치와 회수 가능 가치 간의 구분이 중요한 이유는 오라클이 대출 결정에 입력값을 제공하기 때문입니다. ERC-20 LP 토큰, 포지션 NFT, 그리고 다자산 풀은 동일한 인터페이스를 공유하지만, 각 형식은 그 가치가 Borrow Spoke에 도달하기 전에 자체 재구성, 검증, 조작 검사를 거칩니다.
LP collateral value depends on:
- 기초 자산의 가격
- 풀 예약 또는 재고 분할
- Fee accrual
- 집중 유동성의 경우, 포지션 범위에 대한 현재 틱
- 포지션이 범위 내에 있는지 아니면 대부분 한쪽으로 치우쳐 있는지
오라클 인터페이스: IOracle
`IOracle`은 Borrow Spoke에 LP 형식 전반에서 공통 평가 인터페이스를 제공합니다. 그 반환 값은 주요 금액, 발생 수수료, 예약 버퍼를 구분하므로 호출자가 각 구성 요소를 별도로 계산할 수 있습니다:
function getValue(uint256 tokenId, address asset)
external view returns (
uint256 fullValue,
uint256 feeValue,
uint256 reserveValue
);이 인터페이스 뒤의 어댑터는 DEX-특정 재구성 및 검증을 처리합니다. Borrow Spoke은 ERC-20 LP 토큰, 위치 NFT 및 다중 자산 풀에 대해 동일한 반환 필드를 받으며, 각 구현은 해당 담보 유형에 필요한 검사를 적용합니다.
다층 아키텍처
LP의 평가는 단일 순간 가격 읽기가 아니라 단계별 과정입니다. 오라클 경로는 다음 단계를 거칩니다:
외부 신뢰할 수 있는 오라클에서 기초 자산의 가격 책정
외부 피드는 기본 토큰의 기준 가격을 제공합니다. 이는 자산 가격 입력을 단기 거래나 조작에 의해 영향을 받을 수 있는 풀의 즉시 거래 가격과 분리합니다.
LP 값을 보수적으로 산출하십시오
오라클은 준비금, 유동성, 범위 및 발생한 수수료를 사용하여 교환 가능한 LP 잔액을 재구성하거나 집중 유동성 포지션을 분해합니다. 이러한 입력은 포지션이 나타내는 자산을 결정합니다.
일시적 손실 및 청산 슬리피지에 대한 헤어컷
재구성된 가치는 스트레스받는 시장 상황, 청산 손실, 그리고 포지션의 청산 경로를 고려하여 할인됩니다. 결과 값은 청산 시 회수할 수 있는 금액을 추정합니다.
LP 가족 및 유동성 풀 깊이에 의한 캡 노출
노출 제어는 LP 계열, 풀 유형, 그리고 이용 가능한 유동성 깊이를 사용하여 시장이 지원할 수 있는 대출 한도를 제한합니다.
차입 및 청산에 회수 가능한 가치를 적용하다
차입 한도 및 청산 검사에서는 설정된 청산 경로를 통해 회수 가능한 예상 가치를 사용합니다.
DEX별 처리
각 DEX는 서로 다른 포지션 및 풀 데이터를 노출합니다. 오라클은 해당 데이터를 바탕으로 기초 자산을 재구성하고, 그 결과 평가를 참조 가격과 위험 통제와 비교하여 검증합니다.
| DEX / LP 유형 | 오라클 소스 | 참고 |
|---|---|---|
| Curve 안정/안정 ERC-20 LPs | 외부 스테이블코인 피드 + 풀 상태 확인 + TWAP 검증 | 외부 가격은 자산의 기준이 되며 풀 잔액과 수수료 발생은 할인된 담보 가치를 결정합니다. |
| Uniswap V2 ERC-20 LP들 | Chainlink + 예약 재구성 + TWAP 확인 | 표준 LP 토큰은 재구성된 기초 잔액에서 평가되며, TWAP는 조작에 강한 교차 확인용으로 사용됩니다. |
| Uniswap V3 NFT LP들 | Chainlink + 포지션 분해 + 틱/TWAP 체크 | NFT는 유동성, 활성 범위, 현재 가격에 따라 분해된 후 회수 가능한 청산 가치에 대해 할인됩니다. |
| Balancer 다중 자산 LP | Chainlink + 가중 재고 재구성 | 멀티 토큰 풀은 외부 가격과 가중 풀 재고를 사용하여 보수적인 담보 가치를 추정합니다. |
| SushiSwap / Aerodrome | Chainlink + 예약 재구성 + TWAP 확인 | 풀 기반 관찰은 재구성된 가치를 확인하고 유동성이 낮은 시장에서 동일 거래 남용을 방지하는 데 도움을 줍니다. |
| PancakeSwap | Chainlink + 블록 기반 TWAP 검증 | 외부 가격은 여전히 기준점으로 남아 있는 반면, 블록 기반 관측은 위치 상태를 검증하고 가정을 해소합니다. |
DEX별 TWAP 계산
시간 가중 평균 가격(TWAPs)은 외부 자산 가격 및 포지션 재구성과 함께 검증 데이터를 제공합니다. 이러한 입력을 비교하면 단기적인 가격 왜곡이나 일관되지 않은 풀 상태를 식별하는 데 도움이 됩니다. TWAP 데이터는 담보 가치를 단독으로 제공하기보다는 평가 과정을 보완합니다.
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
집중 유동성 포지션의 경우, 검사에서는 각 NFT가 나타내는 토큰 노출을 검증하기 위해 틱 범위, 유동성 분포 및 발생한 수수료를 사용합니다.
Balancer
가중 토큰 관찰치는 풀 가중치와 결합되어, 오라클이 보수적인 담보 가치를 할당하기 전에 다중 자산 재고 분할을 검증합니다.
Curve
스테이블코인 관찰은 주로 외부 가격이 여전히 주요 기준이 되는 동안, 오래된 피드, 준비금 변동 및 단기 이상 현상을 감지하는 데 사용됩니다.
Trader Joe 및 Aerodrome
30~60분 창에서의 누적 가격 관찰은 낮은 유동성 풀 상태를 검증하고 담보 확인 중 동일 거래 조작에 저항하는 데 도움이 됩니다.
안전성 및 조작 방지
- 편차 임계값
풀에서 파생된 검증 데이터가 외부 기준 가격에서 너무 멀어지면 새로운 대출이나 청산을 일시 중지할 수 있습니다
maxDifference. - maxPoolPriceDifference
이것은 풀에 암시된 상태를 기본 토큰 가격과 일치시키고 즉각적인 풀 조작이나 같은 거래 내 오라클 남용을 제한합니다.
- 미결제약정 캡
노출은 LP 패밀리, 풀 깊이, 담보 복잡성에 의해 제한되므로 얇은 시장은 더 엄격한 대출 한도를 받습니다.
- 회수 헤어컷
오라클은 차입 권한이 부여되기 전에 이론적 LP 가치를 일시적 손실, 청산 스리피지 및 스트레스 상태 청산 가정을 반영하여 할인합니다.
- 오라클 센티널
Oracle Sentinel 시계는 건강 및 검증 입력을 확인하고, 데이터가 오래되었거나 손상되었거나 위치 상태 확인과 일치하지 않을 경우 대체 동작을 트리거할 수 있습니다.
구성 가능 오라클 매개변수
풀별 오라클 설정은 토큰별로 구성됩니다 setTokenConfig. 아래 표에는 토큰의 가격 피드와 관련된 풀을 검증하는 데 사용되는 매개변수가 나와 있습니다:
| 매개변수 | 설명 |
|---|---|
| 토큰 | 담보 토큰 주소 |
| AggregatorV3Interface | 기초 토큰용 Chainlink 피드 |
| maxFeedAge | Chainlink 사료의 최대 허용 연령 |
| 풀 | 특정 DEX 풀 (Uniswap V3, Balancer, Curve 등) |
| twapSeconds | TWAP 계산용 창 |
| 모드 | 오라클 운영 모드 (표준/대체) |
| maxDifference | DEX와 검증 가격 간 허용 최대 편차 |
실제로 오라클 동작은 외부 자산 가격, LP 재구성 로직, 회수 가능 가치 처리 및 토큰별 설정 구성을 통한 조합에서 발생합니다.setTokenConfig.
