为什么说你所有的Uniswap v3流动性质押计算可能是错误的?

22-09-26 12:27
阅读本文需 23 分钟
总结 AI 总结
看总结 收起
原文标题:《 你所有的 Uniswap v3 流动性质押计算都是完全错误的!这就是原因 》
原文作者: Ivan Vakhmyanin, Coinmonks
原文编译:RR
本文来自微信公众号:老雅痞


Uniswap 是以太坊和整个区块链行业中最大的去中心化金融 (DeFi) 项目。成千上万的流动性提供者每天都在使用这些数据来制定自己的投资策略。那么,这些数字怎么会不准确呢?

  


让我们一步一步来,从问题开始。


问题所在


首先,什么是 TVL,它是如何使用的?简而言之,TVL 被定义为当前用户委托给区块链或协议的所有加密资产的美元价值。这些资产可能是去中心化交易平台、跨链桥协议或贷款协议的总流动性,或 PoS 区块链的总抵押资产。


加密货币市场投资者和其他参与者会在多种情况下使用 TVL:


评估协议的健康状况。这就是为什么流行协议会在主页上吹嘘他们的 TVL。更大的 TVL=更多的用户信任=更低的风险=稳定的利润。


比较协议。如果我是一个加密交易者,我更愿意使用去中心化交易平台或跨链桥等具有更高 TVL 的 DeFi 工具。


衡量协议的增长。投资者如果看到一个协议或项目的 TVL 快速增长,会认为这是看涨该协议 Token 价格的信号。


这么看来,知道准确的 TVL 数字很重要,对吧?


但是,如果我说关于 Uniswap v3 TVL 的最新数据是有误导性的呢?不过,最让我惊讶的是,官方的 Uniswap Chart App 也有问题!我是这样发现的:


我当时正在做一个流动性分析项目,将 Uniswap v3 上的官方数据与我使用区块链原始数据进行的计算进行比较。这个步骤对于遵守最高的数据质量标准至关重要。为了开始验证,我选择了一个流行的流动性池 USDC-WETH(费用水平 0.3%)。



看看 Uniswap v3 上的 3 号池——它有 3.33 亿美元的 TVL 和 6100 万美元的日交易量。


我马上遇到了一个问题:我计算的 TVL 价值是 1.76 亿美元,而不是 Uniswap 网站上报告的 3.33 亿美元。好吧,bug 发生了。但在开始调试之前,我决定在最流行的以太坊区块链浏览器 Etherscan 上验证 TVL。严格来讲,每个 Uniswap v3 池都是一个智能合约。因此,区块链浏览器可以显示池里拥有的 Token 余额,也就是 TVL。



我预计资金池的 Token 余额会比 Uniswap 报告的 TVL 稍高一些。这是因为该资金池不仅持有流动性,还持有已累积但尚未被领取的费用。但结果余额几乎是 Uniswap 报告的一半,而且令人惊讶的是,它与我的计算数字相同!


逐一比较资产的流动性也显示出了巨大的差异。这时,我意识到这个错误与我的数学能力无关。



但这怎么可能呢?经过研究,我发现 Uniswap 依赖于去中心化的区块链索引服务 The Graph。通过这项服务,任何开发者都可以为特定的区块链数据用例添加个人分析代码 (称为 subgraph),并通过 API 提供分析。


Uniswap Labs 为 Uniswap 协议分析创建了自己的 subgraph,并通过 The Graph 托管服务将其提供。好在它的代码是公开的。不过,糟糕的是它的 TVL 计算错误。


对代码的简要分析表明,它考虑了所有的 swap 和流动性事件,但没有考虑费用。Uniswap 池对每一次 swap 有 0.01% 到 1% 的费用。这笔费用从交易资产中扣除,累加给流动性提供者。反过来,流动性提供者可以随时收取应计费用。


然而,当前的 Uniswap v3 subgraph 显示的数字就好像从来没有累积和收取过费用一样。因此,Uniswap v3 的 TVL 数据在每次 swap 时都与现实不符。


你可能会想:「在写这篇文章之前,你在 GitHub 上提交了 issue ticket 吗?」是的,这是我发现错误后的第一意图。你知道吗?该问题已经被记录了,是由核心开发人员在 2021 年 11 月创建的!


那么,为什么这个问题没有得到解决呢?我不知道。也许这个错误在发现时是可以忽略不计的。然而,这是一个随着每次 swap 而增加的累积错误。因此,随着池中费用和交易量的增长,由该错误产生的 TVL 差异将导致与现实的差异越来越大。我们可以看到,在像 USDC-ETH 这样收费高达 0.3% 的大型资金池中,情况已经失控!目前这个数字几乎是真实数字的两倍。


让我们验证一下总 TVL


