Skip to main content
이 페이지는 AI 자동 번역입니다. 모든 내용은 영문판을 기준으로 합니다.영문판 보기 →
이 항목은 예정된 CPMM 프로그램 업데이트를 다룹니다. 배포 전 로컬 릴리스 브랜치(0dde43d, 2026년 9월 11일)에 대해 검증되었습니다. 새로운 명령어나 변경된 계정 목록을 사용하기 전에 배포된 프로그램을 확인하세요.
CPMM의 크리에이터 수수료는 항상 전부 풀 크리에이터에게 갔습니다. 이 릴리스는 프로토콜이 그 일부를 보유할 수 있게 합니다 — 수수료 계층별로 협상 가능하거나 수수료 계층의 크리에이터별로 — 수수료가 청구되는 방식에는 영향을 주지 않습니다. 영향 범위를 작게 유지하는 설계 선택: 분할은 수집 시점에 발생하며, 스왑 시점이 아닙니다. 스왑은 여전히 creator_fee_rate를 청구하고 전체 금액을 creator_fees_token_{0,1}에 누적합니다. CollectCreatorFee 또는 CollectCreatorFeePermissionless가 실행되면, 누적된 잔액이 분할되고, 프로토콜의 부분은 같은 풀의 프로토콜 수수료로 재분류되며, 크리에이터의 부분만 볼트를 떠납니다. 견적, 곡선, k, 그리고 모든 LP 대면 경로는 영향을 받지 않습니다.

통합자를 위한 요약

  • 두 크리에이터 수수료 수집 명령어 모두 계정 목록을 변경했습니다. 이는 호환성이 깨집니다. CollectCreatorFee는 위치 5에 creator_fee_share를 추가합니다. CollectCreatorFeePermissionless는 위치 5에 amm_config를 추가하고 위치 6에 creator_fee_share를 추가합니다. 두 삽입 모두 볼트 앞에 있으므로 그 이후의 모든 것이 이동합니다. 이 트랜잭션을 다시 빌드하세요. 패치하지 마세요.
  • creator_fee_share는 존재하지 않을 때도 전달되어야 합니다. 시드 제약으로 선언되지만 확인되지 않은 계정으로 읽혀지므로, 주소는 ["creator_fee_share", creator, amm_config]의 정규 PDA여야 하며 계정 자체는 선택 사항입니다. 비어 있을 때 프로그램은 AmmConfig.creator_fee_share_rate로 폴백합니다.
  • AmmConfigcreator_fee_share_rate를 얻습니다. 패딩에서 분리됩니다. 계정은 여전히 236 바이트이며 모든 기존 설정은 계속 역직렬화됩니다 — 하지만 이전 padding: [u64; 15]의 첫 번째 u64는 이제 활성 필드입니다. 꼬리를 15개 요소 배열로 모델링하는 디코더는 공유 비율을 padding[0]으로 읽습니다.
  • PoolState는 변경되지 않습니다. 637 바이트, 같은 오프셋, 같은 필드. 프로토콜의 공유는 기존 protocol_fees_token_{0,1} 카운터에 기록됩니다 — 새로운 카운터도 없고 새로운 수집 명령어도 없습니다.
  • protocol_fees_token*는 이제 스왑 외부에서 증가합니다. 프로토콜 누적을 거래량에 대해 조정하는 모든 모니터는 각 크리에이터 수수료 수집에서 점프를 볼 것입니다.
  • creator_fees_token*를 읽는 크리에이터 지급 추정기는 이제 과대 계산합니다. (1 − share_rate / 1_000_000)을 곱하세요. 해당 (creator, amm_config) 쌍에 대해 해결됩니다.
  • 두 개의 관리자 명령어가 추가됩니다: CreateCreatorFeeShareCloseCreatorFeeShare. 하나의 새로운 UpdateAmmConfig 파라미터: 8creator_fee_share_rate.
  • 새로운 에러 코드 없습니다. 새로운 경로는 InvalidOwner(6001), InvalidInput(6003) 및 MathOverflow(6011)를 재사용합니다. 60006015는 변경되지 않습니다.
  • IDL 새로고침이 필요합니다 — 두 개의 새로운 명령어, 하나의 새로운 계정 유형, 두 개의 변경된 계정 목록, 하나의 새로운 설정 필드.

