본문으로 건너뛰기

설계

상위 수준에서, DeepBook Margin design은 leveraged trading을 가능하게 하기 위해 함께 동작하는 네 가지 주요 공유 객체를 중심으로 한다:

  • MarginPool: 특정 자산에 대한 유동성을 관리하는 공유 객체로, interest accrual을 포함한 supply 및 차입 작업을 처리한다. 자세한 내용은 MarginPool 공유 객체 섹션을 참조한다.
  • MarginManager: BalanceManager를 감싸고 borrowing, repaying, 그리고 risk 관리를 포함한 leveraged trading을 위한 capability를 제공하는 공유 객체이다. 자세한 내용은 MarginManager 공유 객체 섹션을 참조한다.
  • MarginRegistry: 모든 마진 풀과 margin manager를 관리하고, 시스템 전반의 구성을 강제하며, 활성화된 풀을 추적하는 중앙 registry이다. 자세한 내용은 MarginRegistry 섹션을 참조한다.
  • BalanceManager: DeepBookV3에서 상속되며, trading을 위한 fund를 소싱하는 데 사용된다. 자세한 내용은 BalanceManager를 참조한다.

MarginPool 공유 객체

MarginPool은 단일 자산 타입에 대한 유동성을 관리하는 역할을 한다. 이는 여러 핵심 구성 요소로 이뤄져 있다:

state

State 구성 요소는 총 supply 및 차입 amount와, 이에 해당하는 share를 추적한다. 이는 다음과 같은 shares 기반 accounting 시스템을 사용한다:

  • Supply shares: 대여자가 총 공급된 자산에 대해 갖는 비례 소유권을 나타낸다.
  • Borrow shares: 차입자의 비례 debt 의무를 나타낸다.

interest는 이용률 rate(borrowed 자산 대비 supplied 자산의 비율)에 따라 연속적으로 누적된다. state는 모든 supply, 차입, 상환, 그리고 출금 작업에서 업데이트되어 interest가 항상 최신 상태가 되도록 보장한다.

금리는 InterestConfig에 정의된 piecewise linear 모델을 따라 풀의 이용률 rate에 기반해 동적으로 계산된다. 이용률이 높을수록 금리가 높아져 더 많은 supply와 더 적은 borrowing을 유도한다.

protocol config

ProtocolConfig는 마진 풀의 동작을 제어하는 핵심 파라미터를 저장한다:

  • Interest rate 파라미터: 금리 curve를 정의하는 base rate, multiplier, 그리고 kink point이다.
  • Supply cap: 풀에 공급할 수 있는 최대 amount이다.
  • Max 이용률 rate: 풀에서 어느 정도까지 차입할 수 있는지에 대한 상한이다(ex., 80%).
  • Min 차입 amount: spam을 방지하기 위한 최소 loan size이다.
  • Protocol spread: 프로토콜 수수료로 전달되는 interest의 비율이다.

이 파라미터는 풀 operator가 MarginPoolCap을 사용하여 업데이트할 수 있다.

프로토콜 수수료

ProtocolFees 구성 요소는 획득한 interest의 분배를 관리한다. 차입자가 interest를 지급하면, protocol spread(ex., 10%)가 fee로 취해지고, 남은 부분(ex., 90%)은 supplier에게 share에 비례해 분배된다.

protocol spread는 다음과 같이 분배된다:

  • Referral fees: protocol spread의 50%가 유동성을 유치하는 supply referral로 전달된다.
  • Protocol fees: protocol spread의 25%가 protocol treasury로 전달된다.
  • Maintainer fees: protocol spread의 25%가 풀 maintainer로 전달된다.

예를 들어 100 USDC의 interest가 지급되면, 10 USDC가 프로토콜 수수료로 전달되고(10% spread 기준) 90 USDC가 supplier에게 전달된다. 그 다음 10 USDC는 다음과 같이 분배된다: referral에 5 USDC, protocol에 2.5 USDC, 그리고 maintainer에 2.5 USDC이다.

protocol은 각 referral이 소유한 share를 추적하고, referral이 유치한 유동성에 기반해 비례 fee를 계산한다.

Position Manager

PositionManager는 다음을 포함하여 개별 supplier 포지션을 추적한다:

  • SupplierCap이 소유한 supply share.
  • fee 분배를 위한 referral 연관 관계.
  • 과거 포지션 데이터.

