上图说明:
区块N:前一个区块的哈希值
区块N+1:本区块的哈希值
哈希值组合#ABCD:梅克莱根(也叫:默克树哈希值)
哈希值组合#ABCD的具体生成过程,请参考文章:“默克尔哈希树”(点开链接)
新区块生成过程:
1、全节点广播交易并监视全网交易,通过验证的交易进入内存池(来不及验证的加入排队等待、支付更多手续费的交易可以提高被验证的优先级),并更新交易数据的“默克树哈希值”。
2、时间戳更新。
3、解题:用不同的随机数进行哈希计算,直至找到符合目标值特征的随机数(苦逼的“挖矿”过程)。
4、打包区块,先装入区块元信息,再装交易数据:
5、新区块对外播报(矿工广播)
6、其他矿工节点验证通过后,新区块加入区块链,主链高度增加一,矿工继续新区块后面“挖矿”。这里讲一则对话:
一则关于乙同学遭遇“比特币从链”的故事:
旁白:提示乙同学,刚解出的区块题是个多解题,你和甲同学同时给出了合理答案,但甲同学的答案率先得到了51%同学们的承认,现在可以告诉你,你得到的区块是从链区块,其他同学已经算下一题了,没工夫和你掰扯了。请尽快放弃手头计算......
乙:真不走运!(把手中的草稿丢弃,拿出一张白纸从甲的区块后面重新计算起来)
旁白:喂,等等!乙同学你算出的区块不要了嘛?
乙:哎,算我倒霉,虽然我也解对了题,可是没有最快被51%的同学们承认,只能做从链,而且没奖励。
旁白:你人缘差啊!
乙:说的是啊,我准备搬家了,搬进大社区和其他矿工住的近一点、生活在一起,算是大家相互都有个照应。
上面的故事是一种链分叉的情况,那么遇到分叉,根据什么原则判断最佳区块(最有可能成为主链区块)的呢?
1、不同高度的分支,总是接受最高(即最长)的那条分支。
2、相同高度的,接受难度最大的。
3、高度相同且难度一致的,接受时间最早的。
4、若所有均相同,则按照网络接受的顺序。
下图为链分叉:
最后感谢区块链研习社higer社长长期耐心的解惑,也希望更多人加入区块链研习社、一起学习,关注微信公众号:李白话日常