好了,我们现在知道了各个资金池中的 TVL 数字是扭曲的。下面我们将探讨这会如何影响投资决策。但是在我们开始之前,让我们看看这些错误是如何影响 Uniswap v3 协议的总 TVL 的。在撰写本文时,TVL 被报告为近 120 亿美元。


即使你不是一个数据科学家也能看出这里有问题。



我们可以从上面看到,TVL 在 2022 年 3 月 6 日从 5 亿美元缓慢但稳定地增长到 45 亿美元。然后疯狂的事情发生了,TVL 在 2022 年 3 月 7 日被报告为 2540 亿美元。这是整个以太坊网络有史以来最高 TVL 的 2.5 倍——在一天之内!很明显,数据有误。在接下来的几周里,TVL 被报告为 100-200 亿美元。


此时,我失去了对 Uniswap 分析数据的所有信任。但我们怎么知道真正的 TVL 呢?我有两个选项。


选项 1:分叉并修复 Uniswap v3 subgraph。这个选项的缺点是,subgraph 重新索引需要花费几天的时间。而且我并不喜欢 The Graph 使用的 GraphQL 语言。


幸运的是,我还有选项 2:针对所有 Uniswap v3 和以太坊数据的高性能分析数据库 Datamint,可以随时进行复杂的在线查询。


经过一些实验后,我创建了以下算法来精确计算 TVL。


1、使用这两个步骤计算所有现有 Uniswap v3 池的 TVL。


2、添加所有 ERC-20 Token 转账池合约 (包括所有无人认领的费用),并匹配 Etherscan 上的 Token 余额


3、添加所有流动性活动,然后添加所有的 swap 活动,以说明费用


4、比较两种方法,确保没有无法解释的差异


5、删除 swap 次数少于 50 或 0.00000000000001 Token 数量的废弃池和空池 (检测到 7863 个池 (包括 2,083 对稳定币),我的算法将 112 个资金池作为空池/废弃池移除)


6、为每个 Token 找到稳定币的路径,将资金池 TVL 转换为美元价值


7、移除美元价值有问题的低流动性池,因为一些池在完全移除流动性后会显示不充分的价值 (查看下图作为参考)



8、将所有剩余货币对的 TVL 转换为美元价值并相加


经过多次交叉检查,我得出了一个 TVL 结果:



它几乎比报告的 118 亿美元少了 4 倍。


免责声明:我的计算可能包含错误。在面向企业客户的数据项目中,我们使用文档化方法、自动测试和许多其他工具来实现最高的数据质量。这些工具对于像这样的个人研究项目来说是多余的。本研究强调了现有数据中明显的问题,而不是提供最终的解决方案。


好的,我们会修正 TVL 的计算。这会有帮助吗?


问题不在于不正确的数字,而在于我们根据这些数字做出的决定。例如,大多数为流动性提供者提供的利润计算器都使用这些数字进行预测。


然而,修正 TVL 的计算并不难。Uniswap Labs 要么在他们的 subgraph 代码中修复它,要么计算器开发人员开始使用其他数据源。核心问题是我们是否能相信计算器的预测是正确的。


我做了一些计算,简短的答案是——根本不可能。


我知道这是一个大胆的主张。许多流动性提供者使用现有的计算器,并影响成本高达数千万美元的决策。但是让我们来看看计算步骤,这样你就可以做出自己的判断了。


首先,让我们回顾一下 Uniswap v3 协议的一些核心概念。


其主要创新之一是集中流动性。本质上,使用 Uniswap v3,你可以选择希望资金用作流动性提供者的价格范围。这是一个了不起的概念,可以为协议用户带来巨大的价值。流动性提供者限制了他们对无常损失的敞口,交易者可以在波动性较低时享受较小的价格滑点。但所有这些潜在的好处都是有代价的,那就是复杂性。



因此,我们想了解一下 Uniswap v3 流动性提供者的收益是如何计算的。


在 Uniswap v3 中,流动性提供者选择要提供流动性的价格范围。一旦价格在这个区间内,他就会得到 swap 费用的分成。乍一看,流动性提供者希望其流动性头寸的价格区间越宽越好。然而,流动性是按比例分布在这个范围内的。因此,交易范围越广,每笔交易的 swap 费用就越低。



在这个例子中,选项 A 显示流动性提供者选择了一个更宽的价格范围,选项 2 显示了相同金额的更窄的价格范围。如果在这两种情况下,价格都在选定的价格范围内,流动性提供者在选项 b 中得到的费用要多 3 倍。然而,如果价格波动较大,流动性提供者最终可能在选项 a 中获得更高的利润。


因此,选择合适的价格范围实际上取决于在风险和获得较低回报之间找到最佳平衡。


