Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
이 릴리스는 두 가지 CLMM 프로그램 변경 사항을 문서화합니다. 둘 다 추가적이며 하위 호환성을 유지합니다. 기존 풀, 포지션, 열린 주문은 영향을 받지 않으며, 기존 CreatePool / CreateCustomizablePool 경로는 변경되지 않습니다.

통합자를 위한 요약

  • 풀 ID가 이제 권한 게이트 뒤에서 비정규적일 수 있습니다. 역사적으로 (amm_config, token_mint_0, token_mint_1) 당 정확히 하나의 CLMM 풀 주소가 있었습니다 — PDA 시드가 이를 고정했습니다. 새로운 명령어인 **CreatePermissionedPool**은 클라이언트가 제공한 0이 아닌 seed_index: u16을 풀 PDA 시드에 포함시키므로, 화이트리스트된 운영자는 동일 페어 및 수수료 계층에 대해 여러 풀을 각각의 주소에서 운영할 수 있습니다. 임의의 풀 주소는 특권 기능이므로, 지불자는 관리자가 부여한 Permission PDA를 보유해야 합니다. 두 가지 관리자 명령어인 **CreatePermissionPda**와 **ClosePermissionPda**가 이러한 권한을 관리합니다.
  • OpenLimitOrder가 이제 출력측을 검증합니다. 명령어는 세 개의 추가 계정 — output_token_account, output_vault, output_vault_mint — 을 받으며, 소유자의 입력 또는 출력 토큰 계정이 동결되어 있으면 NotApproved로 주문을 거부합니다. 이는 최종 체결이 전달될 수 있음을 보장하며, 허용 목록 / 기본 동결 Token-2022 민트(권한 제어 토큰)에 중요합니다. 이전 단일측 계정 목록에 대해 구축된 클라이언트는 세 개의 출력 계정을 추가해야 합니다.

프로그램에서 변경된 사항

새로운 명령어: CreatePermissionedPool

