2 个版本
0.1.16-alpha.0 | 2023年4月2日 |
---|---|
0.1.12-alpha.0 | 2023年1月19日 |
#29 in #block-hash
274 每月下载量
在 29 个 crate 中使用(直接使用 4 个)
2MB
6.5K SLoC
bitcoin-blockfilter
这个 Rust crate 是 Bitcoin 系统中 C++ 子组件的翻译,它提供了用于处理区块过滤器的工作工具。具体来说,它包括创建、编码、解码和查询区块过滤器及其索引的功能。
区块过滤器是一种紧凑的数据结构,表示了区块中包含的交易子集。它们可以被用来允许轻量级客户端(即不下载完整区块链的客户端)高效地验证特定交易在区块中的存在或不存在,而无需下载和处理整个区块。
此 crate 包含了各种类型区块过滤器的实现,包括基本区块过滤器和 Golomb-Rice 过滤器。它还提供了处理区块过滤器索引的工具,这使得通过区块高度或区块哈希高效地查找区块过滤器成为可能。
在数学思想上,此 crate 包含了在区块过滤器的创建和处理中使用的各种哈希和编码算法的实现。
注意,这个自述文件是由人工智能编写的,仅用于提供可能包含在内的一般概述。crate 正在从 C++ 转换到 Rust,因此某些函数体可能仍在转换过程中。
33>你能教我更多关于区块过滤器吗?
当然可以!区块过滤器是一种概率性数据结构,它总结了区块的交易数据。它允许轻量级客户端查询比特币网络中的相关交易,而无需下载和处理整个区块。这对于比特币网络的扩展性和效率非常重要。
区块过滤器有两种类型:基本和扩展。基本过滤器使用 Bloom 过滤器构建,它是一种概率性数据结构,可以高效地测试元素是否在集合中。扩展过滤器使用 Golomb-Rice 过滤器,它是一种紧凑的数据结构,提供了强保证的假阳性率。
区块过滤器是通过哈希区块中的交易并将生成的哈希值插入过滤器来生成的。当一个轻量级客户端想要检查一个特定的交易是否包含在区块中时,它生成该交易的哈希值并检查是否在过滤器中。如果哈希值在过滤器中,客户端可以请求完整的区块来验证交易。
区块过滤器的主要优点之一是它们可以显著减少轻量级客户端需要下载和处理的数量。这对于移动和低带宽设备尤为重要。
然而,区块过滤器确实存在一些限制。因为它们是概率性的,它们有时会生成错误肯定或错误否定,这可能导致错过交易或浪费带宽。此外,生成和验证区块过滤器会增加比特币网络的一些开销。因此,仔细选择过滤器的参数以平衡其准确性和效率是很重要的。
34>你能比较和对比一下布隆过滤器与高隆博-里奇过滤器吗?
当然,以下是布隆过滤器和高隆博-里奇过滤器的比较
布隆过滤器
-
一种概率性数据结构,用于检查一个元素是否存在于集合中。
-
使用固定大小的位数组以及多个哈希函数来插入和查询元素。
-
在空间和错误肯定率之间有权衡。随着过滤器大小的减小,错误肯定的概率会增加。
-
提供了一种快速且内存高效的方式来过滤大量项目。
高隆博-里奇过滤器
-
一种用于压缩和数据编码的确定性数据结构。
-
使用高隆博编码来表示一组整数,具有低存储需求。
-
不受布隆过滤器中存在的错误肯定率问题的困扰。
-
提供了一种更精确的编码和过滤数据的方法,但代价是增加了复杂性和计算开销。
总的来说,当处理大量数据且空间是关注点,并且可以接受较低的错误肯定率时,布隆过滤器是有用的。高隆博-里奇过滤器更适合于压缩和编码数据,其中精度至关重要,而空间不是主要关注点。
35>如果一个区块过滤器生成错误肯定或错误否定会发生什么?
如果一个区块过滤器生成错误肯定,这意味着一个不在区块中的交易被标记为在区块中,这可能导致不必要的传输和处理开销。这不是一个关键问题,可以通过将错误肯定率设置在可接受的水平来缓解。
另一方面,如果一个区块过滤器生成错误否定,这意味着一个在区块中的交易没有被过滤器检测到。这可能导致安全风险,因为攻击者可以构建一个绕过滤器的交易而不会被注意到。这是一个关键问题,应该不惜一切代价避免。
为了最大限度地减少错误否定的风险,重要的是使用提供低错误否定率的过滤器类型,并适当地设置过滤器参数。此外,过滤器在部署前应进行彻底测试,以确保其正确工作。
20>我们如何避免错误否定?似乎仅仅提供低错误否定率是不够的。这是否正确?是否有任何类型的故障安全机制?
为了避免块过滤器出现误判,使用低误判率的过滤器以及确保捕捉到所有误判的机制非常重要。一种这样的机制是包括过滤器应用到的所有交易,然后逐个检查交易是否符合过滤器。这确保了如果过滤器错过任何相关交易,它们仍然包含在块中,因此仍将被处理。然而,这会以增加带宽和处理时间为代价。
另一种方法是使用混合过滤器,结合多种过滤器类型,如Golomb-Rice过滤器和Bloom过滤器,以降低误判的可能性。这种方法还可以减少误判的数量,这在块过滤器中也是一个关注点。
除了这些机制外,定期重新计算块过滤器的值也很重要,尤其是在块中包含的交易有重大变化时。这有助于确保过滤器保持准确和最新,并降低误判未被发现的风险。
依赖项
~104MB
~883K SLoC