来源: Keegan小钢

UniswapV3 于 2021 年 5 月上线,比较 UniswapV2,改动很大,也变得复杂很多,最首要的有以下这几点改动:

  • 引入了会集流动性(Concentrated Liquidity)机制

  • LP Token 改为了不行交换的 NFT

  • 每个买卖对能够有多个不同费率的池子

  • 协议手续费治理更灵敏

  • 改进了价格预言机

其间,最中心的改动就是引入了会集流动性机制。所谓会集流动性,首要是说流动性供给者(LP)能够将其供给的流动性”约束“在恣意价格区间内来”会集“其流动性。从直观上来说,UniswapV3 中,用户增加流动性的时候,需求设置一个价格区间,如下图所示:剖析DeFi交易产品之UniswapV3:集中流动性、协议手续费、价格预言机

默认时这个价格区间是全规模,即 **(0, ∞)**。LP 能够自己修正贱价和高价为恣意值,即 LP 能够设置自己要供给的一个价格区间。而设置了有限的价格区间后,那供给的该流动性也只要在该价格区间内才有用。为了更好了解,下面举个比方阐明一下。

有两个LP,A 和 B,分别在不同价格区间供给了流动性,A 在区间 (1000, 2000) 内供给了流动性,而 B 则在区间(2000, 3000)内供给了流动性。那当买卖价格为 1500 时,产生的买卖只会和 A 所供给的流动性进行买卖,买卖手续费也归 A 一切,而 B 供给的流动性不参与任何买卖,也得不到任何手续费。不过,当价格上涨到 2500 时,进入到了(2000, 3000)的价格区间,这时候产生的买卖则只会和 B 所供给的流动性进行买卖,买卖手续费也归 B 一切了,而 A 的流动性则变成无效了,也得不到手续费了。当价格又跌回到 (1000, 2000) 区间时,A 的流动性又再次变为有用,而 B 的流动性又再次变为无效。

会集流动性机制,会使得很多 LP 的流动性聚合在包含当时价格的区间内,能有用进步池子的资金利用率。比方下图为 USDC/ETH 的流动性分布:剖析DeFi交易产品之UniswapV3:集中流动性、协议手续费、价格预言机

大部分流动性会集在了当时价格邻近,这也是大部分池子都比较常见的状态。

不过,会集流动性机制,完成起来其复杂度也大幅增加,背后的数学原理也不太容易了解,还引入了其他概念,比方 tick。

因为在 UniswapV3 中,LP 供给的流动性是分为多个不同区间的,那为了方便核算不同区间的流动性和手续费分配,UniswapV3 就将整个价格规模划分为了多个离散的价格点,这些价格点就称为 tick,每个价格点 tick 都对应于一个实践价格,两者的联系能够表明如下:

剖析DeFi交易产品之UniswapV3:集中流动性、协议手续费、价格预言机

该公式表明晰,当 tick 为 0 时,价格为 1;当 tick 为 1 时,价格为 1.0001;当 tick 为 2 时,价格为 1.0001^2。也便是说,相邻价格点之间的价差为 0.01%。当然,tick 也能够为负值,为负值时表明价格 p 小于 1。

UniswapV2 增加流动性时,两个代币的价值是相等的。直到你移除流动性时,两个代币的价值依然也是相等的。但在 UniswapV3 中则不是,咱们以下图为例进行阐明:剖析DeFi交易产品之UniswapV3:集中流动性、协议手续费、价格预言机

上图中,ETH/USDC 当时价格为 1806.97,待增加的流动性价格区间为 (1699, 1900)。然而,能够看到,当要增加 1 ETH 时,对应需求增加的 USDC 并不是当时价格的数量 1806.97,而是达到了 2184.99,两个代币的价值是不相等的。别的,增加流动性之后,假如 ETH/USDC 的价格下跌,你流动性里的 ETH 会增多,USDC 则削减;反之,假如价格上涨,则你流动性里的 ETH 会削减,USDC 会增多。

