加密貨幣挖礦是如何運作的

· 7 分鐘閱讀

本指南說明加密貨幣礦工在做什麼以及為什麼這樣做:交易如何變成區塊,雜湊與 nonce 是什麼,難度如何讓出塊維持節奏,獎勵從哪裡來,以及為什麼大多數人在礦池中挖礦。全文以 Blocknet 為例,所以每個數字都是你可以核對的真實數字。

什麼是加密貨幣挖礦?

簡短回答

加密貨幣挖礦是工作量證明區塊鏈新增區塊的方式。礦工把等待中的交易打包成一個區塊,然後競相為這個區塊找到一個符合難度目標的雜湊。第一個找到的礦工廣播該區塊,每個節點都會檢查它,勝出者獲得新產生的區塊獎勵。

挖礦同時完成兩項工作。它為交易排序,讓所有人對哪筆付款在先達成一致;它也依固定的計畫發行新幣,因此不需要信任任何人來創造貨幣。比特幣在 2008 年提出了這個構想,如今許多幣都在使用它,Blocknet 也是其中之一。有些鏈改用權益證明,例如 2022 年起的以太坊;工作量證明與權益證明的差異一文比較了兩者。

區塊裡有什麼?

區塊是一批交易加上一個描述它的簡短區塊頭。Blocknet 的區塊頭有七個欄位:

欄位 內容
版本(Version) 協定版本
高度(Height) 區塊在鏈中的位置
前一個雜湊(Previous hash) 上一個區塊的 ID
默克爾根(Merkle root) 區塊中所有交易的指紋
時間戳記(Timestamp) 區塊產生的時間
難度(Difficulty) 找到這個區塊的難度
Nonce 礦工每次嘗試時改變的數字

前一個雜湊欄位讓區塊連成鏈。每個區塊都指向它前面的區塊,所以修改任何一筆舊交易都會改變該區塊的指紋,並破壞它之後的每一個連結。每個區塊的第一筆交易是 coinbase 交易,它把獎勵支付給找到該區塊的礦工。

礦工如何找到區塊?

簡短回答

礦工對區塊頭做雜湊,檢查結果是否小於或等於網路的目標值;如果不是,就改變 nonce 再試一次。好的雜湊函式讓輸出無法預測,所以唯一的勝出辦法就是大量嘗試。你的算力就是每秒嘗試的次數。

雜湊函式把任意輸入變成一個看起來隨機的固定長度數字。輸入哪怕只改變一個位元,輸出也會完全不同。把這個輸出看作一個巨大的數字:如果它小於或等於目標值,區塊就有效。目標值越低,能勝出的雜湊就越少,平均需要的嘗試次數也就越多。

在 Blocknet 上,每次嘗試都是一次 Argon2id 雜湊。8 位元組的 nonce 作為密碼,區塊頭的其餘部分作為鹽值,每次雜湊都要處理 2 GiB 記憶體,才會得到一個 32 位元組的結果。當礦工找到小於或等於目標值的雜湊時,就把區塊傳送到網路。每個節點只需重複這一次雜湊就能確認它,所花的工作只是找到它所需工作的一小部分。

Argon2id 詳解逐步說明了這種雜湊的每個步驟,以及它為什麼需要這麼多記憶體。

什麼是挖礦難度?

難度是決定目標值的數字。在 Blocknet 上,目標值等於 (2^256 − 1) 除以難度,這表示難度大約就是全網平均找到一個區塊所需的雜湊次數。

這給了你一個快速看懂網路的方法。Blocknet 目標是每 300 秒一個區塊,所以全網算力約等於難度 ÷ 300。舉例來說,難度為 6,000,000 時,全網每秒大約進行 20,000 次雜湊。

隨著礦工來來去去,網路會調整難度,讓出塊維持節奏:

LWMA 也限制了單一異常區塊對結果的影響:每個區塊的出塊時間至少以 1 秒、最多以 1,800 秒(目標的六倍)計算。如果出塊快於每五分鐘一個,難度就上升;如果慢於這個速度,難度就下降。

礦工如何獲得收益?

每個區塊都在它的 coinbase 交易中產生新幣。在 Blocknet 上,coinbase 交易只有一個輸出,金額恰好等於區塊獎勵,支付到礦工選定的地址。創世區塊中沒有任何交易,所以流通中的每一枚幣都是挖出來的。

獎勵遵循公開的計畫。Blocknet 的獎勵起始為每個區塊 723.25 BNT,並平滑遞減,每個 30 天的月份(8,640 個區塊)下調一次。四年後總發行量約達 1 億 BNT,此後每個區塊永久支付 2 BNT 的尾部獎勵,所以礦工始終有幣可挖。

挖出的幣要等 60 個區塊(約五小時)後才能花用。這段等待讓鏈上短暫的分岔先平息下來,然後新的獎勵才能花用。

