SettleLab
전체 코스
DeFi · LESSON 02

Oracle·Liquidation Simulator Lab

DeFiDeFi risk surface캡스톤1시간 10분근거 2
AreaDeFi
TopicDeFi risk surface
Evidence layerINDEXER / OPS
Connected areasStablecoin

학습 결과

  • oracle price validation과 health factor 계산을 같은 simulator에 연결한다.
  • liquidation candidate, repay amount, seized collateral, profit after gas를 계산한다.
  • stale price와 thin liquidity가 liquidation queue에 미치는 영향을 실험한다.

선행 조건

  • liquidation-oracle-engine

완료 기준

  • safe oracle adapter와 health factor 계산을 연결한 simulator를 작성했다.
  • 최소 3개 가격 충격 시나리오에서 liquidation queue가 어떻게 바뀌는지 설명했다.

Oracle·Liquidation Simulator Lab

도입

Oracle adapter와 liquidation bot을 따로 만들면 학습 효과가 반으로 줄어든다. 실제 lending protocol에서 liquidation은 price validation 결과를 바로 사용한다. 가격이 stale이면 liquidation을 멈춰야 할 수 있고, 가격이 급변하면 candidate queue가 폭증할 수 있다.

이 실습은 oracle validation, health factor, liquidation quote, profit after gas를 하나의 simulator로 묶는다. 목표는 정답 코드를 복사하는 것이 아니라 어떤 입력이 어떤 운영 상태를 만드는지 직접 관찰하는 것이다.

학습 목표

  • oracle price validation과 health factor 계산을 같은 simulator에 연결한다.
  • liquidation candidate, repay amount, seized collateral, profit after gas를 계산한다.
  • stale price와 thin liquidity가 liquidation queue에 미치는 영향을 실험한다.

개념 설명

상태머신가로 스크롤 · 크게 보기 지원
Liquidation simulator state가격 검증 실패와 health factor 악화가 서로 다른 queue 상태로 이어지는 과정을 분리한다.
State 1

PriceValid

전이 조건을 확인한다.

완료 조건
State 2

RiskScored

전이 조건을 확인한다.

완료 조건
State 3

CandidateQueued

전이 조건을 확인한다.

완료 조건
State 4

ExecutionPlanned

전이 조건을 확인한다.

완료 조건
State 5

OracleBlocked

전이 조건을 확인한다.

완료 조건
크게 보기
State 1

PriceValid

전이 조건을 확인한다.

완료 조건
State 2

RiskScored

전이 조건을 확인한다.

완료 조건
State 3

CandidateQueued

전이 조건을 확인한다.

완료 조건
State 4

ExecutionPlanned

전이 조건을 확인한다.

완료 조건
State 5

OracleBlocked

전이 조건을 확인한다.

완료 조건
표 자료가로 스크롤 · 크게 보기 지원
입력simulator 결과운영 행동
fresh priceHF 계산queue update
stale priceliquidation blockoracle incident alert
ETH shockcandidate 증가keeper capacity check
stablecoin depegdebt/collateral 재평가new borrow gate
크게 보기
입력simulator 결과운영 행동
fresh priceHF 계산queue update
stale priceliquidation blockoracle incident alert
ETH shockcandidate 증가keeper capacity check
stablecoin depegdebt/collateral 재평가new borrow gate

코드로 확인하기

CODE SURFACEtypescript
export function simulateLiquidation(account, price, threshold) {  if (!price.fresh) return { status: "oracle-blocked", candidates: [] };  const hf = (account.collateral * price.usd * threshold) / account.debtUsd;  if (hf >= 1) return { status: "safe", healthFactor: hf };  const repayUsd = Math.min(account.debtUsd * 0.5, account.debtUsd);  const seizedUsd = repayUsd * 1.05;  return { status: "liquidatable", healthFactor: hf, repayUsd, seizedUsd };}
CODE SURFACEyaml
shock_scenarios:  - name: eth_down_10    price_multiplier: 0.9    expected: queue_growth  - name: stablecoin_depeg    debt_price_multiplier: 1.03    expected: hf_drop  - name: oracle_stale    fresh: false    expected: liquidation_blocked