基于这种特性,还能够完成限价单功用。比方,假定 ETH 当时价格为 2500,用户觉得价格可能会跌到 2000 以内,那就能够在 2000 邻近设置一个很短的区间,比方设置(1999, 2000)。这时候,因为整个价格区间都低于当时价格,用户供给的流动性只需求充值 USDC 一种财物即可。这时候,相当于用户挂了一个价格为 2000 的限价买单。当价格跌下来,进入了(1999, 2000)这个价格区间的时候,有人买卖时就会将该区间内的 USDC 换成 ETH(实践其实为 WETH),直到价格彻底穿过价格区间的上限,那池子里的一切 USDC 都被换成了 ETH。这时候,用户撤走流动性,就相当于之前所挂的限价买单成交了。不过,与传统的限价单比较,有两点需求留意:

  • 假如价格不能穿过整个价格区间,那就只要部分 USDC 会被换成 ETH

  • 转化完成后,需将流动性移除,不然一旦价格又回到该价格区间,那池子里的 ETH 会被买卖换回 USDC

UniswapV2 中的流动性是整个池子同享的,每个人占有多少流动性能够用比例来表明,而比例是能够交换的,所以能够用 ERC20 Token 来作为流动性代币。但 UniswapV3 中,流动性增加了价格区间的约束之后,就不再是同享的了,每一次增加的流动性都基本是独一无二的,因而,现已不适合持续运用 ERC20 来作为流动性代币,但运用 ERC721 却非常合适,每一次增加的流动性也称为一个头寸(position),就用一个独自的 NFT 来表明。

UniswapV2 中,每个买卖对有且仅有一个流动性池,且买卖手续费率都是统一的千分之三。但 UniswapV3 能够为同个买卖对创立不同费率的池子,即 token0token1 加上 fee 三个字段组成了一个 Pool 的唯一性。一开始的时候支撑了 0.05%, 0.3% 和 1% 的费率,之后在 2021 年 11 月时通过 DAO 治理又增加支撑了 0.01% 的费率。

UniswapV2 中,还有一个协议手续费,和买卖手续费相同,也是一个基于全局的费率,如若翻开收取协议手续费的话,则可取得买卖手续费的 1/6。而 UniswapV3 的协议费率设置更灵敏,不再是固定的 1/6,而是 1/N 或 0,其间,N 是可装备的,规模为 4 <= N <= 10。并且,还能够基于每个池子设置不同的协议费率。比方,能够设置 A 池为 1/6,B 池设为 1/8,C 池则为 0。

价格预言机也做了升级,之前讲区块链预言机章节中现已介绍过 UniswapV2 和 UniswapV3 的预言机。这儿首要再补充一点,V2 的方法是直接记载价格的累加值,运用时再除以时刻间隔,这是一种算术平均。而 V3 累加的是 log(price, 1.0001) 也就是价格的幂,运用时再除以时刻间隔,这是几何平均。几何平均数比较算术平均数,能更好的反响实在的价格,受短期动摇影响更小。别的,运用几何平均,也是因为合约中记载了 tick 序号,序号是整型,且跟价格相关,所以直接核算序号愈加节省 gas。

UniswapV3 在代码层面的架构和 UniswapV2 的变化则不大,合约层面,首要仍是两个库:

  • v3-core

  • v3-periphery

v3-core 的中心合约就两个:

  • UniswapV3Factory:工厂合约

  • UniswapV3Pool:流动性池子合约

v3-periphery 的中心合约也是两个:

  • NonfungiblePositionManager:头寸管理合约

  • SwapRouter:兑换路由合约

与 UniswapV2 不同,不再由 Router 合约作为增加流动性、移除流动性和兑换买卖的全部进口,而是把流动性相关的功用放到了独自的合约 NonfungiblePositionManager,而 SwapRouter 首要只用于买卖进口。

后续文章咱们会依次讲解下这四个中心合约。

此时快讯

【巨鲸0xb15在大约40分钟前从Binance撤回了8,618枚ETH】金色财经报道,据Spot On Chain监测显示,聪明巨鲸0xb15在大约40分钟前以1,850美元的均价从Binance撤回了8,618枚ETH(1595万美元)。该巨鲸在过去24小时内以1,838美元的均价从Binance提取了17,316枚ETH(3180万美元),这是他第8笔正在进行的ETH交易。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注