原文链接: https://github.com/Uniswap/v4-core/blob/main/whitepaper-v4-draft.pdf
摘要
Uniswap v4是为以太坊虚拟机实现的非托管自动化做市商。Uniswap v4通过任意代码钩子提供定制性,允许开发者通过新功能增强Uniswap v3中引入的集中流动性模型。在Uniswap v4中,任何人都可以创建一个带有指定钩子(Hooks)的新池,该钩子可以在预定的池操作之前或之后运行。钩子可以用来实现以前内置在协议中的功能,如预言机,以及以前需要独立实现协议的新功能。Uniswap v4还通过单例实现(singleton implementation)、闪电记账(flash accounting)和对原生ETH的支持提供了更好的燃气效率和开发者体验。
1 引言
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。这些都会带来燃气成本。
在Uniswap v4中,我们通过一些显著的特性进行了改进:
• 钩子(Hooks):Uniswap v4允许任何人部署具有自定义功能的新的集中流动性池。对于每个池,创建者可以定义一个“钩子合约”,该合约在调用生命周期的关键点执行逻辑。这些钩子还可以管理池的交换费用,以及向流动性提供者收取的提款费用。
• 单例(singleton):Uniswap v4摒弃了前几个版本中使用的工厂模型,转而实现一个持有所有池的单一合约。单例模型降低了池创建和多跳交易的成本。
• 闪电记账(flash accounting):单例使用“闪电记账”,这要求在锁定结束时,池或调用者不欠任何代币。在调用期间,代币可以在单例内外用于任何数量的操作。这个功能通过EIP-1153[4]提出的瞬态存储操作码得以高效实现。闪电记账进一步降低了跨多个池的交易的燃气成本,并支持与Uniswap v4的更复杂的集成。
• 原生ETH:Uniswap v4重新支持原生ETH,支持在v4池内部的原生代币对。ETH交换者和流动性提供者从更便宜的转账和去除额外包装成本中获得燃气成本的减少。
以下部分将提供对这些变化以及帮助实现这些可能的架构变化的深入解释。
2 钩子(Hooks)
钩子是在池执行的指定点执行一些开发者定义的逻辑的外部部署的合约。这些钩子允许集成者创建一个具有灵活和可定制执行的集中流动性池。 钩子可以修改池参数,或者添加新的特性和功能。可以通过钩子实现的示例功能包括:
• 通过TWAMM随时间执行大订单
• 在滴答价格上填充的链上限价订单
• 波动性转移的动态费用
• 为流动性提供者内部化MEV的机制
• 中位数、截断或其他自定义预言机实现
我们设想,未来将为选定的钩子设计起草独立的白皮书,因为许多钩子将与协议本身一样复杂。
2.1 动作钩子
当有人在Uniswap v4上创建一个池时,他们可以指定一个钩子合约。这个钩子合约实现了池在执行过程中将调用的自定义逻辑。Uniswap v4目前支持八种这样的钩子回调:
• beforeInitialize/afterInitialize
• beforeModifyPosition/afterModifyPosition
• beforeSwap/afterSwap
• beforeDonate/afterDonate
钩子合约的地址决定了执行哪些钩子回调。这为确定要执行的所需回调提供了一种燃气效率高且富有表现力的方法,并确保即使可升级的钩子也遵守某些不变量。创建一个工作钩子的要求很小。在图1中,我们描述了beforeSwap和afterSwap钩子作为交换执行流程的一部分是如何工作的。

