摘要:在这篇文章中,我们将尝试比较和评估比特币与以太坊在区块链规模和数据存储需求方面的差异。令人惊讶的是,比特币的区块链规模仍比以太坊大,但这种情况即将改变,随着以太坊的区块链规模迅速增加,它很快就会超过比特币。另一方面,这并不是一个特别有用的比较指标,因为要了解以太坊网络的有用信息,需要运行的计算和生成的数据远多得多。
比特币与以太坊–概述
比特币记者兼播客 Peter McCormack 最近在推特上对一个完整的比特币节点和一个完整的以太坊节点所需的存储空间进行了比较。以太坊 Geth 实施程序的首席开发者 Peter Szilagyi 转发了这个帖子,并进行了不同的比较。
这带来的第一个问题是,以太坊的链怎么会这么小,只有 175 GB?毕竟,以太坊的交易吞吐量高于比特币。由于对 Defi 和 NFT 相关活动的巨大需求,以太坊最近发展迅猛。所有数据只有几百 GB,这似乎很奇怪。特别是考虑到用户在以太坊上的任何动作几乎都需要数字签名,这就需要大量的空间。
因此,以太坊目前产生的数据远远多于比特币,而比特币仍然拥有更多的累积区块链数据,如下图所示。从 2015 年到 2018 年,比特币的区块链增长速度比以太坊快,然后从 2018 年到 2020 年,二者似乎在平行增长。最后,从 2020 年底开始,以太坊区块链的增长速度进一步加快,现在的增长速度远远高于比特币。以太坊的累计区块链规模看起来很快就会超过比特币,并加速超越比特币。虽然得知以太坊区块链的规模小于比特币区块链规模可会能令人惊讶,但在我们看来,这是因为对现况的偏见,且忘记了几年前的以太坊规模有多小,这才是造成这种惊讶的主要原因。
区块链规模 (GB)
来源:BitMEX Research
对于比特币和以太坊这两种情况而言,上图中的区块链总规模包含了所有的交易数据,是一个人为完全同步和验证链而需要从对等方那里下载的所有数据。这包括授权每笔交易的所有数字签名。在以太坊和 Geth 的情况下,我们通过将 Geth 节点与互联网断开,并成功从各种样本交易(包括 2016 年和 2017 年的交易)中检索数字签名,测试了签名的包含情况。以太坊区块链数据还包括部署每个智能合约所需的所有代码,我们也测试了这些代码是否存在于我们的本地机器上,该机器有几百 GB 的存储空间。
什么是 9 TB 以太坊区块链?
至于 9 TB 的说法,这可能来自 Etherscan 网站的这一链接:https://etherscan.io/chartsync/chainarchive
这个大数据集用于所谓的“存档节点”。就我们所知,这个数据量较大是因为该节点在内存中存储和索引来自网络历史状态的结果。所有这些结果都可以从较小的区块链数据集中计算出来。我们可以把这个 9 TB 的大数据集看作是追踪和审计从以太坊的诞生之日起的每个点的资金流所需要的数据量。从这个意义上说,它是一个值得注意的指标。
当用以下命令在我们的非存档 Geth 节点上查找最近的交易哈希时,我们得到了一个成功的结果:
eth.getTransaction(“TXHash”)
然而,如果我们对一个较早的交易尝试同样的命令,得到的结果是 “null”,可能是因为该交易没有被索引。但我们仍然可以通过指定交易在特定区块的位置来获得这些较早交易的数据。
eth.getTransactionFromBlock(“Block number”, “Transaction Index”)
即使在一个只有几百 GB 存储数据的非存档节点上查询很早的以太坊交易,运行上述命令也能成功获得结果。交易签名也能显示出来。值得一提的是,截至 2021 年 11 月 21 日,我们的 Geth 节点在 Chaindata 目录中有 528 GB 的数据。其中 267 GB 在 “早期”文件夹中,数据与较早的区块相关。
比特币 UTXO 集与以太坊头状态
Peter Szilagyi 对以太坊的头状态需要 130 GB 数据作出评论之后,下一个问题产生了。我们收到了一些问题,例如为什么与比特币中某种程度上同等或类似的指标(UTXO 集大小,即未花费的比特币交易输出)相比,这个数字如此之大。对于以太坊和比特币的两种情况,最后一个区块和状态头或 UTXO 集是一个节点评估传入区块有效性所需的全部数据。
在写这篇文章的时候,比特币的 UTXO 集包含大约 7600 万个输出,占用了 4.6 GB 的磁盘空间。比特币核心支持删减区块链,节点可以丢弃较早的区块链数据,只保留一些最近的交易以及 UTXO 集。这意味着,人们可以完全验证整个比特币区块链,并检查新区块的有效性,而所需磁盘空间远远低于 10 GB。这是一个相当有用的功能,体现了强大的效率。例如,4.6GB 只占整个比特币区块链规模的 1.2% 左右。
这种效率似乎并不适用于以太坊。根据 Peter 引用的数字,以太坊上的头状态占 130 GB,大约是区块链规模的 43%,远远高于比特币的 1.2%。以太坊也有早期交易和账户,为什么这些不能删减,至少在理论上,实现类似的节省?可以说,据我们所知,以太坊的开发者并没有试图使其更高效,因为有其他的优先事项,但即使他们尝试这样做,也不太可能达到比特币中可以看到的效率节省。
以太坊的状态链
在以太坊中,节点存储的数据库有两种主要类型:区块链(所有交易加上区块头)和状态。状态是从交易历史中计算出来的,基本上包含:所有以太坊账户余额、与每个部署的以太坊智能合约相关的存储和账户nonces。状态基于之前的状态和区块中的新交易,在每个区块后更新和计算。状态的 Merkle 根哈希值包含在每个区块头中,确保网络状态的共识。随着以太坊的发展,状态数据持续增长,如上所述,最新状态的大小与区块链本身相当。如果一个节点要存储每一个区块所有的完整状态,这将是一个巨大的数据量,甚至可能大大超过 9 TB 的存档节点。
一个单独的以太坊交易对状态产生的影响可能非常小,也可能很大。例如,一个只是将以太币从一个地址发送到另一个地址的“常规”交易,对状态的影响很小。同时,一个因为耗尽燃料而失败的交易,对状态产生的影响也很小。相比之下,其他类型的交易,在区块链上的数据足迹本身可能很小,但对状态的影响可能很大,例如,一个交易可能与智能合约交互,这可能改变多个账户余额。如果以太坊区块链只包含对状态影响最小的交易,那么状态大小就会小得多,可以接近比特币 UTXO 集 c1% 的效率水平。
这就是比特币交易和以太坊交易的关键区别。仅仅通过观察一个单独的比特币交易,就可以知道它对比特币网络状态的影响,进而了解当前的情况。以太坊就不一定能做到这一点,对于以太坊而言,通常只能通过同时计算整个网络的状态来了解一个交易的影响。
您可能会想,好吧,那么以太坊的工作方式与比特币不同,头状态大小和交易数量之间没有明确的联系或关系,但同样的删减原则仍然可以适用。为什么不能将一部分旧的、未使用的或过期的状态删减并排除在头状态之外?以太坊其实并不是这样运作的。智能合约部署时,实际上从来没有机制来关闭或结束合约,即使不再使用也会永远继续存在。以太坊背后的部分核心理念是,它是一个可组合合约的交互式系统。任何账户都可以在任何时候与任何智能合约或状态的任何部分交互。因此,要验证一个新区块,节点必须拥有所有智能合约和整个系统的最新状态。因此,当涉及到缩减头状态规模时,可能实现的删减或效率提升很有限。因此,头状态很可能会随着时间的推移而继续增长。
比特币与以太坊–结论
以太坊和比特币区块链规模相比较的意义并不总是很大。比特币的区块链基本足以让人了解关于比特币网络的所有信息。相比之下,以太坊区块链本身绝不足以让人了解太多以太坊状态的信息,要了解其状态,需要计算和存储更多的数据,否则就不知道许多交易实际上会产生什么影响。然而,公平地说,区块链数据规模的比较在某种程度上是有意义的,例如执行初始同步时需要通过互联网下载的最小数据量是多少。从这个指标来看,这两种币非常接近,以太坊即将取得领先,或者陷入劣势,这取决于人们从哪个角度何看待这一问题。