如何减少比特币全节点相关的带宽
扫描二维码
随时随地手机看文章
最近,我和格莱布·诺门科(Gleb Naumenko)以及前同事格雷格·麦克斯韦尔(Greg Maxwell)推出了一个名为miniketch的软件库,用于在分布式系统的节点间同步数据时降低带宽要求。
miniketch最初是作为一个项目的组成部分开发的,该项目研究使用set reconciliation在比特币上的节点之间共享交易数据,即“set reconciliaTIon Relay”或SRR。SRR的目标是显著减少与运行比特币全节点相关的带宽。
该团队决定将miniketch与SRR分开发布,因为它预计将对比特币领域内外的许多其他应用程序有用。
为什么是Minisketch ?
传统上,所有分布式系统都难以在节点之间同步数据——在集中式系统中,告诉节点应该拥有哪些数据,不应该拥有哪些数据要容易得多。
例如,分布式网络中节点间数据同步的一种方法是可逆Bloom查询表(IBLT)。虽然IBLT的CPU需求相对较低,但这是以相对较高的带宽需求为代价实现的,特别是在差异数量较小的情况下。miniketch使用了一种称为PinSketch的带宽效率更高的算法。
与CPISync和Pinsketch最初的实现等其他带宽高效的集协调算法相比,miniketch使用的计算能力要小得多。它比PinSketch快20到100倍,有时比CPISync快1000多倍。
如何实现改进?
Set reconciliaTIon(由miniketch实现)比简单地发送整个数据列表的带宽效率更高,因为它允许主节点生成其列表的数学“草图”。然后,主节点将此消息发送给其他节点,以便与它们自己的列表进行比较。草图的大小只取决于节点之间的期望差异数量,而不取决于集合的总大小。尽管如此,它仍然允许主节点从其他节点中确定地区分它们需要哪些数据。
如果我们把它简化成一个差值,很容易看出它是如何工作的:假设我有一个集合{3,5,7,11},你有一个集合{3,5,7,9,11},那么差值是{9}。我们都计算元素的和,得到3+5+7+11=26,你得到3+5+7+9+11=35。我把26这个和发给你,你从和中减去它;差是9。这是可行的,但仅限于找到单一的差异。miniketch通过发送各种类型的数据“和”来概括这一点。结果是,对于N个不同的和,您可以找到N个差异……只要集之间的差异的数量不超过发送的“和”的数量,miniketch总是能够成功地找到所有的差异。
比特币上的Minisketch
比特币网络的健壮性依赖于确保完整节点之间有足够的连接,以阻止Sybiland分区攻击。
不幸的是,比特币节点的大部分数据使用(通常在40%到70%之间)甚至都没有花在交易数据上,而是花在相互宣布新交易以找出要转发哪些交易上。现在,增加节点之间的连接数量会相应地增加带宽开销。这限制了每个节点可以支持的连接数量。
通过使用set reconciliaTIon,可以有效地找出哪些事务尚未中继,而不需要向每个对等方宣布每个事务。查找要中继的事务的带宽开销。
这种解决方案的美妙之处在于,它不需要对比特币的网络共识规则进行任何修改。当双方的软件都支持SRR协议时,SRR将被启用,不会对不支持SRR协议的节点操作人员产生负面影响。
SRR协议仍处于研究的早期阶段,可能要过很长时间才能在比特币网络中得到采用,但像Minisketch这样的进展代表着在改进比特币完全节点的采用和可访问性(以及优化其他分布式网络)方面的一个非常重要的进展。