在了解了如何生成主链之后,我们就可以轻松地了解为什么确认数少的交易并不安全了。
普通矿工A按照主链的生成规则不停歇地产生区块或收集区块,直到第20013号区块结束之后,开始计算第20014号区块的过程中,矿工A存储的区块链如下:
此时,假设张三刚支付给李四10个比特币,张三动了歪心思,想再花一次这10个币,于是张三切换为矿工这个身份之后,立即开始计算20014号数学题,并且在自己创建的这个20014号区块中并不把他和李四的交易打包进来。(详见什么是1确认?为什么1确认的交易并不安全?)
在矿工A计算20014号数学题时,突然收到了来自红色矿工的20014号红色区块。红色矿工将张三和李四的交易打包到了红色20014号区块中。查看了区块信息,红色矿工的20014号区块的父区块是白色20013号区块,于是矿工A将红色20014号区块链接到白色20013号区块后面:
此时矿工A马上放弃自己计算的第20014号数学题,并准备开始计算第20015号数学题时,张三的带着歪心思的20014号浅绿色区块、以及其它矿工B的20014号深绿色区块,两个区块也突然传过来了,判断了父区块后,都链接在了白色20010号区块后面:
由于共识的主链选择规则,取最先达到最大难度的那条链作为主链,所以矿工A认为此时主链仍然是“白-红”链:
于是矿工A准备开始以红色20014号区块为父区块,创建20015号区块并计算数学题。在计算的过程中,矿工A发现他突然收到了第20015号的黄色区块,查看父区块后发现是浅绿色20014号区块后面的,于是将此黄色区块链接在了浅绿色后面:
于是,此时“白-浅绿-黄”成为了主链:
于是,此时,全球矿工默认主链从“白-红”链转变为“白-浅绿-黄”链!
所以此时,包含了张三和李四的交易的区块,由原先的被全网矿工认可,变为了不被认可!(原先包含在红色区块中,现在的新主链里不包含红色区块了。)
之前我们了解过什么是1确认,即交易所在的有效区块,后续如果没有区块了,则为1确认;如果所在有效区块后面有n个区块,则为n+1个确认。
所以如果张三所用的钱包是1确认就认为合法交易,并且此时李四用的钱包也是同一款钱包,则在红色区块添加到主链并被认为“白-红”链为主链后,钱包就认为此交易生效了!于是李四自然而然放心地就给张三转账了!
但如果等到20015号区块出来之后,钱包发现主链变更为“白-浅绿-黄”链,则发现张三和李四的交易并不存在于主链上!于是又判定这笔交易无效了!于是张三又多了10个比特币!最终结果是李四付了款,又没得到比特币!
引发这个结果的原因,就是用户所用的钱包在确认数较少的情况下就确认并完成了交易。
那么比特币交易是不是都不安全?
实际并不是的,实际上,我们只要等确认数为6,也就是交易所在区块的后面又连接了5个区块的话,就可以保证交易所在的区块肯定是主链,不会再更改了。
所以,如果钱包的确认数在6以上才认可交易,那么你使用的这个钱包,从交易角度来说就是安全的了。
如果当你看完这篇文章,仍有不懂的地方,请在下方留言,我会尽量解答你的困惑。
关注【通俗易懂区块链】,学懂区块链
领取专属 10元无门槛券
私享最新 技术干货