> 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/developers/smart-contracts.md).

# スマートコントラクト

デプロイプロファイル、コントラクトID、関数、イベント、アカウント状態

Hann Finance のコントラクトバンドルは、アドレス、チェーン、ABI、デプロイ情報、ソースをまとめて保持します。統合は**デプロイプロファイルとコントラクト ID**で対象を解決します。Lending、CDP、ステーキング、スワップは、それぞれのトークンと資産・債務管理のアドレスを使います。

## デプロイプロファイルと ABI の取得

| プロファイル       | ネットワーク | チェーン ID | `canonical` |
| ------------ | ------ | ------- | ----------- |
| `kaia-prod`  | Kaia   | `8217`  | `true`      |
| `kaia-qa`    | Kaia   | `8217`  | `false`     |
| `kairos-dev` | Kairos | `1001`  | `false`     |

各プロファイルには `profile.json`、`snapshot/kaia.json`、`addresses/kaia.json`、`watch-targets/kaia.json` があります。Kairos プロファイルもファイル名は `kaia.json` のままで、メタデータに実際のチェーン ID `1001` を記録します。

`GET /api/v1/contracts/snapshot` は API が選択したスナップショットを返します。`contracts[id]` は `address`、`chainId`、`abiRef`、`abiHash`、`source`、デプロイ情報を含みます。`abiRef` は `artifacts/contracts` のパッケージルートから解決します。TypeScript の Registry は、選択したプロファイルの `getAddress(id)`、`getAbi(id)`、`getOptionalContract(id)` を提供します。任意のフロントエンド機能に有効なコントラクトがない場合は、`active: false`、`address: null` を返します。

### Kaia メインネットのアドレス

次のコントラクトは、まだ Kaia メインネットにデプロイされていません。アドレスは **TBA（デプロイ後に公開）** と表記し、デプロイ完了後に公開します。

| コントラクト ID                   | アドレス |
| --------------------------- | ---- |
| `core.USDHN`                | TBA  |
| `core.CollateralRegistry`   | TBA  |
| `core.HNKAIA`               | TBA  |
| `lending-core.Pool`         | TBA  |
| `lending-core.WKaiaGateway` | TBA  |
| `bkaia.LSTVault`            | TBA  |
| `bkaia.LSTToken`            | TBA  |
| `stableswap.Router`         | TBA  |
| `stableswap.UsdtUsdhnPool`  | TBA  |

Lending 資産は `lending-core.Asset.<symbol>` または選択した市場設定から取得します。このプロファイルでは、`lending-core.Asset.BKAIA` と `bkaia.LSTToken`、`lending-core.Asset.HNKAIA` と `core.HNKAIA` はそれぞれ異なるアドレスです。シンボルは表示名であり、呼び出しで使うトークンは各ドメインのアドレスで決まります。

## CDP コア

生成されたフロントエンドインターフェースのブランチ ID は、KAIA が `0`、HNKAIA が `1`、EARNUSDT が `2` です。アーティファクトの接頭辞はそれぞれ `core.WKAIA`、`core.HNKAIA`、`core.EARNUSDT` です。

| コントラクト ID または接尾辞                             | 公開インターフェースと状態                                                                                                                                           |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `core.USDHN`                                 | 残高・利用承認・転送・permit：`balanceOf`、`allowance`、`approve`、`transfer`、`permit`                                                                                 |
| `core.CollateralRegistry`                    | `collateralConfig`、`getToken`、`getTroveManager`、`isCollateralActive`、リデンプション手数料の取得、`redeemCollateral`                                                   |
| `<branch>.BorrowerOperations`                | `openTrove`、`openTroveAndJoinInterestBatchManager`、`addColl`、`withdrawColl`、`withdrawUSDHN`、`repayUSDHN`、`adjustTrove`、`adjustZombieTrove`、`closeTrove` |
| `<branch>.TroveManager`                      | `getLatestTroveData`、`getTroveStatus`、`getCurrentICR`、`getLatestBatchData`、`batchLiquidateTroves`、`urgentRedemption`                                    |
| `<branch>.TroveNFT`                          | ERC-721 の `ownerOf`、所有権の移転、`Transfer` イベント                                                                                                              |
| `<branch>.SortedTroves`                      | 金利順の並びと挿入位置のヒント                                                                                                                                         |
| `<branch>.AddressesRegistry`                 | ブランチのコントラクト参照と設定パラメータ                                                                                                                                   |
| `<branch>.PriceFeed`                         | 価格取得、最後の有効価格、オラクル状態                                                                                                                                     |
| `<branch>.ActivePool` / `DefaultPool`        | 稼働中の担保・債務、再分配された担保・債務                                                                                                                                   |
| `<branch>.CollSurplusPool` / `GasPool`       | 受領可能な余剰担保、清算のガス補償                                                                                                                                       |
| `core.HintHelpers` / `core.MultiTroveGetter` | 手数料・挿入位置の計算、ポジションの一括参照                                                                                                                                  |
| `core.RedemptionHelper`                      | `simulateRedemption`、`truncateRedemption`、ブランチ別の最低受取量を指定するリデンプション                                                                                       |