还有一个参数影响着流动性提供者的利润,而且经常被忽视。我不知道有哪个 LP 利润计算器会考虑这个参数,但这个参数可以改变一切。你现在一定在想这是什么。那就是 LP 的分布。看看下面的例子:



在这个例子中,两个流动性提供者 (LP1 和 LP2) 持有头寸。LP1 的仓位较窄,为 3 美元。LP2 仓位较宽,为 5 美元。在这种情况下,如果价格不超出 LP1 的头寸范围,他将获得比 LP2 多 3 倍的费用。这是因为 LP2 在这个范围内只有 1 美元。这 1 美元会与 LP1 的 3 美元竞争。


如果你观察任何 Uniswap v3 池的流动性分布,你会发现它并不均匀。



门槛越高,竞争越激烈。流动性提供者需要在选择有竞争力的区间和价格下跌概率较低的区间之间找到平衡。这就是为什么这种分布在 LP 的利润预测和战略制定中扮演着重要的角色。唯一的问题是,我不确定这个分布是否计算正确。


流动性狙击手


作为流动性提供者,你需要猜测价格、竞争状态和交易量。如果 LP 有一个愿望的话,那就是知道交易的未来,以便提前调整流动性头寸。


但如果我告诉你这是可能的呢?


在研究过程中,一些不同寻常的流动性提供者引起了我的注意。他们每天多次增减大量流动性头寸 (超过 1000 万美元)。更令人惊讶的是,他们总是在同一个区块增加和减少流动性。


让我们看一个例子:



有三笔交易都在 15413416 区块中,头寸 3-5,以自下而上的顺序执行。采用 Execute 方法的第一笔交易是一份名为「MEV Bot」的合约,向 USDC-WETH 池中增加了 2200 万美元的流动性。



第二笔交易通过 WETH 从 USDC swap 到 DogeChain。这是一份价值约为 16500 美元的普通 swap。



第三笔交易又一次是「MEV Bot」,从 USDC-WETH 池中移除了 2200 万美元的流动性。



在这个例子中发生的事情被称为「流动性狙击」。让我来解释一下这是如何运作的:


有人发送了一笔交易,将 USDC swap 到 DogeChain


MEV Bot 在 mempool 中检测到这笔交易,并使用 Flashbots 技术或类似的技术激活与矿池的私人链接


MEV Bot 向矿工支付报酬,让他们按特定顺序包含一笔 swap 交易和两笔交易,以便提取价值


MEV Bot 在非常狭窄的价格范围内增加了大量的流动性 (2200 万美元),因此实际上,所有来自特定 USDC-DogeChain 交易的费用利润都归他所有


然后 MEV Bot 移除流动性并赚取费用 (约 35 美元)


所以,扣除 gas 费后他的毛利大约是 30 美元。不是很多,是吗?是的,但他每分钟都会多次执行这个策略,这一切累计起来就很多了。你可以自己去看看。


这对作为流动性提供者的你意味着什么?这意味着流动性狙击手可能会从你的费用利润中抽走很大一部分。


结论


请不要误解我的意思。我相信 Uniswap 是一个具有巨大潜力的伟大项目。我也尊重 Uniswap v3 的核心中集中流动性的想法。然而,我发现 Uniswap 生态系统的分析部分还远未成熟。我相信这种情况很快就会改变!


让我总结一下我的研究结果:


Uniswap v3 图表中的 TVL 数据非常不准确。所有依赖官方 Uniswap v3 subgraph 的分析工具都存在同样的错误。


Uniswap v3 的总 TVL 是 31.4 亿美元,而官方网站报告的数字是 118 亿美元 (在撰写本文时)。


Uniswap v3 流动性提供者的计算器对于实际策略没有什么价值,因为它们没有考虑竞争和流动性阻击手。



幸运的是,你现在可以更好地理解 Uniswap v3 流动性池的实际运作方式,并可以相应地调整你的研究。


我无法提供财务建议,但我认为只有两种方法可以建立一个突出的流动性提供策略:


简单型。使用历史数据。尝试持有少量质押的流动性头寸,看看哪种选择效果更好。显然,这只有在市场稳定的前提下才有效。


进阶型。进行研究并相应地优化 LP 策略。如前所述,这需要深入理解 Uniswap v3 协议、并拥有数学和博弈论的能力,以及实时处理大量数据的强大数据分析工具。


这两种选择有一个共同点——你的决策要基于数据而不是直觉或随机工具。有时处理数据很困难,但它是有回报的。


原文链接


欢迎加入律动 BlockBeats 官方社群:

Telegram 订阅群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方账号:https://twitter.com/BlockBeatsAsia

举报 纠错/举报
选择文库
新增文库
取消
完成
新增文库
仅自己可见
公开
保存
纠错/举报
提交