昨天写到了什么是1确认?为什么1确认的交易并不安全?。引出了下面几个问题:
· 为什么张三抢夺了20015号区块的权力,他的20014号区块就生效了?
·比特币机制到底安不安全?
· 几个确认才能真正保证安全性?
·美洲收到的都是“红色矿工牌”的20014号区块,欧洲收到的都是“张三牌”的20014号区块,再新增20015、20016之后,那岂不是主链都变得不一致、不一样了?为什么说主链都是一样的呢?
今天我们继续深入了解一下比特币的机制,也方便理解比特币机制的不安全程度到底有多大。
其实,区块链这个名词会对想深入了解的读者产生误解,因为大多数人理解的区块链,就是一条单链:
大家的简单理解是:全球矿工每个人都存储这样一条链,有新的就往上补就可以了。
这样虽然简单,但是一点都不现实。
如什么是1确认?为什么1确认的交易并不安全?文章中所述,现实中确实能存在同一时间内有2块有效的20014号区块:红色矿工的20014号、张三的20014号。
假如区块链只是一条链,那么,先接收到红色矿工20014号区块的矿工,就不接收张三的20014号区块了?反过来说,先接收到张三的20014号区块的矿工,就不接收红色矿工的20014号区块了?
如果真是这样的话,那么每个矿工自己所保存的区块链,可就完全不一样的了:
需要注意的是,不同矿工挖出的相同代号的区块,里面涵盖的信息完全不同,包括的交易记录也完全不同。比如:
矿工A保存的区块链中,保存了矿工E挖出来的20011号区块,这个区块里保存了a和b的交易。
但矿工C保存的区块链的20011号区块是矿工G生成的,G的20011号区块中并没有保存a和b的交易。
这就导致了如果钱包A采用了矿工A的区块链的信息,那么钱包A会认为a和b交易完成了;钱包B采用了矿工C的区块链信息,那么钱包B会认为a和b并没有交易。这样的话毫无安全可言。
于是,为了解决这个情况,区块链由单链变为了分叉链。
在讲分叉链之前,我们需要了解一下这个事情:由同一个矿工产出的同一个代号的区块,一定不会连在多个不同的区块之后。
比如在上图里,矿工B保存的区块链中:矿工D产出的20012号区块,只连在了矿工C挖出的20011号区块之后,不会连在其他矿工挖出的20011号区块中。
这个原因是因为,区块20012如果想连在区块20011后面,必须要保证区块20012里所包含的“前一个区块id”的信息,要与20011号区块中的id号保持一致。
只有这样才能连在一起。
好了,现在可以讲分叉链了。
全球各个矿工在收到由不同矿工产生的相同代号区块时,并不是丢弃掉,而是全部保存在自己维护的区块链上:
任何时候都会出现2块甚至多块相同代号的区块,所以比特币的机制规定全球各个矿工都要以这种方式存储,以保证全球矿工的区块链都是相同的。
但,由于中本聪的设计机制,需要在这分叉链中确定一条链为主链(最终确认的主链才是一条单链),并给这些将区块添加到主链的矿工奖励比特币(“永不增发”的2100万枚比特币现在在哪?)。于是引入了“难度”的机制(在比特币挖矿为什么10分钟挖出一个区块?文章中稍有提及)。具体是如何从分叉链中选取的其中一条作为主链的?明天将详细讲到。
如果当你看完这篇文章,仍有不懂的地方,请在下方留言,我会尽量解答你的困惑。
关注【通俗易懂区块链】,学懂区块链
领取专属 10元无门槛券
私享最新 技术干货