区块链深度学习系列|密码学基础之哈希算法的应用
本系列内容包含: 基本概念及原理、密码学、共识算法、钱包及节点原理、挖矿原理及实现。
挖矿
以比特币网络为例,比特币挖矿主要使用到的算法是SHA-256,其具体流程参见下图。
我们从上往下进行分析:
第一层是:n Version(版本号);
第二层是:hash Preb Block(前一个区块的哈希);
第三层是:hash Merkle Root(交易Merkle树根),
第四层是:n Time(时间戳);
第五层是:n Bits(难度值);
第六层是:n Nonce(随机数);
第七层是:Hash(哈希函数)。
里面的n代表连续0的个数,该值要小于当前区块难度目标值m,挖到块的条件是前n个比特位全部为0,n越大,难度越大。假设最低难度对应最大目标值为M,则区块难度为:M/m
看过前面课程的朋友应该会有印象,这些全部是区块头中的数据字段。
再来看左边,我们分析一下为什么其中有些是固定而有些是可变的。
1.版本号和前一个区块哈希是固定的,以比特币为例,假设当前比特币区块高度为N,如果某人想挖接下来N+1区块的话,那么这个时候版本号必须是固定的,前一个区块的哈希必须也是固定的。因为在不存在分叉的情况下,当前区块包含上一个区块的哈希值;
也就是N-1区块的哈希值加上N区块数据算出N区块哈希值,然后將N区块哈希值当成N+1区块的的前一区块哈希值。这里有点绕,希望大家多理解一下;
2.交易Merkle根是可变的,为什么说可变呢?因为在挖矿的时候,肯定会准备一个打包区块,打包区块形成的时候,矿工会根据自己的需求或根据利益算法,将交易打包进去,最后整理成一个Merkle根;
3.时间戳是可变的,挖矿有个时间范围,在这个时间范围内挖出的矿都为有效,所以在有效时间内的时间是可以任意调节的;
4.难度值在一定周期内是固定的,会随着周期的改变而变化;
5.Nonce是可变的,这里就不展开讲了,忘记的朋友可以翻阅前面的讲解。
在挖矿的时候,到Nonce的时候,由于时间戳和Merkle根都已经经过计算固定了,这时只需要改变Nonce就可以了。此时可以把这7个数据看成一个整体,前面6个数据是X,把X放在哈希函数里面,会出来一个值,比如说Y值。
由于比特币网络里使用的哈希算法是SHA-256,当Y值出来之后,就会得到一个256个由0和1组成的字符串。这个字符串出来之后,它会和X里面的难度值比较大小。
每计算一次,也就是通过了一个Nonce,就会产生一个Y值,Y值会和难度值比较大小,如果Y值小于难度值,此时就找到了一个有效的Nonce,矿也就挖出来了。
生成地址
地址的生成中也用到了哈希算法。从下图可以看到从公钥到比特币地址生成的流程。
第一层:生成公钥(如何生成会在后续课程解答);
第二层:两层哈希算法,SHA-265和RIPMD-160(常称为双哈希或Hash160);
第三层:然后双层哈希计算,会产生公钥哈希;
第四层:Base58Check编码(在Base58编码基础上的改良);
第五层:经过编码,得到一个编码串,这个编码串就是公钥哈希即比特币地址。
形成 Merkle tree 和交易Hash
在默克树树结构和形成交易哈希里面也使用到了哈希算法。
上图的默克树中,最底层有4个叶子节点,最左边H A下面有个Hash(TxA),意思是:Tx表示交易,A表示交易编号。
假设现在使用的哈希算法是SHA-256,那么交易产生时,会对HA、HB分别进行哈希计算,会分别得到2个由256个0和1组成的字符串。同理,HC、HD也会得到相应的字符串,这样四个交易会形成总的默克尔根。
区块链(哈希链)
大家都知道在区块链中,每个区块都是一环套一环衔接上去的,就像一个链条一样。我们通过下面的图片,具体分析一下。
从图中可以看出链的顺序是从下往上增长的,最下面块的高度是277314,这个区块里面包含上一个区块的哈希值:0000…0bdf(红框1),这里的0000…0bdf是上一个区块(277312)区块头的哈希值。
同理,277315区块里面包含的 上一区块头哈希值:0000…2249(红框3),也是区块277314的区块头哈希值,即:0000…2249(红框2)。同理277316区块也是这样的情况,这也是我们第一节希望大家多理解的问题。
这样的情况就保证了任何人可以从某一个区块中,找到这个区块里面包含的 上一区块的哈希值,也就是其父区块。
现在我们讨论的问题都是针对于区块链没有分叉的一个情况,到后面我们详细分析区块链分叉之后情况又是怎样的。
通过这三个区块我们能发现,从某种程度上来说区块链就是一个哈希链。最新产生的区块通过哈希值指向上一个区块,上一个区块在指向上上一个区块……一直指向创世区块。通过这个关系,这些区块形成了链条,也就是我们常说的区块链。
这是哈希算法在区块链中常用到的具体应用,大家可以预先想一下,为什么区块链中会使用哈希算法,而不是其他算法呢?后面的课程我们会给大家进行解答。
下节预告: 什么是哈希
Avalanche Price Breaks February Low — $20.07 In Danger As ETF Delay Triggers Bears
The post Avalanche Price Breaks February Low — $20.07 In Danger As ETF Delay Triggers Bears appeared...
Ethereum Price Forecast: Pullback Sparks Bullish Sentiment and Whale Action
The post Ethereum Price Forecast: Pullback Sparks Bullish Sentiment and Whale Action appeared first ...
Crypto’s Satoshi Nakamoto Overtakes Bill Gates as Bitcoin Hits New Highs
The post Crypto’s Satoshi Nakamoto Overtakes Bill Gates as Bitcoin Hits New Highs appeared first on ...