
在Uniswap V4中建立Hook数据标准
来源:登链社区原文链接:https://mp.weixin.qq.com/s/Jz3ONarTdRuCEzJ0_PfjrQHooks 是 Uniswap v4 的决定性特征,它们使开发者能够自定义和扩展流动性池的行为。在本指南中,我们的目标是为 hook 开发者、hook 数据索引者和分析师建立一个标准,以便所有用户,从开发者和 LP 到分析师,在使用 hook 数据时都可以使用相同的共享框架。Hook 与 Uni v4但首先,让我们澄清 hook 如何融入 v4。可以将它们视为 PoolManager 合约的插件或外部 API。每个池只能链接到 一个 hook,但单个 hook 合约可以服务于 多个 池。一旦池使用 hook 初始化,该池就成为“hooked 池”(相对于“vanilla 池”),并且 hook 本身被认为是“已初始化”。相比之下,没有池的 hook 合约只是一个未使用的 Solidity 合约,它实现了 核心 hook 函数 的一个子集。请记住,Uniswap v4 是一个 单例:PoolManager 从一个地方管理 所有 v4 池及其状态。下面的可视化展示了这些部分——池、hook 和 PoolManager——是如何关联的。Hook 标准虽然 hook 可以包含任何 Solidity 代码,但它们都锚定在 Uniswap v4 中的 10 个核心 hook 函数 上。这些函数对应于池生命周期中的关键点(例如,互换或流动性修改之前/之后),并为自定义提供清晰的“入口点”。有关参考,请参阅 Uni v4 核心库中的 Hooks.sol 合约和 OpenZeppelin 制作的 BaseHook.sol 模板,该模板定义了所有 hook 入口点。除了这些核心函数外,还有 4 个“delta-returning”标志,使可能的“hook 标志”总数达到 14。每个 hook 合约都通过其地址的最后 14 位来指示它实现了哪些 14 个标志(请参阅我们 之前的 v4 数据指南 关于如何读取这些位的文章)。这允许开发者和索引者快速确定 hook 的属性。如果你不熟悉 return deltas,请参阅 v4 文档中的 自定义会计、解锁回调和 Deltas 和 BeforeSwapDelta。虽然 hook 可以做的不仅仅是标准的 10 个核心函数,但这些函数创建了一个一致的基础:开发者可以依靠已知的“入口点”来自定义池行为。索引器可以可靠地解析来自不同 hook 的相同核心 hook 调用的跟踪数据。在许多情况下,hook 只会修改或扩展正常的 v4 PoolManager 流程,从而继承 Uniswap v4 核心合约中的常用事件。但是,某些 hook 可能会绕过或替换某些逻辑,从而导致跳过默认的 v4 事件或使其不准确。为了填补这一空白——并确保交易量、TVL 和费用的准确指标——我们提出了一组 hook 特定的事件。通过在正确的时间发出它们,hook 保持可发现性,分析保持可靠,并且 LP 获得完整的风险回报图。我们正在与 OpenZeppelin 合作,将这些标准纳入 Uniswap Hooks 库,并与 Atrium Academy 合作,以便在开发者培训中...





