UniSwapV3速通:白皮书

date
May 6, 2024
AISummary
本文介绍了UniSwap V3白皮书的内容,包括交易池的工作原理、预言机的改进和价格与流动性预言机的应用,以及不可升级的核心合约和可治理修改的参数。UniSwap V3通过引入自定义价格区间和几何平均数TWAP等改进,提高了资金利用率和预言机的鲁棒性。不可升级的核心合约确保了协议的去中心化和安全性,可治理修改的参数使社区能够调整交易费率、协议手续费等参数,以实现更好的流动性和用户体验。
slug
uniswap-quick
status
Published
tags
Book
type
Post
Authors
Published
Published

速通版理解 Uniswap v3 白皮书

1. 概述

  • 特性和优势
    • Uniswap v3相比前版本有哪些主要改进?
    • A:Uniswap V3 引入了 集中流动性(concentrated liquidity) 的概念:LP 可以选择他们希望在哪个价格区间提供流动性。这个机制通过将更多的流动性提供在一个相对狭窄的价格区间,来大大提高资产利用效率;这也使 Uniswap 的使用场景更加多样化:它现在可以对于不同价格波动性的池子进行不同的配置。
      我的解释是,V3会创建多个相近价格的池子,池子如果不被耗尽,则在池子内进行AMM平衡。如果池子耗尽,则会移动到下一个池子。在池子内,根据代币的数量,代币的价格将是池子内两种代币的比率。(L是x和y的几何平均数)。
      其他的:Ticks,数学原理,先略过。Link:
    • 什么是AMM?
    • 一个 AMM 是一套定义如何管理流动性的智能合约。每个单独的交易对(例如 ETH/USDC)都是一个单独的智能合约,它存储了 ETH 和 USDC 的资产并且撮合交易。在这个合约中,我们可以将 ETH 兑换成 USDC 或者将 USDC 兑换成 ETH。
      在 AMM 中,一个核心概念为池子(pooling):每个合约都是一个存储流动性的池子,允许不同的用户(包括其他合约)在其中进行某种方式的交易。AMM 中有两种角色,*流动性提供者(LP)*以及交易者(trader);这两方通过流动性池进行交互,而交互的方式由合约进行规定且不可更改。
       
    • 新的手续费结构为何被认为更灵活?
    • 在Uniswap v3中,引入了不同级别的手续费选项,这些选项允许流动性提供者(LPs)根据所预测的市场条件选择最适合他们的手续费层级。具体来说,有以下几个不同的手续费级别:
      0.05%:适用于非常稳定的币对,如稳定币之间的交易。
      0.30%:适用于普通波动性的币对,这是最常见的选择,以前版本的Uniswap主要使用这一费率。
      1.00%:适用于高波动性的币对,或者那些交易频率较低、流动性较少的市场。
      优势是:
      1. 选择合适的手续费级别:流动性提供者可以根据他们选择的资产对的波动性和交易量来选择合适的手续费级别。例如,如果一个LP认为某个币对未来会有高波动性或高风险,他们可能选择1.00%的手续费级别,以获得更高的回报来补偿风险。相反,对于低风险的稳定币交易,选择0.05%的手续费可以吸引更多的交易者使用这个流动性池,因为交易成本较低。
      1. 激励更多交易:通过提供多种手续费选项,Uniswap v3能够吸引不同需求的交易者。低手续费吸引更频繁的交易,高手续费则为流动性提供者提供更高的利润。这样的设置使得交易者和流动性提供者都可以根据市场条件和个人偏好做出最优选择。
      1. 动态调整:流动性提供者可以随时调整他们的资金投入到不同的手续费级别的池子中,以应对市场变化。这种灵活性使得资金可以始终在最可能产生最优回报的地方被利用。
  • 技术基础
    • Uniswap使用的常值函数做市商(CFMM)模型是如何设计的?
    • 如果x与y代表了两种代币,那么恒定函数做市商的原理是:在每次交易后,k 必须保持不变。当用户进行交易,他们通常将一种类型的token放入池子(也即他们打算卖出的token),并且将另一种类型的token移出池子(也即打算购买的token)。这笔交易会改变池子中两种资产的数量,而上述原理表示,两种资产数目的乘积必须保持不变。这就是UniSwap的核心机制。
    • 交易流程是什么样的?
    •  
      1. 交易池包含两种代币:token0和token1,数量分别为x和y。
      1. 用户使用token0购买token1时,需要向交易池支付一定数量的token0(Δx)。
      1. 交易池会收取一定比例的交易费用(rΔx),其中r为费用率。
      1. 交易池会给予用户一定数量的token1(Δy)作为交换。
      1. 交易完成后,交易池中token0的数量变为x + rΔx,token1的数量变为y - Δy。
      1. 无论交易如何进行,交易池中两种代币数量的乘积始终保持不变,即(x + rΔx)(y - Δy) = k。
      1. 交易池根据这个不变量(k)来确定每笔交易中token1的价格和数量,从而实现代币之间的公平交换。
  • 预言机的改进
    • 价格预言机在Uniswap v3中有何改进?
    • Uniswap v3无需预言机用户在外部记录历史累计价格。Uniswap v2要求用户在需要计算TWAP的区间的开始和结束阶段分别记录累计价格。Uniswap v3将累计检查点放到core合约,允许外部合约直接计算最近一段时间的链上TWAP,无需额外保存累计价格。 留言
    • Uniswap v3如何实现流动性预言机?
    • 略。重点是Uniswap v3在每个区块的开头记录了一个每秒加权的流动性倒数。
    • 这些预言机对用户有哪些实际好处?
      1. 无需用户手动记录历史价格。在v2中,如果用户想获取一段时间的TWAP价格,需要在计算区间的开始和结束时间点分别记录累计价格,而在v3中,合约内部会自动记录检查点,允许外部合约直接查询最近一段时间的TWAP,简化了用户的操作。
      1. 使用几何平均数TWAP而非算术平均数,受极端值影响更小,价格预言机更加稳健可靠。同时还可以节省gas,因为一个代币的几何平均数价格即是另一个代币价格的倒数,无需为每个代币单独记录。
      1. 除了提供价格累计值,v3还引入了流动性累计值的预言机。这使得外部合约可以非常方便地基于Uniswap实现流动性挖矿等应用。
      1. 流动性累计值还可以帮助其他合约识别出一个交易对的哪个子池拥有最可靠的TWAP价格。这是因为流动性越大的池子受操纵的可能性越小。

