Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
이 항목은 예정된 CLMM 프로그램 업데이트를 다룹니다. 배포 전에 raydium-clmm의 chore/upgrade-anchor 브랜치(헤드 a72f9e1)에 대해 검증되었습니다. 새 명령이나 변경된 CreateAmmConfig 동작에 의존하기 전에 배포된 프로그램을 확인하세요.
CLMM은 이제 CPMM과 LaunchLab이 2026-09-09에 배포한 것과 동일한 프레임워크 이동을 받습니다. 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를 참조하세요.
  • 하나의 오류 코드가 추가됩니다: 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를 참조하세요.
  • TypeScript 클라이언트 패키지의 이름이 변경됩니다. 테스트 스위트는 @coral-xyz/anchor 0.32.1에서 @anchor-lang/core 1.0.2로 이동합니다.

CollectExcessLamports

SIMD-0437의 1단계는 2026년 9월 3일 메인넷에서 활성화되었습니다. 단계 전에 생성된 모든 CLMM 계정은 이제 과잉 자금이 조성되었으며, CLMM 프로그램만 자신이 소유한 계정에서 lamports를 이동할 수 있습니다. 여기에는 풀 자산고, 보상 자산고, PoolState, AmmConfig, ObservationState, TickArrayBitmapExtension 등이 포함됩니다. 명령은 4개의 고정 계정을 취한 다음 remaining_accounts의 임의 개수의 소스 계정을 취합니다: 풀이 서명 권한이지, 프로그램 전체 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에서 채택한 것입니다. CLMM은 첫 번째 릴리스부터 이를 가지고 있습니다. PDA가 CPI 전에 차변되면 런타임이 UnbalancedInstruction으로 중단되므로 호출자는 소스를 임의의 순서로 전달할 수 있습니다.
프로그램 소유 패스는 계정이 어느 풀이나 사용자에 속하는지 확인하지 않습니다. CLMM 프로그램이 소유한 모든 계정은 사용자가 렌트를 지불한 일부를 포함하여 적격입니다: PersonalPositionState, LimitOrderState 및 TickArrayState. 렌트 면제 최소값 이상의 초과분만 이동합니다. 계정은 데이터를 유지하고 렌트 면제 상태로 유지됩니다. 포지션이나 주문이 나중에 종료되면 프로그램은 해당 시점에 계정이 보유한 모든 잔액을 환불합니다. 스윕 후 해당 잔액은 현재 렌트 최소값입니다.
지갑 주소는 reference/program-addresses에 나열되어 있습니다.

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

이 릴리스 전에 create_amm_config는 호출 서명자에서 두 수수료 소유자 필드를 설정했습니다:
이제 프로그램의 자체 상수를 작성합니다:
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를 참조하세요.
이것은 마이그레이션이 아닙니다. 모든 기존 AmmConfig는 이미 가지고 있는 owner 및 fund_owner를 유지합니다. 상수나 관리자 키를 하드코딩하는 대신 필드를 읽으세요.

도구 체인 및 종속성 변경

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를 참조하세요. 온체인 효과가 없는 빌드 시스템 세부 사항:
  • 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을 따르세요.

변경되지 않은 것

  • 모든 계정 레이아웃. PoolState, AmmConfig, TickArrayState, TickArrayBitmapExtension, PersonalPositionState, ObservationState, LimitOrderState, DynamicFeeConfig, Permission 및 SupportMintAssociated는 동일한 크기와 오프셋을 유지합니다.
  • 오류 코드 6000–6051.
  • 스왑, 유동성, 수수료, 동적 수수료 및 한도 주문 수학. CollectExcessLamports는 어떤 풀의 준비금에도 포함되지 않은 lamports를 이동합니다.
  • 포지션 NFT 동결 2026-08-17부터, 풀 동결 권한 규칙 및 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 업그레이드 이력 글머리 기호.