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

# Smart contract

Jaringan, alamat kontrak, fungsi publik, event, dan keadaan akun

Kontrak Hann Finance mencakup pinjaman USDHN, Lending, staking, dan pertukaran. Gunakan alamat serta ABI untuk jaringan dan agunan yang diintegrasikan.

## Jaringan dan alamat

| Jaringan       | Chain ID |
| -------------- | -------- |
| Kaia mainnet   | `8217`   |
| Kairos testnet | `1001`   |

### Kaia mainnet

Kontrak Hann Finance belum diterapkan di Kaia mainnet, chain ID `8217`.

### Alamat Kairos testnet

Jaringan: **Kairos**, chain ID `1001`.

| Kontrak                    | Alamat | Explorer |
| -------------------------- | ------ | -------- |
| Token USDHN                | —      | —        |
| CollateralRegistry         | —      | —        |
| Token dan keranjang HNKAIA | —      | —        |
| Lending Pool               | —      | —        |
| KAIA Gateway               | —      | —        |
| Vault bKAIA                | —      | —        |
| Token bKAIA                | —      | —        |
| StableSwap Router          | —      | —        |
| Pool USDHN–USDT            | —      | —        |

`—` menunjukkan kolom belum diisi. Catat tiap alamat bersama tautan kontraknya di explorer Kairos.

Gunakan ABI dari entri kontrak terverifikasi. Untuk proxy, panggil alamat proxy dengan ABI implementasi. Data reserve Lending menyediakan underlying, aToken, dan token utang untuk suplai, tarik, pinjam, serta pembayaran.

## Inti CDP

Setiap cabang memiliki BorrowerOperations, TroveManager, TroveNFT, pool, dan sumber harga sendiri. Pilih KAIA, HNKAIA, atau earnUSDT melalui referensi token dan TroveManager CollateralRegistry.

| Kontrak                        | Antarmuka dan keadaan publik                                                                                                                                    |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Token USDHN                    | Saldo, allowance, transfer, permit: `balanceOf`, `allowance`, `approve`, `transfer`, `permit`                                                                   |
| CollateralRegistry             | `collateralConfig`, `getToken`, `getTroveManager`, `isCollateralActive`, getter biaya penebusan, `redeemCollateral`                                             |
| BorrowerOperations             | `openTrove`, `openTroveAndJoinInterestBatchManager`, `addColl`, `withdrawColl`, `withdrawUSDHN`, `repayUSDHN`, `adjustTrove`, `adjustZombieTrove`, `closeTrove` |
| TroveManager                   | `getLatestTroveData`, `getTroveStatus`, `getCurrentICR`, `getLatestBatchData`, `batchLiquidateTroves`, `urgentRedemption`                                       |
| TroveNFT                       | ERC-721 `ownerOf`, transfer pemilik, event `Transfer`                                                                                                           |
| SortedTroves                   | Urutan bunga dan petunjuk penyisipan                                                                                                                            |
| AddressesRegistry              | Referensi kontrak dan parameter cabang                                                                                                                          |
| PriceFeed                      | Pengambilan harga, harga valid terakhir, keadaan oracle                                                                                                         |
| ActivePool / DefaultPool       | Agunan dan utang aktif; agunan dan utang redistribusi                                                                                                           |
| CollSurplusPool / GasPool      | Kelebihan agunan dan kompensasi gas likuidasi                                                                                                                   |
| HintHelpers / MultiTroveGetter | Perhitungan biaya dan hints; pembacaan posisi batch                                                                                                             |
| RedemptionHelper               | `simulateRedemption`, `truncateRedemption`, penebusan dengan minimum output tiap cabang                                                                         |

### Parameter pinjaman, bunga, dan penebusan

`BorrowerOperations.openTrove` menerima pemilik, indeks pemilik, jumlah agunan, USDHN, hints atas/bawah, suku bunga tahunan, biaya awal maksimum, add manager, remove manager, dan receiver. Struct `openTroveAndJoinInterestBatchManager` mengganti bunga individu dengan batch manager.

Kontrol bunga memakai `adjustTroveInterestRate`, `setInterestIndividualDelegate`, `setInterestBatchManager`, `removeFromBatch`, `switchBatchManager`. `addManagerOf` dan `removeManagerReceiverOf` menyediakan pengaturan delegasi dan penerima. Baca `MCR`, `CCR`, `SCR`, `BCR` dari BorrowerOperations cabang.

