百家乐官网 (中国)有限公司官网

澎湃Logo
下載客戶端

登錄

  • +1

Comunion 區(qū)塊鏈深度學習系列|哈希算法的應用

2020-08-13 11:15
來源:澎湃新聞·澎湃號·湃客
字號

本系列內容包含:基本概念及原理、密碼學、共識算法、錢包及節(jié)點原理、挖礦原理及實現(xiàn)。

挖礦

以比特幣網絡為例,比特幣挖礦主要使用到的算法是SHA-256,其具體流程參見下圖。

我們從上往下進行分析:

第一層是:n Version(版本號);

第二層是:hash Preb Block(前一個區(qū)塊的哈希);

第三層是:hash Merkle Root(交易Merkle樹根),

第四層是:n Time(時間戳);

第五層是:n Bits(難度值);

第六層是:n Nonce(隨機數(shù));

第七層是:Hash(哈希函數(shù))。

里面的n代表連續(xù)0的個數(shù),該值要小于當前區(qū)塊難度目標值m,挖到塊的條件是前n個比特位全部為0,n越大,難度越大。假設最低難度對應最大目標值為M,則區(qū)塊難度為:M/m

看過前面課程的朋友應該會有印象,這些全部是區(qū)塊頭中的數(shù)據(jù)字段。

再來看左邊,我們分析一下為什么其中有些是固定而有些是可變的。

1.版本號和前一個區(qū)塊哈希是固定的,以比特幣為例,假設當前比特幣區(qū)塊高度為N,如果某人想挖接下來N+1區(qū)塊的話,那么這個時候版本號必須是固定的,前一個區(qū)塊的哈希必須也是固定的。因為在不存在分叉的情況下,當前區(qū)塊包含上一個區(qū)塊的哈希值;

也就是N-1區(qū)塊的哈希值加上N區(qū)塊數(shù)據(jù)算出N區(qū)塊哈希值,然后將N區(qū)塊哈希值當成N+1區(qū)塊的的前一區(qū)塊哈希值。這里有點繞,希望大家多理解一下;

2.交易Merkle根是可變的,為什么說可變呢?因為在挖礦的時候,肯定會準備一個打包區(qū)塊,打包區(qū)塊形成的時候,礦工會根據(jù)自己的需求或根據(jù)利益算法,將交易打包進去,最后整理成一個Merkle根;

3.時間戳是可變的,挖礦有個時間范圍,在這個時間范圍內挖出的礦都為有效,所以在有效時間內的時間是可以任意調節(jié)的;

4.難度值在一定周期內是固定的,會隨著周期的改變而變化;

5.Nonce是可變的,這里就不展開講了,忘記的朋友可以翻閱前面的講解。

在挖礦的時候,到Nonce的時候,由于時間戳和Merkle根都已經經過計算固定了,這時只需要改變Nonce就可以了。此時可以把這7個數(shù)據(jù)看成一個整體,前面6個數(shù)據(jù)是X,把X放在哈希函數(shù)里面,會出來一個值,比如說Y值。

由于比特幣網絡里使用的哈希算法是SHA-256,當Y值出來之后,就會得到一個256個由0和1組成的字符串。這個字符串出來之后,它會和X里面的難度值比較大小。

每計算一次,也就是通過了一個Nonce,就會產生一個Y值,Y值會和難度值比較大小,如果Y值小于難度值,此時就找到了一個有效的Nonce,礦也就挖出來了。

生成地址

地址的生成中也用到了哈希算法。從下圖可以看到從公鑰到比特幣地址生成的流程。

第一層:生成公鑰(如何生成會在后續(xù)課程解答);

第二層:兩層哈希算法,SHA-265和RIPMD-160(常稱為雙哈希或Hash160);

第三層:然后雙層哈希計算,會產生公鑰哈希;

第四層:Base58Check編碼(在Base58編碼基礎上的改良);

第五層:經過編碼,得到一個編碼串,這個編碼串就是公鑰哈希即比特幣地址。

形成 Merkle tree 和交易Hash

在默克樹樹結構和形成交易哈希里面也使用到了哈希算法。

上圖的默克樹中,最底層有4個葉子節(jié)點,最左邊H A下面有個Hash(TxA),意思是:Tx表示交易,A表示交易編號。