2.2 钩子管理的费用
Uniswap v4允许在交换和提取流动性时收取费用。 交换费用可以是静态的,也可以由钩子合约动态管理。钩子合约也可以选择将交换费用的一部分分配给自己。提款费用不能在池中原生设置。要设置提款费用,池创建者必须设置一个钩子合约来管理该费用,收集的提款费用将归钩子合约所有。归钩子合约的费用可以由钩子的代码任意分配,包括给流动性提供者、交换者、钩子创建者或任何其他方。 钩子的能力受到创建池时选择的不可变标志的限制。池创建者可以选择的费用设置包括:
• 池是否有静态费用(以及费用是多少)或动态费用
• 允许钩子从交换费用中取得一定比例
• 允许钩子收取提款费用
治理也可以从交换或提款费用中取得一个上限的百分比,如下文的治理部分所述。
3 单例和闪电记账
Uniswap协议的前几个版本使用工厂/池模式,其中工厂为新的代币对创建单独的合约。Uniswap v4使用单例设计模式,所有的池都由一个合约管理,使得池部署的成本降低了99%。
单例设计补充了v4中的另一个架构变化:闪电记账。
在Uniswap协议的前几个版本中,每个操作(如交换或向池添加流动性)都以转移代币结束。在v4中,每个操作更新一个内部净余额,称为delta,只在锁定结束时进行外部转移。新的take()和settle()函数可以分别用于从池中借款或存款。通过要求在调用结束时,池管理者或调用者不欠任何代币,强制执行了池的偿付能力。
闪电记账简化了复杂的池操作,如原子交换和添加。当与单例模型结合时,它还简化了多跳交易。 在当前的执行环境中,闪电记账架构是昂贵的,因为它在每次余额变化时都需要存储更新。即使合约保证内部会计数据实际上永远不会序列化到存储中,但一旦超过存储退款上限[5],用户仍然会支付同样的成本。但是,因为余额必须在交易结束时为0,所以可以用瞬态存储来实现这些余额的记账,如EIP-1153[4]所指定的。
单例和闪电记账一起,使得在多个v4池之间的路由更加高效,降低了流动性碎片化的成本。鉴于引入了钩子,这将大大增加池的数量,这一点尤其有用。
4 原生ETH
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,这需要额外的燃气。
5 其他值得注意的特性
5.1 ERC1155记账
Uniswap v4将支持单例实现的ERC-1155代币的铸造/销毁,以进行额外的代币记账。用户现在可以将代币保留在单例中,避免向合约进行ERC-20的转移。对于那些在多个区块或交易中持续使用同一代币的用户和钩子(如频繁的交换者或流动性提供者)来说,这将特别有价值。
5.2 治理更新
Uniswap v4有两种独立的治理费用机制,交换费用和提款费用,每种都有不同的机制。
首先,类似于Uniswap v3,治理可以选择在特定池的交换费用中取得一个上限的百分比。在v4中,如果钩子最初选择为一个池开启提款费用,治理也有能力从提款费用中取得一个上限的百分比。
与Uniswap v3不同的是,治理并不控制允许的费用层次或滴答间距。
5.3 燃气减少
如上所述,Uniswap v4通过闪电记账、单例模型和对原生ETH的支持引入了有意义的燃气优化。此外,钩子的引入使得在Uniswap v2和Uniswap v3中包含的协议固定的价格预言机变得不必要,这也意味着一些池可能完全放弃预言机,并在每个区块的第一次交换中节省约15k的燃气。
5.4 donate()
donate()允许用户、集成者和钩子直接以池的任一或两种代币向范围内的流动性提供者支付。这个功能依赖于费用记账系统来促进高效的支付。费用支付系统只能支持池的代币对中的任一代币。
可能的使用场景可能是在TWAMM订单上给范围内的流动性提供者打赏,或者新类型的费用系统。
6 总结
总的来说,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, 和 Dan Robinson. 2020. Uniswap v2 Core. 2023年6月12日取自https://uniswap.org/whitepaper.pdf [3] Hayden Adams, Noah Zinsmeister, Moody Salem, River Keefer, 和 Dan Robinson. 2021. Uniswap v3 Core. 2023年6月12日取自https://uniswap.org/ whitepaper-v3.pdf [4] Alexey Akhunov 和 Moody Salem. 2018. EIP-1153: Transient storage opcodes. 2023年6月12日取自https://eips.ethereum.org/EIPS/eip-1153 [5] Vitalik Buterin 和 Martin Swende. 2021. EIP-3529: Reduction in refunds. 2023年6月12日取自https://eips.ethereum.org/EIPS/eip-3529 [6] Dave White, Dan Robinson, 和 Hayden Adams. 2021. TWAMM. 2023年6月12日取自https://www.paradigm.xyz/2021/07/twamm
免责声明 本文仅供一般信息参考。它不构成投资建议或推荐或招揽购买或出售任何投资,也不应用于评估做出任何投资决策的优点。不应依赖本文进行会计、法律或税务咨询或投资建议。本文反映了作者的当前观点,不代表Uniswap Labs、Paradigm或其关联公司,也不一定反映Uniswap Labs、Paradigm、其关联公司或与之相关的个人的观点。此处反映的观点可能会发生变化,而不会进行更新。
*以上翻译由chatgpt4协助完成。