2. 介绍

  • 资金利用率问题
    • Uniswap v1/v2中资金利用率低的原因是什么?
      1. 恒定乘积做市商模型导致大部分资金利用效率低下。在v1/v2使用的$x \cdot y = k$公式中,对于任意给定的价格,池子中只有一小部分资金是真正参与做市的。以稳定币交易对为例,价格通常在较小范围内波动,但根据v2的模型,流动性提供者需要在价格区间(0, $\infty$)内提供流动性,而事实上两种稳定币的相对价格几乎不可能变动到远离1的极端情况。这导致LP资金的很大一部分实际上是闲置的,利用效率低下。
      1. 所有 LP 必须在同一价格区间提供流动性,缺乏灵活性。如果部分 LP 希望在不同的价格区间提供流动性,唯一的办法是创建新的池子。但这会导致流动性分散,每个池子的规模无法达到最优,资金利用率同样受影响。
    • 如何通过算法改进提升资金利用率?其他产品如Curve和YieldSpace是如何尝试解决这一问题的?
      1. 允许流动性提供者自定义价格区间。这是Uniswap v3采用的主要策略。LP可以根据自己的判断在任意价格区间提供流动性,而不必将资金分散到所有可能的价格点。这种集中流动性的做法可以显著提高资金利用率,让更多的资金被用于真正有交易需求的价格区间。
      1. 使用更复杂的做市商曲线。与Uniswap v2采用的$x \cdot y = k$恒定乘积不同,一些项目尝试使用其他数学曲线来平衡资金利用率和滑点。比如Curve针对稳定币交易设计了$\sum_i x_i^n = k$的曲线,在接近1:1价格时提供极高的流动性,但在远离均衡点时流动性迅速降低,以实现资金的高效利用。类似地,Balancer通过动态调整交易对中各资产的权重来优化资金利用率。
      1. 多个做市商竞争。与中心化交易所类似,去中心化交易协议也可以引入订单薄(order book)机制,让多个做市商按照自己的策略提供流动性,按照价格优先级撮合交易。通过竞争,资金会自动流向市场最需要流动性的地方。Serum就是使用了这种中心化订单薄+链上撮合的混合机制。
      1. 动态调整手续费。当某个价格区间的流动性过于集中时,可以考虑动态调高该区间的交易手续费,激励LP将部分资金转移到其他流动性不足的价格区间,以达到资金利用率和收益率的平衡。这需要AMM根据池内资金的分布情况,自动调整特定价格区间的手续费水平。
      1. 利用外部流动性。与其他AMM或流动性来源建立联系,当面临大额交易时,可以利用这些额外的流动性来补充自身的资金池,避免因流动性不足造成滑点过高。这种利用外部流动性的思路与很多聚合器采用的方式类似。
       

