> For the complete documentation index, see [llms.txt](https://docs.pancakeswap.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pancakeswap.finance/chinese/jiao-yi/pancakeswap-infinity/key-features.md).

# 主要功能

### 1️⃣ Singleton

在 PancakeSwap v3 中，每个流动性资金池都有自己的合约，这使得创建资金池以及跨多个资金池进行兑换的成本更高。

Infinity 通过实现 Singleton 模型解决了这一问题。现在，所有资金池都存放在一个名为 PoolManager 的单一合约中。这一改变将资金池创建的 gas 成本降低多达 99%，并通过避免不必要的代币转移，使多跳兑换（经过多个资金池的兑换）的成本大幅降低。

#### ⚙️ **工作原理：**

* 每个资金池的数据都使用唯一的资金池 ID 存储在一个共享合约中。
* 创建新资金池现在只是一次状态更新，而不是一次完整的合约部署。
* 跨资金池兑换更快且消耗更少的 gas。<br>

这种 Singleton 方法，连同 Flash Accounting 和 ERC-6909 等其他优化，共同使 PancakeSwap Infinity 成为当今最省 gas 的 DEX 平台之一。

***

### ⚡️ Flash Accounting

Flash Accounting 是 PancakeSwap Infinity 中一项强大的优化，有助于在多跳兑换和流动性变更等复杂交易期间降低 gas 费。

在旧版本（如 v3）中，代币会在交易的每一步进出每个资金池。这导致高昂的 gas 成本，尤其是对于多跳兑换。

有了 Flash Accounting，这就不再必要了。PancakeSwap Infinity 不再在每一步之后转移代币，而是在内部跟踪所有代币的流动，并仅在整个交易结束时进行一次最终转移。这节省了大量 gas。

#### ⚙️ **工作原理：**

* 当你与 Infinity 交互时（例如兑换或添加流动性），系统会计算你应支付或应收取代币的净余额。
* 这些净代币余额会使用 Transient Storage 临时存储，这是随以太坊 Cancun 升级（EIP-1153）引入的一项新特性。
* Transient Storage 比传统存储更便宜，因为它只在交易期间存在——无需进行永久性的写入或读取。

***

### 🪙 原生代币支持

随着 Singleton 架构和 Flash Accounting 的引入，PancakeSwap Infinity 现在可在流动性资金池中直接支持原生 gas 代币（如 BNB、ETH）——无需再进行封装和解封装。

#### ✅ 主要亮点

* **直接原生代币资金池：** 你现在可以创建如 ETH/USDC、BNB/CAKE 这样的资金池，而无需 WETH 或 WBNB。
* **省 gas：** 原生代币转移比 ERC-20 代币转移便宜约 50%，从而为兑换和流动性操作带来更低的 gas 成本。<br>

**曾被移除，现已重新启用：** 由于实现复杂以及流动性碎片化的问题，原生代币支持在早期版本中曾缺失。

***

### 📈 自定义定价曲线

PancakeSwap Infinity 赋予开发者为资金池创建自定义定价模型的能力——超越大多数 AMM 所采用的传统模型。

{% hint style="success" %}

#### 开发者可以构建全新的兑换行为和流动性模型，专为特定资产类型或交易策略量身打造。

{% endhint %}

#### 🔧 什么是自定义定价曲线？

自定义定价曲线允许开发者：

* 绕过原生资金池管理器逻辑，创建具有自定义兑换行为的资金池。
* 改变兑换或流动性修改时代币数量的计算方式。
* 纳入自定义费用机制，例如：
  * 流动性提取费用
  * 基于策略的回扣或惩罚

所有这些都通过 swap 前/后 hook 回调实现，它们可以动态拦截和修改兑换参数。

#### 🛠 示例用例

* **StableSwap 曲线：** 围绕 1:1 价格比设计更平缓的曲线，降低 USDC 和 USDT 等资产之间的价格影响。
* **RWAs：** 为具有动态供应量的不同资产类型创建自定义行为。
* **Hook 层级费用：** 收取不同于资金池层级费用的独特费用，例如开发者费用。
* **自定义风险模型：** 调整定价以反映波动性、预言机数据或外部指标。

{% hint style="info" %}
在以往的 AMM 版本中（如 PancakeSwap v2/v3），定价逻辑是硬编码且僵化的。PancakeSwap Infinity 的架构解锁了构建资本效率更高、更量身定制的资金池的能力。
{% endhint %}

#### 🔍 开发者灵活性

* 开发者可以部署自定义 hook 合约来覆盖定价逻辑。
* beforeSwap 和 afterSwap 等 hook 回调允许完全控制代币 delta 的计算和应用方式。

***

### 🧮 ERC-6909：高效的多代币记账

PancakeSwap Infinity 采用[ ERC-6909](https://eips.ethereum.org/EIPS/eip-6909)，这是一种轻量且省 gas 的代币标准，专为在单一合约内对多种代币进行内部记账而设计。它用 mint 和 burn 原语取代了许多传统的 ERC-20 操作——从而带来显著的 gas 节省和简化的交易流程。

#### ⚙️ 工作原理

ERC-6909 代币不再在每次交互时将代币移入和移出协议，而是表示内部余额：

* Mint：当用户存入代币或执行交易时，他们可以选择接收 ERC-6909 代币作为凭证。
* Burn：之后，用户无需再次转移 ERC-20 代币，只需销毁这些 ERC-6909 代币即可结算余额或为新操作提供资金。

这种模型大幅减少了对外部代币转移的需求，而外部转移通常会产生更高的 gas 成本并与第三方逻辑交互（如 USDC 的黑名单检查）。

#### 🪙 ERC-6909 的优势

<table><thead><tr><th width="262.9921875">特性</th><th width="497.7421875">优势</th></tr></thead><tbody><tr><td>✅ 内部余额凭证</td><td>无需在用户和合约之间反复转移代币</td></tr><tr><td>✅ 省 gas 的 Mint/Burn</td><td>无论代币种类，开销恒定，无需外部合约调用</td></tr><tr><td>✅ 比 ERC-1155 更简单</td><td>代码体积更小，无回调，无批量转移要求</td></tr><tr><td>✅ 多代币支持</td><td>单一合约可以跟踪多种代币类型，余额相互隔离</td></tr><tr><td>✅ 与 PoolManager 无缝衔接</td><td>消除冗余的 ERC-20 授权和转移</td></tr></tbody></table>

#### 🚀 用例

* **高频交易者：** 避免高 gas 的转移，直接使用内部余额进行交互。
* **流动性管理者：** 更高效地开仓和平仓，无需过多的代币移动。

#### 💡 关键说明

* 当用户无需立即结算代币转移时，可以选择加入 ERC-6909 流程。
* 内部余额可以稍后合并并进行净额结算，为高级用户提供更大的控制力和灵活性。

***

### 💸 Donate 方法

`donate()` 方法允许用户通过捐赠代币，直接激励资金池内处于价格区间内的流动性提供者。该方法依赖资金池的费用记账系统来完成支付，确保仅支持资金池代币。

#### 🔹 主要功能：

* **直接向 LP 支付：** 捐赠会直接发放给流动性提供者，奖励那些在资金池活跃区间内维持流动性的人。
* **仅支持资金池代币：** `donate()` 方法仅支持以资金池代币进行捐赠，因为它利用费用记账系统来确保正确分配。
* **向所有用户开放：** 任何用户都可以调用 `donate()` 方法，使任何人都能激励活跃的流动性提供。

虽然 `donate()` 方法是激励 LP 的强大工具，但捐赠者应注意，他们的捐赠可能被其他用户抢先交易（front run）。当某个用户在捐赠发生前迅速向资金池添加流动性，从而获得一部分捐赠资金时，就可能发生这种情况。

为防止抢先交易，捐赠者在设计其捐赠机制时可能需要考虑额外的策略，例如：

* 确保以一种最大限度减少机会主义抢先交易能力的方式进行捐赠。
* 添加时间延迟或特定条件（使用 donate 前/后 hook 回调），以确保捐赠不会以这种方式被利用。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.pancakeswap.finance/chinese/jiao-yi/pancakeswap-infinity/key-features.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
