共计 1701 个字符,预计需要花费 5 分钟才能阅读完成。
区块链的链式结构为参与者提供了一个全局一致的账本(包括内容和顺序的一致),但是为了避免过多的分叉,保证系统的安全性,经典的区块链项目(BTC、ETH)对于出块间隔时间和区块大小都有较为严格的限制,导致了其吞吐率的低下。
影响区块链吞吐率的因素直观而言有三点:其一是出块间隔,即前后两个区块出现的时间差;其二是区块容量,即每个区块中存储的数据量;其三是区块的并行性,即并行生成多个有效区块。如果想要提高区块链的扩展性,就要从这三个方面入手。减少出块间隔可以在单位时间产生更多区块,增加区块容量则可以使得单个区块包含更多交易,并行生成多个有效区块也可以在单位时间得到更多区块,因此这三个措施都能提高区块链的吞吐率。
但是由于区块链的安全性的要求,如果过度减少出块间隔或者增加区块容量,会导致区块链安全性的下降。同时,由于区块链的链式结构,通过并行来提高吞吐率也十分的困难。下文将详细解释原因。
减少出块间隔
在真实的区块链系统中,区块传播是依赖 P2P 的广播协议实现的,因此存在较大的网络传播延迟。一个区块传遍整个网络大多数节点的时间延迟通常在几秒甚至几十秒。为了保证系统的安全性,出块时间间隔必须足够大。若将出块时间间隔降低,则区块链系统可能会产生较长的分叉,从而破坏系统共识的安全性。
假设将区块传播路径上的节点进行线性排列,在区块高度为 100 时,第一个节点发出一个区块 B1,然后逐个向后面的节点进行传递。如果在 B1 到达所有节点之前,最后一个节点在同一高度也产生了一个区块 B2,并且向前传播,如图 1 所示。
图 1. 区块在节点中的传播
这样,前一部分节点在高度 100 时的区块为 B1,剩余节点的区块为 B2,则区块链产生了分叉。如果这种现象出现的概率很小,则可以通过长度竞争最终确定并保留有效的区块。如果区块产生时间间隔很小,则这种现象不断发生,极端情况是在同一高度尚未竞争得到最终结果时分别有新的区块继续产生,则分叉长度会不断累积从而破坏共识的一致性。
降低区块产生间隔还有其他的副作用。当新节点没有在全网同步时,诚实节点会在不同的分叉尝试产生新的区块,而这些结果最终通过竞争仅有一个最长链得到保留,因此在同步的过程中诚实节点的算力被浪费了。出块间隔越小,诚实节点在无效分叉产生区块所浪费的资源比例越大,因此分叉导致了诚实节点等效算力的下降。造成的结果是,攻击者可以用小于 50% 的算力来攻陷区块链系统。图 2 分析了区块产生速度与系统安全门限比例之间的关系。
图 2. 区块间隔与安全性的关系
扩大区块容量
扩大区块容量是提高吞吐率的另外一个直接方案,但直接的区块扩容可能造成两个问题。
其一,随着区块的增大,其广播到全网中所有节点的时间(网络延迟)会线性增长,如图 3 所示。根据前面的分析,网络延迟的增加会导致更频繁的分叉,影响系统的安全性。因此区块扩容也将间接降低系统的安全性,为了弥补安全性损失要增加出块的时间间隔。
图 3. 传播时延与区块容量的关系
其二,当区块容量增大,则出块的节点所拥有的权利(打包交易的数量)随之增大,这样会导致某种意义上的中心化。可以想像,如果块大小无限大,那么这就是一个中心化的系统。
并行有效出块
区块链的链式结构,只允许区块串行地打包交易,在不考虑网络延迟和攻击者的情况下,所有的节点会在相同的区块后面进行挖矿工作,当新的区块被挖出后,节点放弃当前的挖矿工作,转而在新区块后进行挖矿,即区块是一个接着一个产生的。
分片技术和闪电网络都是尝试通过并行提高区块链的吞吐率,前者将网络上的交易分成不同的碎片,由不同的节点单独处理,这使得节点可以并行运算;后者通过使用状态通道,将线上的交易在线下进行,从全局看,线下的交易并行处理从而提高系统的吞吐率。但两种做法都存在一定的问题。
因此区块链系统提高吞吐率是一个较为复杂的综合性问题,我们会在之后的区块链扩展性系列文章中详细讲述目前的吞吐率提升方案。
Facebook:https://www.facebook.com/Frac…
Twitter:https://twitter.com/fractalblock
商务合作:Fractal@fractalblock.com