共識機制
書接上回。現在每個節點上面,都有個包含所有歷史帳目的帳本。然而,節點與節點之間是如何產生共識,來確保大家手上的帳本都是一樣的呢?這次讓我們來回答區塊鏈三個基本問題中的第三個。
[ 前情提要 ]
- 要實現分散式帳本,有三個基本條件:有好的帳本結構、帳本無法被竄改、所有人都認可這一個帳本。
- 我們最終想要達成的是DLT,而實現它的技術,目前有Blockchain、Holochain、Hashgraph、Directed Acyclic Graphs(DAG)等等,而Blockchain只是目前最主流的一種。其他的我們之後有機會再提,暫且按下不表。
- 有共識的意思是說,所有節點上的帳本是一致且大家都認同的。至於「節點」該怎麼理解呢?想像手邊的一台電腦,在上面灌上特定的軟體(例如以太坊的Geth),它就能自動的不斷更新到最新的帳本資訊,這樣你的筆電也就是一個節點了。(節點可以單純的用來儲存帳本,跟要不要去挖礦是兩回事)
- 之所以要有共識機制,是要處理有壞節點存在的情況。壞節點指的是想來搞破壞的節點。畢竟真實世界是個黑暗森林,歲月靜好只存在平行世界中。假設你在自己電腦的帳本上,胡亂加入一條別人匯錢給自己的假資訊,然後廣播出去,那就是一個壞節點,Bad。
- 處理好共識問題,等價於做到了「去信任化(trustless)」:不用假定別人是好人,也能夠透過一套機制,去信任他人。這是一件非常非常偉大的事情,你品,你細品。
- 接著正式開始介紹幾個常見的重要共識機制。
[ Practical Byzantine Fault Tolerance (PBFT) 實用拜占庭容錯算法 ]
- 1999年的一篇論文提出來,為的是解決拜占庭將軍問題。
- 拜占庭將軍問題是指,節點之間想決定一件事情,例如大家往前走一步,或是大家往後退一步,同進退就能活下來,不同步的話就大家一起掛掉。
- 每個節點都可以跟每個節點溝通,但存在壞節點想搞破壞,不知道是哪一個。
- 有很多人對拜占庭將軍問題提出解法,但複雜度都過高,沒那麼實用。是直到1999年那一篇論文才出現相對「實用」的解法的。
- 結論是,當壞節點不超過總結點數的1/3,好節點之間還是能達成正確的共識活下來。
- 但存在的限制是,節點必須是給定的,也就是不能到一半加入其他節點。加上處理問題的時間複雜度是O(N^2),所以在現實世界的實用性不高。
- 無論如何,它是共識機制界的OG。數學上來說,可以理解所有的共識機制,本質都是想要解決拜占庭將軍問題。
[ Proof of Work (PoW) 工作量證明 ]
- 概念上就是天道酬勤。
- 上一篇說到挖礦這件事,就是去算出正確的Nonce值,讓Hash值去滿足對應的要求(例如最前面多少位是零),這個去「算出正確的Nonce值」就是工作(Work)。
- 最先算出答案的礦工會把答案告訴其他節點,而其他節點驗證沒問題之後,Block就會成立,接到原有的鏈上去,而這個最先算出來的礦工可以獲得一定的獎勵。
- 平均來看,如果佔全部礦工運算資源的X%,也對應能獲得X%的總獎勵。
- 這裡共識的邏輯是,因為你努力工作了,所以大家相信你,算是第一代區塊鏈最常見的共識機制。
- 從另一個角度去理解,那個出塊的礦工是一個獨裁者,PoW就是一個透過解數學問題,隨機分配讓礦工作為獨裁者的權利。
- 要避免這個幸運的獨裁者作惡,通常會搭配「最長鏈原則」使用。也就是想作惡的人,只幸運一次是沒用的,其他人下一輪會就看出來,並選擇不認你這個有作惡過的鏈。這是一個多期的賽局。
- 現在使用PoW的主要就Bitcoin,比較新的鏈幾乎不用,原因有很多:例如礦工們會專門製造了算Nonce的處理器(ASIC)去挖礦。想像一下,有一堆超級電腦,就只是在那邊算一個亂數,不只耗電不環保,也對人類文明沒有任何貢獻。
- 但當然也有人持相反的論點:説一種貨幣想要能真正的存儲「價值」,就必須有相對應的付出。像美元那樣能靠信用直接印鈔,或是PoS那樣大者恆大的機制,是條錯誤的路線。有興趣的可以去看看《貨幣未來:從金本位到區塊鏈》,裡面有很多發人省思的論點。
[ Proof of Stake (PoS) 權益證明 ]
- 在這機制之下,一個新區塊的確認,是由一位稱為「**驗證者(validator)」**來做確認的。
- 想成為驗證者,你需要先質押(stake)代幣到某個網路上(例如質押ETH到以太坊上)。然後系統會直接用質押股權的高低,來分配給你當驗證者的機會。也就是礦工之間不用再競爭了,我們直接來比股權的多寡就行。
- 股權詳細來說,是基於資產加權的幣齡去決定。例如存一天的10 ETH跟,跟存十天的1 ETH會有同樣的權重。一但被選中之後,拿過獎勵的驗證者,權重會歸零。(不然某人有51%的總資產,就都他在拿就好了)
- 這種有參與驗證人選拔的節點,我們稱之為「驗證節點」。
- 驗證者的獎勵通常是這個新添區塊中的交易手續費,而不會有像PoW中的新區塊鑄造獎勵。這也是我們會聽到:「以太坊從PoW轉換成PoS之後,ETH的通膨問題會大大減少」,這句話的論點來源。
- 如果一個節點想停止驗證節點的身份,那麼它的股權和所得的獎勵將在一段時間後才被釋放,從而使網絡有時間,驗證該節點是否向區塊鏈中添加了假區塊。
- PoS這套機制的底層道理是,用戶必須先把真金白銀壓在網路上,如果敢作惡的話,網路就把你的本金沒收。
- PoS的主要優點是能源消耗低和安全性高,是目前的主流。
[ Delegated Proof of Stake (DPoS) 委託權益證明 ]
- 由Daniel Larimer 在2014年提出。
- 可以投票給幾個代表代替他們保護網絡。
- 代表們也被稱為「見證人」,他們有責任在產生和驗證新區塊的過程中達成共識。
- 投票權與每個用戶持有的幣數量成比例,投票系統也因項目而異。
- 通常代表們也會收集獎勵並按比例分配給投票者們。
- 優點很明顯,因為節點少,所以在性能方面與PoW和PoS相比更強,也就是理論上TPS能更高。
- 與PoS相比,這就像直接民主跟間接民主的差異:直接民主確實很民主,但很多事情決定起來很慢,也會有很多內耗。越極權處理事情效率就能更高,但有中心化的風險。
- 所以缺點也很明顯,因為依賴特定節點,在三難問題中,犧牲了一些去中心化。
- (TPS 是 Transaction Per Second的縮寫, 是衡量一條鏈很重要的一個指標)
[ Proof of Authority (PoA) 權威證明 ]
- 由Gavin Wood在2015提出。
- 找幾個願意暴露自己真實身份,同時又是權威的人士來當作驗證者。
- 節點數可以很少,所以TPS可以很好,交易費用可以很低,但缺點是過於中心化。
- 可以理解成極端版本的DPoS。
- 通常會搭配多重簽證機制來防,就是必須要多位權威全都有共識,才能算。
- PoS的假設是,當用戶壓越多資金在網路上,則越有動機維護網路的安全。但是這假設沒有考慮到的是,同樣的絕對金額,對越有錢的人來說,佔其總資金的比例就越低,那麼他的維護網路安全的動機也會越低。舉例來說,我很窮,我放一千鎂在以太坊上,佔了我總資產的一半,則我會超有動機好好做事,不然被沒收一千鎂可能就要直接去睡公園;但如果是讓Elon Musk來,他放一千萬鎂在以太坊上,這佔他總資產的九牛一毛,則他要任性作惡一下對他影響也不大。
- PoS抵押的是錢,而PoA抵押的是信用。當然,這前提是驗證者的信用是有價值的。
- PoA因為不夠去中心化,無法被大規模的採用。所謂知人知面不知心,王力宏都可以一夜身敗名裂,誰來當這個權威早晚感覺都會出事。
- 不過,它的用途是在一些去中心化不是特別重要的情境:例如企業內部使用時,因為不想承受公鏈過高的手續費時,自架自己的私有鏈,這時候用PoA則很常見。
[ Proof of History (PoH) 歷史證明 ]
- 這邊只概念性上的講一下,之後介紹Solana時候會再深入一點講解。
- 共識機制,從更高的角度去理解,它是想要建立一個時間的概念,就是想要分清楚兩個事件的先來後到。共識上有衝突,也可以被理解成時空上有矛盾。
- PoH用了一個叫做VDF (Verifiable Delay Function) 的函數,可以幫每一筆交易加上了一個加密不可更動的時間戳。
- 相較的,其他共識機制的時間戳是放在區塊上的,所以需要讓每個節點都確認新區塊,有全局的共識之後,時間才會往後走一步,而這個等待,正是很多鏈TPS上不來的主因。
- 嚴格來說,PoH不是一個共識機制,它是一套建立時間概念的手段:直接讓交易有了先後順序,一條鏈就可以省略「節點之間全局共識」的過程,能讓鏈作到異步更新,這也能讓TPS大大的提高。
前面分別介紹了幾個重要的共識機制,在實際操作上,它們甚至還可以結合起來用的,例如PoS + PoW的混合。共識機制是決定一條鏈性能最重要的元素,沒有之一。目前共識機制還沒有哪一個模型可以一統天下的,都是在三難問題上各有取捨,就讓我們作為歷史見證者繼續看下去。這篇先到這了,Be Happy & Stay Tuned,下次見!