撰文:
Hayden Adams hayden@uniswap.org |Moody Salem moody.salem@gmail.com|Noah Zinsmeister noah@uniswap.org|Sara Reynolds sara@uniswap.org|Austin Adams austin@uniswap.org|Will Pote pote@uniswap.org|Mark Toda mark@uniswap.org |Alice Henshaw alice@uniswap.org|Emily Williams emily@uniswap.org|Dan Robinson|dan@paradigm.xyz
翻译:Charlie Chen @ Aki Network Research
Uniswap v4 是基于以太坊虚拟机所实现的非托管自动做市商。通过任意代码挂钩,Uniswap v4 提供了高度的定制性,使开发人员能够增强 Uniswap v3 中引入的集中流动性模型的新功能。在 Uniswap v4 中,任何人都可以创建一个具有指定挂钩的新池,该挂钩可以在预定的池操作之前或之后运行。挂钩可以用来实现以前内置在协议中的功能,如预言机,以及以前需要独立实现协议的新功能。Uniswap v4 还通过单例实现,闪电记账,以及对本地 ETH 的支持,优化了燃气效率 (gas efficienty) 和开发者体验。
Uniswap v4 是一个自动化做市商(AMM),在以太坊虚拟机(EVM)上高效地实现价值交换。与 Uniswap 协议的前几个版本一样,它是非托管的,不可升级的,且无需权限。Uniswap v4 的重点是定制化和架构变化以提升燃气效率,这是基于 Uniswap v1 和 v2 的 AMM 模型以及 Uniswap v3 引入的集中流动性模型而构建的。
Uniswap v1 [1] 和 v2 [2] 是 Uniswap 协议的前两个迭代版本,分别支持 ERC-20 <> ETH 和 ERC-20 <> ERC-20 交易,两者都使用恒定产品做市商(CPMM)模型。Uniswap v3 [3] 引入了集中流动性,通过使用提供有限价格范围内流动性的头寸,提供了更有效的资本流动性,并引入了多个费用等级。
尽管集中流动性和费用等级为流动性提供商增加了灵活性并允许实施新的策略,但 Uniswap v3 的灵活性还不足以支持新的功能,这些功能是随着 AMM 和市场的演变而发明的。一些功能,例如最初在 Uniswap v2 中引入的价格预言机,允许集成者使用去中心化的链上定价数据,但以增加换手者的燃气成本为代价,并且集成者无法定制。其他改进想法,包括通过时间加权平均做市商(TWAMM)[6]的时间加权平均价格订单(TWAP),波动性预言机,限价单或动态费用,都需要重新实现核心协议,且不能由第三方开发人员添加到 Uniswap v3。
此外,在 Uniswap 的前几个版本中,部署新池涉及到部署新合约 - 其成本随字节码大小而变化 - 并且与多个 Uniswap 池的交易涉及跨多个合约的转移和冗余状态更新。并且自 Uniswap v2 以来,Uniswap 已要求将 ETH 包装成 ERC-20,而不是支持本地 ETH。这些都会耗费燃气成本(gas fee)。
在 Uniswap v4 中,我们通过几个显著的特性进行了改进:
• 挂钩(Hooks):Uniswap v4 允许任何人部署具有自定义功能的新集中流动性池。对于每个池,创建者可以定义一个“挂钩合约”,该合约在调用生命周期的关键点实现逻辑。这些挂钩也可以管理池的交换费用以及向流动性提供者收取的提款费用。
• 单例(Singleton):Uniswap v4 摒弃了在前几个版本中使用的工厂模型,而是实现了一个持有所有池的单个合约。单例模型降低了创建池和多跳交易的成本。
• 闪电记账(Flash accounting):单例使用“闪电记账”,要求在锁定结束时,池或调用者不欠任何代币。在调用期间,代币可以用于单例内部和外部的任何数量的操作。此功能是由 EIP-1153 [4]中提出的瞬态存储操作码所提供的效率。闪电记账进一步降低了穿越多个池的交易的燃气成本,并支持与 Uniswap v4 的更复杂集成。
• 本地 ETH:Uniswap v4 重新支持本地 ETH,并支持在 v4 池中的本地代币对。ETH 换手者和流动性提供者从更便宜的转账和去除额外包装成本中受益,从而减少了燃气成本。
以下各节将提供这些变化及其使其成为可能的架构变化的深入解释。
挂钩是在外部部署的合约,它在池执行的指定点执行一些开发者定义的逻辑。这些挂钩允许集成者创建具有灵活和可定制执行的集中流动性池。
挂钩可以修改池参数,或者添加新的功能和功能性。可以通过挂钩实现的示例功能包括:
• 通过 TWAMM 随时间执行大订单
• 在滴答价格下填充的链上限价单
• 波动性转移的动态费用
• 内部化 MEV 的机制为流动性提供者
• 中位数,截断或其他自定义预言机实现
我们设想,将来将为选定的挂钩设计制定独立的白皮书,因为许多设计将与协议本身一样复杂。
当有人在 Uniswap v4 上创建一个池时,他们可以指定一个挂钩合约。这个挂钩合约实现了在池执行过程中调用的自定义逻辑。Uniswap v4 目前支持八种此类挂钩回调:
• beforeInitialize/afterInitialize
• beforeModifyPosition/afterModifyPosition
• beforeSwap/afterSwap
• beforeDonate/afterDonate
挂钩合约的地址决定了执行哪些挂钩回调。这为确定要执行的所需回调提供了一种高效和富有表现力的方法,并确保即使可升级的挂钩也遵守某些不变量。创建有效挂钩的要求很小。在图 1 中,我们描述了在交换执行流程中,beforeSwap 和 afterSwap 挂钩如何工作。
Uniswap v4 允许在交换和提取流动性时收取费用。
交换费用可以是静态的,也可以由挂钩合约动态管理。挂钩合约也可以选择为自己分配交换费用的一部分。无法在池中原生设置提款费。要设置提款费,池创建者必须设置一个挂钩合约来管理该费用,而收集的提款费用将去向挂钩合约。挂钩合约累积的费用可以由挂钩的代码任意分配,包括流动性提供者,换手者,挂钩创建者或任何其他方。
挂钩的功能受到在创建池时选择的不可变标志的限制。池创建者可以选择的费用设置包括:
• 池是否有静态费用(以及该费用是多少)或动态费用
• 允许挂钩获取交换费用百分比的权限
• 允许挂钩获取提款费用的权限
如下面的治理部分会讨论到的,治理也可以获取交换或提款费用的上限百分比。
Uniswap 协议的前几个版本使用工厂 / 池模式,其中工厂为新的代币对创建单独的合约。Uniswap v4 采用单例设计模式,所有的池都由单一合约管理,使得池部署的成本降低了 99%。
单例设计补充了 v4 中的另一项架构变化:闪电记账。在 Uniswap 协议的早期版本中,每个操作(如交换或向池添加流动性)都会在结束时转移代币。在 v4 中,每个操作都更新一个内部净余额,也就是一个增量,只在锁定结束时进行外部转移。新的 take() 和 settle() 函数可以用于借款或向池存款。通过要求在调用结束时池管理器或调用者不欠任何代币,可以确保池的清偿能力。
闪电记账简化了复杂的池操作,如原子交换和添加。当与单例模式结合时,它还简化了多跳交易。
在当前的执行环境中,闪电记账架构的成本较高,因为它需要在每次余额变动时进行存储更新。尽管合约保证内部记账数据实际上从未序列化到存储中,但用户仍然会在超过存储退款上限后支付同样的费用[5]。但是,由于余额必须在交易结束时为 0,因此可以按照 EIP-1153[4]规定的方式使用瞬态存储来进行这些余额的记账。
单例和闪电记账一起使得跨多个 v4 池的路由更加高效,降低了流动性碎片化的成本。这尤其在引入挂钩之后非常有用,因为这将大大增加池的数量。
Uniswap v4 将原生 ETH 带回到交易对中。虽然 Uniswap v1 严格将 ETH 与 ERC-20 代币配对,但由于实现的复杂性和对 WETH 和 ETH 配对的流动性碎片化的担忧,Uniswap v2 中移除了原生 ETH 配对。单例和闪电记账缓解了这些问题,所以 Uniswap v4 允许 WETH 和 ETH 配对。
原生 ETH 转移的燃气成本大约是 ERC-20 转移的一半(ETH 为 21k gas,ERC-20s 约为 40k gas)。目前 Uniswap v2 和 v3 要求绝大多数用户在 Uniswap 协议上交易前后将他们的 ETH 包装(解包)为 WETH,需要额外的燃气费用。
"Swap Hook Flow" 可以翻译为 "交换挂钩流程"。
在这个上下文中,"交换挂钩流程"图示的步骤可以翻译为以下的内容:
• 开始交换
• S0. 检查 beforeSwap 标志
• H1. 运行 beforeSwap 挂钩
• S1. 执行交换
• S2. 检查 afterSwap 标志
• H2. 运行 afterSwap 挂钩
• 结束交换
在这个流程中,"True" 翻译为 "真",表示满足了特定条件,程序将继续运行相应的挂钩(Hook)。"False" 翻译为 "假",表示未满足特定条件,程序将跳过该挂钩(Hook),直接返回结果。
Uniswap v4 将支持 ERC-1155 代币的铸造 / 销毁,这是由单例实现的,用于额外的代币记账。用户现在可以在单例内保留代币,并避免 ERC-20 代币从合约中进行转入和转出。这对于那些在多个区块或交易中连续使用同一种代币的用户和挂钩将是特别有价值的,比如频繁的交换者或流动性提供者。
Uniswap v4 有两种独立的治理费用机制,交换费用和提款费用,每一种都有不同的机制。首先,与 Uniswap v3 类似,治理可以选择从特定池的交换费中取走一部分上限的百分比。在 v4 中,如果挂钩最初选择为池开启提款费用,治理也有能力取走提款费的一部分上限的百分比。不同于 Uniswap v3 的是,治理并不控制允许的费用层级或跳空间。
如上所述,Uniswap v4 通过闪电记账、单例模式和对原生 ETH 的支持引入了有意义的燃气费优化。此外,挂钩的引入使得在 Uniswap v2 和 Uniswap v3 中包含的协议级价格预言机变得不必要,这也意味着一些池可能会完全放弃预言机,并在每个区块中的第一次交换时节省大约 15k 的燃气(gas)。
donate() 允许用户、集成商和挂钩直接以池中的任一或两种代币向区间内的流动性提供者支付。这个功能依赖于费用记账系统来促进高效支付。费用支付系统只能支持池中代币对中的任一种代币。潜在的使用场景可能包括在 TWAMM 订单上给区间内的流动性提供者打赏,或者新类型的费用系统。
总体来说,Uniswap v4 是一个非托管的,不可升级的,无需许可的 AMM 协议。它基于 Uniswap v3 中引入的集中流动性模型,通过挂钩实现池子的自定义。与挂钩相辅相成的是其他的架构改变,如单例合约,它将所有池状态保存在一个合约中,以及闪电记账,它高效地确保了每个池子的清偿能力。其他一些改进包括原生 ETH 支持,ERC-1155 余额记账,新的费用机制,以及向区间内流动性提供者捐赠的能力。
参考资料
[1] Hayden Adams. 2018. Uniswap v1 Core. 2023 年 6 月 12 日检索,来源:https:
//hackmd.io/@HaydenAdams/HJ9jLsfTz
[2] Hayden Adams, Noah Zinsmeister, and Dan Robinson. 2020. Uniswap v2 Core.
2023 年 6 月 12 日检索,来源:https://uniswap.org/whitepaper.pdf
[3] Hayden Adams, Noah Zinsmeister, Moody Salem, River Keefer, and Dan Robinson. 2021. Uniswap v3 Core. 2023 年 6 月 12 日检索,来源:https://uniswap.org/
whitepaper-v3.pdf
[4] Alexey Akhunov and Moody Salem. 2018. EIP-1153: Transient storage opcodes.
2023 年 6 月 12 日检索,来源:https://eips.ethereum.org/EIPS/eip-1153
[5] Vitalik Buterin and Martin Swende. 2021. EIP-3529: Reduction in refunds. Retrieved
2023 年 6 月 12 日检索,来源:https://eips.ethereum.org/EIPS/eip-3529
[6] Dave White, Dan Robinson, and Hayden Adams. 2021. TWAMM. Retrieved Jun
12, 2023 from https://www.paradigm.xyz/2021/07/twamm
免责声明
本文仅供一般信息之用。它并不构成投资建议或买卖任何投资的推荐或用户招揽,并且不应被用于评估做出任何投资决策的优点。不应依赖本文获取会计、法律或税务建议或投资推荐。本文反映了作者的当前观点,不代表 Uniswap Labs,Paradigm 或其关联公司的立场,并不一定反映 Uniswap Labs,Paradigm,他们的关联公司或与他们有关的个人的观点。此处反映的观点在未更新的情况下可能会发生变化。
关于 Aki Network Research
Aki Network 旗下的深度研究机构,致力于结合区块链的商业逻辑与技术理论、工程实践。更多信息:https://akiprotocol.io/
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。