挖礦和錢包原理

買賣虛擬貨幣

本系列內容包含:基本概念及原理、密碼學、共識演算法、錢包及節點原理、挖礦原理及實現。

挖礦

構成區塊頭的因素都產生以後,礦工會在Nonce中隨機填入一個值,比如下圖中Nonce=14202,接著對區塊頭進行雜湊運算,會產生一個雜湊值,這個雜湊值會和區塊頭中的難度值進行比較。

當計算雜湊比難度值大的時候,系統就會判定不符合要求,此時需要返回繼續增加Nonce值,重新計算雜湊值,以此不斷重複迴圈計算,直到計算雜湊小於難度值,才會進行下一步,這就是挖出了礦。

挖出礦之後,系統會將Nonce值固定到區塊頭中,並將交易廣播到全網。

其實這裡有一個問題是,既然第一個Nonce值不行的話,那為什麼所有的礦工一般都是透過字徵法,也就是一個一個數字相加的方式去運算呢?

有的人會認為,既然Nonce值是隨機的,那為什麼填入的時候不能隨機填入呢,比如說1不行,就填100;100不行,就填500;500不行,就填2000……這樣概率是不是應該更大一些?

其實並不會,因為雜湊運算的時候,即使Nonce值只改變了一個數字,但是其雜湊計算結果的區別卻非常大。

也就是說,隨機碰撞去試Nonce值的計算雜湊概率並不會比順序嘗試的概率大,並且還會增加礦機設計的難度。

所以,現在挖礦一般都是透過給定計算範圍的方式去計算Nonce值。

比如上圖中,14202不行,那就14203……一直到12405,這時區塊雜湊小於難度值,這時也就是挖出了礦,找到了可用區塊,最後將結果廣播給全網。

需要說明的是,礦工挖出符合難度要求的區塊之後,會將這個區塊廣播給網路中的其他節點,其他節點會驗證新收到的區塊是否符合難度要求。並且會將區塊中包含的所有交易重新驗證一遍,包括交易是否合法,交易輸入和簽名是否合法等。

如果驗證沒有問題,就會將這個區塊新增到自己本地節點的賬簿中,也就是填到鏈上,此時一筆交易完成。

數字錢包

錢包最重要的是私鑰,因為有私鑰就可以得到交易地址,並且可以透過鏈上去查詢到與交易地址相關的所有記錄以及餘額。

如果私鑰丟失或者被盜了,那這個錢包就再也找不回來了。

一個錢包中也可以有多個私鑰,這取決於選用錢包的不同。

我們分析一些不同種類的錢包

不確定性錢包,這種錢包中的每個私鑰之間沒有關聯性。備份錢包的時候,需要對每個私鑰進行備份。

由於私鑰是由很長的一串無序十六進位制字串構成的,只備份一個就很容易出錯,如果再備份很多個,其這個工作量是巨大的,並且人工備份的過程中出錯的概率也會上升,一旦備份丟失或者人工記錄錯誤,這個錢包就無法找回。

不確定性錢包由於其管理難度的原因,往往容量是有限的,即私鑰和地址的產生是有限的。

確定性錢包,這種錢包中所有的私鑰是由一個主私鑰按照一定規則衍生得出。備份錢包的時候,只需要把主私鑰備份下來,並且把衍生規則記錄下來。

這種錢包可以很順利的透過主私鑰種子,拿回錢包中包含的所有私鑰和地址。其中每一個私鑰是一個根,每個私鑰管理下一個,當一個私鑰洩露的話,只要知道規則,相連的一串私鑰都會洩露,這也導致確定性錢包存在一定的不安全性。

錢包備份的時候,不是十六進位制字串的形式,而是採用12個或者24個助記詞(單詞或漢字)的形式,展現給使用者,使用者只需要備份這些助記詞就可以了。當在一個新的錢包中重新匯入備份的助記詞,就可以找回之前使用的錢包。

由於確定性錢包這種確定性的關係,所以可以衍生出無數的私鑰,所以錢包中的地址也是無數多個的。

分層確定性錢包,這種所有私鑰由一個主私鑰按照一定規則衍生得出,但是會分裂成很多子私鑰,子私鑰分裂成孫私鑰,以此類推會產生無限多私鑰。這樣即使某一個子私鑰洩露了,也不會影響其他子私鑰的安全。

這種錢包是現在實際應用最多的,可以用一個主私鑰管理整個錢包,然後不同的子私鑰管理不同的數字貨幣。即使某一個鏈上的資產洩露了,也不會影響其他錢包的資產。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;