3 區塊鏈共識機制

2021-08-19 15:47:06 字數 3148 閱讀 7623

上篇提到「區塊鏈到底是怎麼執行的」一文中,提到了「打包 transaction」和「廣播交易」這兩個概念,因為概述的原因,當時只帶著你走了一遍過程。其實,以上談到的兩個內容正是區塊鏈最核心的技術內容之一:共識機制

區塊鏈發展至今,已經形成了各種不同型別的共識機制,在今天的文章中,我們就展開聊一聊區塊鏈共識機制到底是什麼,以及區塊鏈的共識過程到底是怎樣的。

分布式系統的經典問題: 拜占庭將軍問題

拜占庭將軍問題其實是虛構出來的乙個故事,是為了方便通俗地介紹分布式系統所面臨的難題。這裡我僅作乙個簡短的說明,你可以在中文社群找到更豐富的通俗解釋材料。

為了避免重複,我們換一種表述形式,還是以上一次的村子為例,假設隨著村子和人口的發展,大村子演變成了十乙個小村子並分散在各地,各地的通訊只能靠信鴿進行。

大家約定了每年都會舉辦乙個相親大會,至於誰能舉辦,每年輪流從兩個備選村子,a 村和 b 村中選擇乙個,然後大家投票,票數多者可以贏得舉辦權。

由於地圖很大,任何乙個村子的投票都無法靠乙隻信鴿傳輸到每個村子,必須靠乙個中繼村子代為傳輸,這也就意味著有中繼村子可以讀到其他村子的投票資訊。

那麼,如何防止下面兩個問題的出現呢?

投票者的「精分」,這裡所謂的「精分」是指某個村子的投票行為不一致,傳送給第乙個村子的投票訊息為「投票給 a」,而傳送給第二個村子的投票訊息卻為「投票給 b」。

中繼村子作弊,即篡改上一村的投票訊息。

上面討論的問題我們可以認為是簡化的 「拜占庭將軍問題」(完整的拜占庭將軍問題還有將軍 - 副官模型,如果感興趣的話,你可以自行閱讀)。

我們回頭再看區塊鏈。區塊鏈本質上也是分布式系統的一種,其共識機制也是為了上述問題而提出的解決方案。

什麼是區塊鏈共識機制?

共識機制是區塊鏈是核心的組成要素之一,它決定了區塊鏈的業務吞吐量、交易速度、不可篡改性、准入門檻等等,是最為關鍵的技術要素之一。

要理解區塊鏈共識機制,首先就需要理解區塊鏈共識機制到底解決了什麼問題。

共識機制主要解決了兩個問題:

以上兩部分共同構成了區塊鏈共識機制。

另外補充一點,在位元幣社群,「共識」(consensus)這個詞已經跳出了技術的範疇。通常人們在表述乙個位元幣上的問題時,共識的內涵還包括位元幣的使用者、開發者、礦工來達成社群共識的部分,所以「共識」這個詞在區塊鏈領域還有些「民主」的味道,不單單是技術領域的「共識」。

最經典的入門型共識機制:pow 工作量證明

pow (proof of work)工作量證明可以解決上述的兩個問題,

產生記賬者的隨機性其實來自於誰最先計算出 24 點的答案,這個問題可以簡化成誰擁有的計算資源更多,誰就擁有整個系統的最大概率的記賬權。一旦這個概率超過一半以上,那麼這個系統就有一定的中心化風險。

如何理解上面一段話呢?

舉個例子,李四家發明了一種算盤,可以快速計算 24 點答案,比起其他人掰手指頭,李四家總是有很大的概率拿下記賬權,換句話說,也就是李四和全村其他所有人競爭,相當於算盤對全村其他人手指頭的競爭。

如果算盤足夠強大,就能有一半的概率獲得記賬權,那麼李四個人的誠實性,就成為了系統的唯一破綻。

比如李四在第一次記賬時篡改部分交易,第二次還是他記賬,還繼續篡改交易,那麼兩次修改如果自洽的話,是可以形成假賬的,這就是所謂的中心化風險。

所以在pow 這種機制中,計算資源(又稱算力)是決定記賬權的唯一因素。與之對應的,便是計算難度。

計算難度又稱作挖礦難度,計算難度是區塊鏈為了控制產生答案的速度,比如平均 10 分鐘就有乙個答案產生,平均 2 分鐘乙個答案產生。

