什麼是工作量證明?
定義 · 工作量證明(PoW)
這種系統會把新增區塊的權利交給第一個找到區塊標頭雜湊值低於目標值的人。找到它需要猜上極大量次,驗證它只需要計算一次雜湊。
Satoshi Nakamoto 在 2008 年的 Bitcoin 白皮書中說明了這個概念,並以 Adam Back 的 Hashcash 為基礎。Hashcash 是一種更早期的構想,目的是提高寄送垃圾郵件的成本。有效的雜湊值就是工作證明。沒有完成工作就無法得到它,而且任何人都能驗證你確實完成了工作。
本頁接下來會逐一說明每個部分,上方的方框也能讓你親自試試看:那是實際的比特幣區塊標頭格式,並在你的瀏覽器中即時計算雜湊。想了解挖礦全貌,請看我們的比特幣挖礦完整指南。
工作量證明解決了什麼問題?
Bitcoin 沒有公司、銀行或伺服器負責管理。數千台電腦各自保存一份帳本,而且必須對接下來的區塊,以及付款發生的順序達成共識。否則,同一枚幣就可能被花兩次。
在網路上,單純投票行不通,因為任何人都能開一千台假電腦,投一千次票。這就叫女巫攻擊。工作量證明避開了這個問題:你的話語權以雜湊次數衡量,而雜湊需要耗費電力和硬體。
誰能決定下一個區塊?
每個節點一票
一名攻擊者免費建立 60 個假節點,就能在投票中勝過 12 個誠實節點。
每個雜湊值一票
誠實礦工 88%攻擊者 12%
同樣的 60 個節點共用攻擊者的實際硬體,因此合計仍占 12%。複製節點不用成本,計算雜湊則要。
Bitcoin 區塊標頭裡有什麼?
礦工不會對整個區塊進行雜湊。他們會對 80 位元組的區塊標頭進行雜湊,標頭會承諾其餘所有內容。以下是你在上方方框中編輯的六個欄位:
| 欄位 | 位元組 | 包含哪些內容 | 誰會改變它 |
|---|---|---|---|
| 版本 | 4 | 區塊遵循哪套規則 | 很少變動 |
| 前一個區塊的雜湊值 | 32 | 前一個區塊的雜湊值,用來串起區塊鏈 | 每個區塊都會更新 |
| Merkle 根 | 32 | 區塊中所有交易的單一指紋 | 礦工:交易或額外 nonce 變更時 |
| 時間 | 4 | 礦工表示區塊建立的時間(Unix 時間) | 礦工:在限制範圍內 |
| 位元 | 4 | 打包成 4 個位元組的目標值 | 網路每 2,016 個區塊 |
| Nonce(隨機數) | 4 | 可免費再試一次的數字 | 礦工每次都要猜測 |
由於區塊標頭包含前一個區塊的雜湊值,更改舊區塊就會改變它的雜湊值,進而破壞下一個標頭,以及再下一個標頭。我們在建置本頁時,於伺服器上使用主視覺採用的相同程式碼,檢查了 2009 的真實創世區塊:
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
SHA-256 在比特幣中如何運作?
SHA-256 會將任何輸入轉成一個 256 位元的數字,並以 64 個十六進位字元表示。Bitcoin 會對區塊標頭執行兩次雜湊(大家稱之為 SHA-256d)。對挖礦來說,重要的特性很簡單:
相同輸入,相同輸出
確定性
同一個區塊標頭在任何電腦上都會得到相同的雜湊值,所以驗證才行得通。
256 位元
固定大小
不論是一小段文字還是整本書,雜湊值永遠都是 64 個十六進位字元。
單向
沒有反向捷徑
你無法算出一個輸入值,讓它產生你想要的雜湊值。你只能不斷嘗試不同輸入值。
≈ 50%
雪崩效應
改變一個字元,大約一半的位元就會翻轉。看看主視覺中的格子。
最後這項特性正是工作量證明的核心。雜湊值即使接近目標值,也無法告訴你下一次嘗試會得到什麼結果,因此沒有捷徑能找到有效區塊。所有礦工都在參加同一場抽獎,每秒計算更多雜湊值,只是多買一些中獎機會。
什麼是目標值?為什麼前面要有那麼多個 0?
目標值是 256 位元的數字。把區塊雜湊值視為數字時,只要小於或等於目標值,區塊就有效。小數字開頭會有許多零,所以目標值越低,開頭的零就越多。每多一個十六進位零,平均就要多猜 16 倍。
找到一個有效區塊平均需要的雜湊次數
- 主視覺中的玩具積木 · 4 個開頭的十六進位零65,536
- Bitcoin 最寬鬆的目標(2009)· 8 個開頭的十六進位零,位元 1d00ffff4,294,967,296
- 目前的 Bitcoin 區塊 · 約有 20 個前導十六進位零(即時估算)5.1 × 1023
網路每 2,016 個區塊調整一次目標值,大約每兩週一次,讓區塊無論在算力增加或減少時,都能維持約每十分鐘產生一個。目前網路算力約為 858 EH/s(即時數據,每小時更新)。調整方式請看我們的比特幣挖礦難度指南,算力單位則請看算力說明。
什麼是 nonce 和額外 nonce?
Nonce(「只用一次的數字」)是礦工每次猜測都會更改的 4 位元組欄位。它是唯一純粹為了修改而設的欄位。問題是,4 位元組只能表示約 4.3 十億種數值,現代機器幾乎瞬間就能全部試完。
礦工的運算迴圈
- 01
逐一嘗試每個 nonce
0、1、2,依此類推,直到 4,294,967,295。這就是 4 位元組能表示的所有數值。
- 02
很快就會耗盡
一台 100 TH/s 的機器,大約只要 43 百萬分之一秒就能全部試完。
- 03
更改額外隨機數
礦工會編輯自己獎勵交易(coinbase)中的備用欄位。
- 04
新的 Merkle 根
這筆交易一旦變更,merkle root 也會跟著變,每個 nonce 都會再次產生新的雜湊值。
因此,礦工也會更改額外 nonce,也就是 coinbase 中幾個預留的位元組。Coinbase 是區塊中的第一筆交易,用來支付礦工報酬。新的 coinbase 會產生新的 merkle root,也就有數十億個新的 nonce 可供嘗試。在礦池中,礦池會分配給每位礦工各自的額外 nonce 範圍,避免重複嘗試他人的工作。
為什麼找到區塊成本高,驗證成本卻低?
尋找區塊
≈ 5.1 × 1023 雜湊
整個網路的所有機器,猜測約十分鐘。
即時估算,每小時更新。
驗證區塊
1 雜湊
任何節點,就算只是平價筆電,也能在遠低於一毫秒內對 80 位元組的標頭計算一次雜湊,並與目標值比較。
礦工必須不斷嘗試雜湊,直到結果低於目標值。其他人只要對區塊標頭計算一次雜湊,再比較結果即可。這種不對等的成本,讓數千台普通電腦無須信任建立區塊鏈的礦工,也能驗證區塊鏈。
你可以在下方親自試試搜尋部分。這個示範使用的區塊格式比主視覺區簡單,但採用相同的雙重 SHA-256 抽獎機制,而且每個找到的區塊都會連到前一個區塊。
互動式 · 在瀏覽器裡挖出一個區塊
真實的 SHA-256d 工作量證明,簡化版區塊標頭
區塊雜湊(雙重 SHA-256)
改動交易內容:哪怕只改一個字,雜湊也會整個變掉。
嘗試次數:0
你的算力:不適用
時間:0.0 s
什麼是最長鏈規則?什麼是 51% 攻擊?
有時兩位礦工幾乎同時找到區塊,網路會短暫出現兩個版本。節點會跟隨背後累積工作量最多的鏈。大家稱它為最長鏈,但其實應該說是最重的鏈:少數幾個難度高的區塊,可能比更多難度低的區塊更重。
若要推翻一筆付款,攻擊者必須從該筆付款之前開始,建立一條累積工作量超過其他所有人的鏈。上方每多一個區塊(一次確認),攻擊者就會落後更多。白皮書計算了成功機率,移動滑桿看看:
互動內容 · 攻擊者能追上嗎?
比特幣白皮書第 11 節中的公式
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
攻擊者落後的區塊數(確認數)。長條採用對數刻度,從百萬分之一到必然發生。
擁有 10% 算力時,在 6 次確認後竄改付款的機率是 0.024%,在 1 次確認後則是 20.5%。
擁有 50% 或以上算力時,攻擊者最終會勝出。這就是 51% 攻擊。這種攻擊很嚴重,但也有其限制:
只要擁有大部分算力,攻擊者就能
- 用自己的鏈取代最近的區塊
- 對自己轉出的幣進行雙重支付
- 不把部分交易納入區塊
即使如此,他們仍無法
- 花用別人錢包裡的幣
- 創造超出區塊獎勵的幣
- 改變其他所有人遵循的 Bitcoin 規則
這就是為什麼交易所收到大額存款時,會等候多個確認。常見的經驗法則是等六個確認。
為什麼工作量證明會消耗這麼多能源?
因為能源就是安全保障。有效區塊證明確實消耗了電力。若要改寫歷史,攻擊者至少得再花上同等成本,而且必須持續投入,與此同時,誠實的網路會繼續向前。
能源用在哪裡,又換來什麼
區塊獎勵與手續費
每個區塊的新 BTC 加上手續費,會支付給找到該區塊的人。
機器與電力
礦工願意投入的成本,最多到獎勵對他們的價值為止。
全網算力
這些花費都會反映在每秒雜湊次數上。
改寫歷史的成本
攻擊者必須在每個區塊上都花得比這些總成本更多。
耗電量有多少、電力來源為何,都是值得討論的問題。劍橋指數追蹤相關估算值,而我們的比特幣挖礦能源指南會逐一說明數據。每次減半都會削減獎勵中的新發行比特幣部分,因此隨著時間過去,手續費必須承擔更多安全預算。
工作量證明與權益證明有什麼不同?
權益證明(PoS)會從鎖定代幣作為押金的人之中,選出下一個區塊的產生者,而不是從消耗電力的人之中選出。Ethereum 在 2022 年從工作量證明轉為權益證明。以下是公平的並列比較:
| 工作量證明 | 權益證明 | |
|---|---|---|
| 誰來新增下一個區塊 | 第一個找出低於目標值雜湊的礦工 | 依照質押比例選出的驗證者 |
| 如何確保安全 | 在鏈外投入的電力與硬體成本 | 鎖定在鏈上的幣,作弊時可能會被沒收 |
| 耗能 | 刻意設計得很高 | 低 |
| 參與挖礦 | 機器與低價電力 | 要質押的幣 |
| 結算 | 每次確認後都更安全 | 明確的最終性檢查點 |
| 主要批評 | 能源使用與挖礦集中度 | 權益集中,以及更複雜的設計 |
| 運作紀錄 | Bitcoin,自 2009 起 | 以太坊,自 2022 起 |
Bitcoin 的開發者一直保留工作量證明,因為它的成本來自系統之外,所以沒有人能用自己持有的幣買下控制權。權益證明的支持者則強調它能節省能源,並更快達成最終確定性。
Can you get mining rewards without running proof of work yourself?
Yes. With CloudMineCrypto you mine bitcoin for free from your phone or browser, with no hardware, noise or power bill. Claim the free 8-hour plan, and add more free plans by watching ads, playing games, completing offers and checking in daily. Your estimated BTC ticks up while your plans run, and you withdraw to your own wallet, Lightning included.
Each plan has a hashrate, and your estimate is that hashrate’s share of the whole network, times 6 blocks an hour, times the block reward. That’s the formula the app uses to estimate your rewards (rules and limits apply). Want more speed? Paid plans are an optional boost for fun. They usually mine less than they cost, and the price is shown before you confirm.
請注意:獎勵金額是估算值,會隨網路狀況變動,且不保證一定能取得。使用方案不代表擁有任何機器或礦池。提領可能有限制,也可能需要驗證。詳情請見獎勵規則和免費比特幣挖礦指南。須遵守條款。
常見問題
用簡單的方式來說,什麼是工作量證明?
這是一種讓新增區塊需要付出實際成本的方法。礦工會反覆計算區塊標頭的雜湊值,並更改一個稱為 nonce 的數字,直到結果低於目標值。找到符合條件的雜湊值需要大量猜測,但任何人都能只計算一次雜湊值就驗證它。
Bitcoin 中的 nonce 是什麼?
區塊標頭中的 4 位元組數字,礦工每次猜測時都會更改。它大約有 4.3 十億種可能值。用完後,礦工會更改 coinbase 交易中的額外 nonce,產生新的默克爾根和一組全新的雜湊值。
為什麼比特幣會連續使用 SHA-256 兩次?
Bitcoin 使用 SHA-256 對 80 位元組的標頭計算雜湊,接著再對結果計算一次。Satoshi 從未解釋為什麼這麼做。一般認為,這能防範長度延伸攻擊,並多提供一層安全保障。
51% 攻擊能讓人做什麼?
掌握大部分算力的人可以私下建立更長的鏈,並取代最近的區塊,藉此重複花用自己的幣,或阻擋部分交易。他們不能花用別人的幣、超出規則增發比特幣,也不能更改所有人的規則。
權益證明比工作量證明更好嗎?
它耗能少得多,安全性則來自鎖定作為權益的代幣。工作量證明則將安全性繫於外部成本,也就是電力和硬體,並自 2009 年起用於比特幣。兩者各有取捨,哪種更好取決於你重視什麼。
Can I get bitcoin mining rewards without my own hardware?
Yes. In the CloudMineCrypto app you claim free mining plans (the free plan, ads, games, offers and a daily check-in) and your estimated BTC ticks up while they run, then you withdraw to your own wallet. Rewards are estimates based on your plan’s hashrate and live network data, they aren’t guaranteed, and a plan doesn’t give ownership of any hardware.
來源與延伸閱讀
- 《Bitcoin:點對點電子現金系統》(白皮書) · Satoshi Nakamoto,bitcoin.org
- 區塊鏈指南:區塊標頭、工作量證明、coinbase · Bitcoin 開發者文件
- 挖礦指南:單獨挖礦、礦池、getblocktemplate · Bitcoin 開發者文件
- 難度 · Bitcoin Wiki
- 確認 · Bitcoin Wiki
- 劍橋比特幣用電量消耗指數 · 劍橋替代金融中心(Cambridge Centre for Alternative Finance)
- 挖礦儀表板:算力、難度、近期區塊 · mempool.space
本頁即時數據來自 CloudMineCrypto API,或旁邊標示的公開區塊鏈資料服務,並依排程更新,也會在頁面上標明來源。本指南僅供學習參考,不構成財務建議。CloudMineCrypto 不是投資產品,App 內的獎勵為估算值,不保證一定能獲得。
你已經看過運作方式了。現在來看它實際跑起來。
在 CloudMineCrypto app 領取免費 8 小時挖礦方案,根據即時網路數據看你的預估 BTC 一點一點增加。不需要硬體,也不用信用卡。