数据分析:Uniswap3的TVL计算竟然都是错的?
摘要:TVL如此重要,但我竟然发现最大的DeFi协议Uniswap V3 TVL的数据存在一些错误。官方的Uniswap 图表也存在一些问题。
原文作者:Ivan Vakhmyanin
编译:PANews

2 x 2 = 5
很明显,这是错误的数学题。当我看到Uniswap V3 用户界面上显示的流动性和 TVL(锁定总价值)的数据完全错误时,我的感受和看到2 x 2 = 5的感受是一样的。
Uniswap是以太坊和整个区块链行业最大的去中心化金融(DeFi)项目。因为成千上万的流动性提供者每天都在使用Uniswap的数字来建立他们的投资策略,这些数字怎么可能不准确呢?
我试着找出我计算过程中的错误,但数小时都无成果,且实际情况比TVL不准确还更糟糕。
发现问题
首先,了解什么是TVL以及如何使用TVL?
TVL是委托给区块链或协议的所有加密货币资产的总价值,通常以美元计价。这些资产可能是去中心化交易所、跨连桥、借贷协议的总流动性,或者PoS的总质押资产。
TVL被加密投资者广泛应用,主要应用于以下场景:
1、判断协议,热门的协议一般都会展示它们的TVL,因为更大的TVL意味着更大的用户信任、更低的风险以及更稳定的利润。
2、筛选协议,加密交易者一般会选择更高的TVL的DeFi工具,如去中心化交易所或跨链桥。
3、监控协议,TVL数据能快速增长的协议,是发展越来越好的信号。
TVL如此重要,但我竟然发现最大的DeFi协议Uniswap v3 TVL的数据存在一些错误。不过对于我来说,最大的发现是官方的Uniswap 图表也存在一些问题,以下是我发现这个问题的全程:
以一个流动性分析项目为例,首先将 Uniswap v3 的官方数据与我使用原始区块链数据的计算进行比较。此步骤对于数据质量标准至关重要,为了提高验证的准确性,我选择了一个热门的流动性池 USDC-WETH(0.3% 的费用水平)。

Uniswap v3 上第三个池子的 TVL 高达 3.33 亿美元(基于撰写本文时的 Uniswap 官方图表),每日交易量为 6100 万美元。
但我计算出来的是1.76 亿美元,和Uniswap v3 的官方数据并不一致,于是我决定到ETH的区块浏览器上进一步验证。理论上,每个 Uniswap v3 池子都是一个智能合约。因此,区块链浏览器可以显示池中拥有的代币余额,也就是这个池子的 TVL。

我预计区块浏览器池子中的代币余额会比Uniswap的官方数据大一点,因为池子还包含流动性及还未领取的费用。但这个余额几乎是Uniswap官方数据的一半,最让人惊讶的是,这和我的计算结果相同!
我再逐个检验其他资产的流动性,也出现类似的情况。这个时候,我意识到这个问题和应该不是我计算的问题。

为什么会发生这个情况?经过研究,我发现 Uniswap 依赖于去中心化的区块链索引服务The Graph。使用此服务,任何开发人员都可以为特定的区块链数据用例添加个人分析代码(称为子图),并通过 API 提供分析。所以Uniswap Labs 为 Uniswap 协议分析创建了自己的子图,并通过The Graph提供给服务来组建相关数据。比较好的一面是The Graph的代码是公开的,不好的一面是它的 TVL计算错误。
我对其中的代码进行了简要的分析,发现它考虑了所有兑换和流动性事件,但没有考虑费用。Uniswap 矿池对每次交换收取 0.01% 到 1% 的费用。该费用从交易资产中扣除,并计入流动性提供者。反过来,流动性提供者可以随时收取应计费用。但是,当前的 Uniswap v3 子图显示的数字好像从未累积和收取任何费用。因此,Uniswap v3 TVL 数据在每次交换时都偏离了现实。
我第一反应是向The Graph提交工单进行反馈。但我在Github上发现,这个问题在2021年11月已经被核心开发人员提出了。我不知道The Graph为什么一直没有解决这个问题,但随着时间的累积,TVL将会和实际数据相差越来越大。如现在的USDC-ETH这样的大池子,目前的TVL已经和真实的数据相差几乎一半了。