比特币挖礦科普專輯到這裡就要收尾了,經過前兩篇文章鋪墊,相信讀者朋友已經對比特币交易和區塊産生的過程有一定的認識。那麼它們跟“挖礦”有什麼關系呢?
我們知道,在比特币網絡中,有很多挖礦節點和礦工參與創建比特币新區塊。如果多個挖礦節點都創建了同一個高度的區塊,該判定誰的區塊更合法呢?比特币引入了PoW(Proof of Work)共識機制,通過挖礦的方式,來競争新區塊的記賬權。誰拿到新區塊的記賬權,它創建的新區塊就合法。挖礦的目的就是赢取記賬權,确認新區塊和交易。那麼挖礦節點和礦工是如何配合工作,完成挖礦的呢?
挖礦節點創建好預備區塊後,将預備區塊的區塊頭數據發送給礦工。礦工收到挖礦任務後,會遞增區塊頭中的随機數。每調整一次,就會按照比特币協議規定,用SHA256算法計算區塊頭的哈希值。如果區塊頭的哈希值大于目标哈希,就繼續變更随機數,直到區塊頭的哈希值小于或者等于目标哈希為止(或者挖礦節點發現新區塊已經由其他節點挖到,此時就會放棄原來挖礦任務,構造新的預備區塊,重新開始挖礦)。
當礦工找到可以使預備區塊頭哈希值小于目标哈希的随機數時,會立即向挖礦節點上報挖礦結果。挖礦節點接收到信息後,立刻按照礦工上報信息重組區塊,并驗證區塊。驗證無誤後,挖礦節點将新區塊保存到節點本地數據庫,并添加到節點本地區塊鍊上。
區塊的驗證信息包括:
區塊頭是否合法(區塊頭哈希≤TargetHash);
區塊頭的MerkleRoot哈希跟區塊中交易數據的MerkleRoot哈希是否一緻(驗證交易是否被篡改);
交易數據中第一筆是否為Coinbase交易;
區塊中每一筆交易是否合法等等。
挖礦節點将新區塊在本地保存後,同步向比特币網絡廣播挖礦結果。由于整個區塊的區塊體積較大,一般會先廣播新區塊的區塊頭。其他節點在接到廣播後,先驗證區塊頭信息,驗證通過後,節點會先在其本地的區塊索引庫中創建新區塊的索引。在接收到新區塊的全部信息後,節點驗證交易信息和區塊頭的MerkleRoot哈希,驗證通過後,節點将這些交易信息錄入新區塊,并延長本地區塊鍊。至此,新區塊的廣播和驗證完畢,挖礦節點開始下一個區塊的挖礦工作。
比特币挖礦這件事情,理論上任何人都可以自建比特币挖礦節點,參與挖礦,甚至可以通過手工驗證區塊頭哈希,破解挖礦任務,競争記賬權。
但博主在上一文中提到,按照當前的挖礦難度,即便使用現在的主流礦機,要找到一個符合比特币網絡要求的新區塊,理論上需要42年時間,而如果使用普通PC或者是手工計算,則需要上萬年甚至上百萬年。
因此,普通礦工單獨挖礦的經濟效益太低,可能挖到機器報廢,還掙不到一分錢。礦池就是在這種情況下應運而生的,大量礦工将自己的礦機接入礦池,從礦池的挖礦節點獲取挖礦任務,集體挖礦。這樣就可以在較短時間内挖到新區塊,獲得區塊獎勵,礦池按照挖礦過程中每個礦工的貢獻情況,分配挖礦收益,所有礦工都可以實時獲取挖礦收益,進行回本或者二次投資。
礦池和礦工一起挖礦的流程,一樣遵循上述過程。礦機通過網絡跟礦池通訊,請求挖礦任務,礦池将挖礦任務(包含區塊頭等數據)發送給礦機,礦機變更區塊頭的随機數,并驗證區塊哈希。符合挖礦任務TargetHash要求的随機數,将按照挖礦協議的格式提交給礦池,礦池給礦機提交的挖礦結果計算收益。
需要注意的是,如果給礦機下發的挖礦任務中,TargetHash是此時比特币網絡的TargetHash,那麼這個TargetHash太小,礦機基本不可能找到符合要求的随機數,提交挖礦結果,也就不可能獲得挖礦收益。
因此,礦池給礦機下發的挖礦任務中,有一個單獨的信息:初始挖礦難度。這是一個遠低于全網挖礦難度的數值,對應更大的TargetHash,在這個難度下,礦機可以在較短時間内找到符合要求的随機數,向礦池提交更多挖礦結果。
談及挖礦,總有一個繞不開的名詞:算力。到底什麼是算力呢?
算力,其實就是礦工驗證區塊頭哈希值的速度。礦機在獲得挖礦任務後,會按照挖礦任務的信息,遞增區塊頭的随機數,随機數每調整一次,就驗證一次區塊頭的哈希值。可以看到,限制礦機挖礦快慢的唯一一個因素就是它驗證區塊頭哈希值的快慢,因此有了“算力”這個指标。
目前,常規比特币礦機的算力單位是TH/s,它的意思,每秒鐘可以驗證1T次哈希,1T=1×103G=1×106M=1×109K=1×1012次。
有過挖礦經曆的朋友,都會發現,礦機本地顯示的算力跟礦池顯示的算力總是有差異。這是因為,礦機本地顯示的算力,是礦機驗證哈希的速度,它隻跟礦機的性能有關,不管有沒有找到符合挖礦任務要求的随機數,礦機本地算力都一直存在。而礦機在礦池顯示的算力則不同,它是礦池按照礦機實際提交的挖礦結果計算出來的,如果礦機的運氣較差,在較長時間内都沒有找到符合挖礦任務要求的随機數,無法向礦池提交挖礦結果,礦機在礦池的算力就會降低。
但時間拉長後,運氣對礦機破解挖礦任務的影響會降低,礦機較長時間的礦池平均算力,跟礦機本地算力相差不大。
以上是比特币挖礦的基礎知識,如果能讀懂這三篇文章,相信讀者朋友對比特币挖礦會有一個初步的認識。如果想要跟博主交流探讨更多挖礦方面的問題,歡迎關注“閑話挖礦”微信公衆号,同時也能更及時的了解博主更新的挖礦知識。
文中涉及的幾個知識點:
區塊高度:又叫Block Height,相當于區塊的編号,它的值等于區塊鍊中這個區塊之前所有區塊的數量。區塊鍊的第一個區塊是創世區塊,區塊高度為0,第二個區塊的區塊高度為1,第三個區塊的區塊高度為2,以此類推。區塊鍊中區塊的總數,即為最新區塊的區塊高度 1。
PoW:全稱為Proof of Work,中文名稱為工作量證明。是比特币網絡使用的一種用于解決比特币新區塊确權問題的方法。在比特币網絡中,人人都可以參與新區塊的創建工作,PoW機制規定,誰能夠在最短時間内找到一個區塊頭哈希值小于比特币網絡指定的TargetHash的預備新區塊,誰就擁有正式新區塊的記賬權。
記賬權:比特币的區塊鍊,實質上是一個鍊式的大賬本,鍊上的每一個區塊,都是一本賬,上邊記錄了發生在區塊鍊上的比特币交易信息。因此,我們把創建新區塊的過程看作記賬的過程。記賬權,顧名思義為記錄交易賬本的權利,也即在比特币區塊鍊上創建正式新區塊的權利。
參考資料:
,
挖礦的實現
Block Height
工作量證明
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!