你所有的 Uniswap v3 流动性农业计算都是错误的! 这就是为什么

= 2 2 5

你知道这是错误的,但当你第一次看到它时,你会怀疑自己并认为:“也许我的计算有问题”。 正确的?

好吧,当我发现 Uniswap V3 用户界面上显示的流动性和 TVL(锁定总价值)数据完全错误时,我的感受正是如此。

Uniswap 是最大的去中心化金融(DEFI) 项目 以太币 和整个 blockchain 行业。 成千上万的流动性提供者每天都使用这些数据来制定他们的投资策略。 那么这些数字怎么可能不准确呢?

我花了几个小时试图找出计算中的错误,你猜怎么着? 我没有犯任何错误。 这种情况甚至比 TVL 不准确更糟糕。

但是,让我们一步一步地从问题开始。

当前困境

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

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

  1. 评估协议的健康状况。 这就是为什么流行的协议在主页上吹嘘他们的 TVL。 更大的 TVL = 更多的用户信任 = 更低的风险 = 稳定的利润。
  2. 协议之间的比较。 如果我是加密交易者,我更喜欢使用具有更高 TVL 的 DeFi 工具,例如去中心化交易所或桥接器。
  3. 协议增长的测量。 看到协议或项目的 TVL 快速增长的投资者认为这是看好协议代币价格的信号。

看来知道很重要 精准的 TVL 号码,对吧?

但是,如果我说有关 Uniswap v3 TVL 的最可用数据具有误导性怎么办? 不过,对我来说最大的惊喜是官方 Uniswap 图表应用程序 也是个问题! 我是这样发现的。

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

图像202
MEV Bot 为 Ether 增加流动性

看看 Uniswap v3 上的 pool 3——它拥有令人印象深刻的 333 亿美元的 TVL(基于撰写本文时的 Uniswap 官方图表)和 61 万美元的健康日交易量。

我立刻遇到了一个问题:我计算出的 TVL 价值是 176 亿美元,而不是 Uniswap 网站上报告的 333 亿美元。 好的,所以错误发生了。 但在开始调试之前,我决定在最流行的以太坊区块链浏览器上验证 TVL, Etherscan. 从技术上讲,每个 Uniswap v3 矿池都是一个智能合约。 因此,区块链浏览器可以显示池中拥有的代币余额,这就是 TVL。

图像203
标准掉期交易。

我预计池的代币余额会比 Uniswap 报告的 TVL 大一点。 这是因为该池拥有流动性以及已累积但尚未领取的费用。 但这个余额几乎是 Uniswap 报告金额的一半,而且令人惊讶的是,这与我的计算结果相同!

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

图像205
这就是我们所说的“流动性狙击”。

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

Uniswap Labs 为 Uniswap 协议分析创建了自己的子图,并通过 图形托管服务. 好在它的代码是 公开的. 然而,坏事是它的 TVL 计算错误。

对代码的简要分析表明,它考虑了所有掉期和流动性事件,但不考虑费用。 Uniswap 矿池对每次交换收取 0.01% 到 1% 的费用。 该费用从交易资产中扣除,并计入流动性提供者。 反过来,流动性提供者可以随时收取应计费用。

但是,当前的 Uniswap v3 子图显示的数字好像从未累积和收取任何费用。 因此,Uniswap v3 TVL 数据在每次交换时都偏离了现实。

你可能想知道:“在写这篇文章之前,你有没有在 GitHub 上提交过问题单?” 是的,这是我发现错误后的第一个意图。 你知道吗? 那个问题是 已登录,由核心开发者于 2021 年 XNUMX 月创建!

那么为什么这个问题没有解决呢? 我不知道。 在发现此错误时,该错误可能可以忽略不计。 但是,这是一个累积误差,会随着每次交换而增长。 因此,随着池中费用和交易量的增长,由此产生的 TVL 与错误的差异将导致与现实的更大差异。 我们可以看到,在像 USDC-ETH 这样的大池中,费用更高,为 0.3%——它已经失控了! 目前几乎是真实数字的两倍。

让我们验证总 TVL

好的,我们现在知道各个池中的 TVL 数字是失真的。 我们将在下文探讨这将如何影响投资决策。 但在我们开始之前,让我们看看这些错误如何影响 Uniswap v3 协议的总 TVL。 在撰写本文时,据报道此 TVL 的价格接近 $12b。

您不必成为数据科学家就能发现这里有问题。

图像207

我们可以在上面看到,据报道,TVL 在 500 年 4.5 月 6 日从 2022 亿美元缓慢但稳定地增长到 254b 美元。然后发生了一些疯狂的事情,TVL 在 7 年 2022 月 2,5 日被报道为 10b 美元。这比 20 倍多整个以太坊网络有史以来最高的 TVL——一天之内! 显然,这是数据中的错误。 在接下来的几周内,据报道 TVL 为 $XNUMX-XNUMXb。

在这一点上,我对 Uniswap 分析数据失去了所有信任。 但是我们怎么知道真正的 TVL 呢? 我有两个选择。

选项 1 — 分叉并修复 Uniswap v3 子图。 这个选项的坏处是子图重新索引需要几天时间。 而且我不喜欢 The Graph 使用的 GraphQL 语言。

幸运的是,我有选择 2—— 数据薄荷的所有 Uniswap v3 和 Ethereum 数据的高性能分析数据库,可随时用于复杂的在线查询。

