坦率地說,目前 v4 的合約還不是一個開發完成的狀態,可讀性和可參考性都受到了一定的影響。
作者:Joseph Xu
編排:createpjf
封面:Uniswap
文章僅代表個人觀點,不構成任何投資意見
全文 3500 字,預計閱讀時間 9 分鐘
文章速覽:
01/ 前言
02/ Uniswap 的堅持
03/ Uniswap 的革新
3.1/ 全新的合約結構
3.2/ 巧妙的帳本設計
3.3/ 更高的開發者自由度
3.4/ 對於流動性提供者更多的激勵
3.5/ 其他協定的影子
04/ 思考
I. 前言
1620 年,一艘名為五月花號(Mayflower)的英國船隻駛離英格蘭,五月花號帶著 102 名乘客和大約 30 名船員駛向美國,他們離開英格蘭的原因是認為英格蘭教會不僅抵制改革而且過於腐敗,所以決定穿越大西洋來到北美,在那裡他們將建立屬於自己的新移民社區。
2017 年 7 月,Hayden Adams 被他大學畢業后的第一個僱主西門子解僱,彼時他還是一位毫無區塊鏈開發經驗的機械工程師。 2018 年 8 月,在 Hayden 失業的第 13 個月時,Hayden 與他的夥伴們完成了 Uniswap v1 的開發並在乙太坊主網上線,從此成為 DeFi 世界裡最不可或缺的拼圖之一。 而在本文著筆的 48 小時前,Uniswap 發佈了他們的第四版反覆運算。 我們在第一時間內瀏覽了他們的白皮書和合約代碼,試圖分析這一醞釀兩年之久的更新較於前代有哪些堅持與變革。
II. Uniswap 的坚持
坦率地说,目前 v4 的合约还不是一个开发完成的状态,可读性和可参考性都受到了一定的影响。但是我们还是可以确认,v4 保留了很多前代验证为有效的特性:
- 恒定积公式 x*y = k 沿用至今;
- 限价流动性依然基于 tick 这一刻度体系来搭建;
- 流动性分布依然是水平分布在限价区间内,每个池的流动性深度依然是该市场内所有参与的流动性堆叠的结果;
可以说经过两年的市场验证,Uniswap v3 证明了其在资金利用率上的优势,限价流动性单这一极具创造力的设计在 v4 中被沿用。
III. Uniswap 的革新
结合白皮书和合约代码,我们欣喜地发现 v4 在上述坚持的基础上完成了诸多创新和改变,而这些革新主要着力于以下四个方面:
- 全新的合约结构
- 巧妙的账本设计
- 更高的开发者自由度
- 对于流动性提供者更多的保护
接下来,我们将从这四个方面入手,详细讨论其设计和工程实现上的巧思:
3.1 全新的合约结构
熟悉 Uniswap 过往版本代码的人都知道 factory-pool 这一自其 v1 沿用至今的合约架构,可以说这个架构至今都是目前 DeFi 世界里使用最广泛的合约结构。而 Uniswap 在 v4 中决定弃用,引入了新的单例合约(Singleton)结构,旨在最大限度的降低创建流动性池以及跨池(合约)调用中的 gas 消耗。
我们可以看到,v4-core 中仅剩下 PoolManager 一个合约承担着核心的业务逻辑,而 PoolManager 将承担着协议所有流动性汇算的任务,使用 PoolKey 这一字段来索引对应的币对市场,而 AMM 曲线以及流动性的相关计算都抽象到了 libraries 库合约中。
在合约结构方面,同样值得一提的是 v4 的流动性仓位数据的存储与封装也产生了巨大改变:
- 在 v2 中,由于流动性全区间分布,协议使用的是同质化流动性代币(ERC-20)作为流动性份额的凭证;
- 在 v3 中,因为限价流动性的引入,仓位之间无法继续使用 ERC-20 来代币化流动性,而是选择在对应的流动性 Id 相关数据外层封装了非同质化代币(ERC-721),并使用 NonfungiblePositionManager 这一合约进行流动性相关操作的管理。
- 而在 v4 中,我们惊讶地发现,流动性仓位不再使用代币化的方法进行封装,而是使用地址进行仓位管理。
可以说 v3 在流动性仓位数据外层进行封装 ERC721 凭证的操作是比较割裂的,而 v4 这种简单直接地将流动性数据与地址绑定,虽然可能会丧失一些流动性代币相关的可组合性,但是无论从 gas 经济性上还是工程美学上都有极大的进步。
3.2 巧妙的账本设计
闪电记账(Flash Accounting)可以说是 v4 中最具有开创性的设计之一。回顾过往市场中绝大多数流动性协议,它们的交易和流动性相关操作都伴随着代币转移,流程无外乎:安全性检查 -> 根据设定目标计算代币转换的数量 -> 更新账务数据 -> 代币转移。而 v4 中颠覆了这一固有的编码逻辑,利用回调函数(Callback Function)的特性,构建了一套复式记账账本。
什么是复式记账法?复式记账法是以资产与权益平衡关系作为记账基础,对于每一笔经济业务,都要以相等的金额在两个或两个以上相互联系的账户中进行登记,系统地反映资金运动变化结果的一种记账方法。举一个简单的例子,Alice 从 Bob 那里借款 1000 USDC,这一笔经济活动将被记录成:
从上面的表格中,我们很好理解:资产 = 权益 – 负债。(此处负债为绝对值)
我们把这个例子拓展的更复杂一些:Alice 从 Bob 那里借款 1000 USDC;Bob 从 Carl 那里借款 1 ETH;Carl 又向 Alice 借了 1000 DAI,那么我们的复式记账表格将会是:
显然,Uniswap 的流动性池是交易者进行借贷的对象,而 swap 交易的本质则是:在交易完成后,流动性池与交易者彼此之间债务两清。也就是说当 Alice 试图使用 1800 USDC 购买 1 ETH 时,她与流动性池的关系也可以使用复式记账法来记录:
如果此刻 ETH-USDC 池中的 ETH 恰好价值 1800 USDC,那么在 swap 交易结束后,Alice 与 pool 互不相欠,交易可以成功执行。而在 v4 中,每个操作都会更新一个称为 delta 的内部净余额,而这个内部净余额就可以看作我们上面所说的资产。每笔交易,无论其跨过多少个交易对,都需要在完成时保证 delta 为零,否则将被驳回。v4 中新增的 take() 和 settle() 函数便可用于借出或存入资金到池中,协议便通过这两个函数来强制执行池的结算和偿付,以保证在调用结束时 PoolManager 与调用者之间互不相欠任何代币。
同时,协议引入了 ERC-1155 这一半同质化代币,并将协议的债务进行代币化。也就是说,当交易者或者 LP 在任一操作中导致协议对其产生欠款,他可以不使用 take() 而是使用 mint() 函数来 1:1 的铸造对应资产的 ERC-1155 代币来获得可刚性兑付的权益凭证。基于该权益凭证的激励或者衍生产品将会有极大的创造空间,而这也意味着,将会有更多流动性被留在流动性池内,为交易者提供更好的流动性深度和交易体验。
单例合约结构和闪电记账这两个特性的结合使得在多个 v4 池之间更高效地进行路由成为可能,降低了流动性碎片化的成本。
3.3 更高的开发者自由度
在 v4-periphery repo 中引入钩子 hooks 合约, hooks是在流动性池生命周期的各个时间节点运行的代码片段。开发者可以利用给出的 BaseHook 合约构建属于自己的个性化交易操作。
Uniswap v4 目前支持八个这样的钩子回调:
- beforeInitialize / afterInitialize
- beforeModifyPosition / afterModifyPosition
- beforeSwap / afterSwap
- beforeDonate / afterDonate
也就是说无论是 LP 还是交易者都可以在流动性池中操作时利用定制化的 hooks 来执行核心逻辑以外的业务逻辑。这无疑为很多原本通过链下中心化服务(如 Gelato Network)才能实现的功能提供了链上操作的可能性:
- 动态手续费
- 基于时间加权平均做市商来进行更低滑点的 swap 拆单
- 链上限价单
- 自定义链上价格预言机,如几何平均预言机(Geomean Oracles)
在此之上,我们可以展开想象,更多场景也有了实现空间:
- 动态手续费可以不是简单地根据时间线性变化,可以根据单笔 swap 产生的 tick 跳跃数量来量化波动率,从而动态改变手续费,实现对于 LP 无常风险的对冲
- 链上量化交易策略和流动性调仓策略
- 自动手续费复投
此外,引入 hook 后,池的数量预计将大幅增加,这也使得单例合约结构和复式记账的新设计有更多的用武之地,即,不同的设计更新之间是互相牵连的。
综上所述,v4 的确继续践行着其作为 DeFi 基础设施的使命,将自己的核心业务逻辑从纷繁的产品需求中抽象出来,将无尽的想象空间交给社区和开发者,引领更多的人参与进来。这一点上,Uniswap v4 做得比前代以及一众竞品更好。
3.4 对于流动性提供者更多的激励
v3 被一直诟病的缺乏对于 LP 的激励和保护在 v4 中有所改观。
PoolManager 中内置的 donate() 方法将允许用户、协议外集成者和钩子直接以池中任一代币向在价格范围内的 LP 支付费用。这一新机制可以将 MEV 内化到 LP 的回报中,以便 LP 可以从 MEV 中受益。
3.5 其他协议的影子
Uniswap 作为 DEX 赛道的龙头,一直站在 AMM 研究的最前沿,但是在 AMM 的研究上其他 AMM 竞品也有各自的创新,在 Uniswap v4 这次的更新上我们也能看到其他协议的影子:
- 如 Uniswap v4 的 Singleton 和 Flash Accounting 结构与 Balancer v2 的 Vault <-> Pool logic 结构的高度一致,都采用了虚拟账本的形式对多个 Pool 进行统一记账来降低交易路由过程中的 gas 消耗。
- 在动态手续费、链上原生限价单,以及使用 ERC-1155 来具象化流动性是刚刚上线的 Joe v2.1 中已经实现的功能
- 同时,如 3.4 节所提到的内部化 MEV,LP 们从原本被 bots 获取 MEV 的对手方,因为 hooks 的存在,可以将它们纳入到自己的价值循环体系中,叠加 Flashbot 或者 Eden Network 等 MEV 拍卖/分配协议,可以把激励二次分配到提供了有效流动性的 LP 手中。这一点上,尽管 Osmosis 并非 EVM 生态中的产品,但是 Skip Protocol 为其开发设计的 ProtoRev 也有很多借鉴之处。
IV. 思考
无疑,当下的加密市场处于深熊阶段,流动性萎缩叠加 SEC 监管升级都如同乌云笼罩在整个市场上空。与此同时,Uniswap 的交易量已经连续四个月超过 Coinbase,在监管压力之下,优秀的 DeFi 产品愈发证明其价值。时至今日,我们依然可以毫不吝啬地说,Uniswap 是以太坊上最伟大的用例之一。
故事回到本文的最开始,经过 10 周艰苦的海上航行,五月花号抵达美国,1620 年 11 月 21 日在今美国马萨诸塞州科德角附近抛锚靠岸。当他们到达北美以后,1620 年的冬季格外寒冷,102 名乘客中有一半因病去世。但是活下来的 50 人继续在北美新英格兰扎根生活,生养众多,到 21 世纪他们的后裔已经达到 3,500 万人。在他们的后代中有很多美国著名人物,包括大约五分之一的美国总统,例如亚当斯父子总统,小罗斯福总统,布什父子总统等政治、法律界人物,以及许多文艺界、科学界、宗教界人物。而在五月花号前往北美的航程中,这些乘客们在会议中签署了著名《五月花号公约》,这个公约成为 160 年以后美利坚合众国成立时的宪法精神基础。
2017 年,在 Hayden Adams 剛失業的那幾個月里,他學習了智慧合約的編寫,又先後結識了 Vitalik Buterin,Philip Daian,Dan Robinson 等等與他志同道合的朋友,在他們的影響和説明下,秉持著抗審查和開源的加密精神,Hayden 建造了 Uniswap,這艘 DeFi 世界的五月花號。 而今天,它也即將再次啟程,繼續向著未知之境進發。
參考資料
- https://github.com/Uniswap
- https://blog.uniswap.org/uniswap-v4
- https://github.com/Uniswap/v4-core/blob/main/whitepaper-v4-draft.pdf
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 本文內容僅用於資訊分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。