> ## 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.

# CPMM 概览

> Raydium 的 CPMM（标准 AMM）是什么、与 AMM v4 的区别，以及何时选择它。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/products/cpmm/overview)
</Info>

## 一句话总结

CPMM —— **常量积** 市场做市商（Constant Product Market Maker），在 Raydium UI 中正式称为「标准 AMM」—— 是经典 `x · y = k` AMM 在 Solana 上的原生实现。没有 OpenBook 订单簿、没有 Serum 遗留代码、除了 SPL Token 和 Token-2022 外没有外部依赖。每个池都由三元组（两个代币金库、一个 LP 代币）组成，由程序所有的权限 PDA 管理，价格由金库余额的乘积决定。这是 Raydium 推荐用于所有新的常量积池的 AMM，也是 `/pools/create` 端点和网页 UI 的「创建池」流程默认使用的。

## CPMM 的优势

* **Token-2022 扩展白名单验证。** CPMM **不** 接受任意的 Token-2022 代币。程序在池创建时强制执行安全扩展白名单：`TransferFeeConfig`、`MetadataPointer`、`TokenMetadata`、`InterestBearingConfig` 和 `ScaledUiAmount`。任何其他扩展都会导致 `Initialize` 以 `NotSupportMint` 拒绝 —— 除非代币本身在程序内维护的小型硬编码代币白名单上（用于逐案例上线特定代币）。转账费特别影响交换数学，并应用于交易的正确一侧 —— 参见 [`algorithms/token-2022-transfer-fees`](/zh/algorithms/token-2022-transfer-fees)。
* **可预测的费用。** 每个池引用创建时选定的 `AmmConfig`。配置包含交易费率（在 LP、协议和基金之间分配）和独立的创建者费率。创建者费是独立的存储桶 —— 绝不是交易费的一部分。池在创建时选择是否收取创建者费。默认值和完整的分配数学在 [`products/cpmm/fees`](/zh/products/cpmm/fees)。
* **通过观察环形缓冲的链上 TWAP。** 每次交换都会更新一个 `observation` 账户。外部合约可以读取累积价格观察来计算 TWAP，无需自定义预言机。
* **扁平账户结构。** 池由六个 PDA 完全描述（权限、池状态、LP 代币、两个金库、观察）。没有每市场 OpenBook 账户、没有事件队列、没有请求队列。与 AMM v4 相比，交易在计算和账户数量上都更便宜。
* **销毁即赚兼容。** LP 代币可以在 [LP Lock](/zh/reference/program-addresses) 程序下锁定，以便池创建者可以继续收取费用而无需保留提取流动性的权利。用于「永久」流动性启动。

## CPMM 不是什么

* **不是集中的。** 流动性均匀分布在整个价格范围内，如 Uniswap v2。如果你需要资本高效的做市 —— 即在当前价格附近集中流动性 —— 使用 [CLMM](/zh/products/clmm)。
* **不是混合的。** 与 [AMM v4](/zh/products/amm-v4) 不同，CPMM 池不在 OpenBook 市场上放置挂单。跨 CPMM 池的路由通过 [AMM Routing](/zh/reference/program-addresses) 程序进行，而不是通过 CLOB。
* **不是为任意曲线启动的。** 曲线硬编码为常量积。如果你想要代币启动的联结曲线，使用 [LaunchLab](/zh/products/launchlab)，它在填满时升级到 CPMM 池。

## CPMM 与 AMM v4 的区别

| 维度            | AMM v4                         | CPMM               |
| ------------- | ------------------------------ | ------------------ |
| 曲线            | 常量积                            | 常量积                |
| OpenBook 依赖   | 惯性（原本在 OpenBook 市场上放置订单；集成已停用） | 否                  |
| Token-2022 支持 | 否（仅 SPL Token）                 | **是**（包括转账费）       |
| 每个 V2 交换的账户数  | \~9                            | \~11               |
| 每次交换的计算单位     | \~80k–120k（V2 路径）              | \~60k–100k         |
| TWAP 预言机      | 无原生预言机账户                       | `observation` 环形缓冲 |
| 新池创建（今日）      | 不是默认（程序仍接受）                    | 默认                 |
| 状态            | 完全正常运行                         | 活跃、推荐              |

有关迁移故事的更深入讨论在 [`protocol-overview/versions-and-migration`](/zh/protocol-overview/versions-and-migration)。

## 心智模型

CPMM 池是一个程序所有的对象，持有三个余额：`vault0`（token0）、`vault1`（token1）和 LP 代币的供应。LP 代币的供应跟踪存款人对池的债权；代币金库持有实际资产。其他一切 —— 权限 PDA、观察账户、费用配置指针 —— 都是为了使这个三变量关系可交易、可收费和可观察的簿记。

每个面向用户的操作都简化为一个明确的状态转变：

* **存入：** 转入 token0 和 token1，向用户铸造 LP，价格不变。
* **提取：** 从用户销毁 LP，按池的当前比例转出 token0 和 token1，价格不变。
* **交换：** 转入一个代币，转出另一个代币；比率沿着 `x · y = k` 曲线移动（扣除费用）；观察账户采样新价格。

费用收集（`CollectProtocolFee`、`CollectFundFee`）是由各自权限签署的单独交易；它不会在每次交换时发生。数学在 [`products/cpmm/math`](/zh/products/cpmm/math) 中详述，指令集在 [`products/cpmm/instructions`](/zh/products/cpmm/instructions)。

## 何时选择 CPMM

在以下情况选择 CPMM：

* 你正在启动一个新代币或新交易对，并且对哪个范围会看到交易没有强烈看法。
* 一个或两个代币都使用 Token-2022 扩展。
* 你想要一个简单的每笔交易费用模型，而不是动态的、基于 tick 的模型。
* 你在集成并想通过 Raydium 路由，而不承担 CLMM 头寸的复杂性。

在以下情况倾向 [CLMM](/zh/products/clmm)：

* 交易对是稳定的或高度相关的（稳定币兑稳定币、LST-SOL），你想在平价附近集中流动性。
* 你是一个愿意积极管理范围以获得更高费用 APR 每单位 TVL 的做市团队。

在以下情况倾向 [AMM v4](/zh/products/amm-v4)：

* 你正在迁移现有 AMM v4 工具，而不是创建新池。

（注意：AMM v4 的 OpenBook 混合模式不再活跃 —— 这不再是选择 AMM v4 的理由。）

## 下一步

* [账户](/zh/products/cpmm/accounts) —— CPMM 池的六个 PDA 及其推导方式。
* [数学](/zh/products/cpmm/math) —— `SwapBaseInput` 与 `SwapBaseOutput`、Token-2022 转账费处理、观察更新。
* [指令](/zh/products/cpmm/instructions) —— 完整的指令表面及账户列表。
* [费用](/zh/products/cpmm/fees) —— 四向费用分配及如何收集。
* [代码演示](/zh/products/cpmm/code-demos) —— 用于创建/交换/存入/提取的可运行 TypeScript 片段。

来源：

* [Raydium CP-Swap 源代码 —— `raydium-io/raydium-cp-swap`](https://github.com/raydium-io/raydium-cp-swap)
* [`reference/program-addresses`](/zh/reference/program-addresses) 获取权威程序 ID