假設現(xiàn)在使用的哈希算法是SHA-256,那么交易產生時,會對HA、HB分別進行哈希計算,會分別得到2個由256個0和1組成的字符串。同理,HC、HD也會得到相應的字符串,這樣四個交易會形成總的默克爾根。

區(qū)塊鏈(哈希鏈)

大家都知道在區(qū)塊鏈中,每個區(qū)塊都是一環(huán)套一環(huán)銜接上去的,就像一個鏈條一樣。我們通過下面的圖片,具體分析一下。

從圖中可以看出鏈的順序是從下往上增長的,最下面塊的高度是277314,這個區(qū)塊里面包含上一個區(qū)塊的哈希值:0000…0bdf(紅框1),這里的0000…0bdf是上一個區(qū)塊(277312)區(qū)塊頭的哈希值。

同理,277315區(qū)塊里面包含的 上一區(qū)塊頭哈希值:0000…2249(紅框3),也是區(qū)塊277314的區(qū)塊頭哈希值,即:0000…2249(紅框2)。同理277316區(qū)塊也是這樣的情況,這也是我們第一節(jié)希望大家多理解的問題。

這樣的情況就保證了任何人可以從某一個區(qū)塊中,找到這個區(qū)塊里面包含的 上一區(qū)塊的哈希值,也就是其父區(qū)塊。

現(xiàn)在我們討論的問題都是針對于區(qū)塊鏈沒有分叉的一個情況,到后面我們詳細分析區(qū)塊鏈分叉之后情況又是怎樣的。

通過這三個區(qū)塊我們能發(fā)現(xiàn),從某種程度上來說區(qū)塊鏈就是一個哈希鏈。最新產生的區(qū)塊通過哈希值指向上一個區(qū)塊,上一個區(qū)塊在指向上上一個區(qū)塊……一直指向創(chuàng)世區(qū)塊。通過這個關系,這些區(qū)塊形成了鏈條,也就是我們常說的區(qū)塊鏈。

這是哈希算法在區(qū)塊鏈中常用到的具體應用,大家可以預先想一下,為什么區(qū)塊鏈中會使用哈希算法,而不是其他算法呢?后面的課程我們會給大家進行解答。

下節(jié)預告:什么是哈希

    本文為澎湃號作者或機構在澎湃新聞上傳并發(fā)布,僅代表該作者或機構觀點,不代表澎湃新聞的觀點或立場,澎湃新聞僅提供信息發(fā)布平臺。申請澎湃號請用電腦訪問http://renzheng.thepaper.cn。

    +1
    收藏
    我要舉報
            查看更多

            掃碼下載澎湃新聞客戶端

            滬ICP備14003370號

            滬公網安備31010602000299號

            互聯(lián)網新聞信息服務許可證:31120170006

            增值電信業(yè)務經營許可證:滬B2-2017116

            ? 2014-2025 上海東方報業(yè)有限公司

            反饋
            百家乐怎样概率大| 大发888大发888娱乐游戏| 雁荡棋牌游戏| 百家乐官网的路图片| 百家乐官网游戏源码手机| 百家乐娱乐网官网网| 百家乐官网d博彩论坛| 百家乐游戏群号| 博狗娱乐城注册| 澳门百家乐出千| 牛牛现金棋牌| 香港百家乐赌场| 金尊国际娱乐城| 广州百家乐赌博机| 百家乐官网心得分享| 励骏会百家乐的玩法技巧和规则| 百家乐官网庄闲比率| 游戏机百家乐官网作弊| 捷豹百家乐娱乐城| 百家乐官网送现金200| 利来博彩通| 百家乐下路教学| 百家乐官网试玩全讯网2| 大发888如何下载| 千亿百家乐的玩法技巧和规则 | 百家乐官网玩法教学视频| 香港六合彩报| 全讯网六仔开奖| 八运24山阴阳| 网上百家乐官网骗局| 必博百家乐官网游戏| 新澳博国际娱乐| 黄金百家乐的玩法技巧和规则| 百家乐官网游戏平台有哪些哪家的口碑最好 | 墓地附近做生意风水 | 永宁县| 威尼斯人娱乐平台开户| 百家乐投注网出租| 真人百家乐最高赌注| 百家乐连线游戏下载| 怎么玩百家乐官网呀|