CDP, PSM, Soft Liquidation 설계
도입
CDP stablecoin은 사용자가 담보를 예치하고 stablecoin을 발행하는 구조다. 담보가 충분하면 사용자는 빌린 stablecoin을 유지할 수 있지만, 담보 가치가 떨어지면 liquidation이 protocol solvency를 지킨다. 여기서 핵심은 "담보가 있다"가 아니라 "어떤 가격과 threshold에서 어떤 방식으로 정리되는가"다.
PSM은 peg stability를 강화하는 장치다. 특정 stablecoin을 넣고 protocol stablecoin을 거의 1:1로 교환할 수 있게 하면 시장 가격이 peg 주변으로 돌아오도록 도와준다. 하지만 PSM은 외부 stablecoin exposure를 protocol balance sheet로 끌어오므로 concentration risk가 생긴다.
학습 목표
- CDP stablecoin의 overcollateralized mint와 liquidation path를 설명한다.
- PSM이 peg를 단단하게 만드는 동시에 counterparty concentration을 만든다는 점을 이해한다.
- soft liquidation을 hard liquidation과 비교해 사용자 경험과 protocol solvency를 평가한다.
개념 설명
Collateralized
전이 조건을 확인한다.
Warning
전이 조건을 확인한다.
Liquidating
전이 조건을 확인한다.
PSMArbitrage
전이 조건을 확인한다.
Settled
전이 조건을 확인한다.
| 장치 | peg에 주는 도움 | 새로 생기는 위험 |
|---|---|---|
| Overcollateralized mint | protocol stablecoin을 담보로 지탱 | oracle, liquidation, collateral crash |
| PSM | hard peg swap route 제공 | 외부 stablecoin concentration |
| Stability fee | 차입 비용 조정 | 사용자 행동 지연 |
| Soft liquidation | 급격한 청산 완화 | 설계 복잡성과 edge case |
코드로 확인하기
// SPDX-License-Identifier: MITpragma solidity ^0.8.24;contract ToyPsm { uint256 public tinBps = 5; uint256 public toutBps = 5; uint256 public exposureCap = 1_000_000e6; uint256 public gemBalance; function sellGem(uint256 gemAmount) external returns (uint256 stableOut) { require(gemBalance + gemAmount <= exposureCap, "cap"); gemBalance += gemAmount; stableOut = gemAmount * (10_000 - tinBps) / 10_000; }}export function cdpStatus(collateralUsd: number, debtUsd: number, liquidationRatio: number) { const ratio = collateralUsd / debtUsd; if (ratio < liquidationRatio) return "liquidating"; if (ratio < liquidationRatio * 1.1) return "warning"; return "collateralized";}Toy PSM은 production 구현이 아니지만 핵심을 보여준다. peg 안정 장치는 cap과 fee 없이 열어두면 protocol이 특정 외부 자산을 과도하게 들고 갈 수 있다. CDP status 함수는 사용자 경고와 liquidation bot queue의 기본 입력이 된다.
강의 포인트
| 관점 | 확인할 질문 | 증거로 남길 것 |
|---|---|---|
| Collateral | 어떤 자산이 얼마만큼 backing인가 | collateral ratio |
| Peg route | deviation 때 누가 arbitrage하는가 | PSM fee와 cap |
| Liquidation | hard, soft, auction 중 무엇인가 | state transition |
| Concentration | protocol이 외부 stablecoin을 얼마나 보유하는가 | exposure cap |
실무 예시
컨트랙트[OPS] PSM을 넣으면 stablecoin이 항상 안전해지는 것이 아니다. USDC를 받아 protocol stablecoin을 발행하는 PSM은 peg 방어에 강하지만, protocol reserve가 USDC에 집중된다. issuer risk나 freeze risk가 생기면 CDP 담보가 충분해도 protocol balance sheet가 흔들릴 수 있다.
soft liquidation은 사용자 경험을 개선할 수 있지만, 상태가 복잡해진다. 일부 담보만 점진적으로 팔거나 price band를 따라 청산한다면 indexer와 UI는 사용자의 남은 담보, 부채, 예상 손실을 더 세밀하게 보여줘야 한다.
흔한 오해와 실패 시나리오
| 오해 | 실패 시나리오 | 교정 방식 |
|---|---|---|
| PSM은 무조건 peg를 해결한다 | 외부 stablecoin concentration이 커진다 | cap, fee, exposure dashboard를 둔다 |
| CDP는 담보가 많아서 안전하다 | oracle shock과 liquidation delay로 bad debt가 생긴다 | stress simulation을 넣는다 |
| soft liquidation은 항상 사용자 친화적이다 | 상태 설명이 모호하면 사용자가 손실을 이해 못 한다 | 상태와 손익을 분리 표시한다 |
| fee가 작으면 무시해도 된다 | arbitrage 경로와 protocol exposure를 바꾼다 | tin/tout을 peg model에 포함한다 |
실습 과제
- Toy PSM 구현하기: sellGem, buyGem, tin, tout, exposure cap을 가진 단순 PSM을 구현한다.
- CDP 청산 상태표 만들기: safe, warning, liquidating, soft-liquidating, settled 상태를 정의하고 사용자 문구를 작성한다.
완료 기준
- CDP mint, liquidation, PSM swap을 상태 전이로 표현했다.
- PSM fee와 exposure cap이 peg와 concentration risk에 주는 영향을 설명했다.
근거 자료
- 04 Stablecoins
- MakerDAO dss-psm