> ## 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`](/ko/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` 마이그레이션

선언된 6개 계정은 변경되지 않습니다. 동결된 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` at `ecb157760776f83f97507fa78c6e32cfb30d92a9`.
* 커밋 `2e95310` (제한 발행자 NFT 동결) 및 `ecb1577` (풀 범위 동결 권한), `master` at `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>
