如何内行地评价一个公链(二):确认时间

631 阅读7分钟

在一个公链系统中,一笔交易被确认的时间被视为系统性能的一个重要的指标。在一些使用场景下,对确认时间的关注程度要高于吞吐率甚至是交易费。能够识破一些虚假的确认时间宣传,正确地判断各种公链实际的确认时间,是至关重要的事情。

一笔交易从发出到最终被确认过程中,有如下的几个时间节点:

在上图中,T0 时刻,用户向一个或几个矿工节点发起一笔交易的请求;矿工们在 T1 时刻确认收到了这笔交易;随后,这笔交易被广播到了全网(T2),但它需要等到一个矿工将其打包进入合法的区块才可以(T3)。交易进入的区块,在 T4 时刻被广播到全网,等待一段时间后被确认(T5)。

区块的确认机制在不同类型的链中有所区别,在以比特币为代表的 PoW 公链中,区块后面跟随的区块数量是判断是否被确认的依据,当确认区块数达到一定数量以后,交易被确认. 在一些基于 PoS 或 dPoS 的共识机制中,一些具有投票权的节点对区块进行投票,当投票积攒到一定数量(比如:参与投票人的三分之二),就意味着绝大多数具有投票权的节点认可了这个区块,这个区块就是在共识机制中不可修改的了,也就是说,交易被确认了。

从用户的角度来说,从 T0 到 T5 所经过的时间,是用户等待的时间。下面,我们分别地来看一下每一段时间的影响因素。

在一个设计良好的系统中和稳定的网络条件下,T0 到 T1 之间的时间不会太长,一般在毫秒级别左右。

T1 到 T2 的时间根据网络中参与共识节点的数量,以及网络的繁忙程度有所不同。如果只有几个超级节点,部署着非常好的带宽,那么交易可以在很短的时间内被广播到全网,如果有几百甚至上千个参与节点,交易需要广播的时间就会更长。有人曾经统计过比特币的交易广播时间,在 2013 年的时候,一笔交易广播到多数节点时间的中位数是 1 秒左右,而到 2016 年的时候,这个时间提高到了 3 秒。

T2 到 T3 的时间取决于需要等多久有矿工愿意打包这笔交易,以及矿工打包后下一个合法区块多久被挖出来。如果一段时间内用户发起的交易过多,用户就必须在高额的交易费和漫长的等待中做出选择。例如在 2017年末,Crypto Kitty 大火的时候,“打包交易进区块”就成为了相对稀缺的资源,区块中的交易的 Gas price 比往常上浮了约 10倍,如果你还使用往常的 Gas Price 进行转账,就要忍受数个小时甚至更长的等待时间。因此,Conflux 希望将吞吐率提高,增加“打包交易进区块”这一资源的供给,来避免因为网络拥堵带来的这一问题。

在 PoW 的公链中,交易被矿工打包后,还需要等到矿工找到下一个区块的解,才算是进入到了一个合法的区块中。比如说,比特币高度为 569564 的区块生成于3月31日下午3点40左右,而高度为 569565 的区块的出现则在半个小时之后。在 569564 刚刚挖出来的时候,无论你出多高的交易费,都要等半个小时,交易才会被打包进区块中的。而且,这样的事情发生的概率不是很小,一天发生四五次还是很常见的。基于概率论的分析结果告诉我们,如果网络的平均出块时间是 d 秒,那么下一个区块有 63.2% 的几率在 d 秒内被挖出来,但在极端情况下,有 5% 的几率等待时间高于 3d 秒, 有约 1 ‰ 的几率等待时间高于 6d 秒。所以出块速度越快,这一部分的时间就越短。

T3 到 T4 的时间是区块广播的时间,与交易广播的时间类似,区块广播的时间同样取决于参与共识节点的数量。另外,区块的大小也对这一时间有很大影响。所以在比特币的紧凑区块(Compat block)的方案中,用传递交易的哈希值的前6个字节代替传递交易。由于交易已经在网络中广播了一遍,所以收到紧凑区块的节点可以自行恢复区块,如果遇到无法恢复的交易,再向其他节点询问。这一方式可以大大减少需要广播的数据大小,进而减少 T3 到 T4 的时间。除此之外,还有很多关于区块广播的优化。

T4 到 T5 的时间,在 PoS 和 PoW 链中是显著不同的。在一些 PoS 链中,会选出一个相对固定的投票委员会(如 EOS),或通过一个规则动态地选出一个投票委员会(如 Algorand),当区块收集了足够的投票以后,就意味着得到了投票委员会的认可,在区块链网络中没有出现另一个“投票委员会”的前提下,自然没有人能再否决或改变这一区块。不过,一些攻击可能改变“没有多个委员会”这一前提。而在 PoW 链中,需要等到区块后面有了足够多的“跟随者”,足以打败任何一个拥有少数算力的攻击者时,一笔交易才能算是确认。采用“投票委员会”来确认区块可以认为是“议会的批准”,而基于“跟随者”区块的数量进行判断更像是“历史的选择”。对于前者,在时间上有一定的优势。

总体来说,在基于 PoS 或 dPoS 的链中,委员会的存在可以减少区块和交易广播时,需要传递数据的数量,也有利于将 T4 到 T5 这一段区块确认时间压的比较低。但是,我们之前也提到过,基于 PoS 或 dPoS 的公链比基于 PoW 的公链有更多的安全性弱点,或是依赖于相对中心化的超级节点。这是一个高安全性与快速确认时间的取舍。

在基于 PoW 的链中,我们可以看到,网络的平均出块时间 d 扮演着一个很重要的角色。这个时间越长,T2 到 T3, T4 到 T5 这两个时间段所对应的时间也就越长。但简单地降低这个时间 d 会导致安全性问题,我们在之前的文章中也讨论过这些。

Conflux 的共识机制设计,可以安全地将 d 这个时间降低到 5 ,从而在实验中达到大概是 4 至 7 分钟的交易确认时间。这个实验数据,是来自对 T3 到 T5 的时间的测量。对于前面这一部分,T0 至 T2 的时间一般是秒级,与 4 至 7 分钟进行对比可以忽略。在 Conflux 的高 TPS 和高出块率的设定下,除非把 TPS 跑满,T2 到 T3 的时间间隔也会在 1 分钟以内。所以从用户来看,Conflux 的交易确认时间是 5 至 8 分钟级别的。对于大额支付、支付通道建立、侧链同步等场景,这个时间是可以接受的。但对于很多场景来说,这个时间还是太长了。所以对于一些对确认时间要求比较高的交易,Conflux 也在考虑在未来支持基于 BFT 或 PoS 的侧链,来实现较高的确认时间。