为什么普遍认为比特币系统确认 6 次便认定交易已可靠上链?

原文标题:《简版 区块链本质论 (5): 性能本质之延迟》
作者:王嘉平,中科院计算所博士,曾带领团队在 NSDI 2019 发表高性能并行分片区块链系统的论文

区块链被大家关注是件好事情,但非常不希望看到各种区块链项目盲目上马,造成各种社会资源的浪费。区块链技术本身尚在发展阶段,还有很多核心技术问题有待突破,对区块链技术本质还充斥着各种不同的理解。后面几天我们将就区块链的计算本质,技术难点,业务调整,社会影响等方面和大家分享。

(5) 性能 : 交易确认延迟

在当下的主流公链中,一个交易从发出到最终确认上链,并非瞬间完成,而需要历经一段不短时间,可能是十几分钟甚至高达几个小时。这期间,大部分的时间是在排队。就比特币而言,大部分时候有近 5000 到 10000 个已经发出,但尚未得到确认的交易被临时存储在每个比特币的节点中,这个存储池被称为 mempool。大致每 10 分钟,会有一批交易被确认上链,每批约 2000 到 3000 个交易。剩下的部分就在 mempool 中排队等候。

为什么要 10 分钟才确认一批?为什么每批只有几千个交易?可以在这里找到答案 :

王嘉平:简版 区块链本质论 (3): 性能本质之吞吐量

同时,这些交易的排队并不是按先来后到确认的。每个交易的发出时,附带了交易手续费,交易的确认会优先选取交易手续费高的。所以,通常网络中交易过多的时候,比较着急的交易可以通过附带更多的交易手续费来插队。这也是为什么,网络拥塞的时候,交易手续费会飙升。

一个区块链系统吞吐量低于其上应用的需求时,交易确认的延迟主要由交易排队构成。这就是大家认为,提高吞吐量,提高 TPS,会感觉区块链变快。吞吐量确实是当下区块链系统最需要改善的地方,并带来更低的交易确认延迟。

除了排队延迟,一个交易从发出到第一次确认上链的完整过程,包含以下过程 :

1. 该交易的全网广播扩散 ,通常需要 2\,3 秒
2. 交易排队 (前面已经讨论过的步骤 )
3. 一轮共识周期 (需要一个出块间隔的时间,例如比特币是 10 分钟 )
4. 包含这个交易的区块得到全网广播扩散,通常需要 4 到 8 秒

其中,步骤 1 和 4 主要由互联网点对点通讯延迟和全网的节点数量决定。步骤 2 则由区块链系统的共识算法及其参数决定。值得的注意的是,粗看来,大区块+大间隔 或者 小区块+小间隔 都可以满足特定的吞吐量,并且后者 (小区块) 的确认延迟更小。但事实上,小区块对带宽的利用率大大小于大区块,因为在每一个区块中,除了被确认的交易数据,还包含完整的共识相关的算力证明数据或者验证者的签名数据 。

当然,类似吞吐量的提升,这里可以有个很简单的解决方案,就是高度集中部署,所有节点在一个高速局域网内,从而实现秒级甚至毫秒级交易确认。但是,很难说这样的系统还是不是一个区块链系统。

上面讲到的首次确认的时间延迟,对于不同安全性要求,人们可能需要在首次确认之后再观察一段时间。我们第二篇的共识本质中,讲到了两类共识算法:

王嘉平:简版 区块链本质论 (2): 共识本质

基于最终一致性的 POW 共识机制的区块链系统是可能出现区块回滚的,也就是说当一个交易被某区块确认之后,该区块有可能被作废 (孤块),从而导致之前确认过的交易会需要重新确认,并返回 mempool。这种情况会小概率地发生,即使不存在恶意的攻击。一个区块成为孤块从而导致其确认的交易被撤销的概率会随着时间流逝,紧接其后的更多区块越来越多而指数级下降。

最后,被这个区块的交易就几乎不可能被撤销了。这就是为什么,比特币系统大家经验上认为,需要 6 次确认来认定一个交易已经可靠上链了。而在即时一致性的共识系统中,例如 BFT 则不需要这个额外的等待。

这一篇的扩展阅读 :

王嘉平:区块链公链如何才能快起来 (一)

来源链接:mp.weixin.qq.com