為什麼大多數礦工加入礦池?

礦池把許多礦工的算力合在一起,讓整個群體經常找到區塊,然後依每個成員貢獻的工作分配每筆獎勵。獨立挖礦時,一個小礦工可能要等幾天或幾週才能挖到一個完整的區塊;在礦池中,同樣的算力會帶來穩定的一連串小額收益。

算一算就明白了。Blocknet 每天產生 288 個區塊,所以你獨立挖礦時每天預期挖到的區塊數為 288 × (你的算力 ÷ 全網算力)。如果你的機器占全網的千分之一,平均每天可找到約 0.29 個區塊,也就是每三天半一個區塊,但實際間隔每次都會有所不同。

礦池用份額衡量你的工作。份額是符合礦池為你的連線設定的較低目標的雜湊。每個份額都計入你應得的獎勵部分,而同時符合網路完整目標的份額就是一個真正的區塊,礦池會把它提交到區塊鏈。在 bntpool.com 上:

如果你執行自己的節點,也可以獨立挖礦(solo),保留你找到的每一個區塊。挖礦指南介紹了這兩種方式。

什麼決定你的挖礦速度?

雜湊函式決定哪種硬體表現好。比特幣的 SHA-256 幾乎不需要記憶體,所以如今大部分比特幣挖礦由叫作 ASIC 的專用晶片完成。Blocknet 選擇了 Argon2id,這是一種記憶體密集的函式,設計目標是抵抗 ASIC:每次雜湊都要占滿 2 GiB 記憶體,所以記憶體容量與記憶體頻寬決定你的速度。

這改變了一般電腦的計算方式:

seine 測得的最佳成績是 AMD EPYC Zen 5 伺服器(EPYC 9R45,32 個執行緒)上的 49.4 H/s,Apple M4 Max MacBook Pro 可達 30.9 H/s。硬體指南列出了測試過的每一代硬體的結果,2026 年 CPU 挖礦一文則說明了記憶體密集型幣種為什麼適合一般處理器。

誰來確保鏈的誠實?

每個節點都會檢查每個區塊:雜湊符合目標值,交易有效,獎勵完全正確。任何一項檢查不通過的區塊都會被拒絕,不論為它投入了多少工作。

當兩個礦工幾乎同時找到區塊時,鏈會短暫分岔。Blocknet 節點跟隨總工作量最大的鏈,也就是所有區塊難度總和最大的鏈,所以只要下一個區塊落在其中一邊,分岔就會消除。這就是錢包要計算確認數的原因:在 Blocknet 上,10 個確認(約 50 分鐘)即視為安全,任何節點都不會重組超過 100 個區塊深度的鏈。

在你自己的電腦上試試

挖 Blocknet 只需三步:準備一個地址,下載 seine,執行它並接受預設礦池 bntpool.com。seine 會在挖礦時自行選擇執行緒數、CPU 運算核心程式與記憶體配置,所以幾分鐘內你就能看到第一批份額。

說明

據 blocknetcrypto.com 介紹,Blocknet 計畫在 2027-02-16 前後進行名為 Faraday 的網路升級,計畫帶來更輕量的工作量證明。上文的工作量證明細節描述的是 Faraday 之前的網路。seine 會在啟動時以及每 12 小時檢查一次新版本。

常見問題

加密貨幣礦工實際在計算什麼?

礦工反覆對區塊頭做雜湊,每次改變一個叫作 nonce 的數字,直到結果小於或等於網路的目標值。在 Blocknet 上,每次嘗試都是一次使用 2 GiB 記憶體的 Argon2id 雜湊。沒有人能預測哪個 nonce 會勝出,所以找到區塊的唯一辦法就是不斷嘗試。

挖出一個區塊需要多久?

每個網路都設定自己的目標。比特幣目標是每十分鐘一個區塊,Blocknet 目標是每五分鐘一個區塊,也就是每天 288 個區塊。隨著礦工加入或離開,難度會調整以維持這個節奏,所以不論全網算力是多少,出塊時間都接近目標。

礦池裡的份額是什麼?

份額是符合礦池為你的連線設定的較低目標的雜湊。份額證明你貢獻了多少工作,而不必等到挖出完整的區塊。在 bntpool.com 上,礦池會調整每個連線的份額難度,目標是每五分鐘約十個份額,區塊獎勵依份額分配。

可以用一般電腦挖加密貨幣嗎?

可以,前提是這種幣的工作量證明是為一般硬體設計的。Blocknet 使用記憶體密集的 Argon2id,所以只要記憶體足夠,桌上型電腦、筆記型電腦、Mac 或伺服器都能挖。每個挖礦執行緒約需 2 GB 記憶體,seine 會自動為你的機器算出合適的執行緒數。