上文中《比特币区块里都包含了什么?》,我们简单了解了比特币区块的结构、包含的内容。在区块的区块头中,有一个叫做merkle的东西:
上文没有讲得很细致。今天这篇文章就详细讲解一下merkle到底是什么。
我们先给出直接的定义:
merkle根值是将这个区块包含的所有交易经过多次【双重哈希算法+两两一组拼接】,最终求得的一个值。
哈希算法,之前也提到过,这里简单讲解一下,是一种加密算法,比特币世界中采用了SHA256的算法作为哈希算法,因为这个已经被证实是安全的了。我们在此连载中简化SHA256的拼写,简化为Hash,音读哈希。所以将某个交易(张三给李四支付10个比特币)用Hash算法加密之后会得到:
其中,右边64位的数字+字母,就是经过哈希算法加密之后的结果。
那么,双重哈希算法,意思就是经过两次哈希运算:
两两一组拼接,意思是经过双重哈希之后的结果,拼接在一起。
由于哈希算法结果较长,我们用简化版的结果来举例,假设目前某区块包含两笔交易,双重哈希之后:
在执行【两两一组拼接】时,简单将aaa和bbb拼一起:aaabbb,就完成拼接了。(实际的拼接,是需要将哈希结果解码为计算机语言、位移、拼接、编码、位移,最终才能得到结果。)
拼接前,所有交易假设有n个,拼接后,剩下的个数就为n/2个了。
多次【双重哈希算法+两两一组拼接】,就是多次执行上述操作,最开始总交易个数有n个,执行一次,还有n/2个,再执行一次,还有n/4个,最终执行到结果只有1个的时候停止,再对结果做两次哈希运算,得到的结果就是merkle根值了。
有人会问:假如只有3个交易,第3个交易没有可以拼接的交易了怎么办?
解决方案是,将第3个交易复制,自己和自己的哈希结果拼接:
还有人会问:如果6个交易拼接之后有3个结果,前2个结果可以拼接,最后一个结果和谁拼接?解决方案是,将最后一个复制,自己和自己拼接:
这样,无论有几个交易,最终都会形成这样的一个形状:
为什么叫做merkle树?就是由于它的计算过程很像一棵树。
如果当你看完这篇文章,仍有不懂的地方,请在下方留言,我会尽量解答你的困惑。
关注【通俗易懂区块链】,学懂区块链
领取专属 10元无门槛券
私享最新 技术干货