區塊鏈必須有共識才有去中心化,為什麼共識機制這麼難懂?

區塊鏈必須有共識才有去中心化,為什麼共識機制這麼難懂?

我覺得學習區塊鏈、加密貨幣的難處跟初期接觸股票、外匯的感覺很像,在你還沒把錢存到銀行交割戶之前看再多書都沒啥感覺。今天你要買 100 股不小心按成 100「張」,這時你的交割戶銀行會打電話來催你補錢進去;而加密貨幣除非你今天用的是中心化交易所(例如:Max 交易所 - MaiCoin / ACE 王牌加密貨幣交易所),不然根本沒有人會跟你講交易上的細節。

所以在正式買賣加密貨幣前一定要做功課,網路上看到的任何文章、教學絕對不能照著操作,你必須要有自己個人的見解、看法,才知道該買哪一種幣,需不需要買個冷錢包(若是做長期投資)等等。

目錄

節點是什麼?長什麼樣子?

在傳統的銀行世界裡,我們把銀行當作中間人,銀行可以幫你進行存款、提款等動作,不過所有的資訊都存在銀行裡面,基本上,你就是信任銀行會幫你搞定所有帳本紀錄,並且不會偷偷竄改資訊,這是中心化的世界。

之前有提過區塊鏈是「去中心化」的「分散式帳本」,它不是傳統的銀行交易軟體只有一個中心主機(Main Server) 來存取紀錄每個人的交易紀錄,相反地,它需要各個「節點」幫忙維護及驗證鏈上的交易資訊,這些交易記錄都無法竄改,所有的操作都得經過本人同意才能執行,這時就要透過多個節點(電腦、手機等裝置)共同維護鏈上的資料,每個節點都要確保自身的帳本和其他節點的帳本保持一致。

image達成共識的「節點」,意思是彼此有共識,而這些節點可能是礦工,而礦工會幫忙把資料做打包。透過 Ethereum Mainnet StatisticsEthereum Node Tracker 這兩個工具我們可以看到達成共識的「節點」分布在哪些國家。

不過該怎麼讓這些帳本紀錄都一致,這需要共識機制(Consensus Mechanism) 的介入來制定算法、遊戲規則,藉此讓每個節點都按照這個規則去確認各自的數據,保障帳本中的資訊是一致、安全和公平的,藉此確保區塊鏈能夠順利運作。

在不同的鏈上都有自己的生態、共識機制,像 Bitcoin(BTC) 和 Ethereum 2.0(ETH) 是不同的區塊鏈項目,它們各自運行在不同的區塊鏈上。

拋開複雜的概念、原理,你我的現實生活中有許多情境都需要達成「彼此的共識」才能讓關係、人情交際順利運作,比如居住地方的大樓管委會要選最新的主委代表、又或是你和另一半討論今晚要吃什麼,這些情境都需要一個共識、協議。

下面是我透過一些開源工具來輔助學習,透過這些視覺化模擬器,我們可以知道區塊鏈在交易時大致上是怎麼運作、今天買 BTC(比特幣) 它的 Transaction Hash 是怎麼從上個 Block(區塊) 帶到下一個 Block。

用一句話來簡單解釋,共識機制就是當網路節點意見不一致時,如何讓節點之間的帳本達成共識的方法。節點有共識,才能保證帳本的一致性與交易的最終性

PoW(Proof of Work, 工作證明)

延續大樓管委會的情境,今天要選出最新的主委代表來管理維護公共空間、執行社區全體的規範決議(例:寵物規定、冷氣裝設、陽台窗戶規劃)。

出席主委表決會議的這群人當中,一定有人會先私下講好要投票給誰,但無論如何在檯面上終究還是要投票表決,每個主委候選人都有發言權發表自己的理念,反正最後票最多的那個人就當選主委,最後就必須依據這個主委和他的團隊的意見為準。篩選出最具有代表性的節點,這需要設計出一組條件、規則,而這個規則就是我們所談的共識機制這套算法。

