> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026-08-17 — CLMM：受限發行人頭寸 NFT 凍結

> CLMM 在 V2 開倉路徑發現底層鑄幣權的凍結權限與受限發行人清單相符時，有條件地凍結新頭寸 NFT 帳戶。

<Info>
  **本頁內容由 AI 自動翻譯，所有內容以英文版本為準。**

  [查看英文版 →](/reference/changelog/2026-08-17-clmm-restricted-position-nft-freeze)
</Info>

本版本為精選 KYC 受限發行人池新增了有條件的不可轉讓路徑。它不會凍結每個新頭寸、凍結池資產或阻止頭寸所有者管理流動性。CLMM 池 PDA 成為每個新頭寸 NFT 鑄幣權的凍結權限，但 NFT 代幣帳戶預設保持未凍結。程式只在頭寸使用 `OpenPositionV2` 或 `OpenPositionWithToken22Nft` 且至少一個底層金庫鑄幣權的凍結權限來自硬編碼的受限發行人清單時，才會凍結它。

## 整合者速覽

* **新頭寸 NFT 鑄幣權具有凍結權限，但預設不凍結。** `OpenPosition`、`OpenPositionV2` 和 `OpenPositionWithToken22Nft` 將頭寸的 `pool_state` 設為鑄幣權凍結權限。鑄幣權在單個 NFT 鑄造後仍會被移除。
* **凍結需要 V2 路徑加發行人匹配。** `OpenPositionV2` 和 `OpenPositionWithToken22Nft` 檢查 `vault_0_mint.freeze_authority` 和 `vault_1_mint.freeze_authority`。只有當至少一個與程式清單相符時，新 NFT 帳戶才會被凍結。無匹配時，它保持未凍結且可轉讓。
* **凍結意味著綁定到所有者。** SPL Token 會以其原生 `AccountFrozen` 錯誤拒絕 NFT 轉移和代幣帳戶所有者變更。當 NFT 所有者簽署時，增加/減少流動性和費用/獎勵收集繼續有效。
* **關閉仍可用。** `ClosePosition` 偵測凍結的 NFT 帳戶，使用池 PDA 解凍它，然後原子性地燒毀 NFT 並關閉頭寸。
* **凍結關閉需要一個剩餘帳戶。** 用戶端必須將 `personal_position.pool_id` 附加為第一個剩餘帳戶。缺少它會返回 CLMM `AccountLack`；傳遞錯誤的池會返回 `NotApproved`。
* **現有頭寸不受影響。** 此更新不會追溯更改 NFT 鑄幣權或凍結現有代幣帳戶。
* **無 CLMM 狀態佈局或宣告 IDL 帳戶清單變更。** `PoolState`、`PersonalPositionState` 和指令參數保持位元組相容。關閉路徑要求通過 `remaining_accounts` 傳達。

## 觸發邏輯

程式在開倉時評估兩個金庫鑄幣權：

```rust theme={null}
must_freeze = restricted_ids.contains(vault_0_mint.freeze_authority)
           || restricted_ids.contains(vault_1_mint.freeze_authority)
```

