1. 引言
前序博客:
- Utreexo:比特币UTXO merkle tree proof以节约节点存储空间
MIT Digital Currency Initiative 的 Thaddeus Dryja 2019年论文 Utreexo: A dynamic hash-based accumulator optimized for the Bitcoin UTXO set。
开源代码实现见:
- https://github.com/mit-dci/rustreexo(Rust)
比特币最早出现且最持久的问题之一是可扩展性。Bticoin的字面意思是“be your own bank成为你自己的银行”,比特币网络上的每台计算机都存储着系统中拥有资金的每个用户的每个帐户。在比特币中,它被存储为“Unspent transaction outputs未花费的交易输出”或“UTXO”的集合,这有点不直观,但与传统金融中使用的基于“帐户”的替代模型相比,提供了隐私和效率优势。
区分交易历史记录和系统当前状态非常重要。比特币的交易历史记录目前为 200GB,包含自 2009 年初比特币推出以来的每笔交易。该历史记录的大小当然只会随着时间的推移而增加。然而,当前的系统状态要小得多,不到 4GB,并且只处理当前谁拥有什么。随着时间的推移,该状态规模总体上有所增加,但今年实际上有所减少。
尽管历史记录的规模要大得多,但实际上并不是可扩展性问题,因为它不以任何time-critical的方式使用;人们可以在处理后丢弃历史记录,而不会损失安全性。然而,不断增加的状态规模是一个令人担忧的问题——utreexo 解决了这个问题。
Utreexo 是一种新颖的基于哈希的动态累加器,它允许数百万个UTXO以千字节以下的形式表示——小到可以写在一张纸上。不存在可信设置或安全损失;相反,跟踪资金的负担转移到了这些资金的所有者身上。
目前,交易指定了输入和输出,验证输入需要了解系统的整个状态。通过 Utreexo,资金持有者可以维护资金存在的证明,并在花费时间时向其他节点提供该证明。这些证明很紧凑(低于 1KB),但确实代表了 utreexo 模型的主要缺点,它们提供了额外的数据传输开销,从而允许更小的状态。
Utreexo 将维护网络的成本推到了正确的位置:创建数百万笔交易的交易所可能需要维护数百万个proofs,而只有少量未花费输出的个人账户只需要维护几千字节的证明数据。Utreexo 还提供了长期的可扩展性解决方案,因为累加器大小随着底层集合大小的增加而增长非常缓慢(累加器大小与集合大小成对数)。
在比特币共识网络中,所有节点就未花费的交易输出集(“UTXO”集)达成一致。这种共享状态的大小是网络的可扩展性约束,因为随着更多用户加入系统,集合的大小会扩展,从而增加所有节点的资源需求。将网络的状态大小与单个机器的存储要求分离将减少验证节点的硬件要求。Utreexo引入了一个基于哈希的累加器来本地表示 UTXO 集,该集的大小是对数的。节点将包含证明附加并传播到交易的输入,该包含证明与累加器状态一起提供验证交易所需的所有信息。虽然包含证明的大小会导致网络流量增加,但这些证明可以在验证后被丢弃,并且聚合方法可以将其大小减少到可管理的开销水平。对截至 2019 年初的比特币区块链下载进行的模拟中,分配了 500MB RAM 用于缓存,proofs仅比其他下载量增加了约 25%。
参考资料
[1] Utreexo: A dynamic hash-based accumulator optimized for the Bitcoin UTXO set
[2] utreexo: a dynamic accumulator for bitcoin state