> For the complete documentation index, see [llms.txt](https://docs.hann.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hann.finance/ko/mechanics/deep-dives/redemptions.md).

# 리뎀션

리뎀션의 브랜치 배분, 금리 순서, 수수료 계산, 담보비율 변화

일반 리뎀션은 USDHN을 소각하고 선택된 Trove의 부채를 줄입니다. 실행자는 수수료를 제외한 담보를 받고, 수수료에 해당하는 담보는 Trove에 남습니다. CollateralRegistry가 브랜치별 수량을 배분하고 각 브랜치의 TroveManager가 포지션을 선택합니다.

## 브랜치 배분

활성 상태이며 종료되지 않았고, 전체 담보비율인 `TCR`이 종료 담보비율인 `SCR` 이상인 브랜치가 참여합니다.

대상 브랜치 `j`에 대해 다음 값을 계산합니다.

$$
u\_j = \max(\text{BranchDebt}\_j - \text{SPDeposits}\_j, 0)
$$

이는 브랜치 부채 중 스태빌리티 풀 예치금을 초과하는 금액입니다. 해당 부채는 Trove의 담보로 뒷받침됩니다.

`u_j`의 합이 양수이면 요청량을 그 합까지로 제한하고 `u_j`에 비례해 배분합니다. 모든 대상 브랜치에서 `u_j = 0`이면 전체 브랜치 부채에 비례해 배분합니다.

정수 나눗셈을 생략한 비례식은 다음과 같습니다.

$$
A\_j = A \times \frac{w\_j}{\sum\_k w\_k}
$$

`A`는 상한을 적용한 수량이고, `w_j`는 `u_j` 또는 대체 경로의 브랜치 전체 부채입니다. 컨트랙트는 Registry 순서대로 브랜치를 처리하며 배분 후 남은 수량과 가중치를 다시 계산합니다. 정수 나눗셈의 잔여 수량은 후속 배분에 반영됩니다.

![스태빌리티 풀 예치금을 초과하는 부채에 따라 25 USDHN을 세 브랜치에 40%, 20%, 40%로 배분하는 예시](https://712079754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtaxYsiNM19tBweW3qRw5%2Fuploads%2Fgit-blob-c76ae11934e4c8dd8b85cd68b5a0578c161b7499%2Fredemption-allocation.png?alt=media)

파란 막대는 브랜치 부채, 연두 막대는 스태빌리티 풀의 USDHN 예치금입니다. 점선 부분은 예치금을 초과하는 부채를 나타냅니다.

**예시: 25 USDHN.** 리뎀션 직전 세 브랜치의 부채는 150·100·170 USDHN이고, 스태빌리티 풀 예치금은 50·50·70 USDHN입니다. 초과 부채는 100·50·100이므로 리뎀션 수량은 10·5·10 USDHN으로 나뉩니다. 풀 예치금은 그대로 유지되며, 실행자는 수수료를 제외한 담보를 받습니다.

## 브랜치 내부의 Trove 순서

일반 리뎀션은 다음 순서로 실행합니다.

1. 이전 리뎀션 후 소액 부채가 남아 기록된 Trove인 `lastZombieTroveId`를 확인합니다.
2. `SortedTroves.getLast()`부터 `getPrev()`를 따라 **연이율이 낮은 Trove부터** 순회합니다.
3. 일반 오라클 가격 기준 현재 담보비율이 100% 미만인 Trove는 건너뜁니다.
4. 누적 이자와 재분배를 반영한 뒤 리뎀션할 부채를 계산합니다.
5. 브랜치에 배분된 잔여 USDHN과 해당 Trove 부채 중 작은 수량을 사용합니다.

![250,000 USDHN을 리뎀션하면 연이율 4% Trove의 부채는 200,000에서 0으로, 4.3% Trove의 부채는 60,000에서 10,000으로 줄어듭니다. 4.4% Trove의 부채 450,000 USDHN은 유지됩니다.](https://712079754-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtaxYsiNM19tBweW3qRw5%2Fuploads%2Fgit-blob-94e1fd32c780e1f11c95531502de50ddc7eb4cb4%2Fredemption-order.png?alt=media)

**예시: 한 브랜치에 250,000 USDHN 배분.** 연이율 4%인 Trove의 부채 200,000 USDHN을 모두 줄입니다. 다음 연이율 4.3%인 Trove에서는 부채 60,000 USDHN 중 50,000 USDHN을 줄입니다. 배분량을 채웠으므로 이 Trove에는 10,000 USDHN의 부채가 남고, 연이율 4.4%인 Trove는 그대로 유지됩니다.

반복 횟수 제한에는 건너뛴 Trove도 포함됩니다. `0`을 넣으면 반복 상한이 해제됩니다. 배분량을 모두 처리하거나 더 이상 Trove가 없어도 순회가 끝납니다.

차입자는 금리를 직접 정하거나 설정된 금리 매니저를 사용합니다. 금리를 높이면 일반 리뎀션 순서가 뒤로 이동하고 이자 비용이 증가합니다. 같은 매니저를 사용하는 Trove에는 배치 금리가 적용됩니다.

## 리뎀션 수수료

수수료율은 하한과 기준율을 합산합니다. 소수점 18자리 원시 정수 대신 비율로 쓰면 각 값은 다음과 같습니다.

* `b`: 저장된 기준율.
* `m`: 마지막 수수료 연산 후 경과한 분 단위 정수.
* `A`: 브랜치 상한을 적용한 시도 수량.
* `S`: 거래 시작 시 USDHN 토큰의 전체 공급량.
* `λ = 0.998076443575628800`: 분당 감쇠 계수.
* `β = 1`: 리뎀션에 따른 기준율 증가의 나눗수.
* `f₀ = 0.005`: 수수료 하한 0.5%.

$$
b\_{decayed} = b\lambda^m
$$

$$
b\_{quote} = \min\left(1, b\_{decayed} + \frac{A}{\beta S}\right)
$$

$$
f = \min(1, f\_0 + b\_{quote})
$$

감쇠 계수의 반감기는 6시간입니다. Registry 배포 시 기준율은 100%에서 시작하고 시간에 따라 줄어듭니다. 온체인에서는 정수 고정소수점으로 계산합니다.

거래는 리뎀션 전에 `f`가 호출자의 최대 수수료를 넘는지 확인합니다. 실행 후 저장된 기준율은 **실제로 리뎀션한 수량**으로 갱신합니다. 반복 횟수 제한으로 일부만 처리된 거래에도 더 큰 시도 수량으로 계산한 수수료가 적용될 수 있습니다.

Registry는 `getRedemptionRateWithDecay()`, `getRedemptionRateForRedeemedAmount(amount)`, `getEffectiveRedemptionFeeInUSDHN(amount)`를 제공합니다. 견적은 현재 공급량, 기준율, 시간, 수량에 따라 바뀝니다.

## 수령 담보와 Trove에 남는 수수료

각 값은 다음과 같습니다.

* `r`: 한 Trove에서 리뎀션한 USDHN.
* `pᵣ`: 브랜치의 담보 토큰당 리뎀션 가격.
* `f`: 리뎀션 수수료 비율.

토큰 단위를 맞춘 수식은 다음과 같습니다.

$$
\text{CorrespondingCollateral} = \frac{r}{p\_r}
$$

$$
\text{CollateralFee} = \frac{r}{p\_r}f
$$

$$
\text{CollateralSent} = \frac{r}{p\_r}(1-f)
$$

Trove 부채는 `r`만큼 줄어듭니다. 담보는 `CollateralSent`만큼 줄고, `CollateralFee`는 Trove에 남습니다. 컨트랙트는 `fetchPrice()`로 100% 기준을 확인하고, `fetchRedemptionPrice()`로 수령량을 계산합니다.

일반 가격을 `p`, 담보 가치를 `V`, 부채를 `D`라고 하면 이후 담보비율은 다음과 같습니다.

$$
CR' = \frac{V-r(1-f)p/p\_r}{D-r}
$$

이 식에는 `r < D`가 필요합니다. 부채를 전부 리뎀션하면 부채는 0이 되고 남은 담보는 Trove에 유지됩니다.

## 담보비율 예시

다음 예시에서 담보 가격은 일정하며 수수료와 이자는 0입니다. 담보 가치와 부채에서 같은 수량 `r`이 빠집니다.

$$
CR' = \frac{V-r}{D-r}
$$

`V > D`, `0 < r < D`이면 다음이 성립합니다.

$$
CR' - CR = \frac{r(V-D)}{D(D-r)} > 0
$$

담보와 부채가 함께 줄고 담보비율은 높아집니다.

### 예시 1: 리뎀션 1회

담보 가치 `V = $200`, 부채 `D = 100` USDHN에서 시작합니다. 담보비율은 `200 / 100 = 200%`입니다.

20 USDHN을 리뎀션하면 `V′ = $180`, `D′ = 80` USDHN이 됩니다.

$$
CR' = \frac{180}{80} = 225%
$$

담보비율의 여유가 커지고 담보 포지션의 크기는 줄어듭니다. 일반 가격과 리뎀션 가격이 같고 수수료가 있으면, Trove에 남은 수수료만큼 담보가 이 수수료 0인 계산보다 더 남습니다.

### 예시 2: 리뎀션 후 추가 차입

`V = $180`, `D = 80` USDHN, `CR = 225%`에서 시작합니다.

담보를 추가하지 않고 40 USDHN을 더 차입하면 부채가 120 USDHN이 됩니다.

$$
CR = \frac{180}{120} = 150%
$$

추가 차입은 리뎀션으로 늘어난 담보비율의 여유를 사용합니다.

### 예시 3: 리뎀션 후 가격 하락

다시 `V = $180`, `D = 80` USDHN에서 시작합니다. 담보 가격이 40% 하락하면 가치는 `180 × 0.6 = $108`이 됩니다.

$$
CR = \frac{108}{80} = 135%
$$

`MCR > 135%`인 브랜치는 이 포지션을 청산할 수 있습니다. `MCR = 135%`이면 추가 하락 시 기준 아래로 내려갑니다. 리뎀션으로 부채가 줄어도 담보 가격에 대한 노출은 남습니다.

## 소액 부채와 전액 리뎀션

일반 리뎀션 후 부채가 `MIN_DEBT` 미만이면 Trove는 `zombie` 상태가 되어 SortedTroves에서 제거됩니다. 부채가 0보다 크면 다음 리뎀션을 위해 `lastZombieTroveId`에 기록될 수 있습니다. 전액 리뎀션하면 부채는 0이 되며 남은 담보는 차입자의 Trove에 유지됩니다.

Trove를 종료하면 해당 담보를 돌려받습니다. 소액 부채가 남은 포지션은 조건에 맞는 차입자 조정으로 활성 상태로 되돌릴 수 있습니다.

## Helper와 브랜치 종료 후 경로

`RedemptionHelper`는 호출자의 USDHN을 전송받아 Registry를 호출하고, `_minCollRedeemed`의 담보별 최소 수령량을 확인한 뒤 담보와 미사용 USDHN을 돌려줍니다. USDHN 사용 승인이 필요합니다. 앱은 호출자의 USDHN을 직접 소각하고 사용 승인을 소비하지 않는 Registry 직접 호출 경로를 사용합니다.

종료된 브랜치는 `TroveManager.urgentRedemption(amount, troveIds, minCollateral)`을 지원합니다. 호출자가 Trove ID를 지정하며 일반 금리 순서를 따르지 않습니다. 현재 컨트랙트는 일반 리뎀션 수수료 없이 담보 보너스 2%를 적용하고, 담보 수량은 Trove의 남은 담보로 제한합니다. 거래는 지정한 최소 담보 수령량을 확인합니다.

[리뎀션과 리스크](/ko/protocol/redemptions-and-risk.md)에는 앱 사용 절차가 있습니다. [CDP 안전](/ko/mechanics/deep-dives/cdp-safety.md)에서는 담보비율을, [리스크 공시](/ko/security/risk-disclosure.md)에서는 시장·유동성·오라클 위험을 다룹니다.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.hann.finance/ko/mechanics/deep-dives/redemptions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
