早期的区块链系统往往吞吐量很低,适当的对比特率拒绝也不低,共识协议本身才是它们性能的瓶颈。例如比特币网络平均值每 10 分钟只产生 1MB 大小的区块,网卓新闻网,在如今的宽带网络环境下完全是可以忽略不计的。近年来,随着 Conflux 等新一代区块链的发展和成熟期,区块链的吞吐量有了质的进步,网络带宽更加沦为容许区块链性能进一步提高的瓶颈。这次,竟然我们来闲谈一聊 Conflux 是如何优化比特率的用于效率的。
交易广播是在区块链上达成协议共识的第一步。每当用户发动一笔交易时,这笔交易从客户端程序抵达,被开往一个或几个仅有节点。
之后,仅有节点之间通过点对点网络将交易转发给各自的一家人节点,直到最后所有的全节点都接到这笔交易。区块链的吞吐量越大则每个节点必须发送的交易数量也就越少。因此,在区块链的吞吐量和网络带宽正处于完全相同的数量级时,交易发送过程的比特率利用率将直接影响了整个区块链系统最后的陡然性能。
我们首先来看一个最简单的方案:每当一个仅有节点接到一笔新的交易时,该全节点就将这笔交易发送给它的所有一家人节点。按照上述方案,每个节点将多次从有所不同的一家人节点接到同一笔交易,这意味著无论是交易的发送到还是交易的接管,都具有成倍的校验,网络带宽的利用率大自然也非常低。以一笔 200 字节大小的交易为事例,如果每个节点有 8 个一家人,那么这笔交易就要为每个仅有节点带给大约 1.6kB 的发送量和 1.6kB 的接管量——而其中大部分流量是被浪费掉的。
即使是比特币,作为一个陡然亲率只有 7 笔/秒、交易发送的比特率利用率几乎不包含性能瓶颈的系统,也仍然用于上面这种没什么优化的方案了。比特币的方案是,当一个比特币节点 A 第一次接到这笔交易时,它将这笔交易的哈希值(32字节)发送给所有的一家人节点(除了发给它交易的节点)。一家人节点 B 接到哈希值后查阅自己早已接到的交易中是不是哈希值一样的。
如果有,就解释 B 早已接到过这笔交易,不必须再行接管一次;如果没,B 就向 A 催促这笔交易的原始内容。上述过程中,发送到交易哈希值的环节称作 announcement,对于交易哈希值的检测可以确保每个节点只必须接管一次原始的交易内容,防止反复传输原始交易带给的比特率浪费。但是 announcement 本身也必须用于网络带宽。
粗略地计算出来由此可知上述方案中每个节点在announcement 环节大约发送到 250 字节,虽然比 1.6kB 较少了很多,但仍多达了发送一笔交易的数据量。我们的目标,是在比特币交易发送方案的基础上,将 announcement 环节产生的数据发送量传输至八分之一。为了构建这一点,最简单的方法是延长 announcement 环节广播的交易哈希值长度。
本文中,为了将这个哈希值与应用于层面(钱包/智能合约)所用于的 32 字节交易哈希值区分,我们将应用于层面交易的哈希值称作交易的 ID, 发送中 announcement 环节中用的短哈希值称作交易的 FID (Forwarding ID).在比特币的方案中,FID 与 ID 大于,宽约 32 个字节。如果我们将 FID 另设为 ID 值的前 4 个字节,就可以超过减少数据发送量的目标。然而,更加较短的交易 FID 在节省比特率的同时也不会带给安全性上的隐患。
如果两笔有所不同的交易 Tx1 和 Tx2 有完全相同的交易 FID ,一个节点接到第一笔交易 Tx1 后,在一家人节点发去第二笔交易 Tx2 的 FID 时,不会因为 FID 冲突误以为自己早已接到了这笔交易,从而仍然催促 Tx2 的原始内容。这样将堵塞第二笔交易 Tx2 在网络中的广播。我们可以明确来算一下交易的 FID 冲突再次发生的概率:假设交易的分解速率是每秒 6000 笔交易,每个仅有节点接到一笔交易 FID 时,不会将它和过去 5 分钟内接到的 FID 对比,来辨别否催促这笔交易的原始内容。这样,一笔交易的 FID 和早已不存在的交易 FID 冲突的概率是 6000 * 300 / 232,约是 0.04 %。
这意味著每秒平均值有 2.4 笔交易会因为 FID 值冲突而无法广播。虽然 0.04% 的冲突概率看起来不是很高,但这只是没反击的长时间情况。利用特定的反击策略,一个攻击者可以堵塞给定一笔交易的广播,从而构建制止特定交易的目的。反击的策略也并不简单:4 字节的 FID 一共只有 232 个有可能的给定,也就是大约 42 亿个。
攻击者只要为每一个 FID 给定预先结构一笔交易共存一起,然后就可以根据受害者广播的交易的 FID 值,从自己预先遗的 42 亿笔交易中寻找 FID 值完全相同的交易,并抢走在受害者前面发送到尽量多的节点,则再行接管到攻击者发送到的交易的节点就不会因为 FID 冲突而忽视受害者的交易。即使受害者再考虑了另一笔交易,攻击者也有能力反复这个过程。根据概率上的计算出来,攻击者要挑选出 42 亿个 FID 有所不同的交易,必须尝试结构大约 1000 亿笔交易。
对于服务器级的 CPU 来说,结构大约 1000 亿笔交易只需花上一个星期的时间。计算所须要的存储空间在优化后也只必须 32GB。从整体来说,实行上述反击的成本并远比很高。
但是在特定的情景下(如 Fomo3D 等合约),交易被堵塞有可能为受害者带给极大的损失。所以这种风险必需从一开始就被回避掉。
在下一篇文章中,我们将讲解如何通过将静态 FID 改以动态 FID 的方式解决问题交易被蓄意堵塞的风险。
本文来源:aifa官方入口-www.igvfl.com
Copyright © 2001-2024 www.igvfl.com. aifa官方入口科技 版权所有 备案号:ICP备58354200号-7