本文介紹工作量證明與權益證明如何決定由誰在區塊鏈上新增下一個區塊、兩者如何維護鏈的安全,以及各自如何產生新幣。全文以 Blocknet 為例,它是一種可以用一般電腦挖礦的工作量證明幣。
工作量證明與權益證明有什麼差異?
工作量證明與權益證明是區塊鏈決定由誰新增下一個區塊的兩種方式。在工作量證明中,礦工投入算力尋找有效的雜湊。在權益證明中,驗證者鎖定幣作為押金,並被選中來提議區塊與對區塊投票。兩種方式都讓作弊代價高昂。
每條區塊鏈都要解決同一個問題:成千上萬台互不信任的電腦,需要就同一份付款歷史達成一致,這樣任何人都無法把同一枚幣花兩次。每個新區塊都要有人提議,其他人也需要一個接受它的理由。這套規則稱為共識機制,工作量證明與權益證明是其中最知名的兩種設計。
| 工作量證明 | 權益證明 | |
|---|---|---|
| 誰來出塊 | 最先找到不高於全網目標值之雜湊的礦工 | 從鎖定了幣的參與者中選出的驗證者 |
| 投入什麼 | 硬體與電力 | 作為質押存入的幣 |
| 哪條鏈勝出 | 累計工作量最多的鏈 | 獲得最多驗證者投票的鏈,並有最終確定檢查點 |
| 新幣歸誰 | 區塊獎勵歸找到該區塊的礦工 | 獎勵給提議區塊與投票的驗證者 |
| 參與需要什麼 | 一台能計算雜湊的電腦 | 用於質押的幣(以太坊驗證者需要 32 ETH) |
| 例子 | 比特幣、Monero、Blocknet | 2022 年起的以太坊 |
工作量證明如何選出下一個區塊?
在工作量證明中,礦工競相求解一道難以求解、但很容易驗證的題目。礦工取出想要發布的區塊,加上一個稱為 nonce 的數字,然後計算雜湊。如果把雜湊當作數字來看,它不高於全網的目標值,這個區塊就有效;如果不是,礦工就換一個 nonce 再試。獲勝的唯一辦法是嘗試大量 nonce,所以礦工找到下一個區塊的機率,等於它在全網算力中所占的比例。
中本聰 2008 年的 比特幣論文這樣表述:「工作量證明本質上是一個 CPU 一票。」節點跟隨投入了最多工作量的鏈,而難度設定會上下調整目標值,無論有多少算力加入,區塊都能以穩定的節奏產生。加密貨幣挖礦原理一文逐步說明了雜湊、難度與礦池。
Blocknet 的運作方式相同,具體數值寫在它的共識程式碼中:
- 雜湊函數是 Argon2id,使用 2 GiB 記憶體,所以每次雜湊既需要處理器時間,也需要實實在在的記憶體。Argon2id 詳解介紹了它的運作原理。
- 目標值等於 (2^256 − 1) 除以難度,因此難度大致等於全網找到一個區塊所需的雜湊次數。
- 大約每五分鐘產生一個區塊,每天 288 個。難度透過 60 個區塊的加權移動平均(LWMA)跟隨最近的出塊時間。
- 節點跟隨最重的鏈。 每個節點把一條鏈上所有區塊的難度相加,只有當競爭鏈的總工作量更高時才會切換過去。
權益證明如何選出下一個區塊?
權益證明以押金取代雜湊運算。要參與,驗證者需要把幣鎖定在協定中,再由協定選出驗證者來提議與核准區塊。Peercoin 於 2012 年上線,是第一個採用權益證明的加密貨幣;以太坊則在 2022 年 9 月 15 日透過名為「合併」的升級完成了轉換。
以太坊的設計展示了其中的各個環節。根據 ethereum.org:
- 驗證者向存款合約存入 32 ETH。
- 時間被劃分為 12 秒的時槽(slot),每 32 個時槽組成一個週期(epoch)。
- 每個時槽隨機選出一名驗證者提議區塊,其他驗證者透過認證(attestation)對它投票。
- 當持有全部質押 ETH 至少三分之二的驗證者為檢查點投票後,檢查點即獲得最終確定。
- 如果驗證者在同一時槽提議兩個區塊,或投出互相矛盾的票,就會被罰沒(slashing):它的部分質押、最多全部質押會被銷毀。
質押所扮演的角色,相當於工作量證明中電力所扮演的角色。違反規則,驗證者就要損失自己已經持有的幣。
工作量證明與權益證明如何維護安全?
兩種設計都讓攻擊的成本高於攻擊可能獲得的收益,只是把成本放在不同的地方。
在工作量證明中,成本是持續的運算。 要改寫過去的某個區塊,攻擊者必須重新完成該區塊及其後所有區塊的工作量,然後超越誠實的網路。中本聰證明,較慢的攻擊者追上的機率會隨著每個新區塊呈指數下降。要控制此後的鏈,就代表在攻擊持續期間,一直執行比其他所有人加起來還多的算力。
在權益證明中,成本是押上的資本。 以太坊的文件指出,攻擊者「需要 51% 的質押 ETH」才能控制鏈;三分之一的質押就足以阻止區塊獲得最終確定;而回滾一個已最終確定的區塊,代表至少有三分之一的質押 ETH 會因罰沒而損失。
Blocknet 在工作量證明之上還設定了兩個門檻。網路把 10 個確認(約 50 分鐘)視為安全,節點會拒絕深度超過 100 個區塊(約八小時)的任何鏈重組,所以深度達到 100 的區塊即為最終確定。
兩種模式如何發行新幣?
工作量證明幣把新幣支付給找到每個區塊的礦工,所以任何貢獻算力的人都能在不先持有幣的情況下賺到幣。權益證明幣按質押比例把新幣支付給驗證者,所以獎勵歸已經持有幣的人。每個協定都有自己的發行計畫。
在工作量證明中,每個區塊的第一筆交易會為找到該區塊的礦工創造新幣。比特幣論文把這描述為「一種最初把幣分發到流通中的方式,因為沒有中央機構來發行它們」。比特幣的區塊獎勵每 210,000 個區塊減半一次,大約每四年一次,總供給量始終略低於 2100 萬。
在以太坊的權益證明中,獎勵每個週期向驗證者餘額發放一次,用於獎勵認證、區塊提議與同步委員會職責。基礎獎勵會隨著總質押量增加而減少,而總發行量會隨著更多驗證者加入而增加。
Blocknet 的發行完全透過挖礦進行。它的創世區塊不包含任何交易,所以挖礦開始前沒有任何幣存在,共識中也沒有預挖、國庫或創辦人輸出。每個區塊都把全部獎勵以一個輸出支付給找到它的礦工。區塊獎勵最初為每塊 723.25 BNT,在 48 個月內沿指數曲線每 30 天一個月逐級下調,之後永久維持每塊 2 BNT。
Blocknet 為什麼採用工作量證明?
Blocknet 選擇工作量證明,是為了讓任何擁有電腦的人從第一個區塊起就能賺取新幣,而不需要先購買。它的守護程式把 Argon2id 描述為「抵禦 ASIC、確保公平挖礦的記憶體密集型工作量證明」,並且「為了公平」讓每個雜湊只在單一執行緒上執行。
正是記憶體需求讓挖礦保持開放。每個雜湊要填滿 2 GiB 記憶體,所以每個挖礦執行緒需要約 2 GB 記憶體,而人們已經擁有的電腦,包括桌上型電腦、筆記型電腦與伺服器,都具備這樣的記憶體以及為其供應資料的記憶體控制器。Blocknet 屬於圍繞通用硬體設計的工作量證明幣家族:例如 Monero 自 2019 年 11 月起採用 RandomX,這種演算法「針對通用 CPU 最佳化」。
工作量證明會繼續留在 Blocknet 的規劃中。根據 blocknetcrypto.com,預計於 2027 年 2 月前後進行的 Faraday 升級將帶來「更輕量的工作量證明」,讓新節點更快追上鏈。
如何開始挖工作量證明幣?
挖 Blocknet,你需要一個錢包地址與 seine,這是一款免費的開源挖礦軟體:
seine 會根據你的記憶體選擇執行緒數,在挖礦時比較各個 CPU 運算核心程式並保留最快的那個,在 Windows 與 Linux 上還會把 NVIDIA 顯示卡與處理器一起投入挖礦。挖礦指南詳細介紹了硬體與收益支付。
常見問題
Blocknet 是工作量證明還是權益證明?
Blocknet 採用工作量證明。礦工計算 Argon2id 雜湊,每個雜湊需要 2 GiB 記憶體,大約每五分鐘產生一個新區塊,全部區塊獎勵歸找到該區塊的礦工。Blocknet 沒有質押。你可以用一般電腦執行 seine,透過 bntpool.com 礦池挖礦。
以太坊什麼時候從工作量證明轉向權益證明?
以太坊透過名為「合併」(the Merge)的升級轉向權益證明,該升級於 2022 年 9 月 15 日執行。此後,由存入 32 ETH 的驗證者取代礦工提議區塊並投票。比特幣、Monero 與 Blocknet 仍然採用工作量證明,新區塊來自運算工作。
什麼是 51% 攻擊?
51% 攻擊是指掌握決定區塊的那種資源的大部分,藉此試圖控制一條鏈接受哪些區塊。在工作量證明中,這代表掌握全網大部分算力;在權益證明中,這代表掌握大部分質押的幣。無論哪種方式,攻擊者都必須投入多數的真實資源。
權益證明的幣可以挖礦嗎?
不行。純權益證明的幣沒有挖礦。新幣支付給鎖定既有幣作為質押的驗證者,所以你必須先持有幣才能賺到幣。想用你現有的電腦賺取新幣,需要選擇 Blocknet 這樣的工作量證明幣。