比特币区块内部探秘-merkle树根值

上文中《比特币区块里都包含了什么?》,我们简单了解了比特币区块的结构、包含的内容。在区块的区块头中,有一个叫做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树?就是由于它的计算过程很像一棵树。

如果当你看完这篇文章,仍有不懂的地方,请在下方留言,我会尽量解答你的困惑。

关注【通俗易懂区块链】,学懂区块链

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180130G17B0Q00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区