`<branch>` は上記3つのアーティファクト接頭辞のいずれかです。Zapper の ID は `zappers.<symbol>.Zapper`、`zappers.<symbol>.LeverageZapper`、`zappers.<symbol>.FlashSwapper` です。

現在のトークンソース`USDHNToken.sol`はERC-20とpermitを実装します。クロスチェーン転送では、基準チェーンのロック・解除に`USDHNOFTAdapter`、他のチェーンの発行・焼却に`USDHNOFT`を使います。記録された`kaia-prod`の`core.USDHN` ABIには、元のアーティファクトの`quoteOFT`、`quoteSend`、`send`も含まれます。これらの関数は現在の`USDHNToken`実装にはありません。OFT統合では、デプロイ済みアダプターまたは他のチェーンのトークン、その対象のABI、peerとendpointの設定を組み合わせます。

### 借入・金利・リデンプションのパラメータ

`BorrowerOperations.openTrove` は、所有者、所有者インデックス、担保額、要求 USDHN 額、上側・下側ヒント、年利、最大前払い手数料、担保追加マネージャー、担保引き出しマネージャー、受取人を受け取ります。`openTroveAndJoinInterestBatchManager` の構造体は、個別金利のフィールドの代わりにバッチマネージャーを受け取ります。

金利制御には `adjustTroveInterestRate`、`setInterestIndividualDelegate`、`setInterestBatchManager`、`removeFromBatch`、`switchBatchManager` を使います。`addManagerOf` と `removeManagerReceiverOf` は操作委任と受取人の設定を返します。ブランチの `BorrowerOperations` から `MCR`、`CCR`、`SCR`、`BCR` を取得します。

通常のブランチ間リデンプションは `CollateralRegistry.redeemCollateral(usdhnAmount, maxIterationsPerCollateral, maxFeePercentage)` から実行します。Registry は有効かつリデンプション可能なブランチを選び、実際に処理した額をバーンします。反復上限 `0` は無制限の走査を意味し、アプリもこの値を使います。走査回数を制限すると一部だけを処理することがあります。5つの引数を持つ TroveManager の `redeemCollateral` は Registry から呼ばれ、シャットダウン後の償還には `urgentRedemption` を使います。

`RedemptionHelper.redeemCollateral(usdhnAmount, maxIterationsPerCollateral, maxFeePercentage, minCollRedeemed)` はブランチ別の最低担保受取量を追加で受け取ります。Helper は `transferFrom` で USDHN を取得するため、呼び出し元は Helper に USDHN の使用承認を与えます。最低受取量の配列は Helper のブランチ順に並べます。指定した最低額を満たさない場合はトランザクションが revert し、残った USDHN は返却されます。`simulateRedemption` と `truncateRedemption` は価格取得がキャッシュ状態を更新することがあるため non-view 関数です。プレビューは RPC シミュレーションで取得します。

### Trove の状態と現在の債務

| 値   | 状態                    | 意味                             |
| --- | --------------------- | ------------------------------ |
| `0` | `nonExistent`         | その ID のポジションは存在しない             |
| `1` | `active`              | 通常の操作に参加する開設済みポジション            |
| `2` | `closedByOwner`       | 所有者が終了したポジション                  |
| `3` | `closedByLiquidation` | 清算で終了したポジション                   |
| `4` | `zombie`              | 通常の並びから外れた開設済みポジション。専用の調整関数を使用 |