经过一些实验,我创建了以下算法来进行准确的 TVL 计算。 检查下面的分步过程。

  1. 使用这两个步骤计算所有现有 Uniswap v3 池的 TVL。
    1. 将所有 ERC-20 代币转账添加到矿池合约(这包括所有无人认领的费用)并匹配上的代币余额 Etherscan
    2. 添加所有流动性事件,传入和传出,然后将所有交换事件添加到 费用帐户
  2. 比较两种方法并确保不存在无法解释的差异
  3. 删除掉期少于 50 次或 0.00000000000001 代币数量的废弃和空池(检测到 7,863 个池(包括 2,083 对带马厩),我的算法将 112 个池删除为空/废弃)
  4. 为每个代币找到稳定币的路径,将池 TVL 转换为美元价值
  5. 移除美元价值受损的低流动性资金池,因为某些资金池在完全移除流动性后可能显示价值不足(以下图为例)
图像208
  1. 将所有剩余货币对的 TVL 转换为美元价值并添加它们

经过多次交叉检查,我想出了一个 TVL 计算。 我开始它,想在计算执行时喝咖啡,但在我站起来之前它就完成了。 这是使用高性能分析数据库的唯一缺点。

你准备好看到结果了吗?

图像210

这几乎是 少4倍 比报告的 $11,8b… 由你来得出结论。

免责声明: 我的计算可能有错误。 在面向企业客户的数据项目中,我们使用记录方法、自动测试和许多其他工具来实现最高的数据质量。 对于像这样的个人研究项目,这些工具将是矫枉过正。 这项研究突出了可用数据中的明显问题,而不是提供最终解决方案。

好的,我们将修复 TVL 计算——它会有帮助吗?

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

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

我做了一些计算,简短的回答是——差远了.

一个大胆的主张,我知道。 许多流动性提供者使用现有的计算器并影响花费数千万美元的决策。 但是,让我们完成计算步骤,以便您做出自己的判断。

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

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

图像211

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

在 Uniswap v3 中,流动性提供者选择提供流动性的价格范围。 一旦价格在此范围内,他将获得掉期费用的分成。 乍一看,流动性提供者希望其流动性头寸的价格范围尽可能宽。 但是,流动性在此范围内按比例分配。 因此,范围越广,每笔交易的掉期费用就越低。

图像211

在此示例中,选项 A 显示流动性提供者选择了较宽的价格范围,而选项 2 显示了相同金额的较窄价格范围。 假设在这两种情况下,价格都在所选价格范围内,流动性提供者在选项 B 中获得 3 倍以上的费用。但是,如果价格波动更大,流动性提供者最终可能在选项 A 中获得更高的利润。

因此,实际上,选择正确的价格范围依赖于在错过价格的风险和每笔交易获得较低回报之间找到最佳平衡。

还有一个参数会影响流动性提供者的利润,并且经常被忽视。 我不知道任何考虑它的 LP 利润计算器,这个参数可以改变一切。 你现在想知道这是什么。 这是LP的分布。 考虑以下示例:

图像212

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

如果您查看任何 Uniswap v3 矿池的流动性分布,您会发现它并不统一。

图像213

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

好像这还不够——流动性狙击手

成为流动性提供者就是猜测价格、竞争状态和交易量。 如果 LP 有一个愿望,那就是事先了解交易的未来以调整流动性头寸。

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

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

我们来看一个例子:

图像214

我们有三笔交易,都在区块 15413416,位置 3-5,以自下而上的顺序执行。 第一个使用 Execute 方法的交易是一个名为“MEV Bot”的合约,为 USDC-WETH 池增加了 22 万美元的流动性。

图像215

第二笔交易是通过 WETH 从 USDC 到 DogeChain 的交换。 这是一笔价值约 16,500 美元的普通掉期交易。

图像216

第三笔交易又是“MEV Bot”,从 USDC-WETH 池中移除了 22 万美元的流动性。

图像217

该示例中发生的事情称为“流动性狙击”。 让我解释一下这是如何工作的:

  1. 有人发送了一笔交易,将 USDC 交换到 DogeChain
  2. MEV Bot 在内存池中检测到此交易,并使用 Flashbots 技术或类似技术激活了与矿池的私有链接
  3. MEV Bot 向矿工支付了一笔掉期交易和两笔按特定顺序进行的交易,以允许提取价值
  4. MEV Bot 在一个非常窄的价格范围内增加了如此多的流动性(22 万美元),因此有效地,从特定的 USDC-DogeChain 交易中获得的所有费用利润都计入了他
  5. 然后 MEV Bot 移除流动性并赚取费用(约 35 美元)

因此,他扣除汽油费后的毛利润约为 30 美元。 不是很多? 是的,但他每分钟多次执行此策略,所有这些都加起来。 你可以 自己检查一下.

作为流动性提供者,这对您意味着什么? 这意味着流动性狙击手可能会大幅削减您的费用利润。

结论

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

  1. Uniswap v3 图表中的 TVL 数据非常不准确。 所有依赖官方 Uniswap v3 子图的分析工具都存在相同的错误。
  2. Uniswap v3 TVL 总额为 3,14b 美元,而官方网站报告的为 11,8b 美元(在撰写本文时)。
  3. Uniswap v3 流动性提供者的计算器对现实生活中的策略几乎没有价值,因为它们没有考虑竞争和流动性狙击手。
图像218

幸运的是,您现在可以更好地了解 Uniswap v3 流动性池在现实生活中的运作方式,并可以相应地调整您的研究。

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

  1. 简单. 使用历史性能数据。 尝试一些小额流动性头寸,看看哪些选项更有效。 显然,这仅在市场稳定的假设下有效。
  2. 高级. 进行研究并相应地优化 LP 策略。 如上所述,这需要深入了解 Uniswap v3 协议、数学和博弈论能力,以及实时处理大量数据的强大数据分析工具。

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

在 Datamint,我们随时为您提供自定义数据项目的帮助。

愿数据与你同在!

资料来源:https://www.cryptopolitan.com/uniswap-v3-liquidity-farming-calculations/