Utilization Curve와 금리 모델 구현
도입
Lending protocol의 금리는 은행 예금 금리처럼 고정된 상품 설명이 아니다. 대부분의 money market은 utilization을 보고 borrow rate를 조정한다. 빌려간 자산이 많아 liquidity가 부족해질수록 borrow rate가 올라가고, supplier에게 돌아가는 수익도 바뀐다.
중요한 것은 현재 APR 숫자가 아니라 곡선의 모양이다. kink 아래에서는 완만하게 오르다가, optimal utilization을 넘으면 rate가 급격히 올라 liquidity를 되돌리려 한다. Morpho 같은 설계에서는 IRM을 market별로 선택하거나 adaptive하게 조정할 수 있다. 그러므로 강의에서는 "현재 USDC APR"보다 parameter와 curve를 읽는 법을 가르친다.
학습 목표
- utilization이 borrow APR과 supply APR을 움직이는 이유를 설명한다.
- kink model, reserve factor, adaptive model의 차이를 구분한다.
- live APR 숫자보다 parameter snapshot과 curve shape를 먼저 검토한다.
개념 설명
이 market의 rate curve를 출시해도 되는가?
utilization shock에서도 withdrawal liquidity가 남는다
kink 이후 slope가 너무 완만하다
oracle 또는 cap과 rate model이 함께 검토되지 않았다
| 파라미터 | 의미 | 위험 |
|---|---|---|
| Utilization | borrowed / supplied | 높으면 출금 liquidity가 부족해진다 |
| Kink | slope가 바뀌는 지점 | 너무 높으면 뒤늦게 rate가 오른다 |
| Slope1 | kink 전 증가 속도 | 낮으면 borrow가 과도하게 늘 수 있다 |
| Slope2 | kink 후 증가 속도 | 낮으면 liquidity shortage를 못 막는다 |
| Reserve factor | 이자 중 reserve 몫 | supplier APR과 protocol buffer가 갈린다 |
코드로 확인하기
export function kinkBorrowApr({ utilization, kink, baseRate, slope1, slope2}: { utilization: number; kink: number; baseRate: number; slope1: number; slope2: number;}) { if (utilization <= kink) { return baseRate + (utilization / kink) * slope1; } const excess = (utilization - kink) / (1 - kink); return baseRate + slope1 + excess * slope2;}export function supplyApr(borrowApr: number, utilization: number, reserveFactor: number) { return borrowApr * utilization * (1 - reserveFactor);}export function rateSnapshotPolicy(lastCheckedAt: string) { return { lastCheckedAt, warning: "APR is live market data; teach the curve and cite dated parameters." };}첫 함수는 two-slope curve를 보여준다. 두 번째 함수는 supply APR이 borrow APR에 utilization과 reserve factor를 곱한 결과라는 점을 단순화해 보여준다. 실제 protocol은 compounding, index, block time, reserve accounting이 더 복잡하지만, 학습자는 먼저 곡선의 방향을 알아야 한다.
강의 포인트
| 관점 | 확인할 질문 | 증거로 남길 것 |
|---|---|---|
| Curve | utilization이 올라가면 rate가 충분히 반응하는가 | curve plot |
| Liquidity | withdrawal 가능한 현금이 남는가 | available liquidity |
| Reserve | protocol buffer가 있는가 | reserve factor |
| Governance | 누가 parameter를 바꾸는가 | proposal or config link |
실무 예시
백엔드[OPS] DeFi 학습 사이트가 "현재 Aave USDC APR은 X%"라고 고정 문구를 넣으면 며칠 뒤 틀릴 수 있다. 대신 "이 market은 utilization 기반 rate curve를 사용하며, live APR은 공식 앱이나 subgraph에서 확인한다"라고 쓰고, 실습에서는 주어진 parameter로 curve를 그리게 한다.
위험팀은 단일 APR보다 stress point를 본다. utilization이 80%에서 95%로 뛰었을 때 borrow rate가 얼마나 올라가는지, supplier가 출금하려 할 때 available liquidity가 얼마나 남는지, reserve factor가 protocol buffer를 충분히 만드는지를 비교한다.
흔한 오해와 실패 시나리오
| 오해 | 실패 시나리오 | 교정 방식 |
|---|---|---|
| APR은 protocol이 정한다 | utilization과 parameter가 함께 만든 결과다 | curve와 utilization을 같이 보여준다 |
| 높은 supply APR은 좋은 신호다 | liquidity shortage나 risk premium일 수 있다 | utilization과 cap을 확인한다 |
| kink는 기술 세부사항이다 | 시장 행동을 바꾸는 핵심 지점이다 | stress simulation에 포함한다 |
| reserve factor는 treasury 수익이다 | supplier APR, bad debt buffer와 trade-off가 있다 | fee split과 risk buffer를 함께 본다 |
실습 과제
- Kink rate curve 구현하기: utilization, kink, baseRate, slope1, slope2를 입력받아 borrow APR을 계산한다.
- 금리 파라미터 리뷰표 만들기: reserve factor, target utilization, slope, cap이 사용자 행동과 protocol solvency에 주는 영향을 표로 정리한다.
완료 기준
- utilization, kink, slope를 받아 borrow rate를 계산했다.
- live APR을 강의 본문 사실로 고정하지 않고 parameter snapshot으로 다루는 규칙을 작성했다.
근거 자료
- 02 Lending
- Compound Interest Rates
- Morpho IRM Concepts