> ## 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-09-30 — CLMM: Anchor 1.0, 초과 lamports 회수, 고정 수수료 소유자

> CLMM이 Agave 3.1.10에서 Anchor 1.0.2로 이동하고 SIMD-0437로 해제된 렌트를 위한 관리자 CollectExcessLamports 명령을 추가합니다. 풀 PDA가 서명자로 한 번에 하나의 풀을 스윕합니다. CreateAmmConfig는 이제 서명자 대신 하드코딩된 프로토콜 및 펀드 수수료 소유자를 작성합니다. 오류 6052가 추가됩니다. 사용자 대면 명령이나 계정 레이아웃은 변경되지 않았습니다.

<Info>
  **이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.**

  [영문판 보기 →](/reference/changelog/2026-09-30-clmm-anchor-1-and-excess-lamports)
</Info>

<Info>
  이 항목은 예정된 CLMM 프로그램 업데이트를 다룹니다. 배포 전에 `raydium-clmm`의 `chore/upgrade-anchor` 브랜치(헤드 `a72f9e1`)에 대해 검증되었습니다. 새 명령이나 변경된 `CreateAmmConfig` 동작에 의존하기 전에 배포된 프로그램을 확인하세요.
</Info>

CLMM은 이제 CPMM과 LaunchLab이 [2026-09-09](/ko/reference/changelog/2026-09-09-cpmm-anchor-1-and-excess-lamports)에 배포한 것과 동일한 프레임워크 이동을 받습니다. Anchor는 `0.32.1`에서 `=1.0.2`로, 빌드 도구 체인은 Agave 2.3.0에서 3.1.10으로 이동합니다. 두 가지 관리자 측 변경이 함께 진행됩니다: 새로운 `CollectExcessLamports` 명령과 `CreateAmmConfig`의 고정 수수료 소유자입니다.

트레이더, LP, 한도 주문 사용자 또는 풀 생성자가 호출하는 모든 명령은 계정 목록, 인수 및 수학을 유지합니다.

## 통합자를 위한 요약