MarginManager 공유 객체

MarginManagerBalanceManager를 감싸고 margin trading capability를 추가한다. 각 MarginManager는 특정 DeepBook 풀과 연관되며 다음을 추적한다:

  • Borrowed shares: base 및 견적 자산 마진 풀에서 차입한 amount.
  • 마진 풀 ID: 현재 loan이 어느 마진 풀에서 왔는지(있는 경우).
  • DeepBook 풀: 이 manager가 trading하도록 권한이 부여된 거래 풀.

borrowing 및 risk 관리

MarginManager는 한 번에 하나의 마진 풀에서만 차입할 수 있다(베이스 자산 또는 견적 자산 중 하나). 이는 risk 계산을 단순화하고 복잡한 cross-담보 시나리오를 방지한다.

risk는 다음과 같이 계산되는 risk ratio로 측정된다:

Risk Ratio=Total AssetsTotal Debt\text{Risk Ratio} = \frac{\text{Total Assets}}{\text{Total Debt}}

서로 다른 risk ratio threshold가 허용되는 액션을 결정한다:

  • Withdraw threshold (ex., 2.0): 담보를 인출하기 위한 최소 ratio이다.
  • Borrow threshold (ex., 1.25): 새 loan을 받기 위한 최소 ratio이다.
  • Target liquidation ratio (ex., 1.25): 부분 liquidation 후 목표 ratio이다.
  • Liquidation threshold (ex., 1.15): 이 값 아래로 떨어지면 포지션이 liquidation될 수 있다.

liquidation process

MarginManager risk ratio가 liquidation threshold 아래로 떨어지면, 누구나 포지션을 liquidation할 수 있다:

  1. liquidator가 debt에 대한 상환을 제공한다.
  2. liquidator는 담보와 liquidation reward(ex., 5%)를 받는다.
  3. 마진 풀도 보상(ex., 3%)을 받을 수 있다.
  4. 자산이 부족하면, 풀에 bad debt가 기록된다.

liquidation은 포지션 상태와 liquidator의 입력에 따라 partial 또는 full일 수 있다.

MarginRegistry

MarginRegistry는 margin 시스템의 중앙 coordination point 역할을 한다:

  • Pool registration: 자산 타입별로 모든 마진 풀을 추적한다.
  • Pool enablement: margin trading이 활성화된 DeepBook 풀을 결정한다.
  • Risk 파라미터: 풀별 risk ratio 및 liquidation 파라미터를 저장한다.
  • Manager tracking: 모든 margin manager 목록을 유지한다.

registry는 자산 타입당 하나의 마진 풀만 존재할 수 있음을 강제하고, margin manager가 활성화된 DeepBook 풀에서만 trading할 수 있도록 보장한다.

liquidation flow

다음은 전형적인 liquidation 시나리오를 설명한다:

  1. Risk calculation: MarginManager는 가격 움직임 또는 interest accrual로 인해 liquidation threshold 아래로 떨어진다.
  2. Liquidator 액션: liquidator는 상환 코인을 제공하며 liquidate()를 호출한다.
  3. Order cancellation: manager에 대한 모든 open 주문이 취소된다.
  4. Debt calculation: 시스템은 상환할 수 있는 최대 debt를 계산한다.
  5. Asset transfer: 담보 자산이 reward와 함께 liquidator에게 전송된다.
  6. Pool update: 마진 풀은 상환과 잠재적 bad debt를 처리한다.
  7. Position update: manager의 borrowed share는 감소하거나 정리된다.

interest accrual

DeepBook Margin에서 interest는 이용률 rate에 기반해 연속적으로 누적된다:

Utilization Rate=Total BorrowedTotal Supplied\text{Utilization Rate} = \frac{\text{Total Borrowed}}{\text{Total Supplied}}

금리는 kinked 모델을 따른다:

  • kink 아래(ex., 80% 이용률): 완만한 rate로 선형 증가한다.
  • kink 위: 과도한 borrowing을 억제하기 위해 가파르게 선형 증가한다.

interest는 state가 업데이트될 때마다(어떤 supply, 차입, 상환, 또는 출금 작업이든) 복리로 누적된다. protocol spread는 interest 중 어느 부분이 fee로 전달되고 어느 부분이 supplier에게 전달되는지를 결정한다.