目前主流的共識機制非常多,像 Bitcoin(BTC), Litecoin(LTC), Dogecoin(DOGE) 都是採用 PoW 的共識機制,在 PoW 中礦工(Miners) 解決複雜的數學問題需要大量的計算能力,第一個成功解決數學題的礦工可以增加新的區塊並獲得獎勵。

image

在 PoW 運作方式裡,依賴礦工的算力來搶奪出塊權,礦工每解決問題都會增加新的區塊也就是新增一筆交易,一直不斷地重複做這件事最後選出最長鏈的優勝者,所以成長最快、最長的鏈就是最值得信任的鏈。所以全網算力越大,發動 51% 算力攻擊的可能性越小,藉此來確保加密貨幣是安全的系統

PoW 很像證照、畢業證書,透過檢驗結果的方式取得所需要的證明。這種方式雖然安全性很高,但交易驗證慢、手續費昂貴,需花費昂貴設備來挖礦,能源消耗高所以整體效率較差。

-模擬 PoW 的運作

Proof of Work Simulator 這個模擬器就是在 Demo 整個運作,我們來模擬一筆交易:

image

在這個模擬器的 Data 欄位隨便填一個數字,點擊 “mine” 按鈕去創建第一個 Block, 這時後所有 Miners(礦工) 開始計算 Hash Value(雜湊值)(以下簡稱 Hash) 數學題,礦工們在比賽看誰算得最快,最後算出結果後 Block 會變成綠色。

底層的運作是這樣,透過 Hash 來實踐 Nonce(隨機數),再由只能使用一次的隨機數去計算結果。

image

其中的 Hash 到底在算什麼?有時間可以複習一下之前的 Block(區塊) 基礎知識

以這個交易來說,在 PoW 的共識機制裡面就是去計算一個 256 的長度(2²⁵⁶ 是 2 的 256 次方)的 Hash 結果,這個 Hash 結果裡頭包含了交易資訊、區塊資訊,而這些交易資訊最終會打包到「區塊」,再將區塊發佈到所有節點,這樣所有節點之間就有了關聯。

其中區塊資訊當中的資料其實就類似 Etherscan(區塊鏈瀏覽器) 可查看的交易明細,礦工們會拿著這個勞動證明去領取獎勵。

image 註:以太坊已經從 PoW 轉為混合 PoW + PoS 的 Casper 共識機制(其實就是一種 PoS)

可以發現 Block 2 的 Hash Value 是從 Block 1 帶過來的,這個雜湊是將不固定長度的訊息的 input(輸入) 計算成固定長度的輸出,且計算出來的 Hash Value 要滿足 2 個條件:

  1. Hash Value 這個結果無法還原成 input 原來的訊息

  2. Hash Value 這個結果會隨著明文的 input 輸入而改變

*不乖乖排隊會被踢出去

螢幕前的你可以試試看,我們如果在已經計算完的結果任意修改它的數字(例如:Data 從 20 改成 50),它的 Hash Value 會跟著改變,所以如果上一個(Previous) Block 的 Hash 不一樣,那你當前整包的結果就會不一樣,而這條 Chain(鏈) 就會中斷,這時 Block 就變成紅色了。

這運作很有意思,其實這就是在真實模擬攻擊、插隊事件。在區跨鏈中隨機數會改變數據的雜湊值,它必須確保 Block 的雜湊值是獨一無二的(因為它只會使用一次),並阻止非法行為來篡改區塊鏈。

所以一個很複雜、難以破解的 Hash 演算法、簽章,它其實就是把這一串東西計算成一個雜湊值。

以太坊 10s ~ 15s 產生一個區塊;而比特幣是 600s 才產生一個區塊

不管是哪一個鏈(比特幣、以太坊)都不希望遇到插隊(惡意攻擊、詐騙),因為只要有人插隊那麼整個系統運作效率就會降低。今天這個模擬器只有 4 個區塊所以感受不太出來插隊造成延遲的問題。實際上若真的發生區塊插隊,後面還是會持續計算並產生新的區塊,所以它一定會來不及也不可能讓你成功插隊,因為插隊成功代表 Hash 被破解。