분할이 작동하는 방식

우선순위 순서로 해결:
  1. CreatorFeeShare PDA at ["creator_fee_share", creator, amm_config] — 계정이 존재하고 CPMM이 소유할 때, 그 share_rate가 우선합니다.
  2. AmmConfig.creator_fee_share_rate — 수수료 계층의 기본값, 그 외에는 사용됩니다.
둘 다 FEE_RATE_DENOMINATOR_VALUE = 1_000_000에 대한 u64이며 둘 다 그 상한에 대해 확인됩니다. 그런 다음 토큰 측면별로:
프로그램이 테스트하는 세 가지 속성:
  • 반올림은 크리에이터에게 유리합니다. 공유는 바닥값이므로 먼지는 크리에이터와 함께 남습니다 — Fees::protocol_feeFees::fund_fee와 같은 방향이며, 이들도 이미 누적된 수수료에서 일부를 분리합니다. 1단위 수수료의 20%는 1이 아니라 0입니다.
  • 값이 보존됩니다. 모든 비율과 u64::MAX까지의 모든 수수료에 대해 creator_amount + shared_amount == creator_fee입니다.
  • share_rate = 0은 정확히 이전 동작입니다. 기본 설정 값과 누락된 PDA 모두 크리에이터에게 전체 수수료를 제공하므로, 관리자가 비율을 설정할 때까지 기존 풀에는 아무것도 변경되지 않습니다.
protocol_fees_token*creator_fees_token* 모두 이미 vault_amount_without_fee에서 빼지므로, 그들 사이의 값 이동은 곡선의 볼트 보기를 변경하지 않습니다. LP는 크리에이터 수수료 수집 전체에서 가격 변화를 보지 않으며, k 확인은 그대로입니다.
비율은 수집 시점에 읽혀지며, 누적 시점이 아닙니다. 비율이 0일 때 누적된 수수료는 누군가가 마침내 Collect*를 호출할 때 시행 중인 어떤 비율로든 정산됩니다. 에포크별 또는 스왑별 스냅샷은 없습니다.

계정 목록 변경

CollectCreatorFee — 하나의 삽입: CollectCreatorFeePermissionless — 두 개의 삽입:
어느 변경도 도움이 되는 방식으로 크게 실패하지 않습니다. 삽입된 계정은 목록의 끝에 있지 않으므로 이전 클라이언트는 “계정을 놓치지” 않습니다 — 프로그램에 설정이 예상되는 곳에 볼트를 전달하고 트랜잭션은 역직렬화에서 실패합니다. 새 IDL에서 다시 생성하고, 업그레이드된 프로그램을 가리키기 전에 고정한 모든 SDK 릴리스가 새 계정을 포함하는지 확인하세요.
전체 계정 테이블은 products/cpmm/instructions에 있습니다.

CreateCreatorFeeShareCloseCreatorFeeShare

CreateCreatorFeeShare(share_rate: u64)는 PDA를 초기화합니다. CloseCreatorFeeShare는 이를 닫고 렌트를 서명자에게 반환합니다. 둘 다 공유 프로그램 관리자 또는 전용 크리에이터 수수료 공유 소유자를 수락합니다 — 프로그램의 다른 위임된 권한과 같은 devnet/mainnet cfg 패턴을 따르는 새로운 하드코딩된 키 쌍. 주소는 reference/program-addresses에 있습니다. 주목할 점:
  • 풀 크리에이터는 어느 명령어의 당사자도 아니며 서명하지 않습니다. creator 계정은 확인되지 않습니다 — PDA는 아직 풀을 소유하지 않은 키에 대해 생성될 수 있습니다.
  • 하나의 계정은 (creator, amm_config) 쌍을 다룹니다, 따라서 그 크리에이터가 해당 수수료 계층에서 소유한 모든 풀을 관리합니다. 두 계층에 풀이 있는 크리에이터는 둘 다에서 다루기 위해 두 개의 계정이 필요합니다.
  • 업데이트 경로는 없습니다. 같은 쌍에 대한 두 번째 생성에서 초기화가 실패합니다. 비율을 변경하려면 닫고 다시 생성하세요.