Penebusan normal masuk lewat `CollateralRegistry.redeemCollateral(usdhnAmount, maxIterationsPerCollateral, maxFeePercentage)`. Registry memilih cabang aktif yang dapat ditebus dan membakar jumlah aktual. Iterasi `0` berarti tak terbatas, seperti aplikasi; batas iterasi dapat menghasilkan penebusan sebagian. `redeemCollateral` lima argumen TroveManager dipanggil registry; shutdown memakai `urgentRedemption`.

`RedemptionHelper.redeemCollateral(usdhnAmount, maxIterationsPerCollateral, maxFeePercentage, minCollRedeemed)` menambah minimum output per cabang. Helper menarik USDHN dengan `transferFrom`, sehingga perlu allowance. Array mengikuti urutan cabang helper; batas yang gagal dipenuhi menyebabkan revert dan USDHN tersisa dikembalikan. `simulateRedemption` dan `truncateRedemption` non-view karena pembacaan harga dapat memperbarui cache; gunakan simulasi RPC.

### Status Trove dan utang terbaru

| Nilai | Status                | Arti                                                                       |
| ----- | --------------------- | -------------------------------------------------------------------------- |
| `0`   | `nonExistent`         | Tidak ada posisi untuk ID                                                  |
| `1`   | `active`              | Posisi terbuka dalam operasi normal                                        |
| `2`   | `closedByOwner`       | Ditutup pemilik                                                            |
| `3`   | `closedByLiquidation` | Ditutup oleh likuidasi                                                     |
| `4`   | `zombie`              | Masih terbuka, keluar dari urutan normal; gunakan jalur penyesuaian khusus |

`getLatestTroveData` mengembalikan `entireDebt`, `entireColl`, hasil redistribusi, bunga, utang tercatat, suku bunga, utang berbobot, biaya batch, dan waktu perubahan bunga terakhir. Perhitungan kesehatan memakai `entireDebt` dan `entireColl`.

Indeks `TroveUpdated`, `TroveOperation`, `BatchedTroveUpdated`, `BatchUpdated`, `Liquidation`, `Redemption`, `RedemptionFeePaidToTrove`, bersama `Transfer` NFT cabang untuk pemilik dan riwayat.

## Earn: Pool Stabilitas

StabilityPool tiap cabang menerima USDHN dan membagikan agunan likuidasi serta hasil USDHN.

| Operasi                | Fungsi                                                                              |
| ---------------------- | ----------------------------------------------------------------------------------- |
| Setor                  | `provideToSP(uint256 amount, bool doClaim)`                                         |
| Tarik                  | `withdrawFromSP(uint256 amount, bool doClaim)`                                      |
| Klaim agunan terkumpul | `claimAllCollGains()`                                                               |
| Baca sisa setoran      | `getCompoundedUSDHNDeposit(address depositor)`                                      |
| Baca agunan dan hasil  | `getDepositorCollGain`, `getDepositorYieldGain`, `getDepositorYieldGainWithPending` |
| Baca pencatatan pool   | `getTotalUSDHNDeposits`, `P`, `currentScale`, `scaleToS`, `scaleToB`                |

`deposits()` menyimpan nilai awal; getter compounded deposit memasukkan kerugian likuidasi. `DepositUpdated` mencatat setoran baru dan snapshot akumulator. `DepositOperation` mencatat tindakan, kerugian, perubahan jumlah, hasil, dan agunan. `P_Updated`, `S_Updated`, `B_Updated`, `ScaleUpdated` menunjukkan perubahan akumulator. `offset` dan `triggerUSDHNRewards` dikontrol protokol.

## Lending

Pool mengelola reserve, agunan, dan utang akun. Konfigurasi menyediakan alamat underlying, aToken, dan token utang variabel.