攻擊事件是一定會發生的,但基本上不太可能被破解,以太坊核心開發成員提過,自 2020 年 12 月 1 日推出 Beacon Chain(信標鏈) 以來,以太坊生態系統只有剔除 226 個Validators(驗證者),這比例只是 524,060 個 Validators(驗證者) 的 0.04% 而已。

PoS(Proof of Stake, 權益證明)

在 PoW 中,因為人人都可以自由地成為節點,而每個節點又透過過競爭的方式參與數據處理,一筆交易數據經過這麼多人的處理一定會造成資源浪費和效率低下,隨著對能源效率和可擴展性的關注增加,PoS 概念浮現,而最具代表的就是 Ethereum 2.0 (ETH) 。

在加密貨幣領域「Stake」中文稱為 「質押」。相較於 PoW 強調的算力競爭,PoS 主要依賴的是參與者 「質押資產數量」來爭取記帳權。你擁有越多的幣,那你在這個共識機制中的話語權(記帳權) 就越大,獲得記帳權的機會就越高,這個概念強調質押資產的數量與記帳權之間的直接關聯。

把 PoW 的概念經過改良後,提高了節點處理數據的門檻,抵押一定數量的代幣才有資格成為驗證節點,也就是候選人,成為候選人之後系統透過共識演算法選擇一部分的人作為出塊節點(礦工),這個選取候選人的過程中演算法不能被操縱和預測。PoW 人人都是礦工,但 PoS 是要經過篩選才能成為礦工。

然而 PoS 的原則不僅僅考慮質押資產的數量,它還考慮了質押的「時間」以及上次獲得記帳權的時間點,作為額外的加權因素,這意味著持有質押資產的時間和你上一次成功參與共識的時間,將影響爭取記帳權的機率。由此可見擁有越多的股權就可以獲得更多獎勵,股權就是指持有的加密貨幣的數量和時間(俗稱 Coin Age, 幣齡)根據它來分配權益。

幣齡 = 貨幣質押數量 * 貨幣質押天數

每個代幣每天都會產生 1 幣齡,假設有 30 顆幣持有 20 天,那幣齡就是 600. 不過系統會確保已經取得記帳權並獲得獎勵的人,把幣齡歸零並重新累積計算,避免持有大量質押代幣的節點壟斷區塊鏈。

-模擬 PoS 的運作

這裡我們以 PoS 共識機制的 Ethereum(以太坊) 來舉例,要成為 Validator(驗證者),至少要把 32 顆 ETH 的 Stake(資產)Deposit(存入) 智能合約裡面,這份合約會和 PoS 節點產生關係並交互確認是否有這位驗證者。

image*圖:在 beaconcha 工具查看驗證狀態

這個驗證者的職責和權利就是參與投票驗證交易、生產區塊並進行簽章(簽署證明),如果以現實生活的類比例子,這個驗證者的身份就像是銀行的行員要審核申請房貸的民眾是否有資格申請,必須符合資格行員才會放貸。

image*圖:從 beaconcha 查看被 Slash(剔除)的名單

而驗證者如果沒有進行投票或是投票速度太慢就有可能拿不到獎勵,但這情節不至於到不可原諒,在以太坊若有以下比較嚴重的違規行為會直接被 Slash(剔除) 的,而且還會損失期間所獲得的 ETH(以太幣) :

image

  1. 提案違規:驗證者在同一個時間 Proposing(提案) 和 Signing(簽署) 不同的 Block。
  2. Surround Vote(包圍投票):在 PoS 的共識機制當中,節點每個時間只能認證一個 Block(區塊) 為有效的,如果一個節點同時認證兩個 Block 這完全行不通的,這時就會演變成一個 Surround(包圍) 的狀況,因為這舉動表示你要推翻過往的的投票結果。這個違規行為我花很多時間才搞懂它,直白具體地解釋就是「在同一個時間內開車又騎車」。
  3. Double vote(雙簽 / 重複投票):一個節點在同一個 Block(區塊) 重複投票,這就是 Double vote 的概念,用現實中的投票行為來白話解釋,那就是你今天投票給彼得只能投一次不能同一個人投 2 次(計 2 次票)。重複投票會危害整個區塊鏈的一致性和安全性。