`getLatestTroveData` は `entireDebt`、`entireColl`、再分配利益、累積利息、記録済み債務、年利、金利加重債務、累積バッチ管理手数料、最後の金利調整時刻を返します。現在の担保状態の計算には `entireDebt` と `entireColl` を使います。

TroveManager の `TroveUpdated`、`TroveOperation`、`BatchedTroveUpdated`、`BatchUpdated`、`Liquidation`、`Redemption`、`RedemptionFeePaidToTrove` をインデックス化します。ブランチ NFT の `Transfer` と組み合わせて、所有権とポジション履歴を維持します。

## Earn: Stability Pool

各ブランチの `<branch>.StabilityPool` は USDHN の入金を受け取り、清算担保と USDHN の利回りを分配します。

| 操作              | 関数                                                                                |
| --------------- | --------------------------------------------------------------------------------- |
| 入金              | `provideToSP(uint256 amount, bool doClaim)`                                       |
| 引き出し            | `withdrawFromSP(uint256 amount, bool doClaim)`                                    |
| 累積担保の受領         | `claimAllCollGains()`                                                             |
| 現在の預入残高         | `getCompoundedUSDHNDeposit(address depositor)`                                    |
| 担保利益と USDHN 利回り | `getDepositorCollGain`、`getDepositorYieldGain`、`getDepositorYieldGainWithPending` |
| プールの計算状態        | `getTotalUSDHNDeposits`、`P`、`currentScale`、`scaleToS`、`scaleToB`                  |

`deposits()` は保存された初期値を返し、compounded-deposit の関数は清算損失を反映します。`DepositUpdated` は新しい預入額と累積計算値のスナップショットを記録します。`DepositOperation` は操作、預入損失、数量変更、利回り、担保利益を記録します。`P_Updated`、`S_Updated`、`B_Updated`、`ScaleUpdated` は累積計算値の変更を記録します。`offset` と `triggerUSDHNRewards` はプロトコルが呼び出す関数です。

## Lending

`lending-core.Pool` は市場、担保設定、アカウント債務を管理します。市場設定は原資産、aToken、変動金利債務トークンのアドレスを提供します。

| 操作          | Pool 関数                                                                                                              |
| ----------- | -------------------------------------------------------------------------------------------------------------------- |
| 供給          | `supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode)`                                     |
| 引き出し        | `withdraw(address asset, uint256 amount, address to)`                                                                |
| 借入          | `borrow(address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode, address onBehalfOf)`           |
| 返済          | `repay(address asset, uint256 amount, uint256 interestRateMode, address onBehalfOf)`                                 |
| 担保の設定       | `setUserUseReserveAsCollateral(address asset, bool useAsCollateral)`                                                 |
| eMode の選択   | `setUserEMode(uint8 categoryId)`                                                                                     |
| アカウント・市場の取得 | `getUserAccountData`、`getUserConfiguration`、`getReserveData`、`getConfiguration`、`getReservesList`                    |
| 清算          | `liquidationCall(address collateralAsset, address debtAsset, address user, uint256 debtToCover, bool receiveAToken)` |

アプリの借入・返済は変動金利モード `2` を使います。ネイティブ KAIA の操作には `WKaiaGateway.depositKAIA`、`withdrawKAIA`、`borrowKAIA`、`repayKAIA` を使います。ネイティブ引き出しはアカウントの aWKAIA 使用承認を、ネイティブ借入は変動金利債務トークンの Gateway への委任を使います。

`Supply`、`Withdraw`、`Borrow`、`Repay`、`LiquidationCall`、`ReserveDataUpdated`、`ReserveUsedAsCollateralEnabled`、`ReserveUsedAsCollateralDisabled`、`UserEModeSet` をインデックス化します。市場とロールの設定は管理者権限を使う `PoolConfigurator` と `ACLManager` が管理します。

## ステーキングトークンと Vault の関数

