이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
이 항목은 예정된 CPMM 프로그램 업데이트를 다룹니다. 배포 전에 로컬 릴리스 브랜치에 대해 검증되었습니다. 새 명령이나 변경된
CreateAmmConfig 동작에 의존하기 전에 배포된 프로그램을 확인하세요.0.32.1에서 1.0.2로, 빌드 도구 체인은 Agave 2.3.0에서 3.1.10으로 이동합니다. 함께 따라오는 것은 4가지 동작 변경으로, 이 중 3가지는 관리 도구에만 영향을 미치고 1가지(민트 화이트리스트 제거)는 새 풀에 사용할 수 있는 Token-2022 민트를 변경합니다.
트레이더, LP 또는 풀 생성자가 호출하는 모든 것은 계정 목록, 인수 및 수학을 유지합니다.
통합자를 위한 요약
- 사용자 대면 명령이 변경되지 않았습니다.
Initialize,InitializeWithPermission,Deposit,Withdraw,SwapBaseInput,SwapBaseOutput및 4개의Collect*Fee경로 모두 바이트 동일합니다. 계정 레이아웃이 변경되지 않았습니다. - 하나의 명령이 추가됩니다:
CollectExcessLamports. 관리자 전용, 인수 없음,remaining_accounts로 전달된 소스입니다. CPMM 제어 금고, LP 민트 및 PDA에서 임차료 면제 최소값 이상의 lamports를 반환하며 다른 것은 건드리지 않습니다.products/cpmm/instructions를 참조하세요. - 하나의 오류 코드가 추가됩니다:
6015LamportsCalculateError. 코드6000–6014는 변경되지 않습니다. CreateAmmConfig는 더 이상 서명자를 수수료 소유자 필드에 복사하지 않습니다. 새 구성은 하드코딩된protocol_fee_owner및fund_fee_owner키를 가져옵니다. 기존AmmConfig계정은 건드리지 않습니다 — 계정에서protocol_owner/fund_owner를 읽으십시오. 어느 값이든 가정하지 마세요.- 하드코딩된 4개 주소 Token-2022
MINT_WHITELIST가 제거되었습니다.SupportMintAssociatedPDA 레지스트리는 이제 확장 허용 목록의 유일한 우회입니다. 기존 풀은 영향을 받지 않습니다. 검사는 풀 생성 시에만 실행됩니다. ClosePermissionPda는 공유 관리자가 아닌 전용 권한 PDA 생성자 권한을 수락합니다.- IDL 새로고침이 필요합니다. 하나의 새 명령, 하나의 새 오류 변형.
- TypeScript 클라이언트 패키지의 이름이 변경되었습니다.
@coral-xyz/anchor는0.32.1에서 고정됩니다. Anchor 1.x 클라이언트는@anchor-lang/core로 게시됩니다.
CollectExcessLamports
SIMD-0437의 1단계는 2026년 9월 3일 메인넷에 도착했으며, 임차료 면제 최소값을 9% 줄였고 4단계가 더 있습니다. 단계 전에 생성된 모든 CPMM 풀 금고, LP 민트, PoolState, AmmConfig, ObservationState, Permission 및 SupportMintAssociated 계정은 이제 과잉 자금이 조성되었으며, 프로그램 소유 계정의 lamports는 해당 프로그램에서만 이동할 수 있습니다.
명령은 4개의 고정 계정(서명자/대상 지갑, vault_and_lp_mint_auth_seed 권한 PDA, 둘 다 토큰 프로그램)을 가져간 다음 remaining_accounts의 임의 개수의 소스 계정을 가져갑니다. 각 소스 계정의 소유자에 따라 디스패치합니다: 토큰 계정 또는 민트의 경우 토큰 프로그램의 WithdrawExcessLamports(판별자 38)로의 CPI, CPMM 소유 PDA의 경우 직접 차변, 다른 것은 조용히 건너뜁니다.
래핑된 SOL은 이해할 가치가 있는 경우입니다. 네이티브 토큰 계정의 lamport 잔액 은 토큰 잔액이므로 두 토큰 프로그램 모두 하나에서 WithdrawExcessLamports를 거부합니다. CPMM은 대신 SyncNative를 CPI합니다(기부된 초과분을 래핑된 amount로 접으면서), 금액이 얼마나 증가했는지 측정하고, 정확히 그 델타에 대해 UnwrapLamports(판별자 45)를 수행한 다음 래핑된 잔액이 사전 동기화 값과 같아야 합니다 — 그렇지 않으면 LamportsCalculateError. SOL 측 풀 금고는 스윕을 통해 전체 유동성을 유지하며, LP는 스윕 전체에서 가격 변화를 보지 않습니다.
서명자는 공유 프로그램 관리자 또는 전용 수집 lamports 지갑일 수 있습니다. 주소는 reference/program-addresses에 있습니다.
CreateAmmConfig는 고정 수수료 소유자를 작성합니다
이 릴리스 전에 create_amm_config는 호출 서명자에서 두 수수료 소유자 필드를 설정했습니다:
CreateAmmConfig는 crate::admin::ID로 게이트되므로 실질적인 효과는 새로 생성된 수수료 계층이 관리자 멀티시그 대신 전용 운영 지갑에서 처음부터 스윕되며, 관리자는 UpdateAmmConfig 매개변수 3 또는 4를 통해 필드를 먼저 회전하지 않고는 방금 생성한 구성에서 수집할 수 없습니다.
두 상수는 프로그램의 나머지 주소와 동일한 devnet/mainnet cfg 패턴을 따르며, devnet에서는 둘 다 동일한 키로 확인됩니다. reference/program-addresses를 참조하세요.
Token-2022 민트 화이트리스트가 제거되었습니다
is_supported_mint는 민트의 확장을 반복하기 전에 4개 주소의 하드코딩된 MINT_WHITELIST에서 단락되곤 했습니다. 해당 배열 — 그리고 모든 호출에서 빌드된 HashSet — 이 삭제되었습니다. 남은 것은:
- 레거시 SPL Token 민트는 무조건 통과합니다.
[b"support_mint", mint]에서 초기화된SupportMintAssociatedPDA가 있는 민트는 무조건 통과합니다.- 그렇지 않으면 민트의 모든 확장은
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount중 하나여야 합니다.
CreateSupportMintAssociated / CloseSupportMintAssociated 쌍과 공유 관리자 옆의 자체 전용 권한이 있으며, Initialize 및 InitializeWithPermission 모두에서 참조됩니다. 정적 배열을 제거하면 민트 온보딩이 이제 프로그램 업그레이드가 아닌 순수 온체인 작업이 됩니다 — 이것이 요점입니다.
기존 풀은 영향을 받지 않습니다, 민트 검사는 풀 생성 시에만 실행되기 때문입니다. 변경되는 것은 4개의 이전에 화이트리스트된 민트 중 하나에 대해 새 CPMM 풀을 생성하려면 해당 민트가 레지스트리 PDA를 가져야 한다는 것입니다 — 중요한 것들은 메인넷에서 이미 가지고 있습니다. 레지스트리가 하는 것과 하지 않는 것을 포함한 전체 그림은 reference/token-2022-support에 있습니다.
ClosePermissionPda 서명자 확대
CreatePermissionPda는 이미 공유 관리자 또는 전용 권한 PDA 생성자 권한을 수락했지만, ClosePermissionPda는 address = 제약으로 관리자에 고정되었습니다. 닫기 경로는 이제 동일한 쌍을 가져갑니다:
InvalidOwner(6001)입니다 — 이전 address = 제약은 이미 해당 사용자 정의 오류를 수행했습니다 — 따라서 수락된 서명자 집합만 확대되었습니다.
도구 체인 및 종속성 변경
Anchor 1.0은 모든 CPI 호출 사이트에서 두 가지를 변경합니다. 자신의 프로그램에서 CPMM을 통합하는 경우 중요합니다:
CpiContext::new는 AccountInfo 대신 프로그램의 Pubkey를 가져가고, Context는 4개 대신 1개의 수명 매개변수를 가집니다. 클라이언트 측에서 RequestBuilder::instructions()는 Result<...> 대신 Vec<Instruction>을 반환하고, CommitmentConfig는 solana_sdk 대신 anchor_client에서 옵니다. spl-associated-token-account 8.0은 주소 도우미를 ::address 아래로 이동하고 프로그램 ID를 ::program::ID로 이동했습니다. sdk-api/rust-cpi를 참조하세요.
두 가지 빌드 시스템 세부 사항, 둘 다 온체인 효과 없음: 프로그램 크레이트는 CPSWAP_LOCALNET_ADMIN 환경 변수에서 로컬 지갑을 admin으로 컴파일하는 localnet 기능을 선언합니다(관리자 게이트 테스트가 실제로 서명할 수 있도록 — yarn test:local-admin이 이를 연결합니다). programs/cp-swap/Cargo.toml의 중복 [profile.release] 블록이 삭제되었습니다. Cargo는 워크스페이스 루트 외부의 [profile]을 무시하므로 루트 블록이 이미 적용 중인 것입니다 — 프로그램 수준 블록의 panic = "abort"가 적용되지 않았다는 사실을 포함합니다.
변경되지 않은 것
- 모든 계정 레이아웃.
PoolState,AmmConfig,ObservationState,Permission,SupportMintAssociated— 동일한 크기, 동일한 오프셋. - 오류 코드
6000–6014. - 확장 허용 목록 자체. 여전히 동일한 5개 확장.
- 수수료율, 수수료 발생 및 곡선.
CollectExcessLamports는 어떤 풀의 준비금의 일부도 아닌 lamports를 이동합니다. spl_memo.Withdraw의 메모 프로그램 제약은spl_memo::id()에서anchor_spl::memo::ID로 이동했습니다 — 이름이 바뀐anchor-spl내보내기 아래의 동일한 주소입니다.- 프로그램 ID. 변경되지 않음.
업데이트된 페이지
products/cpmm/instructions—CollectExcessLamports가 계정 목록 및 소유자별 디스패치 테이블과 함께 추가됨;CreateAmmConfig는creator_fee_rate인수 및 고정 수수료 소유자에 대한 참고를 얻습니다;CollectExcessLamports,CreateSupportMintAssociated,CloseSupportMintAssociated에 대한 명령 요약 행이 추가됨;ClosePermissionPda서명자 수정됨;Initialize전제 조건이 레지스트리 전용 우회를 위해 다시 작성됨; 상태 변경 매트릭스 행이 추가됨.products/cpmm/accounts— Token-2022 섹션이 레지스트리 PDA 주위에서 다시 작성됨, 화이트리스트 제거가 호출됨;ClosePermissionPda서명자 수정됨.products/cpmm/overview— 화이트리스트 문장이 다시 작성됨.products/cpmm/code-demos— Rust CPI 스켈레톤이 Anchor 1.0으로 업데이트됨.reference/token-2022-support— 우회 경로 섹션이 레지스트리 PDA 주위에서 다시 작성됨, 제거된MINT_WHITELIST가 “제거된 우회” 섹션으로 이동됨.reference/error-codes—6015문서화됨.reference/program-addresses— 새로운 “CPMM support-mint registry authority”, “CPMM fee-owner wallets” 및 “Excess-lamports collection wallets” 섹션;ClosePermissionPda참고 수정됨.sdk-api/rust-cpi,solana-fundamentals/toolchain,integration-guides/cpi-integration— Anchor 1.0 핀 및 CPI 마이그레이션 참고.solana-fundamentals/rent-and-reclaimable-rent— 새로운 “Raydium 프로그램이 자신의 측에서 스윕하는 것” 섹션.