CreateCustomizablePool과 동일한 형태 및 매개변수 (동일한 CreateCustomizableParams를 받으므로 단일측 수수료 및 동적 수수료 옵트인이 가능함), 추가로:
  • seed_index: u16 인수로, 0이 아니어야 합니다. 풀 PDA 시드에 (리틀 엔디안으로) 추가됩니다: ["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()].
  • permission 계정: PDA ["permission", payer]. Anchor는 존재하지 않거나 프로그램이 소유하지 않으면 호출을 거부합니다 — 그 존재 자체가 인증입니다.
  • pool_state.owner로 기록되는 pool_creator 계정으로, 수수료를 지불하는 payer와 다를 수 있습니다.
seed_index = 0은 레거시 풀을 위해 예약되어 있습니다: 이들의 경우 시드 구성 요소가 비어있게 축소되어 기존 4시드 주소를 재현하므로, 기존 풀 주소는 변경되지 않습니다. 명령어 → CreatePermissionedPool을 참조하세요.

새로운 계정: Permission

그 존재 자체가 권한인 기능 계정입니다. 생성된 authority만 저장합니다 (패딩 포함). PDA 시드: ["permission", authority]. CreatePermissionedPool 호출 권리를 부여하며 다른 것은 없습니다 — 자금을 이동하거나, 수수료를 변경하거나, 풀을 변경할 수 없습니다. 계정 → Permission을 참조하세요.

새로운 관리자 명령어: CreatePermissionPda / ClosePermissionPda

  • CreatePermissionPda는 주어진 permission_authority에 대한 Permission PDA를 초기화합니다.
  • ClosePermissionPda는 이를 닫고 호출자에게 렌트를 환불하여 권한을 취소합니다. 해당 권한 하에서 이미 생성된 풀은 영향을 받지 않습니다.
둘 다 프로그램 admin 공개키 또는 전용 permission_pda_admin 키 (메인넷 대 데브넷에서 서로 다른 상수)를 받습니다. 관리자 키 및 멀티시그 → CLMM을 참조하세요.

PoolState: seed_index 필드

두 바이트가 기존 패딩 영역에서 분리되었습니다 (padding: [u8; 6]seed_index: [u8; 2] + padding: [u8; 4]) fee_on 바로 뒤에. 총 계정 크기는 변경되지 않으며, 인덱서 마이그레이션이 필요하지 않습니다. CreatePool / CreateCustomizablePool을 통해 생성된 풀의 경우 seed_index[0, 0]입니다. 권한 제어 풀의 경우 생성자가 선택한 인덱스를 포함하며 오프체인에서 풀 주소를 다시 도출하는 데 필요합니다.

OpenLimitOrder: 출력측 계정 및 동결 계정 보호

OpenLimitOrder 계정 목록에 output_token_account, output_vault, output_vault_mint가 추가됩니다. 이들은 검증에만 사용됩니다 — 열기 시 출력이 차감되지 않습니다. 핸들러는 이제 입력 또는 출력 토큰 계정이 모두 동결되지 않았음을 요구하며, 그렇지 않으면 NotApproved를 반환합니다 (동일한 코드는 풀이 스왑 또는 지정가 주문을 비활성화했을 때 이미 반환됨). 이는 체결을 받을 수 없는 토큰 계정에 대해 주문을 열 수 있는 간격을 닫습니다 (예: 기본 동결 Token-2022 민트에 대해 아직 해제되지 않은 계정). 명령어 → OpenLimitOrder을 참조하세요.

오류 코드

새로운 오류 코드는 없습니다. 기존 6000 NotApproved는 이제 동결된 입력/출력 토큰 계정, OpenLimitOrder의 스왑/지정가 주문 비활성화 경우, 그리고 권한 명령어의 “서명자가 admin 또는 permission_pda_admin 중 하나가 아님” 경우를 추가로 포함합니다. 오류 코드 테이블 및 번호 매김은 2026-05-18 릴리스와 달리 변경되지 않습니다. 오류 코드 → CLMM을 참조하세요.

마이그레이션 노트

  • 풀 주소 읽기: (config, mint0, mint1) 당 하나의 풀이라고 가정하지 마세요. 페어는 이제 정규 풀과 seed_index 도출 주소의 하나 이상의 권한 제어 풀을 가질 수 있습니다. API / 인덱서에서 풀을 열거하고 단일 PDA를 도출하지 마세요. 권한 제어 풀을 다시 도출해야 할 때 seed_index를 저장하세요.
  • 지정가 주문 배치: OpenLimitOrder 트랜잭션에 세 개의 출력측 계정을 추가하고, 동결된 계정에 대해 NotApproved가 반환될 때 명확한 메시지를 표시하세요.
  • 계정 크기 또는 레이아웃 변경 없음: PoolState는 동일한 크기입니다. 폐기된 패딩 바이트는 이제 seed_index를 보유합니다.

업데이트된 페이지

  • products/clmm/overview — 권한 제어 다중 풀 및 지정가 주문 보호에 대한 “새로운 기능” 노트.
  • products/clmm/instructions — 새로운 CreatePermissionedPool 섹션, 명령어 테이블 및 관리자 게이팅 노트의 CreatePermissionPda / ClosePermissionPda, 그리고 업데이트된 OpenLimitOrder 계정 목록 / 전제 조건 / 오류.
  • products/clmm/accounts — 인벤토리의 Permission 및 자체 섹션, PoolState.seed_index 필드, PDA 도출 헬퍼 (derivePermissionedPool, derivePermission), 그리고 라이프사이클 빠른 참조.
  • security/admin-and-multisig — CLMM 역할 테이블의 새로운 permission_pda_admin 행 및 권한 범위 설명자.
  • reference/error-codes — 확대된 NotApproved 설명.
검증 대상:
  • raydium-clmm 소스 (create_permissioned_pool.rs, admin/create_permission_pda.rs, admin/close_permission_pda.rs, states/permission.rs, states/pool.rs, limit_order/open_limit_order.rs, lib.rs).