* **사용자 대면 명령이 변경되지 않았습니다.** `CreatePool`, `CreateCustomizablePool`, `CreatePermissionedPool`, 모든 `OpenPosition*` / `IncreaseLiquidity*` / `DecreaseLiquidity*` 경로, `ClosePosition`, `Swap` / `SwapV2` / `SwapRouterBaseIn`, 5개의 한도 주문 명령 및 보상 명령은 네트워크에서 바이트 동일합니다. 계정 레이아웃이 변경되지 않았습니다.
* **하나의 명령이 추가됩니다: `CollectExcessLamports`.** 이는 관리자 전용이며 인수를 취하지 않습니다. **호출당 하나의 풀을 스윕합니다**: 풀의 자체 `PoolState`는 항상 스윕되며, 풀 PDA는 `remaining_accounts`에 전달하는 자신의 자산고를 서명합니다. `remaining_accounts`의 다른 CLMM 소유 계정도 스윕됩니다. [`products/clmm/instructions`](/ko/products/clmm/instructions#collectexcesslamports)를 참조하세요.
* **하나의 오류 코드가 추가됩니다: `6052` `LamportsCalculateError`.** 코드 `6000`–`6051`은 변경되지 않습니다.
* **`CreateAmmConfig`는 더 이상 서명자를 `owner` / `fund_owner`에 복사하지 않습니다.** 새 구성은 하드코딩된 `protocol_fee_owner` 및 `fund_fee_owner` 키를 가져옵니다. 메인넷에서 이들은 이미 모든 21개의 기존 구성에 저장된 동일한 두 키입니다. **기존 `AmmConfig` 계정은 변경되지 않으므로** 계정에서 필드를 계속 읽으세요.
* **IDL을 새로고침하세요.** 39개 명령과 53개 오류에 대해 하나의 명령과 하나의 오류 변형을 추가합니다.
* **이제 CPMM과 CLMM을 하나의 크레이트에 넣을 수 있습니다.** 두 저장소 모두 `chore/upgrade-anchor` 브랜치에서 `anchor-lang` / `anchor-spl` `=1.0.2`를 고정하므로 단일 프로그램이 둘 다에 CPI할 수 있습니다. [`sdk-api/rust-cpi`](/ko/sdk-api/rust-cpi#cargo-dependencies)를 참조하세요.
* **TypeScript 클라이언트 패키지의 이름이 변경됩니다.** 테스트 스위트는 `@coral-xyz/anchor` `0.32.1`에서 `@anchor-lang/core` `1.0.2`로 이동합니다.

## `CollectExcessLamports`

[SIMD-0437](/ko/solana-fundamentals/rent-and-reclaimable-rent)의 1단계는 2026년 9월 3일 메인넷에서 활성화되었습니다. 단계 전에 생성된 모든 CLMM 계정은 이제 과잉 자금이 조성되었으며, CLMM 프로그램만 자신이 소유한 계정에서 lamports를 이동할 수 있습니다. 여기에는 풀 자산고, 보상 자산고, `PoolState`, `AmmConfig`, `ObservationState`, `TickArrayBitmapExtension` 등이 포함됩니다.

명령은 4개의 고정 계정을 취한 다음 `remaining_accounts`의 임의 개수의 소스 계정을 취합니다:

| # | 계정                               | 역할                                                                                                   |
| - | -------------------------------- | ---------------------------------------------------------------------------------------------------- |
| 1 | `collect_lamports_wallet` (W, S) | 서명자 및 대상입니다. 공유 프로그램 관리자 또는 전용 CLMM 수집-lamports 지갑이어야 하며, 그렇지 않으면 호출이 `NotApproved` (`6000`)로 실패합니다. |
| 2 | `pool_state` (W)                 | PDA 시드를 통해 토큰 프로그램 CPI에 서명하고 항상 자신도 스윕됩니다.                                                           |
| 3 | `token_program`                  | SPL Token입니다.                                                                                        |
| 4 | `token_program_2022`             | Token-2022입니다. 둘 다 필요하며 프로그램은 소스 계정당 하나를 선택합니다.                                                      |

**풀이 서명 권한이지, 프로그램 전체 PDA가 아닙니다.** CPMM은 하나의 글로벌 `vault_and_lp_mint_auth_seed` 권한으로 서명합니다. CLMM 토큰 자산고는 자신의 `PoolState`에 의해 소유되므로 단일 호출은 슬롯 2에 전달된 풀에 대해서만 서명할 수 있습니다. 각 토큰 프로그램 소스는 해당 풀을 권한으로 가져야 합니다: `token_vault_0`, `token_vault_1` 또는 풀의 보상 자산고 중 하나입니다. 다른 풀의 토큰 계정이나 사용자의 토큰 계정은 토큰 프로그램의 소유자 확인에 실패하고 전체 명령을 되돌립니다. 프로그램은 이를 건너뛰지 않습니다. 포지션 NFT 민트도 스윕할 수 없습니다. 포지션이 열릴 때 민트 권한이 취소되기 때문입니다. 풀별로 스윕하세요.

명령은 두 번의 패스를 만들며 그 순서는 고정됩니다:

1. **토큰 프로그램 CPI 먼저.** SPL Token 또는 Token-2022가 소유한 모든 소스에 대해 비네이티브 계정은 `WithdrawExcessLamports` (판별자 `38`)를 가져옵니다. 네이티브 wSOL 자산고는 `SyncNative` → `UnwrapLamports` (판별자 `45`) 왕복을 가져오며, 이는 래핑된 잔액이 사전 동기화 값과 같은지 확인하는 것으로 끝납니다. 그렇지 않으면 호출이 `LamportsCalculateError`로 실패합니다. **SOL 측 자산고는 전체 유동성을 유지하며**, 스윕 전체에서 스왑 견적이 변경되지 않습니다.
2. **직접 차변 두 번째.** 패스 2는 `pool_state`를 먼저 차변한 다음 CLMM 프로그램이 소유한 모든 소스를 `rent.minimum_balance(data_len)`까지 차변합니다.

다른 프로그램이 소유한 소스는 자동으로 건너뜁니다. 이 두 패스 순서는 CPMM이 [2026-09-19](/ko/reference/changelog/2026-09-19-cpmm-creator-fee-protocol-share)에서 채택한 것입니다. CLMM은 첫 번째 릴리스부터 이를 가지고 있습니다. PDA가 CPI 전에 차변되면 런타임이 `UnbalancedInstruction`으로 중단되므로 호출자는 소스를 임의의 순서로 전달할 수 있습니다.

<Warning>
  **프로그램 소유 패스는 계정이 어느 풀이나 사용자에 속하는지 확인하지 않습니다.** CLMM 프로그램이 소유한 모든 계정은 사용자가 렌트를 지불한 일부를 포함하여 적격입니다: `PersonalPositionState`, `LimitOrderState` 및 `TickArrayState`. 렌트 면제 최소값 이상의 초과분만 이동합니다. 계정은 데이터를 유지하고 렌트 면제 상태로 유지됩니다. 포지션이나 주문이 나중에 종료되면 프로그램은 해당 시점에 계정이 보유한 모든 잔액을 환불합니다. 스윕 후 해당 잔액은 현재 렌트 최소값입니다.
</Warning>

지갑 주소는 [`reference/program-addresses`](/ko/reference/program-addresses#excess-lamports-collection-wallets)에 나열되어 있습니다.

## `CreateAmmConfig`는 고정 수수료 소유자를 작성합니다

이 릴리스 전에 `create_amm_config`는 호출 서명자에서 두 수수료 소유자 필드를 설정했습니다:

```rust theme={null}
amm_config.owner      = ctx.accounts.owner.key();
amm_config.fund_owner = ctx.accounts.owner.key();
```

이제 프로그램의 자체 상수를 작성합니다:

```rust theme={null}
amm_config.owner      = crate::protocol_fee_owner::ID;
amm_config.fund_owner = crate::fund_fee_owner::ID;
```

`CreateAmmConfig`는 여전히 `crate::admin::ID`로 제한됩니다. 이 릴리스 전에 모든 새 수수료 계층은 두 필드 모두에 관리자로 시작했으며 `UpdateAmmConfig` 매개변수 `3` / `4`로 회전해야 했습니다. 이제 운영 지갑으로 시작합니다. 메인넷에서 상수는 이미 모든 21개의 기존 구성에 `owner` / `fund_owner`로 저장된 동일한 키입니다. 프로그램은 이제 운영이 수동으로 설정하는 데 사용된 값을 작성합니다.

수집 서명자는 변경되지 않습니다. `CollectProtocolFee`는 `amm_config.owner` **또는** `crate::admin::ID`를 수락하고, `CollectFundFee`는 `amm_config.fund_owner` **또는** `crate::admin::ID`를 수락하며, 이 릴리스 전후 모두입니다.

devnet에서 두 상수는 동일한 키로 확인됩니다. [`reference/program-addresses`](/ko/reference/program-addresses#clmm-fee-owner-wallets)를 참조하세요.

<Warning>
  **이것은 마이그레이션이 아닙니다.** 모든 기존 `AmmConfig`는 이미 가지고 있는 `owner` 및 `fund_owner`를 유지합니다. 상수나 관리자 키를 하드코딩하는 대신 필드를 읽으세요.
</Warning>

## 도구 체인 및 종속성 변경

| 항목                                                                                 | 이전                                         | 이후                                                                                                     |
| ---------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| `anchor-lang` / `anchor-spl` (프로그램)                                                | `=0.32.1`                                  | `=1.0.2`                                                                                               |
| `Anchor.toml` 도구 체인                                                                | `[tool-chain]`, `solana-version = "2.3.0"` | `[toolchain]`, `solana_version = "3.1.10"`                                                             |
| 워크스페이스 `Cargo.toml`                                                                | —                                          | `[workspace.metadata.cli] solana = "3.1.10"`                                                           |
| `anchor-client` / `anchor-lang` (클라이언트 크레이트)                                       | `0.32.1`                                   | `1.0.2`                                                                                                |
| `solana-sdk` / `-client` / `-account-decoder` / `-transaction-status` (클라이언트 크레이트) | `2.3.0`                                    | `3`                                                                                                    |
| `spl-token` / `spl-token-2022` (클라이언트 크레이트)                                        | `7.0.0` / `7.0.0`                          | `9.0` / `11.0`                                                                                         |
| `spl-associated-token-account` / `spl-memo` / `spl-token-client` (클라이언트 크레이트)      | `6.0.0` / `6.0.0` / `0.14.0`               | `8.0` / `7.0` / `0.19`                                                                                 |
| `mpl-token-metadata` (클라이언트 크레이트)                                                  | `5.1.0`                                    | `=5.1.2-alpha.2`                                                                                       |
| 새 클라이언트 크레이트                                                                       | —                                          | `solana-system-interface` `3.2`, `solana-commitment-config` `3`, `solana-compute-budget-interface` `3` |
| Docker 이미지                                                                         | `solanafoundation/anchor:v0.32.1`          | `solanafoundation/anchor:v1.0.2`                                                                       |
| `@coral-xyz/anchor`                                                                | `0.32.1`                                   | `@anchor-lang/core` `1.0.2`로 대체됨                                                                       |
| `typescript`                                                                       | `^4.3.5`                                   | `^5.6.3`                                                                                               |

Anchor 1.0 CPI 호출 사이트의 변경 사항은 CPMM 통합자가 이미 처리한 것과 동일합니다. `CpiContext::new`는 `AccountInfo` 대신 프로그램의 `Pubkey`를 취하고, `Context`는 4개 대신 1개의 수명 매개변수를 가집니다. 클라이언트 크레이트에서 `RequestBuilder::instructions()`은 이제 `Result` 없이 `Vec<Instruction>`을 반환하고, `system_program`은 `solana-system-interface`로 이동했습니다. [`sdk-api/rust-cpi`](/ko/sdk-api/rust-cpi#cargo-dependencies)를 참조하세요.

온체인 효과가 없는 빌드 시스템 세부 사항:

* **Localnet 관리자.** `localnet` 기능은 더 이상 커밋된 픽스처로 지원되는 고정 테스트 키를 컴파일하지 않습니다. 대신 빌드 시간에 `CLMM_LOCALNET_ADMIN` 환경 변수에서 관리자를 읽으며, `yarn test:local-admin`은 로컬 지갑에서 설정합니다. 픽스처의 `.gitignore` 예외는 사라졌습니다.
* **릴리스 프로필.** `programs/amm/Cargo.toml`의 중복 `[profile.release]` 블록이 삭제되었습니다. Cargo는 워크스페이스 루트 외부의 `[profile]`을 무시하므로 루트 블록이 이미 적용 중인 것이었고, 프로그램 수준 `panic = "abort"`는 적용되지 않았습니다.
* **Anchor.toml.** `seeds = false`는 `resolution = true` 더하기 `skip-lint = false`가 되고, 오래된 `[registry]` URL이 제거됩니다.
* **린트.** `programs/amm/Cargo.toml`은 Anchor 및 Solana 매크로가 내보내는 기능 cfg에 대한 `[lints.rust] unexpected_cfgs` 허용 목록을 추가합니다.
* **README.** 이 브랜치에서 README는 여전히 `coral-xyz/anchor`에서 `rustup default 1.86.0` 및 `avm install 0.32.1`을 실행하도록 지시합니다. 대신 `Anchor.toml` 및 [`solana-fundamentals/toolchain`](/ko/solana-fundamentals/toolchain)을 따르세요.

## 변경되지 않은 것

* **모든 계정 레이아웃.** `PoolState`, `AmmConfig`, `TickArrayState`, `TickArrayBitmapExtension`, `PersonalPositionState`, `ObservationState`, `LimitOrderState`, `DynamicFeeConfig`, `Permission` 및 `SupportMintAssociated`는 동일한 크기와 오프셋을 유지합니다.
* **오류 코드 `6000`–`6051`.**
* **스왑, 유동성, 수수료, 동적 수수료 및 한도 주문 수학.** `CollectExcessLamports`는 어떤 풀의 준비금에도 포함되지 않은 lamports를 이동합니다.
* **포지션 NFT 동결** [2026-08-17](/ko/reference/changelog/2026-08-17-clmm-restricted-position-nft-freeze)부터, 풀 동결 권한 규칙 및 `ClosePosition` 해제 경로 포함.
* **`spl_memo`.** `DecreaseLiquidityV2`의 메모 프로그램 제약은 `spl_memo::id()`에서 `anchor_spl::memo::ID`로 이동했습니다. 둘 다 동일한 주소를 지정합니다. `anchor-spl`은 내보내기의 이름을 바꿨을 뿐입니다.
* **프로그램 ID.**

## 업데이트된 페이지

* `products/clmm/instructions`: 업그레이드 배너; 계정 목록, 두 패스 디스패치 테이블 및 풀별 범위 지정이 있는 `CollectExcessLamports` 섹션; 인벤토리, 관리자 게이팅 및 상태 변경 매트릭스 행; `CollectProtocolFee` / `CollectFundFee`의 수수료 소유자 참고.
* `products/clmm/accounts`: `AmmConfig` 소유자 주석 및 `CreateAmmConfig`가 작성하는 것에 대한 참고.
* `products/clmm/code-demos`: 버전 배너 및 Rust CPI 스켈레톤이 Anchor 1.0으로 이동.
* `products/cpmm/code-demos`: "CLMM과 크레이트를 공유할 수 없음" 참고 제거.
* `reference/error-codes`: `6052` 문서화.
* `reference/program-addresses`: 새로운 "CLMM 수수료 소유자 지갑" 섹션; CLMM이 "초과 lamports 수집 지갑"에 추가됨.
* `sdk-api/rust-cpi`, `sdk-api/anchor-idl`, `solana-fundamentals/toolchain`: `raydium-clmm`에 대한 Anchor 1.0 핀 및 크레이트 분할 경고 폐기.
* `solana-fundamentals/rent-and-reclaimable-rent`: CLMM이 "Raydium 프로그램이 자신의 측에서 스윕하는 것"에 추가됨.
* `security/admin-and-multisig`: CLMM 초과 lamports 수집기 역할.
* `protocol-overview/versions-and-migration`: CLMM 업그레이드 이력 글머리 기호.
