一文讓你看懂比特幣是如何挖礦的
對於比特幣來說,消耗的資源是 CPU 計算時間和電力。
比特幣挖礦可以簡單概述如下:
人們通過在一個被稱為 "工作量證明" (PoW) 的過程中應用計算能力來競爭獲得比特幣獎勵。這一過程之所以被稱為“工作量證明”,是因為只有那些證明投入了足夠資源(工作)的參與者(礦工)才有機會贏得獎勵。
大約每 10 分鐘,就會有一位勝出的“礦工”獲得獎勵。
獎勵是雙重的:(1)“區塊獎勵”,即新發行的比特幣。區塊獎勵目前設定為 6.25 個比特幣(但會在 2024 年 5 月初減半,然後在四年後再減半,以此類推);(2) 與當前區塊中所有交易相關的各種手續費。
具體來說,比特幣挖礦的過程如下:
新交易向所有節點廣播。
每個節點將新交易收集到一個區塊。
每個節點為它的區塊尋找工作量證明。
當一個節點找到了工作量證明,就向所有節點廣播這個區塊。
節點只有在區塊內所有交易都是有效的且之前沒有被消費的情況下接受這個區塊。
節點通過使用當前區塊的哈希值作為上一個哈希值在鏈中創建下一個區塊的方式表示對當前區塊的接受。
比特幣中的工作量證明
什么是工作量證明?工作量證明是指,證明自己做了一定的工作量。例如,在駕校學習了50個小時。而其他人可以簡單地驗證該工作量。例如,出示駕照,表示自己確實在駕校學習了一段時間:
比特幣的工作量證明需要歸結為計算機計算,也就是數學問題。如何構造一個數學問題來實現工作量證明?我們來看一個簡單的例子。
假設某個學校的一個班裏,只有一個女生叫小紅,其他都是男生。每個男生都想約小紅看電影,但是,能實現愿望的只能有一個男生。到底選哪個男生呢?本着公平原則,小紅需要考察每個男生的誠意,考察的方法是,出一道數學題,比如說解方程,誰第一個解出這個方程,誰就有資格陪小紅看電影。因為解高次方程沒有固定的公式,需要進行大量的計算,才能算出正確的結果,這個計算過程就需要一定的工作量。假設小明率先計算出了結果x=2.5,小紅可以簡單地驗證這個結果是否正確。
可以看出,解方程很困難,但是,驗證結果卻比較簡單。所以,一個有效的工作量證明在於:計算過程非常復雜,需要消耗一定的時間,但是,驗證過程相對簡單,幾乎可以瞬間完成。
現在出現了另一個問題:如果其他人偷看了小明的答案並且搶答了怎么辦?要解決這個問題也很容易,小紅可以按照男生的編號,給不同的男生發送不同的方程,方程的第一項的系數就是編號。這樣,每個人要解的方程都是不一樣的。小明解出的x=2.5對於小軍來說是無效的,因為小軍的編號是3,用小明的結果驗證小軍的方程是無法通過驗證的。事實上如果某個方程被驗證通過了,小紅可以直接從方程的第一項系數得知是誰解出的方程。所以,竊取別人的工作量證明的結果是沒有用的。
通過工作量證明,可以有效地驗證每個人確實都必須花費一定時間做了計算。在比特幣網絡中,礦工的挖礦也是一種工作量證明,但是,不能用解多項式方程來實現,因為解多項式方程對人來說很難計算,對計算機來說非常容易,可以在1秒鐘以內完成。要讓計算機實現工作量證明,必須找到一種工作量算法,讓計算機無法在短時間內算出來。這種算法就是哈希算法。
比特幣挖礦的工作量證明原理就是,不斷嘗試計算區塊的哈希,直到計算出一個特定的哈希值,通過改變區塊頭部的一個nonce字段的值,計算機可以計算出不同的區塊哈希值:
hash
直到計算出某個特定的哈希值的時候,計算結束。這個哈希和其他的哈希相比,它的特點是前面有好幾個0:
hash256(block data, nonce=0) = 291656f37cdcf493c4bb7b926e46fee5c14f9b76aff28f9d00f5cca0e54f376f hash256(block data, nonce=1) = f7b2c15c4de7f482edee9e8db7287a6c5def1c99354108ef33947f34d891ea8d hash256(block data, nonce=2) = b6eebc5faa4c44d9f5232631f39ddf4211443d819208da110229b644d2a99e12 hash256(block data, nonce=3) = 00aeaaf01166a93a2217fe01021395b066dd3a81daffcd16626c308c644c5246 hash256(block data, nonce=4) = 26d33671119c9180594a91a2f1f0eb08bdd0b595e3724050acb68703dc99f9b5 hash256(block data, nonce=5) = 4e8a3dcab619a7ce5c68e8f4abdc49f98de1a71e58f0ce9a0d95e024cce7c81a hash256(block data, nonce=6) = 185f634d50b17eba93b260a911ba6dbe9427b72f74f8248774930c0d8588c193 hash256(block data, nonce=7) = 09b19f3d32e3e5771bddc5f0e1ee3c1bac1ba4a85e7b2cc30833a120e41272ed ... hash256(block data, nonce=124709132) = 00000000fba7277ef31c8ecd1f3fef071cf993485fe5eab08e4f7647f47be95c
比特幣挖礦的工作量證明原理就是,不斷嘗試計算區塊的哈希,直到計算出一個特定的哈希值,它比難度值要小。
比特幣使用的SHA-256算法可以看作對隨機輸入產生隨機輸出,例如,我們對字符串Hello再加上一個數字計算兩次SHA-256,根據數字的不同,得到的哈希是完全無規律的256位隨機數:
hash256("Hello8") = cf17d3f38036206cfce464cdcb44d9ccea3f005b7059cff1322c0dd8bf398830 hash256("Hello9") = 1f22981824c821d4e83246e71f207d0e49ad57755889874d43def42af693a077 hash256("Hello10") = 8a1e475d67cfbcea4bcf72d1eee65f15680515f65294c68b203725a9113fa6bf hash256("Hello11") = 769987b3833f082e31476db0f645f60635fa774d2b92bf0bab00e0a539a2dede hash256("Hello12") = c2acd1bb160b1d1e66d769a403e596b174ffab9a39aa7c44d1e670feaa67ab2d hash256("Hello13") = dab8b9746f1c0bcf5750e0d878fc17940db446638a477070cf8dca8c3643618a hash256("Hello14") = 51a575773fccbb5278929c08e788c1ce87e5f44ab356b8760776fd816357f6ff hash256("Hello15") = 0442e1c38b810f5d3c022fc2820b1d7999149460b83dc680abdebc9c7bd65cae
如果我們要找出前兩位是0的哈希值,理論上需要計算256次,因為00出現的概率是162=256,實際計算44次:
hash256("Hello44") = 00e477f95283a544ffac7a8efc7decb887f5c073e0f3b43b3797b5dafabb49b5
如果我們要找出前3位是0的哈希值,理論上需要計算163=4096次,實際計算6591次:
hash256("Hello6591") = 0008a883dacb7094d6da1a6cefc6e7cbc13635d024ac15152c4eadba7af8d11c
如果我們要找出前4位是0的哈希值,理論上需要計算164=6萬5千多次,實際計算6萬7千多次;
如果我們要找出前5位是0的哈希值,理論上需要計算165=104萬次,實際計算158萬次;
如果我們要找出前6位是0的哈希值,理論上需要計算166=1677萬次,實際計算1558萬次;
比特幣網絡的難度是不斷變化的,它的難度保證大約每10分鐘產生一個區塊,而難度值在每2015個區塊調整一次:如果區塊平均生成時間小於10分鐘,說明全網算力增加,難度也會增加,如果區塊平均生成時間大於10分鐘,說明全網算力減少,難度也會減少。因此,難度隨着全網算力的增減會動態調整。
根據比特幣每個區塊的難度值和產出時間,就可以推算出整個比特幣網絡的全網算力。比特幣網絡的全網算力一直在迅速增加。目前,全網算力已經超過了100EH/每秒,也就是大約每秒鐘計算1萬億億次哈希:
所以比特幣的工作量證明被通俗地稱之為挖礦。在同一時間,所有礦工都在努力計算下一個區塊的哈希。而挖礦難度取決於全網總算力的百分比。舉個例子,假設小明擁有全網總算力的百分之一,那么他挖到下一個區塊的可能性就是1%,或者說,每挖出100個區塊,大約有1個就是小明挖的。由於目前全網算力超過了100EH/s,而單機CPU算力不過幾M,GPU算力也不過1G,所以,單機挖礦的成功率幾乎等於0。比特幣挖礦已經從早期的CPU、GPU發展到專用的ASIC芯片構建的礦池挖礦。
當某個礦工成功找到特定哈希的新區塊後,他會立刻向全網廣播該區塊。其他礦工在收到新區塊後,會對新區塊進行驗證,如果有效,就把它添加到區塊鏈的尾部。同時說明,在本輪工作量證明的競爭中,這個礦工勝出,而其他礦工都失敗了。失敗的礦工會拋棄自己當前正在計算還沒有算完的區塊,轉而开始計算下一個區塊,進行下一輪工作量證明的競爭。
為什么區塊可以安全廣播?因為Merkle Hash鎖定了該區塊的所有交易,而該區塊的第一個coinbase交易輸出地址是該礦工地址。每個礦工在挖礦時產生的區塊數據都是不同的,所以無法竊取別人的工作量。
比特幣總量被限制為約2100萬個比特幣,初始挖礦獎勵為每個區塊50個比特幣,以後每4年減半。
比特幣中的哈希算法
比特幣使用一種軍事級別的加密算法,被稱為安全哈希算法 2 (SHA2)。當比特幣礦工在找到一個只能通過運行哈希算法才能產生的隨機數時,就可以獲得比特幣獎勵。這個過程,本質上是一種計算彩票,需要消耗大量的算力。
比特幣中的共識算法
如果兩個礦工在同一時間各自找到了有效區塊,注意,這兩個區塊是不同的,因為coinbase交易不同,所以Merkle Hash不同,區塊哈希也不同。但它們只要符合難度值,就都是有效的。這個時候,網絡上的其他礦工應該接收哪個區塊並添加到區塊鏈的末尾呢?答案是,都有可能。
通常,礦工接收先收到的有效區塊,由於P2P網絡廣播的順序是不確定的,不同的礦工先收到的區塊是有可能的不同的。這個時候,我們說區塊發生了分叉,在分叉的情況下,有的礦工在綠色的分叉上繼續挖礦,有的礦工在藍色的分叉上繼續挖礦:
但是最終,總有一個分叉首先挖到後續區塊,這個時候,由於比特幣網絡採用最長分叉的共識算法,綠色分叉勝出,藍色分叉被廢棄,整個網絡上的所有礦工又會繼續在最長的鏈上繼續挖礦。
由於區塊鏈雖然最終會保持數據一致,但是,一個交易可能被打包到一個後續被孤立的區塊中。所以,要確認一個交易被永久記錄到區塊鏈中,需要對交易進行確認。如果後續的區塊被追加到區塊鏈上,實際上就會對原有的交易進行確認,因為鏈越長,修改的難度越大。一般來說,經過6個區塊確認的交易幾乎是不可能被修改的。
比特幣挖礦的成本
如果將比特幣網絡看做一個國家,它的年用電量將排在全球第 32 位。
中國的比特幣开採量一度佔到全球總量的三分之二。此後數月,比特幣礦業公司迅速將業務轉移到海外。從 2019 年 9 月到 2020 年 4 月,中國礦工的網絡總算力佔比或“哈希率”達到了71% 以上。充足的廉價電力和硬件設備使中國成為了加密貨幣公司熱衷的目的地。比特幣挖礦主要集中在四川省、內蒙古自治區、新疆維吾爾自治區和雲南省等地區。這些省份勝在電力資源豐富且價格低廉。
為了碳中和,國家對比特幣和加密貨幣开採的立場开始變得強硬起來。此後,比特幣礦業公司迅速將業務轉移到海外。近期數據表明,美國、俄羅斯和哈薩克斯坦等國的比特幣能耗开始上升,隨之而來的還有解決其高漲的電力需求壓力。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
XRP 漲至 7.5 美元?分析師告訴 XRP 大軍為純粹的煙火做好准備!
加密貨幣分析師 EGRAG 表示,XRP 即將迎來關鍵時刻,價格可能大幅上漲,這取決於能否突破關鍵...
今晚ETH迎來暴漲時代 op、arb、metis等以太坊二層項目能否跑出百倍幣?
北京時間7月23日晚上美股开盤後 ETH 的ETF开始交易。ETH的裏程碑啊,新的時代开啓。突破前...
Mt Gox 轉移 28 億美元比特幣 加密貨幣下跌 ETH ETF 提前發行
2014 年倒閉的臭名昭著的比特幣交易所 Mt Gox 已向債權人轉移了大量比特幣 (BTC),作...