| Tindakan              | Fungsi Pool                                                                                                          |
| --------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Suplai                | `supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode)`                                     |
| Tarik                 | `withdraw(address asset, uint256 amount, address to)`                                                                |
| Pinjam                | `borrow(address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode, address onBehalfOf)`           |
| Bayar                 | `repay(address asset, uint256 amount, uint256 interestRateMode, address onBehalfOf)`                                 |
| Atur agunan           | `setUserUseReserveAsCollateral(address asset, bool useAsCollateral)`                                                 |
| Pilih eMode           | `setUserEMode(uint8 categoryId)`                                                                                     |
| Baca akun dan reserve | `getUserAccountData`, `getUserConfiguration`, `getReserveData`, `getConfiguration`, `getReservesList`                |
| Likuidasi             | `liquidationCall(address collateralAsset, address debtAsset, address user, uint256 debtToCover, bool receiveAToken)` |

Pinjaman dan pembayaran aplikasi memakai mode variabel `2`. KAIA native memakai `WKaiaGateway.depositKAIA`, `withdrawKAIA`, `borrowKAIA`, `repayKAIA`. Penarikan menggunakan allowance aWKAIA; pinjaman memakai delegasi token utang variabel kepada gateway.

Indeks `Supply`, `Withdraw`, `Borrow`, `Repay`, `LiquidationCall`, `ReserveDataUpdated`, `ReserveUsedAsCollateralEnabled`, `ReserveUsedAsCollateralDisabled`, `UserEModeSet`. `PoolConfigurator` dan `ACLManager` menyediakan pengaturan reserve serta peran oleh administrator.

## Token staking dan entrypoint vault

Setoran, penarikan, klaim, dan pembacaan memakai **alamat vault bKAIA** dan ABI publiknya.

| Operasi bKAIA             | Entrypoint                                                                     |
| ------------------------- | ------------------------------------------------------------------------------ |
| Setor KAIA native         | Payable `deposit(address receiver, uint256 minShares)`                         |
| Pratinjau bagian dan aset | `previewDeposit`, `convertToShares`, `convertToAssets`                         |
| Minta penarikan           | `requestUnstakeByShares(uint256 shares)` atau `requestUnstake(uint256 assets)` |
| Klaim tiket               | `claim(uint256 ticketId)` dan `claimMany(uint256[] ticketIds)`                 |
| Selesaikan pembatalan     | `settleCanceled(uint256 ticketId)`                                             |
| Baca tiket                | `requests(uint256 ticketId)` dan view helper vault                             |

`claimMany` mengembalikan `processed`, `totalPaid`, `totalFee`. `Requested`, `RequestedBatch`, `TicketStatusUpdated`, `ClaimPayout`, `ClaimManySummary`, `ClaimRetryQueued` menjelaskan progres dan pembayaran. Batch berhasil dapat menyisakan tiket tertunda.

HNKAIA menyediakan `supportedAssets`, `assets`, `previewDeposit`, `deposit`, `previewRedeemProRata`, `redeemProRata`, serta pembacaan penebusan per aset. Bagian dan aset dasar memakai satuan berbeda; gunakan desimal serta pratinjau aset yang sesuai.

## StableSwap dan Zapper

Pool USDHN–USDT menyimpan reserve dan mencatat bagian LP, biaya, serta amplifikasi. Baca `getReserves`, `getDy`, `getDx`, `quoteAddLiquidity`, `quoteRemoveLiquidity`, `getVirtualPrice`. Event `Swap`, `Mint`, `Burn` mencatat perdagangan dan likuiditas.

Router menyediakan `getAmountsOut`, `getAmountsIn`, `swapExactTokensForTokens`, `swapTokensForExactTokens`, `addLiquidity`, `removeLiquidity`, serta varian permit. Input tepat menetapkan minimum output; output tepat menetapkan maksimum input. Struct mencakup rute, penerima, dan deadline. StableSwap Lens memberi kuotasi rinci; RewardStaker mencatat saldo LP dan reward.

Zapper cabang melakukan wrap dan tindakan Trove. Zapper leverage menyediakan `openLeveragedTrove`, `leverUpTrove`, `leverDownTrove`, `closeTroveByCollateral`. Tiga pertama menegakkan `maxDebt`. Struct close memuat `troveId` dan `profitReceiver` tanpa minimum output pengguna. Callback FlashSwapper menerima pool terkonfigurasi dan operasi aktif, menyelesaikan flash, serta mengembalikan sisa.

Gunakan [Panduan integrasi](/id/developers/integrator-kit.md) untuk dompet, izin, dan indeks event. [Ringkasan teknis](/id/developers/technical-overview.md) menjelaskan alur kontrak dan aset.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.hann.finance/id/developers/smart-contracts.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
