Uniswap/v4-core
GitHub: Uniswap/v4-core
Uniswap v4 核心智能合约,提供可扩展且支持 hook 定制化的自动化做市商协议底层实现。
Stars: 2527 | Forks: 1315
# Uniswap v4 Core
[](https://github.com/Uniswap/v4-core/actions/workflows/lint.yml)
[](https://github.com/Uniswap/v4-core/actions/workflows/tests-merge.yml)
Uniswap v4 是一个新的自动化做市商协议,提供可扩展和可定制的流动性池。`v4-core` 承载了用于创建流动性池和执行流动性池操作(例如兑换和提供流动性)的核心逻辑。
此仓库中的合约处于早期阶段——我们现在发布草案代码,以便 v4 能够以公开方式构建,并接受公开反馈和有意义的社区贡献。我们预计这将是一个长达数月的过程,我们感谢任何形式的贡献,无论大小。
## 白皮书
关于 Uniswap v4 Core 的更详细描述可以在 [Uniswap v4 Core 白皮书](./docs/whitepaper/whitepaper-v4.pdf)草案中找到。
## 架构
`v4-core` 采用单例架构,所有的流动性池状态都由 `PoolManager.sol` 合约管理。在初始调用 `unlock` 之后,即可执行流动性池操作。集成者需实现 `unlockCallback` 并继续对流动性池执行以下任何操作:
- `swap`
- `modifyLiquidity`
- `donate`
- `take`
- `settle`
- `mint`
- `burn`
请注意,流动性池的初始化可以在解锁 PoolManager 的上下文之外进行。
在解锁期间,仅跟踪用户(正数)或流动性池(负数)的净欠款余额。这是保存在解锁状态中的 `delta` 字段。只要在解锁释放时累积的 delta 达到 0,就可以在流动性池上执行任意数量的操作。这种解锁和回调式的架构为调用者在与核心代码集成时提供了最大的灵活性。
此外,可以使用 hook 合约初始化流动性池,该合约可以在流动性池操作的生命周期中实现以下任何回调:
- {before,after}Initialize
- {before,after}AddLiquidity
- {before,after}RemoveLiquidity
- {before,after}Swap
- {before,after}Donate
回调逻辑可以根据 hook 的实现进行更新。然而,在流动性池初始化后,在流动性池上执行 _哪些_ 回调是无法更改的。
## 仓库结构
所有合约都保存在 `v4-core/src` 文件夹中。
请注意,测试使用的辅助合约保存在 `src` 文件夹内的 `v4-core/src/test` 子文件夹中。任何新的测试辅助合约都应添加到此处,但所有 Foundry 测试都位于 `v4-core/test` 文件夹中。
```
src/
----interfaces/
| IPoolManager.sol
| ...
----libraries/
| Position.sol
| Pool.sol
| ...
----test
----PoolManager.sol
...
test/
----libraries/
| Position.t.sol
| Pool.t.sol
```
## 本地部署与使用
要使用这些合约并部署到本地测试网,你可以使用 forge 在你的仓库中安装代码:
```
forge install https://github.com/Uniswap/v4-core
```
要与这些合约集成,可以使用以下接口:
```
import {IPoolManager} from 'v4-core/contracts/interfaces/IPoolManager.sol';
import {IUnlockCallback} from 'v4-core/contracts/interfaces/callback/IUnlockCallback.sol';
contract MyContract is IUnlockCallback {
IPoolManager poolManager;
function doSomethingWithPools() {
// this function will call `unlockCallback` below
poolManager.unlock(...);
}
function unlockCallback(bytes calldata data) external returns (bytes memory) {
// disallow arbitrary caller
if (msg.sender != address(poolManager) revert Unauthorized();
// perform pool actions
poolManager.swap(...)
}
}
error Unauthorized();
```
## 许可证
Uniswap V4 Core 采用 Business Source License 1.1 (`BUSL-1.1`) 许可,请参阅 [BUSL_LICENSE](https://github.com/Uniswap/v4-core/blob/main/licenses/BUSL_LICENSE);以及 MIT License (`MIT`) 许可,请参阅 [MIT_LICENSE](https://github.com/Uniswap/v4-core/blob/main/licenses/MIT_LICENSE)。Uniswap V4 Core 中的每个文件都在文件头注明了适用的许可证类型。
标签:Solidity, Uniswap, 区块链, 去中心化金融, 智能合约, 自动做市商