限制比特币吞吐量性能的要素主要有两个。一个是区块的大小,另一个是区块的生成速度。增加区块的大小可以增加一个区块可以容纳的交易数量,从而增加吞吐量,但是区块的大小增加同时也导致了区块在网络中传输的延迟增加。如果增加区块的生成速度,可以降低交易的确认延迟,但是这样也会导致分叉更频繁,系统的安全性大大降低。为了解决扩展问题,Ittay Eyal等人提出了一种新的扩容方案叫做Bitcoin-NG(Next Generation)。
把Bitcoin-NG的两种区块和比特币的区块一起进行比较的话,主要有以下几个不同。首先Bitcoin-NG的核心块只有header,是不包含交易的,并且相比比特币的header多了一个属性值是当前领导者的公钥。其次Bitcoin-NG中,交易被打包到了微块中,并且在微块的header中也必须包含当前领导者的加密签名。这个签名是使用同核心块中的公钥匹配的私钥完成的,这样所有人都可以用核心块中的公钥对微块的所属进行验证。
所以为了激励矿工按照这个规则来工作,Bitcoin-NG引入了40%-60%激励机制。这个激励机制的意思是当前时代生产的全部微块中的交易费的40%给当前领导者,而剩余的60%会给下一个时代的领导者。核心目的便是使贪心矿工通过作恶行为能赚到的报酬比按照规则可以赚到的报酬还要低。
接下来我给大家讲一讲这个如何得出40%-60%这样的分配比例,这也是这个激励机制最有意思的部分。
假设有一个贪心的领导想要拿走全部的报酬,这个贪心领导已经秘密的生产了微块m2但是他并没有公开。因此这个领导秘密的在微块m2的基础上进行挖矿,与此同时其他的矿工都在当前领导发布的最后一个区块m1的基础上挖矿。 最终有两种结果可能发生,第一种结果是这个贪心的领导成功的挖出了k2’,他可以把微块m2的全部报酬拿走。另一种结果是其他矿工更快在m1基础上成功挖出k2来,那么这个领导会失去m2全部的报酬。这样的话,这个领导者的时代终结他便只能在其他领导发布的微块的基础上重新尝试挖矿。
我们假设这个贪心领导者的算力占全网算力的比例是α,微块中的报酬分配给当前领导的比例是rleader,那么给下一个领导者的比例为1-rleader。所以我们可以得出下面的不等式:
α可以想成是贪心矿工自私挖矿成功的几率,所以一旦作恶成功可以获得的平均报酬是α × 100%,失败的话报酬全部失去,但是仍然可以重新尝试挖矿,在下一个领导者的微块基础上再次挖矿成功的几率是(1 - α) × α,可以获得的报酬是100% - rleader。然而如果这个领导者按照规则打包交易发布微块的话可以获得的报酬是rleader。要保证前面所说的全部报酬加起来仍然低于rleader,这样自私挖矿就失去了意义。
这里的α <1/4,这是由于以工作量证明(Proof of Work)最为共识基础的区块链最多可以容忍拜占庭节点的比例是1/4,Bitcoin-NG也不例外。(这部分的内容我以后会写一篇文章对区块链中常见的所有攻击进行总结)所以最终得出rleader > 37%。
假设当前领导者已经发布了新的微块m2,所以诚实的矿工们都改成在m2的基础上重新开始挖矿尝试。而某个贪心的矿工不愿意放弃之前的工作,仍然在m1上继续挖矿,并且最终他还真成功挖出了k2’。然后他可以把微块m2中交易打包到自己的微块中企图获得这部分报酬。下面他面临了一个尴尬的处境,与此同时其他的矿工持续在m2的基础上正在进行挖矿,并且那条分支上的算力远大于自己这个分支上的算力。所以这个贪心矿工希望自己的这个分支成为主链,就必须在k2块被挖出前再挖出一个核心块,这样使自己的分支成为最重链,从而吸引更多的算力转移到自己的分支。
我们假设这个贪心领导者的算力占全网算力的比例是α,微块中的报酬分配给当前领导的比例是rleader,那么给下一个领导者的比例为1-rleader。所以我们可以得出下面的不等式:
发动攻击的这个矿工把交易打包到m2’中从而获得报酬rleader,并且他挖出下一个核心块k3的几率是α,成功的话可以获得的报酬是1-rleader。这两部分获得的报酬的总和应该小于遵守规则可以获得的奖励1-rleader。同理这里的α <1/4,所以最终得到rleader<43%。集合以上两种状况,最重选择让α=40%。
在Bitcoin-NG中,微块不需要挖矿就可以轻松快速的生成并发布。所以恶意领导可以通过把不同的状态发给不同的节点的方式对系统发动双花攻击(Double-Spending)。下图给出一个简单的例子:
A只拥有5个硬币,但是他同时将这5个硬币转给B和C两个人。恶意领导把这两笔交易打包到m3和m3’里并公开,这样造成了微块分叉。Bitcoin-NG为了防止这种恶意行为引入了一种叫做毒药交易的特殊交易。当前的领导者如果发现之前的领导的恶意行为,他可以把那个恶意领导造成分叉的另一个分支上的第一个区块头作为欺诈证明(Proof of Fraud)打包到自己生产的微块中并公开,这样那个恶意领导所得的全部报酬都会被收回。同时也会为“举报”的领导(打包毒性交易到自己的微块中的领导者)可以得到一定的补偿作为举报奖励。
但是必须在恶意矿工所获得的报酬可以使用前把毒性交易打包到区块中,否则毒性交易就无法生效。所以在Bitcoin-NG中有一个报酬审核期的概念,这个审核期是产生100个核心块所用的时间。换句话说,矿工挖矿所获得的奖励和生产微块所获得的交易费在100个时代后才可以使用。所以如果微块分叉(Double Spending)发生,必须在100个时代结束前发现并将毒性交易打包到微块中才能起到作用。并且针对某个恶意领导造成的一个分叉,只能有一个毒性交易生效。
论文的后半部分作者给出了5个作者自定义的性能评价参数。并且作者在模拟网络环境下进行了实验来测试Bitcoin-NG的性能。由于篇幅有限,在这篇文章中我就不做具体的分析了,感兴趣的朋友可以参考论文Bitcoin-NG: A Scalable Blockchain Protocol。
在这里我只是简单的介绍一下Bitcoin-NG的吞吐量和延迟的提升。论文作者没有在论文中明确的表明系统对吞吐量和延迟的提升,但是从其他相关论文和我们对于系统的了解可以大体得出结论。首先是吞吐量,普遍认为Bitcoin-NG对于吞吐量的提升有限,大概可以提升到比特币的30-60倍(主要取决于微块的大小和生产微块的速度),也就是说吞吐量峰值可以达到200-400tps。然后是延迟,理论上交易一旦被打包到微块中,交易就已经被确认了。但是通过之前的介绍可以看出系统中仍然存在核心块分叉的可能,所以即使交易被打包到区块中,交易所在的分支仍然存在被修剪掉的可能性。所以交易的最终确定还是需要等待几个核心块时间。换句话说,大多数交易的延迟是10多秒,但是对于重要的交易,要想确定交易百分百不会被修剪掉,则需要等待几个100秒。
不可否认Bitcoin-NG为区块链的扩容提供了一个新颖的思路,也某种程度上提升了比特币的性能。但是他对于性能的扩展有限,200-400tps仍然无法满足需求。下面提出一些我对于系统缺陷的见解仅供参考。
1)首先尽管系统把区块分成核心块和微块,使得微块的生成速度得到了很大的提升,进而导致交易被打包的速度大幅增加。但是核心块和微块仍然在同一条链上。这样导致系统不敢把微块生成的速度设置的过快,因为速度过快就会导致分叉更加的频繁,交易的确认时间延长。同时会有太多的时间浪费在不断的修剪分支,处理分叉上,挖矿算力也会被分散到多个分支上,系统的安全性会随之收到影响。
2)系统仍然是在工作量证明(Proof of Work)的基础上进行,系统中的所有矿工同时对一个块进行挖矿,这造成了很大的浪费,因为每一个时代只会产生一个领导者,那么其他没有当选的矿工的工作变得毫无意义,这不仅是对电力的浪费,更是对人力的一种浪费。
下一篇文章我将会对Byzcoin的共识机制进行介绍。Byzcoin使用了和Bitcoin-NG类似的思路,并对Bitcoin-NG的缺陷进行了更改。不仅对吞吐量有了进一步的提升,也大大的降低了交易延迟。我会尽快整理并发布下一篇文章。
接下来区块链扩容方案这个系列的文章中我会依次介绍目前主流的一些扩容方案包括Sidechain,Plasma,Algorand,sharding和stellar等。欢迎大家共同学习,共同探讨。
写在最后:如果觉得作者分享的文章对学习有帮助,麻烦关注一下作者,作者后续还会不断更新有关于区块链技术的文章。