> 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/ja/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を3つのブランチへ40%、20%、40%で配分する例](https://3703202746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FijRIWLhwa2WiTrn7wCdn%2Fuploads%2Fgit-blob-c76ae11934e4c8dd8b85cd68b5a0578c161b7499%2Fredemption-allocation.png?alt=media)

青い棒はブランチの負債、黄緑の棒はスタビリティプールのUSDHN預入額です。点線部分は預入額を超える負債を表します。

**例: 25 USDHN。** 償還前の3つのブランチの負債は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://3703202746-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FijRIWLhwa2WiTrn7wCdn%2Fuploads%2Fgit-blob-94e1fd32c780e1f11c95531502de50ddc7eb4cb4%2Fredemption-order.png?alt=media)

**例: 1つのブランチに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分ごとの減衰係数。
* `β = 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`: 1つのTroveに対して償還したUSDHN。
* `pᵣ`: ブランチの担保トークン1単位当たりの償還価格。
* `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`が必要です。負債全額を償還すると、負債はゼロになり、残りの担保はTroveに保持されます。

## 担保比率の例

次の例では担保価格を一定とし、手数料と利息をゼロとします。担保価値と負債から同じ数量`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に残る手数料分の担保がこの手数料ゼロの計算より多く残ります。

### 例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から取り除かれます。残りの負債がゼロより大きければ、次の償還用に`lastZombieTroveId`へ記録されることがあります。全額償還後の負債はゼロになり、残りの担保は借り手のTroveに保持されます。

Troveを閉じると、その担保を受け取れます。少額の負債が残るポジションは、条件を満たす借り手の調整によってアクティブな状態に戻せます。

## Helperとブランチ停止後の経路

`RedemptionHelper`は呼び出し者からUSDHNを受け取り、Registryを呼び出し、`_minCollRedeemed`の担保別最低受取数量を確認してから、担保と未使用のUSDHNを返します。USDHNの利用承認が必要です。アプリは呼び出し者のUSDHNを直接バーンし、利用承認を消費しないRegistryの直接呼び出しを使います。

停止したブランチは`TroveManager.urgentRedemption(amount, troveIds, minCollateral)`をサポートします。呼び出し者がTrove IDを指定し、通常の金利順序は使いません。現在のコントラクトは通常の償還手数料を適用せず、担保に2%のボーナスを加えます。担保数量はTroveの利用可能な担保が上限です。取引では指定した最低担保受取数量を確認します。

[償還とリスク](/ja/protocol/redemptions-and-risk.md)にはアプリの操作手順があります。[CDPの安全性](/ja/mechanics/deep-dives/cdp-safety.md)では担保比率を、[リスク開示](/ja/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/ja/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.