在上述場景中,因為李四有了算盤,強大的計算資源突然加入以後,肯定會讓整個系統的產生答案的速度變快很多,作為系統本身會自適應,將難度提公升,降低答案產生的速度。

上面介紹了這麼多,其實是想引出另外乙個問題,pow 到底是如何避免作弊者的呢?答案就是計算資源(算力)。

設想,如果乙個作弊者想篡改信封裡面的交易,首先得獲得記賬權,也就是裝信封的權利。

而影響記賬權的唯一因素只有計算資源(算力)的大小,如果想篡改交易,只能投入大量的計算資源與整個系統中其他所有人進行對抗,這是十分困難的,尤其在整個系統有一定基礎計算資源(算力)的情況下。

pow 中乙個有趣的設計是激勵機制,在 pow 共識機制下,我們假設所有參與者都是理性的,理性的意思就是單純逐利,不考慮家庭、愛好等其他因素。有了理性的前提,pow 共識機制會給每個誠實的記賬者予以獎勵,這個設計可以抗擊作弊收益的問題。

怎麼進行抗擊的呢?整個過程是這樣的,理性的人如果作弊、篡改賬本肯定需要投入成本,也就是計算資源,收益是篡改賬本獲得的收益減去投入成本,這個收益往往小於誠實計算所獲得的收益。所以,作弊者在作弊過程中投入的計算資源過大,反而得不償失。

pow 工作量證明的補充:解決雙花攻擊

上面給出了乙個結論,我們說作弊的收益往往小於誠實計算的收益。這一點其實對應到區塊鏈領域有個著名的問題:雙花攻擊(double-spending)

雙花攻擊是指乙個代幣被花費了兩次,這在任意的區塊鏈系統中是不被允許的。如果避免了雙花問題,基本就能避免上述作弊中收益過大的問題,因為攻擊者首先要竊取到你的私鑰,同時又能控制了你的計算資源(算力)。

第一種又被稱為未確認的 transaction,第二種信封中所有的交易被稱作已確認的 transaction。

所有記賬節點都會遵循以下兩條規則:

規則一:乙個代幣如果已經被花費,那麼會被標記成已花費,如果再次接收到這個代幣被花費的請求,那麼記賬節點會拒絕打包這筆交易;

規則二:如果同時接收到兩個信封,這兩個信封中裝的兩筆交易出現了乙個代幣被花費了兩次的情況,這種情況也就是我們所說的分叉(fork),那麼選擇挖礦難度比較大的那個信封。

規則一避免了未確認的交易出現雙花,規則二基本避免已經確認的交易中(信封中)的雙花問題。

假設作弊者的計算資源(算力)佔整個系統的 30%,那麼連續兩次獲得記賬權的概率是 9%,看起來作弊的可能性還是挺高的,如果是連續 6 次獲得記賬權呢?概率直降到萬分之七。

在位元幣中,這個 6 也就是 6 次確認,表示連續 6 個塊過去了,如果我的交易沒有被雙花的話,那麼它被篡改的可能性將越來越小,最後變得幾乎不可能被篡改。這也是區塊鏈不可被篡改說法的由來。

試想,如果任何作弊者花了大量的成本獲取了系統 30% 的計算資源(算力),最後只有萬分之七的概率獲得篡改的可能性,比起作弊,還不如誠實記賬的收益高。

區塊鏈共識機制

1 工作量證明共識機制pow proof of work 工作量證明是指使用者使用計算機算力耗電的成本,人稱挖礦,率先算出區塊唯一雜湊的礦工會得到這個區塊的獎勵,然後礦工們爭著計算出區塊的雜湊特定唯一值 這一數學問題答案 代表 位元幣 2 權益證明共識機制pos proof of stake 權益證...

第3講 淺說區塊鏈共識機制

我在第2講 區塊鏈到底是怎麼執行的 一文中,提到了 打包transaction 和 廣播交易 這兩個概念,因為概述的原因,當時只帶著你走了一遍過程。其實,以上談到的兩個內容正是區塊鏈最核心的技術內容之一 共識機制。區塊鏈發展至今,已經形成了各種不同型別的共識機制,在今天的文章中,我們就展開聊一聊區塊...

區塊鏈有哪些共識機制

位元幣在block的生成過程中使用了pow機制,乙個符合要求的block hash由n個前導零構成,零的個數取決於網路的難度值。要得到合理的block hash需要經過大量嘗試計算,計算時間取決於機器的雜湊運算速度。當某個節點提供出乙個合理的block hash值,說明該節點確實經過了大量的嘗試計算...