> 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/stableswap.md).

# StableSwap

二資産StableSwap曲線、動的手数料、実行時の数量制限、デペッグ時のLP価値。

HannのStableSwapプールはUSDHNとUSDTを保有します。両資産の準備金が均衡に近いとき、増幅パラメータが交換の価格インパクトを抑えます。一方の資産が取引によって減るほど、価格インパクトは大きくなります。見積もりは現在の準備金、増幅パラメータ、手数料設定、トークン精度を反映します。

## 準備金と増幅パラメータ

プールは二資産の不変式を計算する前に、トークン残高を小数点以下18桁へ正規化します。USDTは6桁、USDHNは18桁なので、生のトークン数量をそのまま比較できません。

正の正規化準備金を`x`と`y`、`currentA()`が返す値を`A`、不変式の値を`D`とします。整数丸めを除くと、Hannの計算式は次を満たします。

$$
2A(x+y)+D=2AD+\frac{D^3}{4xy}
$$

準備金が等しい場合、`D = x + y`です。スワップでは入力側の準備金を増やし、`D`を維持する出力側の準備金を求めてから、スワップ手数料とトークン単位の丸めを適用します。

増幅パラメータが高いほど、均衡点付近の曲線は平坦になります。不足した出力資産を補充したり、デペッグ後も1対1の交換を維持したりする機能はありません。現在の`A`は、設定された増幅パラメータの変更スケジュールに従って変わることがあります。

## 動的手数料

基本スワップ手数料は`swapFee`、不均衡の倍率は`offpegFeeMultiplier`です。手数料の基準分母は`10,000`bpsです。`4`bpsは`0.04%`ですが、アプリはこの例を固定手数料として使わず、現在のプール手数料を読み取ります。

倍率が`10,000`を超える場合、計算に使う準備金が均衡から離れるほど動的手数料が増えます。基本手数料を`f`、倍率を`m`、分母を`B = 10,000`、計算に使う正規化残高を`x`と`y`とすると、連続値の式は次の通りです。

$$
f\_{dynamic}=\frac{mf}{B+(m-B)\frac{4xy}{(x+y)^2}}
$$

`x = y`なら`4xy/(x+y)^2`は1となり、手数料は`f`に戻ります。一方の残高が小さくなるとこの比率が下がり、手数料は`mf/B`に近づきます。コントラクトは取引時の残高を整数演算で評価し、見積もりはその計算を含みます。`m ≤ B`または基本手数料が0の場合、基本手数料を使います。

管理手数料はスワップ手数料から配分される分です。残りはプールの流動性に蓄積します。プール比率と異なるデポジットにも、LP数量の計算前に不均衡手数料が適用されます。

## 入力量固定と出力量固定

アプリのUSDHN/USDT経路は一つのプールを通ります。二つの取引方式に対応します。

| 取引方式         | 固定する数量 | オンチェーンで確認する制限                |
| ------------ | ------ | ---------------------------- |
| exact input  | 支払量    | 実際の出力が`amountOutMin`以上であること。 |
| exact output | 受取量    | 実際の入力が`amountInMax`を超えないこと。  |

exact inputの見積受取量が`995`、スリッページ許容率が`0.5%`、つまり`50`bpsなら次のように計算します。

$$
minOut\approx995\left(1-\frac{50}{10{,}000}\right)=990.025
$$

exact outputでは見積入力に許容率を加えて最大支払量を求めます。どちらの数量制限もトークンの小数桁数へ変換します。手数料は既に見積もりに含まれ、スリッページ設定は見積もりと実行の間の変化を許容します。

ルーターはファクトリー登録、トークン順序、許可トークンの方針を検査します。この方針はルーターの見積もり、スワップ、デポジットに適用されます。プールへの直接呼び出しはプール自体のルールに従い、ルーターの許可リストが全コントラクト操作を制限するわけではありません。

## 取引期限と失敗

取引期限は、スワップや流動性トランザクションを実行できる最後の時刻です。期限切れ、入力・出力の制限違反、プールの一時停止、流動性不足、非対応の転送手数料付きトークンは、該当するトランザクションをリバートさせます。

見積もりは流動性を予約しません。実行前に他の取引が残高を変えることがあります。期限は実行時間を制限し、最小受取量・最大支払量は許容する結果を制限します。

リバートすると、そのトランザクションのプール変更とトークン転送は元に戻ります。以前のトランザクションで確定した承認は残り、失敗したトランザクションにもネットワークガスが使われます。

## LPトークンが表す持分

LPトークンは、手数料を計上したプール残高の持分を表します。LP総発行量の割合`s`を保有する場合、比例引き出しでは各利用可能準備金の約`s`を受け取ります。トークンの丸めと指定した最小受取量が適用されます。

アプリの引き出しはLPをバーンしてUSDHNとUSDTを両方返します。コントラクトの単一資産引き出しは、曲線と手数料の影響を受ける別の操作です。アプリの比例引き出しで一方の資産だけを指定することはできません。プールが一時停止中でも比例引き出しは許可されます。

プールの仮想価格はLPトークン当たりの`D`から計算します。不変式に基づく正規化価値を測り、外部市場のドル価格を測る値ではありません。デペッグ時のドル価値を保証しません。

ステークしたLPも同じプール持分を保ちます。RewardStakerはステーク残高と累積報酬を管理し、報酬の請求はLPが表すプール資産を変更しません。

## デペッグがプールを変える過程

外部市場でUSDHNがUSDTより安くなると、取引者は安いUSDHNを買い、プールへ売ってUSDTを受け取れます。USDHN準備金が増え、USDT準備金が減ります。LPは値下がりした資産を多く持つようになります。

USDHNがUSDTより高くなると、取引者はUSDTでプールのUSDHNを買い、外部市場で売れます。USDHN準備金が減り、USDT準備金が増えます。LPは値上がりした資産を少なく持つようになります。

### 二つのプール残高例

開始時のプールに`1,000,000` USDHNと`1,000,000` USDTがあり、両方の価格を`$1`とします。`10%`のLP持分は各トークン`100,000`に相当し、価値は`$200,000`です。

次の計算は示した最終残高と固定の`10%`持分を使います。残高は例の入力値であり、曲線から導いた取引予測ではありません。手数料と他のLPによるデポジット・引き出しは除きます。

| 項目            | USDHNが`$0.90`へ下落                            | USDHNが`$1.05`へ上昇                            |
| ------------- | ------------------------------------------- | ------------------------------------------- |
| 最終プール残高       | `1,800,000` USDHN + `200,000` USDT          | `200,000` USDHN + `1,800,000` USDT          |
| `10%`の持分      | `180,000` USDHN + `20,000` USDT             | `20,000` USDHN + `180,000` USDT             |
| 持分の価値         | `180,000 × $0.90 + 20,000 × $1 = $182,000`  | `20,000 × $1.05 + 180,000 × $1 = $201,000`  |
| 元のトークンを保有した価値 | `100,000 × $0.90 + 100,000 × $1 = $190,000` | `100,000 × $1.05 + 100,000 × $1 = $205,000` |
| 単純保有との差       | `−$8,000`                                   | `−$4,000`                                   |

差はトークン構成の変化から生じます。引き出しの最小数量はトークン数量を制限し、市場価格を制限しません。プール手数料とステーキング報酬も、この資産へのエクスポージャーと合わせて評価します。

操作手順は[スワップ・ブリッジ・流動性の提供](/ja/protocol/stableswap-dex.md)を、認可とLP複合操作は[Zapper](/ja/protocol/zapper.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/stableswap.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.
