前言
權益證明(Proof of Stake)是一項重要的區塊鏈技術,但目前常見的介紹資源往往有太多下列問題:
- 資訊太攏統: 以太坊社群官方網站 ethereum.org 的資訊屬於這類。可以得到一個概觀,但無法深入細節。
- 太多實作細節與時效性內容:以太坊的共識客戶端規格 consensus specs 是以太坊權益證明最新也最具權威性的文件,因為所有客戶端軟體需要依照這份文件去實作。但讀者直接看大概會有這樣的困擾。
以太坊的權益證明的開發更新迅速,幾乎每天都有新的進展。本文想要討論比較不再改動的簡易切入點,幫助讀者建立思考框架,以跟上最新的進展。
工作量證明和權益證明都是一種資產證明(Proof of Asset)的特例
權益證明是一群驗證者(Validator)抵押一定數量的數位資產以參與區塊鏈的共識。這裡的驗證者,會根據下文脈絡,可能指的是節點機器本身,或是擁有節點與抵押的數位資產的擁有者。
這是相對工作量證明(Proof of work),一群礦工(Miner),可能購入顯示卡或客製化的機器,並消耗電力以參與區塊鏈的共識。
區塊鏈的本體是一群連線的節點網路,節點同步並備份著同樣的資料,這裡的資料可以包含資產的餘額,可以包含合約的狀態等等。為了讓資料的寫入不被單一機構或單位所掌控,必須把寫入權分散到全世界不同的陌生人。接著節點網路必須要對寫入的資料取得共識,也就是資料(例如所有人資產的餘額)要能夠一致。
但是分散到全世界不同的陌生人,有個問題。因為我們沒辦法檢查陌生人的身分證去建立身份識別。一種解決方式是認資產不認人頭。我們只要做到說假設有攻擊者想要製造分身時,需要取得額外的資產,攻擊成本會增加即可。
認資產的方式就是,節點在送出訊息與其他節點溝通時,在訊息上用某種方式證明持有該項資產,以說服其他的節點接受訊息。
以工作量證明而言,當一個訊息附帶雜湊值挑戰的解答時,其他節點可以相信發出訊息的節點擁有一定性能的機器,並曾經耗費電力運算出解答。
以權益證明而言,抵押數位資產的驗證者清單就剛好在區塊鏈上,清單上有驗證者的公鑰。只要在訊息上附上驗證者的數位簽章,其他節點可以相信發出訊息的節點是抵押資產的驗證者。
工作量證明和權益證明,我們都可以稱他們是一種資產證明(Proof of asset)的特例。但兩者本質上的區別是什麼?
工作量證明和權益證明最關鍵的區別就是:礦工的礦機存在於現實世界,但驗證者抵押的數位資產記錄在區塊鏈上。
聽起來沒什麼特別,但對區塊鏈安全的意義是什麼?區塊鏈沒辦法遠端燒毀實體世界的礦機,但區塊鏈能把數位資產的餘額改成零。
在權益證明可以引入懲罰機制提升協議安全性
寫入節點的行為是必須要控制的,當協定設計者設計了一個協定要寫入節點去遵守,協定設計者必須設計相對應的誘因去引導節點的行為。以工作量證明為例,行為良好的寫入節點應該:
- 在最長鏈上產生區塊
- 在區塊內納入交易
協定以增發的數位資產獎勵礦工去做第一項。而使用者提供手續費吸引礦工做第二項:納入交易。
壞人的寫入節點,可以完全不做上面兩件事。在某些條件下,他們還有辦法巧妙的送出一些訊息去玩弄系統共識以製造一些攻擊。著名的例子如 51% 攻擊,當礦工或驗證者掌握過半數的共識用資產,能夠說服網路承認某筆交易,花了一些錢,再讓網路否認同一筆交易,好像那筆錢沒花過一樣。
一般人們談論誘因,會包含棒子與蘿蔔,做好事吃蘿蔔做壞事挨棒子。在工作量證明之下,其實只有增發的幣與手續費這兩個蘿蔔。基本上沒有棒子可言。
相較之下,能夠消滅抵押的數位資產則是一支很長的棒子,能設計不同程度的懲罰來引導驗證者的行為。為什麼需要不同程度的懲罰?這是因為有些行為是可歸責,有些不可歸責。
例如,如果驗證者甲發出了兩個互相矛盾的訊息(Equivocate)試圖造成節點共識分歧,並且有其他節點撿到了這兩個訊息送到區塊鏈上,區塊鏈能夠直接消滅甲大量的抵押資產,予以經濟重擊。因為兩個訊息都有該驗證者的數位簽章,訊息是否矛盾也有簡單的演算法決定,責任十分容易歸屬。
但若驗證者乙因故離線一段時間,沒照協定規定送出該送的訊息,區塊鏈只能予以輕微懲罰。這是因為區塊鏈沒辦法區分乙是因為惡意離線,或是因為其他驗證者節點屏蔽乙,完全不收乙的訊息。由於責任無法歸屬,所以只能做輕微懲罰,但懲罰的金額會隨時間遞增。
一部分讀者能在 consensus specs 觀察的重點,就是各種賞罰的設計以及緣由。
權益證明的設計挑戰
這裡想提人們比較常問的以及實際當驗證者會體驗到的設計挑戰。理論上的挑戰 Casper FFG 的論文 比較有詳細說明。
亂數
在資產證明中,常常需要能依照資產比例隨機選擇一個持有者發訊息。這個隨機選擇的方式不能被輕易操控,否則誇張一點是都會永遠選到同一批人,或複雜一點的話是攻擊者可以得到多過於其持有資產比例的優勢。
在工作量證明中,因為雜湊值挑戰完成的時間本身夠隨機,也與算力比例有關,所以某種程度已經達成依照算力比例對礦工抽籤的效果。
在權益證明中,則需要設計一個亂數產生方式來對驗證者抽籤,這個亂數來源稱之為 random beacon。這也是信標鏈(Beacon chain)名稱的由來。目前用 RANDAO 實作,未來會用 VDF 實作。
進出系統
寫入節點如果能夠很快速隨性地進出系統,將會有許多攻擊空間。
在工作量證明中,礦工可以隨時想參與共識就參與,離開就離開,系統不做限制。權益證明中,抵押成為驗證者需要排隊,想領回押金不當驗證者也需要排隊。
權益證明其他的好處
可以降低新幣發行量
為什麼權益證明棒棒的 一文中,討論由於工作量證明的攻擊成本大多為營運成本,但權益證明的成本大多為資金成本。假設每天協議發出 1 元的區塊獎勵來吸引共識資產,換算要讓鏈無法使用 6 小時的攻擊成本,GPU 挖礦為 0.26 元,但權益證明的是 2189 元。這代表同樣發行量下,權益證明比工作量證明更安全。
升級到權益證明時,人們可以選擇
- 保持一樣發行量,享有比工作量證明更高的安全性。
- 保持和工作量證明一樣的安全性,但減少協議發行量
目前人們偏好低通膨而偏向選擇後者。
由於前段討論到能消滅押金這個原因,攻擊者攻擊之後押金會消滅,權益證明在攻擊之後系統很快能恢復運作。但在工作量證明之下,攻擊者攻擊之後仍持有原來的礦機等攻擊資源,能夠持續攻擊直到人們完全不想使用區塊鏈。
節約能源與減少碳排放
工作量證明十分消耗能源,權益證明則不須競爭能源消耗。目前觀察這個是人們比較容易理解的點。這篇 文中 研究員 Carl Beekhuizen 一圖勝千言
結論
本文的目的是想引導讀者抓住「權益證明是共識資產記錄在區塊鏈上」這個性質。幾乎所有權益證明的好處都從這裡來,所有的複雜性也都來自這邊。例如:因為能消滅抵押資產,所以有了設計懲罰誘因的空間,以防禦惡意的攻擊者。因為共識資產記錄在區塊鏈,所以能夠細緻控制驗證者的進出。因為共識資產抵押在鏈上沒有折舊,因此是很純的資本支出,推高攻擊者成本。
複雜性的部分限於本文目標比較沒提到。包含敲定(Finality)機制的必要,驗證者清單的更新,弱主觀性等等。
最後如果我想把讀者傳送到某個地方的話,Ben Edgington 最近在撰寫的 eth2book.info 似乎是個好去處。