缺少凍結權限不匹配。一側匹配即可。初始清單包含 CLMM 的 Superstate 資產偵測使用的相同發行人權限。目前 mainnet-beta 和 devnet 匹配金鑰位於 [`reference/program-addresses`](/zh-Hant/reference/program-addresses#clmm-restricted-issuer-freeze-authorities)。

檢查在共享開倉處理器中執行，僅當提供金庫鑄幣權帳戶時：

| 開倉路徑                         | 頭寸 NFT 程式  | 受限發行人凍結行為                             |
| ---------------------------- | ---------- | ------------------------------------- |
| `OpenPosition` V1            | SPL Token  | 不凍結。V1 無法服務已發佈清單針對的 Token-2022 發行人資產。 |
| `OpenPositionV2`             | SPL Token  | 檢查兩個金庫鑄幣權，匹配時凍結。                      |
| `OpenPositionWithToken22Nft` | Token-2022 | 檢查兩個金庫鑄幣權，匹配時凍結。                      |

## 頭寸 NFT 權限變更

在此更新之前，新建立的經典 SPL 頭寸 NFT 鑄幣權不保留凍結權限。更新後，每個新頭寸 NFT 鑄幣權將其池命名為凍結權限，包括普通池中的頭寸。僅此權限設定不會凍結 NFT 代幣帳戶；普通和不匹配的頭寸保持未凍結。

使用池 PDA 而非全域管理員或發行人金鑰將權限範圍限制在一個池。外部方無法簽署為 PDA，CLMM 不公開任何通用指令來凍結或解凍任意頭寸帳戶。新程式碼僅在兩個地方使用此權限：

1. 當底層發行人檢查匹配時，鑄造後立即凍結。
2. 燒毀前在 `ClosePosition` 期間立即解凍。

## `ClosePosition` 遷移

六個宣告帳戶不變。對於凍結的 NFT，將池新增為第一個剩餘帳戶：

```text theme={null}
declared: nft_owner, position_nft_mint, position_nft_account,
          personal_position, system_program, token_program
remaining[0]: personal_position.pool_id   // read-only, non-signer
```

處理器在載入 `PoolState` 前驗證金鑰，衍生池簽署者種子，並執行：

```text theme={null}
解凍 NFT 帳戶 → 燒毀 NFT → 關閉 NFT 代幣帳戶 / 頭寸狀態
```

所有步驟在一個 Solana 指令中執行，因此一起提交或回滾。每次關閉時傳遞池是安全的：當 NFT 帳戶未凍結時，處理器忽略剩餘帳戶。

<Warning>
  **有條件的用戶端中斷。** 較舊的用戶端可在升級後成功開倉，因為 V2 開倉帳戶佈局未變。如果該頭寸被凍結，同一用戶端稍後可能無法關閉它，因為其 `ClosePosition` 建構器省略了池剩餘帳戶。在允許使用者在受影響的池中開倉前更新關閉建構器。
</Warning>

## 相容性矩陣

| 情景             | 轉移 NFT | 管理流動性 | 舊版關閉建構器             | 更新的關閉建構器   |
| -------------- | ------ | ----- | ------------------- | ---------- |
| 現有頭寸           | 未變     | 是     | 是                   | 是          |
| 新頭寸，普通池        | 是      | 是     | 是                   | 是          |
| 新 V2 頭寸，受限發行人池 | 否      | 是     | 失敗，返回 `AccountLack` | 是；原子性解凍和燒毀 |

未引入新的 CLMM 自訂錯誤變體或數值移位。SPL Token 的原生 `AccountFrozen` 錯誤拒絕轉移或所有者變更嘗試。

## 更新的頁面

* `products/clmm/overview` — 版本摘要和受限可轉讓性警告。
* `products/clmm/ticks-and-positions` — 權限模型、觸發、所有者能力和關閉遷移警告。
* `products/clmm/accounts` — 頭寸 NFT 鑄幣權和生命週期行為。
* `products/clmm/instructions` — 開倉後置條件和凍結 `ClosePosition` 剩餘帳戶路徑。
* `products/clmm/code-demos` — 直接 Anchor 關閉範例和釘選 SDK 警告。
* `user-flows/add-remove-liquidity` — 使用者面向的受限頭寸行為。
* `user-flows/burn-and-earn` — 凍結頭寸無法轉移到鎖定託管。
* `security/oracle-and-token-risks` / `security/attack-vectors` — 發行人和轉移風險邊界。
* `reference/token-2022-support` — 池允許清單和頭寸託管之間的區別。
* `reference/error-codes` — 擴展的 `AccountLack` 和 `NotApproved` 原因。
* `reference/program-addresses` — 受限發行人權限匹配金鑰。
* `reference/fee-comparison` / `reference/glossary` — 可轉讓性例外。

**已驗證 2026-08-13 對比**：

* 預發佈 CLMM 分支 `feat/position-nft-freeze` 在 `ecb157760776f83f97507fa78c6e32cfb30d92a9`。
* 提交 `2e95310`（受限發行人 NFT 凍結）和 `ecb1577`（池範圍凍結權限），與 `master` 在 `51fdba2` 比較。
* `instructions/{open_position,open_position_v2,open_position_with_token22_nft,close_position}.rs` 和 `util/token.rs` 下的程式源。
* `position-nft-freeze.test.ts`，涵蓋普通可轉讓性、凍結轉移/所有者變更拒絕和 V2 加 Token-2022 解凍前關閉流程。

<Warning>
  此驗證涵蓋預發佈源分支，不是 mainnet-beta 部署或已發佈 SDK 版本。在啟用流程前確認已部署程式、生產受限權限清單和 SDK 關閉建構器。
</Warning>