UpdateAmmConfig 파라미터 8

수수료 계층의 기본 공유를 설정합니다. 이는 protocol_fee_rate(파라미터 1)와 무관합니다. 이는 거래 수수료를 분할합니다 — 두 가지 모두 비슷하게 읽히고 둘 다 protocol_fees_token*에 도달하므로 관리자 도구에서 주의할 가치가 있는 점입니다.

함께 탑승

CollectExcessLamports 순서 수정. 명령어는 이제 remaining_accounts에 대해 두 번 통과합니다 — 모든 토큰 프로그램 CPI 먼저, 그 다음 CPMM 소유 PDA의 직접 차감 — 호출자 순서로 디스패치하는 대신. 두 가지를 인터리빙하면 PDA가 CPI보다 먼저 차감될 때마다 런타임의 UnbalancedInstruction(“명령어 전후의 계정 잔액 합이 일치하지 않음”)으로 중단되었습니다. 호출자의 보류 중인 램포트 변경은 CPI가 실제로 수행하는 계정에만 플러시되기 때문입니다. 명령어의 인터페이스는 변경되지 않습니다. 호출자는 여전히 소스를 어떤 순서로든 전달하며, 이제 그것이 진정으로 안전합니다. 검증 가능한 빌드 메타데이터. 워크스페이스 Cargo.toml[workspace.metadata.cli] solana = "3.1.10"을 선언하므로 검증 가능한 빌드는 프로그램이 빌드된 동일한 Solana CLI를 해결합니다. 온체인 효과 없음.

변경되지 않은 것

  • PoolState — 637 바이트, 같은 필드, 같은 오프셋. 프로토콜의 공유는 자체 카운터를 추가하는 대신 기존 프로토콜 버킷을 재사용합니다.
  • AmmConfig::LEN — 여전히 236 바이트입니다.
  • 스왑 수학, 견적, 그리고 k 확인. 크리에이터 수수료는 정확히 이전과 같이 청구됩니다.
  • CollectProtocolFee / CollectFundFee — 같은 계정, 같은 서명자. CollectProtocolFee는 단순히 더 많이 수집합니다.
  • 에러 코드. 60006015 변경 없음. 아무것도 추가되지 않습니다.
  • 다른 모든 명령어, 그리고 프로그램 ID.

업데이트된 페이지

  • products/cpmm/fees — 비율 해결, 분할 산술, 반올림, 통합자 결과를 다루는 새로운 “크리에이터 수수료의 프로토콜 공유” 섹션. creator_fee_share_rate가 비율/단위 목록과 기본 파라미터 테이블에 추가됨. 수집 흐름 테이블 재작업.
  • products/cpmm/instructions — 상단의 호환성 깨짐 경고. 두 크리에이터 수수료 경로에 대한 전체 계정 테이블. 새로운 CreateCreatorFeeShareCloseCreatorFeeShare 섹션. UpdateAmmConfig 파라미터 8. CollectExcessLamports 순서 참고. 요약 및 상태 변경 행렬 행.
  • products/cpmm/accounts — 새로운 CreatorFeeShare 계정 섹션. AmmConfig 레이아웃 및 패딩 분리 경고. PoolState 수수료 카운터 참고. 계정 수명 주기 행.
  • products/cpmm/overview — 크리에이터 수수료 콜아웃 및 “예측 가능한 수수료” 글머리 기호.
  • products/cpmm/math — 분할이 의도적으로 스왑 수학에서 제외된다는 참고.
  • products/cpmm/code-demos — 업그레이드 전 SDK 빌더가 이전 계정 목록을 내보낸다는 경고. 누적 수수료 스니펫 주석 처리.
  • reference/program-addresses — 새로운 “CPMM 크리에이터 수수료 공유 권한” 섹션. creator_fee_share가 PDA 시드 블록에 추가됨.
  • reference/fee-comparisoncreator_fee_share_rate가 다른 기반을 가진 네 번째 CPMM 비율로 호출됨.