이 코드는 실제 protocol보다 단순하지만 simulator가 무엇을 해야 하는지 보여준다. price validation과 liquidation 판단이 분리되면 사고 대응이 가능해진다.

강의 포인트

표 자료가로 스크롤 · 크게 보기 지원
관점확인할 질문증거로 남길 것
Oracle가격 입력이 유효한가validation result
Queue누가 청산 대상인가candidate list
Profitliquidator가 실행할 유인이 있는가repay, seized, gas
Scenario충격 시 어떤 상태가 바뀌는가shock report
크게 보기
관점확인할 질문증거로 남길 것
Oracle가격 입력이 유효한가validation result
Queue누가 청산 대상인가candidate list
Profitliquidator가 실행할 유인이 있는가repay, seized, gas
Scenario충격 시 어떤 상태가 바뀌는가shock report

실무 예시

인덱서[OPS] ETH 가격이 10% 떨어졌다. simulator는 단순히 몇 명이 청산되는지 세는 도구가 아니다. 어떤 담보 cluster가 위험한지, keeper capacity가 충분한지, price feed가 fresh한지, 사용자에게 어떤 notice를 보여야 하는지 같이 보여준다.

stale price가 감지되면 liquidation을 무조건 실행하면 안 된다. simulator는 oracle-blocked 상태를 만들어야 한다. 그래야 사고 때 "왜 청산이 안 됐는지" 설명할 수 있다.

흔한 오해와 실패 시나리오

표 자료가로 스크롤 · 크게 보기 지원
오해실패 시나리오교정 방식
HF만 계산하면 된다stale oracle 상태가 빠진다price validation을 먼저 둔다
liquidatable이면 항상 실행한다gas와 slippage로 손실이 날 수 있다profit after gas를 계산한다
shock scenario는 리스크팀 문서다실제 queue와 UI에 반영되지 않는다simulator output을 dashboard에 연결한다
depeg는 stablecoin 강의 문제다debt price와 collateral value가 동시에 흔들린다debt/collateral 가격을 분리한다
크게 보기
오해실패 시나리오교정 방식
HF만 계산하면 된다stale oracle 상태가 빠진다price validation을 먼저 둔다
liquidatable이면 항상 실행한다gas와 slippage로 손실이 날 수 있다profit after gas를 계산한다
shock scenario는 리스크팀 문서다실제 queue와 UI에 반영되지 않는다simulator output을 dashboard에 연결한다
depeg는 stablecoin 강의 문제다debt price와 collateral value가 동시에 흔들린다debt/collateral 가격을 분리한다

실습 과제

  1. Liquidation simulator 구현하기: accounts, prices, thresholds를 받아 liquidatable accounts와 repay plan을 반환한다.
  2. Shock scenario 리포트 작성하기: ETH -10%, stablecoin depeg, oracle stale 시나리오에서 queue와 user notice 변화를 작성한다.

완료 기준

  1. safe oracle adapter와 health factor 계산을 연결한 simulator를 작성했다.
  2. 최소 3개 가격 충격 시나리오에서 liquidation queue가 어떻게 바뀌는지 설명했다.

근거 자료

  • 02 Lending
  • 11 Protocol Development
Final checkpoint

읽기를 마쳤다면 여기서 기록한다

아래 버튼은 읽기 진도를 저장한다. 체크리스트, 과제, 랩 산출물은 위 Workbook에서 따로 관리한다.

  • safe oracle adapter와 health factor 계산을 연결한 simulator를 작성했다.
  • 최소 3개 가격 충격 시나리오에서 liquidation queue가 어떻게 바뀌는지 설명했다.

학습 자료 근거

02 Lending
lending liquidation simulator 설계
내부 참고 문서
11 Protocol Development
oracle adapter와 테스트 전략 연결
내부 참고 문서