跳转到主要内容

概述

ClearingPriceLib 是一个纯 Solidity 库,处理标准模式池(具有真实 LP 流动性的 Uniswap v4 AMM)的批量结算数学。它使用 AMM 的当前现货价格作为统一出清价格,确定哪些意图成交,计算内部匹配量,并计算路由到 AMM 的剩余量。
仅限标准模式。 此库不用于曲线(发行模式)池。曲线池使用 ConstantProductCurveLib.computeLaunchSettlement(),出清价格来自联合曲线的现货价格。

两条结算路径

标准模式发行模式 (Geocurve)
ClearingPriceLibConstantProductCurveLib
出清价格来自 slot0.sqrtPriceX96 的 AMM 现货价格曲线现货价格 (Ve + E) / (Vt - S)
剩余路由到Uniswap v4 AMM 交换Hook 储备(曲线分发/吸收)
要求池中有真实 LP 流动性无 LP — Hook 是做市商

核心函数

computeClearingPrice()

function computeClearingPrice(
    GeodeIntent[] memory buys,
    GeodeIntent[] memory sells,
    uint256 maxBatchSize,
    uint256 ammSpotPriceQ128,
    uint256 settlementFeeBps
) internal pure returns (
    SettlementResult memory result,
    bool[] memory buyFills,
    bool[] memory sellFills
)

算法

1

强制批次大小

任一侧超过 maxBatchSize(默认:128,绝对最大:256)则回滚。
2

验证排序

买入意图必须按限价降序排列。卖出意图必须按限价升序排列。
3

设置出清价格

出清价格设为 AMM 的当前现货价格。
4

确定成交

对每个意图,计算隐含限价并与出清价格比较。不满足的意图被跳过。
5

计算费用

结算费用在路由前从每个已成交意图的输入中扣除。
6

计算内部匹配

将净卖出量转换为买方单位并确定匹配量和剩余方向。

关键属性

纯函数

无状态读写。整个计算从输入确定性完成。

存款计价

所有输出量以精确存款单位计。不预测 AMM 输出。

输入侧费用

费用从总输入中扣除后再撮合。净输入驱动所有路由决策。

结算者竞争

恶意结算者可以遗漏意图操纵出清价格。缓解措施是竞争——任何结算者都可以提交更完整的批次。

源代码

ClearingPriceLib.sol

在 GitHub 上查看完整源代码(约 143 行)。