bKAIA の Vault は `VaultModuleRouter` を通じて関数セレクターを振り分けます。**LSTVault のアドレス**に対し、`VaultDepositEntryModule`、`VaultUnstakeEntryModule`、`VaultClaimEntryModule`、`VaultViewEntryModule` のうち、操作に対応する ABI を使います。

| bKAIA 操作       | 関数                                                                            |
| -------------- | ----------------------------------------------------------------------------- |
| ネイティブ KAIA の入金 | Payable `deposit(address receiver, uint256 minShares)`                        |
| シェア・資産のプレビュー   | `previewDeposit`、`convertToShares`、`convertToAssets`                          |
| 引き出し申請         | `requestUnstakeByShares(uint256 shares)` または `requestUnstake(uint256 assets)` |
| チケットの受領        | `claim(uint256 ticketId)`、`claimMany(uint256[] ticketIds)`                    |
| キャンセル済み申請の精算   | `settleCanceled(uint256 ticketId)`                                            |
| チケットの参照        | `requests(uint256 ticketId)` と Vault の参照ヘルパー                                  |

`claimMany` は `processed`、`totalPaid`、`totalFee` を返します。`Requested`、`RequestedBatch`、`TicketStatusUpdated`、`ClaimPayout`、`ClaimManySummary`、`ClaimRetryQueued` はチケットの進行状態と支払を記録します。一括実行が成功しても、個別チケットは待機状態に残ることがあります。

`core.HNKAIA` は `supportedAssets`、`assets`、`previewDeposit`、`deposit`、`previewRedeemProRata`、`redeemProRata`、資産別の償還参照を提供します。シェア数量と原資産数量の単位は異なるため、選択した資産の小数桁数と対応するプレビューを使います。

## StableSwap と Zapper

`stableswap.UsdtUsdhnPool` は準備金、LP 計算、スワップ手数料、増幅係数を管理します。参照には `getReserves`、`getDy`、`getDx`、`quoteAddLiquidity`、`quoteRemoveLiquidity`、`getVirtualPrice` を使います。`Swap`、`Mint`、`Burn` は交換と流動性の変更を記録します。

Router は `getAmountsOut`、`getAmountsIn`、`swapExactTokensForTokens`、`swapTokensForExactTokens`、`addLiquidity`、`removeLiquidity` と各 permit バリアントを提供します。入力額固定の実行は最低出力額を、出力額固定の実行は最大入力額を指定します。パラメータ構造体には経路、受取人、期限が含まれます。`stableswap.Lens` は詳細な見積もりを、`RewardStaker` は LP ステーキング残高と未受領報酬を提供します。

ブランチの Zapper は資産をラップし、Trove 操作を実行します。レバレッジ Zapper は `openLeveragedTrove`、`leverUpTrove`、`leverDownTrove`、`closeTroveByCollateral` を提供します。最初の3関数は送信された `maxDebt` を適用します。終了用構造体は `troveId` と `profitReceiver` を受け取り、ユーザー指定の最低受取量フィールドはありません。FlashSwapper のコールバックは設定済みプールと実行中の操作を確認し、フラッシュスワップを決済して残余資産を受取人へ返します。

## リポジトリのインターフェース

* `artifacts/contracts/registry.ts`: プロファイル選択、コントラクト項目、ABI の取得。
* `artifacts/contracts/frontend.ts`、`domains/*.ts`: フロントエンド・ドメインの型と公開関数。
* `contracts/cdp-core/src/Interfaces`: CDP 呼び出し、状態構造体、イベント。
* `contracts/interfaces/src/zappers`: Zapper のパラメータ構造体と関数。
* `contracts/lending-core/src/protocol/pool`: Lending の計算と操作。
* `contracts/bkaia/src/vault/entry`: Vault の関数振り分けとチケット操作。
* `contracts/stableswap/src/StableSwap`: プール、Router、Lens、LP の実装。

[統合ガイド](/ja/developers/integrator-kit.md)はコントラクト選択、承認、トランザクション構成、イベントのインデックス処理を説明します。[技術概要](/ja/developers/technical-overview.md)はコントラクトと製品 API・ウォレットを結び付けます。


---

# 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/developers/smart-contracts.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.
