原文作者:IvanVakhmyanin
原文编译:RR
原文来源:Coinmonks
本文来自老雅痞。
2x2=5
Uniswap是以太坊和整个区块链行业中最大的去中心化金融(DeFi)项目。成千上万的流动性提供者每天都在使用这些数据来制定自己的投资策略。那么,这些数字怎么会不准确呢?
让我们一步一步来,从问题开始。
交易所、跨链桥协议或贷款协议的总流动性,或PoS区块链的总抵押资产。
加密货币市场投资者和其他参与者会在多种情况下使用TVL:
评估协议的健康状况。这就是为什么流行协议会在主页上吹嘘他们的TVL。更大的TVL=更多的用户信任=更低的风险=稳定的利润。
比较协议。如果我是一个加密交易者,我更愿意使用去中心化交易所或跨链桥等具有更高TVL的DeFi工具。
衡量协议的增长。投资者如果看到一个协议或项目的TVL快速增长,会认为这是看涨该协议代币价格的信号。
这么看来,知道准确的TVL数字很重要,对吧?
但是,如果我说关于Uniswapv3TVL的最新数据是有误导性的呢?不过,最让我惊讶的是,官方的UniswapChartApp也有问题!我是这样发现的:
我当时正在做一个流动性分析项目,将Uniswapv3上的官方数据与我使用区块链原始数据进行的计算进行比较。这个步骤对于遵守最高的数据质量标准至关重要。为了开始验证,我选择了一个流行的流动性池USDC-WETH(费用水平0.3%)。
看看Uniswapv3上的3号池——它有3.33亿美元的TVL和6100万美元的日交易量。
我马上遇到了一个问题:我计算的TVL价值是1.76亿美元,而不是Uniswap网站上报告的3.33亿美元。好吧,bug发生了。但在开始调试之前,我决定在最流行的以太坊区块链浏览器Etherscan上验证TVL。严格来讲,每个Uniswapv3池都是一个智能合约。因此,区块链浏览器可以显示池里拥有的代币余额,也就是TVL。
我预计资金池的代币余额会比Uniswap报告的TVL稍高一些。这是因为该资金池不仅持有流动性,还持有已累积但尚未被领取的费用。但结果余额几乎是Uniswap报告的一半,而且令人惊讶的是,它与我的计算数字相同。
逐一比较资产的流动性也显示出了巨大的差异。这时,我意识到这个错误与我的数学能力无关。
但这怎么可能呢?经过研究,我发现Uniswap依赖于去中心化的区块链索引服务TheGraph。通过这项服务,任何开发者都可以为特定的区块链数据用例添加个人分析代码(称为subgraph),并通过API提供分析。
UniswapLabs为Uniswap协议分析创建了自己的subgraph,并通过TheGraph托管服务将其提供。好在它的代码是公开的。不过,糟糕的是它的TVL计算错误。
对代码的简要分析表明,它考虑了所有的swap和流动性事件,但没有考虑费用。Uniswap池对每一次swap有0.01%到1%的费用。这笔费用从交易资产中扣除,累加给流动性提供者。反过来,流动性提供者可以随时收取应计费用。
然而,当前的Uniswapv3subgraph显示的数字就好像从来没有累积和收取过费用一样。因此,Uniswapv3的TVL数据在每次swap时都与现实不符。
你可能会想:“在写这篇文章之前,你在GitHub上提交了issueticket吗?”是的,这是我发现错误后的第一意图。你知道吗?该问题已经被记录了,是由核心开发人员在2021年11月创建的!
那么,为什么这个问题没有得到解决呢?我不知道。也许这个错误在发现时是可以忽略不计的。然而,这是一个随着每次swap而增加的累积错误。因此,随着池中费用和交易量的增长,由该错误产生的TVL差异将导致与现实的差异越来越大。我们可以看到,在像USDC-ETH这样收费高达0.3%的大型资金池中,情况已经失控!目前这个数字几乎是真实数字的两倍。
我们可以从上面看到,TVL在2022年3月6日从5亿美元缓慢但稳定地增长到45亿美元。然后疯狂的事情发生了,TVL在2022年3月7日被报告为2540亿美元。这是整个以太坊网络有史以来最高TVL的2.5倍——在一天之内!很明显,数据有误。在接下来的几周里,TVL被报告为100-200亿美元。
此时,我失去了对Uniswap分析数据的所有信任。但我们怎么知道真正的TVL呢?我有两个选项。
选项1:分叉并修复Uniswapv3subgraph。这个选项的缺点是,subgraph重新索引需要花费几天的时间。而且我并不喜欢TheGraph使用的GraphQL语言。
幸运的是,我还有选项2:针对所有Uniswapv3和以太坊数据的高性能分析数据库Datamint,可以随时进行复杂的在线查询。
经过一些实验后,我创建了以下算法来精确计算TVL。
使用这两个步骤计算所有现有Uniswapv3池的TVL。
添加所有ERC-20代币转账池合约(包括所有无人认领的费用),并匹配Etherscan上的代币余额
添加所有流动性活动,然后添加所有的swap活动,以说明费用
比较两种方法,确保没有无法解释的差异
删除swap次数少于50或0.00000000000001代币数量的废弃池和空池(检测到7863个池(包括2,083对稳定币),我的算法将112个资金池作为空池/废弃池移除)
为每个代币找到稳定币的路径,将资金池TVL转换为美元价值
移除美元价值有问题的低流动性池,因为一些池在完全移除流动性后会显示不充分的价值(查看下图作为参考)
8.将所有剩余货币对的TVL转换为美元价值并相加
经过多次交叉检查,我得出了一个TVL结果:
它几乎比报告的118亿美元少了4倍。
免责声明:我的计算可能包含错误。在面向企业客户的数据项目中,我们使用文档化方法、自动测试和许多其他工具来实现最高的数据质量。这些工具对于像这样的个人研究项目来说是多余的。本研究强调了现有数据中明显的问题,而不是提供最终的解决方案。
好的,我们会修正TVL的计算。这会有帮助吗?
问题不在于不正确的数字,而在于我们根据这些数字做出的决定。例如,大多数为流动性提供者提供的利润计算器都使用这些数字进行预测。
然而,修正TVL的计算并不难。UniswapLabs要么在他们的subgraph代码中修复它,要么计算器开发人员开始使用其他数据源。核心问题是我们是否能相信计算器的预测是正确的。
我做了一些计算,简短的答案是——根本不可能。
我知道这是一个大胆的主张。许多流动性提供者使用现有的计算器,并影响成本高达数千万美元的决策。但是让我们来看看计算步骤,这样你就可以做出自己的判断了。
首先,让我们回顾一下Uniswapv3协议的一些核心概念。
其主要创新之一是集中流动性。本质上,使用Uniswapv3,你可以选择希望资金用作流动性提供者的价格范围。这是一个了不起的概念,可以为协议用户带来巨大的价值。流动性提供者限制了他们对无常损失的敞口,交易者可以在波动性较低时享受较小的价格滑点。但所有这些潜在的好处都是有代价的,那就是复杂性。
因此,我们想了解一下Uniswapv3流动性提供者的收益是如何计算的。
在Uniswapv3中,流动性提供者选择要提供流动性的价格范围。一旦价格在这个区间内,他就会得到swap费用的分成。乍一看,流动性提供者希望其流动性头寸的价格区间越宽越好。然而,流动性是按比例分布在这个范围内的。因此,交易范围越广,每笔交易的swap费用就越低。
在这个例子中,选项A显示流动性提供者选择了一个更宽的价格范围,选项2显示了相同金额的更窄的价格范围。如果在这两种情况下,价格都在选定的价格范围内,流动性提供者在选项b中得到的费用要多3倍。然而,如果价格波动较大,流动性提供者最终可能在选项a中获得更高的利润。
因此,选择合适的价格范围实际上取决于在风险和获得较低回报之间找到最佳平衡。
还有一个参数影响着流动性提供者的利润,而且经常被忽视。我不知道有哪个LP利润计算器会考虑这个参数,但这个参数可以改变一切。你现在一定在想这是什么。那就是LP的分布。看看下面的例子:
在这个例子中,两个流动性提供者(LP1和LP2)持有头寸。LP1的仓位较窄,为3美元。LP2仓位较宽,为5美元。在这种情况下,如果价格不超出LP1的头寸范围,他将获得比LP2多3倍的费用。这是因为LP2在这个范围内只有1美元。这1美元会与LP1的3美元竞争。
如果你观察任何Uniswapv3池的流动性分布,你会发现它并不均匀。
门槛越高,竞争越激烈。流动性提供者需要在选择有竞争力的区间和价格下跌概率较低的区间之间找到平衡。这就是为什么这种分布在LP的利润预测和战略制定中扮演着重要的角色。唯一的问题是,我不确定这个分布是否计算正确。
有三笔交易都在15413416区块中,头寸3-5,以自下而上的顺序执行。采用Execute方法的第一笔交易是一份名为“MEVBot”的合约,向USDC-WETH池中增加了2200万美元的流动性。
第二笔交易通过WETH从USDCswap到DogeChain。这是一份价值约为16500美元的普通swap。
第三笔交易又一次是“MEVBot”,从USDC-WETH池中移除了2200万美元的流动性。
在这个例子中发生的事情被称为“流动性狙击”。让我来解释一下这是如何运作的:
有人发送了一笔交易,将USDC?swap到DogeChain
MEVBot在mempool中检测到这笔交易,并使用Flashbots技术或类似的技术激活与矿池的私人链接
MEVBot向矿工支付报酬,让他们按特定顺序包含一笔swap交易和两笔交易,以便提取价值
MEVBot在非常狭窄的价格范围内增加了大量的流动性(2200万美元),因此实际上,所有来自特定USDC-DogeChain交易的费用利润都归他所有
然后MEVBot移除流动性并赚取费用(约35美元)
所以,扣除gas费后他的毛利大约是30美元。不是很多,是吗?是的,但他每分钟都会多次执行这个策略,这一切累计起来就很多了。你可以自己去看看。
这对作为流动性提供者的你意味着什么?这意味着流动性狙击手可能会从你的费用利润中抽走很大一部分。
Uniswapv3图表中的TVL数据非常不准确。所有依赖官方Uniswapv3subgraph的分析工具都存在同样的错误。
Uniswapv3的总TVL是31.4亿美元,而官方网站报告的数字是118亿美元(在撰写本文时)。
Uniswapv3流动性提供者的计算器对于实际策略没有什么价值,因为它们没有考虑竞争和流动性阻击手。
幸运的是,你现在可以更好地理解Uniswapv3流动性池的实际运作方式,并可以相应地调整你的研究。
我无法提供财务建议,但我认为只有两种方法可以建立一个突出的流动性提供策略:
简单型。使用历史数据。尝试持有少量质押的流动性头寸,看看哪种选择效果更好。显然,这只有在市场稳定的前提下才有效。
进阶型。进行研究并相应地优化LP策略。如前所述,这需要深入理解Uniswapv3协议、并拥有数学和博弈论的能力,以及实时处理大量数据的强大数据分析工具。
这两种选择有一个共同点——你的决策要基于数据而不是直觉或随机工具。有时处理数据很困难,但它是有回报的。
原文链接
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。