3. 价格和流动性预言机

  • 价格预言机的改进
    • 价格预言机在Uniswap v3中是如何改进的?
      1. 引入累加器(Accumulator)以简化时间加权平均价格(TWAP)的计算。
        1. 在v2中,要计算一段时间的TWAP,外部合约需要在该时间段的起始和结束时间点调用当前价格,并记录下两个时间点的累计价格(cumulative price),然后二者相减并除以时间段长度。
          而在v3中,引入了带检查点(checkpoint)功能的累加器。累加器会自动记录区块时间戳以及对应的价格累计值。这样外部合约只需要调用一次oracle函数,传入所需的时间范围,即可直接得到该时间段内的TWAP,不再需要手动记录和计算,简化了流程。
      1. 使用几何平均数来计算TWAP,提高预言机的鲁棒性。
        1. 与v2使用算术平均数不同,v3改为使用几何平均数。几何平均数可以降低TWAP对极端价格的敏感度,因为价格的几何平均数等于价格倒数的算术平均数的倒数,相比算术平均数更稳健。
          同时,使用几何平均数还可以节省gas。因为交易对的两种代币价格互为倒数,只需要维护一个代币价格的累加器即可,不需要再为另一个代币单独维护。
      1. 引入流动性累加器,辅助判断预言机价格的可信度。
        1. 除了价格累加器,v3还引入了流动性累加器,用于记录池子内流动性关于时间的累计值变化情况。
          流动性累加器的意义在于,它可以帮助外部合约分辨出一个交易对的哪个子池(v3允许每个交易对创建多个子池)拥有最可靠的TWAP价格。因为流动性越大的池子,其价格就越难被操纵,相应的TWAP价格也就越可信。
    • 时间加权平均价格(TWAP)的计算方法是什么?
    • // Uniswap v2 (price0Cumulative, price1Cumulative, blockTimestamp) = UniswapV2Pair.getReserves(); price0Average = (price0Cumulative - price0CumulativeLast) / (blockTimestamp - blockTimestampLast); price1Average = (price1Cumulative - price1CumulativeLast) / (blockTimestamp - blockTimestampLast);
      而在Uniswap v3中,由于引入了带检查点的累加器结构,外部合约只需要调用一次oracle函数并输入所需的时间范围,即可直接获得该时间段内的TWAP:
  • 流动性预言机在实际交易中的具体应用是什么?
      1. 选择最优交易路径。对于跨代币的交易(如用ETH买BTC),往往存在多条交易路径可选。其中每一步的交易质量都会影响到整体的交易结果。通过流动性预言机,可以实时获取每个池子的平均流动性数据,并以此为依据计算出每条路径的预期交易成本和滑点。DeFi聚合器可以利用这些信息,为用户自动选择最优路径,以实现更好的交易执行。
      1. 设置更合理的交易限价。在下限价单时,买家希望以尽量低的价格买入,卖家则希望以尽量高的价格卖出。流动性预言机可以帮助交易者根据池子的历史平均流动性,估算出不同价格水平下的潜在交易对手量。这有助于交易者设置更加合理的限价位置,在提高成交概率的同时尽可能减少滑点成本。
      1. 优化做市商的流动性提供策略。做市商的收益主要来自交易手续费和资产升值。通过流动性预言机,做市商可以实时跟踪自己提供流动性的每个池子的流动性变化情况,并据此动态调整资金的配置。例如,可以选择向流动性较低(收费潜力较大)的池子投入更多资金,或者在预期波动加剧时适当撤出部分流动性以控制风险。这有助于做市商优化资金利用效率和收益风险比。
      1. 改进套利机器人的策略。利用流动性预言机的数据,套利机器人可以实时监控多个池子和交易所的流动性和价格差异,快速发现和捕捉套利机会。通过比较不同平台的平均流动性,套利机器人还可以选择最优的交易平台和路径,以最大化套利收益。同时,流动性预言机也可以帮助套利机器人避免陷入流动性陷阱,减少套利失败的风险。
      1. 辅助流动性挖矿的决策。很多DeFi用户参与流动性挖矿,目的是获取项目代币奖励。但在挖矿的同时,他们也面临无常损失(IL)的风险。通过流动性预言机,用户可以评估每个池子的历史平均流动性和波动情况,选择更加稳健的池子参与挖矿。项目方也可以利用流动性数据,优化挖矿奖励的分配设计,以实现更好的激励效果和风险平衡。
      1. 开发创新的流动性衍生品。有了流动性预言机提供的数据基础,开发者可以设计出各种基于流动性的衍生品,如流动性期权、流动性互换、流动性保险等。这些产品可以帮助用户对冲流动性风险,或者对流动性进行杠杆投资,满足更多样化的需求。随着流动性衍生品市场的发展,预计会出现更多以流动性预言机为基础的创新应用。

