Comunion 区块链深度学习系列|哈希算法的应用
本系列包括:基本概念和原理、密码学、共识算法、钱包和节点原理、挖掘原理和实现。
挖矿
以比特币网络为例。SHA-256是比特币挖矿中使用的主要算法,其具体过程如下图所示。
我们从上到下进行分析:
第一层是:n版本(版本号);
第二层是:hash preblock(前一个块的hash);
第三层是:hash Merkle Root(交易Merkle Root),
第四层是:n Time(时间戳);
第五层是:n位(难度值);
第六层是:n Nonce(随机数);
第七层是:Hash(哈希函数)。
n代表连续零的数量,小于当前区块难度目标值m,挖掘区块的条件是前n位全部为零,n越大难度越大。假设最低难度对应的最大目标值为m,则区块难度为m/m。
看过前面课程的朋友应该有印象,这些都是块头中的数据字段。
再看左边,我们来分析一下为什么有些是固定的,有些是可变的。
1的版本号。和前一块的散列是固定的。以比特币为例,假设当前比特币区块高度为N,如果有人想要挖掘下一个N+ 1区块,那么此时版本号必须固定,并且前一个区块的hash也必须固定。因为在没有分叉的情况下,当前块包含前一个块的哈希值;
即N- 1 block的哈希值与n block的数据相加计算出n block的哈希值,然后将n block的哈希值视为N+ 1 block的上一个哈希值。这里有一点绕路,希望大家能多理解;
2.交易Merkle根是可变的。为什么是可变的?因为挖矿的时候肯定会准备一个包块。当打包块形成时,矿工将根据自己的需求或根据利息算法对交易进行打包,并最终将其组织成Merkle根;
3.时间戳是可变的,并且存在挖掘的时间范围。在这个时间范围内挖的矿都是有效的,所以有效时间内的时间可以随意调整;
4.难度值在一定时期内是固定的,会随着时期的变化而变化;
5.Nonce是可变的,所以我不会在这里谈论它。忘了的朋友可以看看之前的解释。
在挖掘时,当涉及到Nonce时,由于时间戳和Merkle根已通过计算固定,因此只需更改Nonce。此时,这七项数据可以视为一个整体。前六个数据是X .如果你把X放入哈希函数中,就会得出一个值,比如Y。
由于比特币网络中使用的哈希算法是SHA-256,当Y的值出来时,将获得一个由256个0和1组成的字符串。这个字符串出来后,将与x中的难度值进行比较。
每次计算,即传递一个Nonce,都会产生一个y值,该值将大于难度值。如果y值小于难度值,此时将找到一个有效的Nonce,并且将挖矿。
生成地址
哈希算法也用于地址生成。从下图中,您可以看到从公钥生成比特币地址的过程。【比特币为什么会出现】
第一层:生成公钥(如何生成将在后面的课程中回答);
第二层:两层哈希算法,SHA-265和RIPMD- 160(通常称为双重哈希或哈希160);
第三层:然后双层哈希计算会生成公钥哈希;
第四层:Base58Check编码(在Base58编码的基础上改进);
第五层:编码后得到一个编码字符串,这个字符串就是公钥hash,也就是比特币地址。
形成Merkle树和事务散列
哈希算法也用于默克树结构和事务哈希。
在上面的Merck树中,底部有四个叶节点,最左边的H A下面有一个Hash(TxA),这意味着:Tx代表transaction,A代表transaction number。
假设现在使用的哈希算法是SHA-256,则在生成交易时,将分别对HA和HB进行哈希运算,分别得到由256个零和1组成的两个字符串。同样,HC和HD也将获得相应的字符串,这样这四个交易将形成总的默克尔根。
区块链(哈希链)
每个人都知道在区块链,每个街区都是一个接一个连接起来的,就像一条链子。让我们通过下面的图片来详细分析一下。
从图中可以看出,链的顺序是从下到上递增的。最低块的高度是2773 14,这个块包含前一个块的哈希值:0000…0bdf(红框1),其中0000…0bdf是前一个块(2773 12)。
同样,块2773 15: 0000…2249(红框3)中包含的前一个块头哈希值也是块2773 14的块头哈希值,即:0000…2249(红框2)。同样,在block 2773 16中也是这种情况,这也是我们希望您在第一节中能够更多了解的问题。
这种情况可以确保任何人都可以找到该块中包含的前一个块【比特币报价】的哈希值,即其父块。
我们现在讨论的问题都是针对区块链没有分叉的情况。稍后,我们将详细分析区块链分叉后会发生什么。
通过这三个区块,我们可以发现区块链在某种程度上是一个哈希链。新生成的块通过哈希值指向前一个块,前一个块指向前一个块...一直到创作区。通过这种关系,这些区块形成了一条链,也就是我们常说的区块链。
这是区块链常用的哈希算法的一个具体应用。你可以事先想一想,为什么在区块链使用哈希算法而不是其他算法?我们将在后面的课程中为您解答。
下一节预览:什么是哈希?
注册有任何问题请添加 微信:MVIP619 拉你进入群
打开微信扫一扫
添加客服
进入交流群
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。