結論來看,Surround Vote 和 Double vote 看起來很像,但實質不完全相同,Double vote 是一個節點重複投票;Surround Vote 則是一個節點同時認證 2 個 Block. 提案違規和 Double vote 會導致區塊鏈發生不必要的分叉(Fork), 因為一但 Fork 就會有 2 條鏈。

不過 PoS 機制在效能和擴展性沒有大幅的進展,所以後來又衍生出改良過的 DPoS 共識機制。

DPoS(Delegated Proof of Stake, 代理權益證明)

前面提到的 PoS 可以理解成一家公司,今天有最多股份的人話語權(記帳權) 就越大;對於小股東來說,千分之幾、萬分之幾的股份也很難有什麼作為,只能得到股份的分紅而已。

所以經過改良後的 DPoS,能讓每一個人選出可以代表自己利益的人參與到記帳權的爭奪中,透過投票選出自己的代理人保障自己的利益。整個網絡中選舉出的多個節點(不是所有節點) 能夠在短時間內確認完所有的交易。

每個參與者都能夠選舉任意數量的節點生成下一個區塊,得票最多的前 n 個節點會被選擇成為區塊的創建者,而且 n 個節點的數量也由整個網絡投票決定,所以能確保系統是去中心化地運作。

DPoS 可以解釋為投票挖礦,因為 DPoS 和 PoS 同樣都要抵押加密貨幣資產,但只有票選出來的見證人(Witnesses) / 區塊生產者(Block Producers) 才能執行驗證和記帳的工作。

DPoS 的做法會讓節點數大幅下降,也因此效能和擴展性都比上述的 PoW 和 PoS 還要好許多,不過到後來還是會因為權力集中在少數節點上趨近於中心化,目前仍不斷地面臨區塊鏈的三角悖論問題當中。

結論

我們來簡單做個結論和快速複習:

PoW (工作量證明) PoS (權益證明) DPoS (代理權益證明)
定義 用工作量證明貢獻多寡,再根據貢獻多寡分配記帳權和獎勵。 擁有越多股權,就可以獲得更越多獎勵。 在 PoS 基礎上優化而來,透過投票制度選出區塊生產者,代表他們履行權利和義務。
優點 完全去中心化且公平公正 不需要購買礦機等昂貴設備,能源消耗低,較環保交易驗證效率與可擴展性比 Pow 好 記帳節點數量少、記帳效率高
缺點 交易驗證慢與手續費昂貴,整體效率差需花費昂貴設備來挖礦,能源消耗高,不環保 容易形成馬太效應,富者越富的現象可能會背離去中心化的理念,抵押的資產可能會被鎖倉,無法及時參與市場交易 削弱去中心化的程度、存在一定的中心化控制
代表 Bitcoin(BTC), Ethereum (ETH), Bitcoin Cash(BCH), Litecoin(LTC), Dogecoin(DOGE) …. Ethereum 2.0(ETH), EOS, Tezos(XTZ), Cardano (ADA), TRON(TRX), Avalanche(AVAX), BSC(BNB), Solana(SOL), Alchemix(ALCX) Steem, Lisk(LSK)
秒懂 礦工要拿「勞動證明」去領取獎勵。 只要有錢(貨幣)就有最大的話語權,錢多就可以當區塊生產者(Block Producers)。 有錢還不夠,還得要經過票選才有機會被推派為區塊生產者(Block Producers)。

除了上述這幾個主流、應用廣泛的共識機制外,還有像是 DPoW(延遲工作量證明)、PoB(Proof of Burn, 燒毀證明)、PBFT(Practical Byzantine Fault Tolerance, 拜占庭容錯) ,目前已知 Filecoin(FIL), Stacks(STX) 是應用最新的 PoX 共識機制。

這個遊戲規則仍然不斷地改良進化,在這個去中心化的帳本裡,始終圍繞「工作量」、「權益」、「空間」這三個元素去建立「怎樣記帳最有效」的共識機制。

這些共識規則都是在確保節點沒有行為的缺失,因為若發生違規、攻擊,會大大降低鏈上交易的效率,所以適當的懲罰是有其必要性的。

Ref

comments powered by Disqus