4. 合约和升级

  • 核心合约的不可升级性
    • 为什么Uniswap v3的核心合约是不可升级的?不可升级合约给协议的安全性带来了哪些好处?不可升级性对开发者和用户意味着什么?
Uniswap v3之所以采用不可升级的核心合约,主要是为了确保协议的去中心化、安全性和可信度。
从安全角度看,不可升级合约可以防止开发者滥用权力篡改规则,也能避免升级过程引入新的漏洞。合约逻辑一旦确定,其安全性就相对稳定。用户可以基于不变的规则做出合理预期,无需担心中途改变。
从去中心化角度看,不可升级合约杜绝了治理风险和少数人控制的问题。升级决策不再依赖可能缺陷的治理机制,而是让代码成为法律,真正实现了"代码即规则"的理念。
对开发者而言,不可升级性意味着要对最初版本的设计和实现倾注更多心力,尽可能做到尽善尽美。同时,他们也可以基于Uniswap v3的核心逻辑,通过外部合约实现灵活的扩展。
对用户而言,不可升级性提供了确定性保证,让他们可以信赖Uniswap v3的基本规则不会改变。这有助于培育用户信心,吸引更多的资金和应用进入Uniswap生态。
总之,通过封装不可升级的核心合约,Uniswap v3在确保安全性、去中心化和可塑性的同时,也向社区传达了对DeFi理念的坚定承诺。
  • 可治理修改的参数
    • 哪些参数是Uniswap治理可以调整的?
      1. 交易费率。Uniswap v3允许对每个流动性池单独设置交易费率,目前支持0.01%, 0.05%, 0.30%, 1.00%四档。治理可以通过提案和投票决定增加新的费率选项,或者调整现有费率的适用规则。
      1. 协议手续费。为了激励流动性提供者,Uniswap从每笔交易收取的手续费中抽取一定比例作为协议收入。治理可以调整这一比例的高低,权衡协议收入和流动性激励之间的平衡。
      1. 预言机参数。Uniswap v3的价格预言机引入了几个新的参数,如价格累积窗口、TWAP计算公式等。治理可以根据实际情况优化这些参数,提高预言机数据的准确性和鲁棒性。
      1. 流动性挖矿参数。Uniswap的流动性挖矿计划通常包含奖励总量、分配曲线、挖矿时间等多个参数。治理可以通过提案和投票来设置和调整这些参数,引导流动性资源的优化配置。
      1. 第三方集成白名单。为防范潜在的安全风险,Uniswap设有一个可信第三方集成的白名单机制。治理可以决定将哪些第三方DApp或协议纳入白名单,允许它们直接调用Uniswap的核心合约。
      1. 代币上币标准。Uniswap的治理社区有权决定平台上代币的上币标准和流程,包括对代币合约的安全性、合规性等级的要求,以及上币所需的提案和审核流程等。
      1. 治理参数。Uniswap的治理体系本身也有一些可调参数,如提案门槛、投票时长、法定人数等。治理社区可以通过元提案来优化治理机制本身,促进社区的有效自治。
 

© CoderMageFox 2021 - 2024

Just For Fun