區塊鏈一致性協議
『壹』 區塊鏈的核心技術:共識機制&智能合約
不論你是否接受,未來終將改變。
區塊鏈技術給數字經濟時代帶來了巨變的曙光。
這種巨變在互聯網近50年的歷史上曾發生過兩次。第一次巨變是全球性的聯
網……第二次巨變是全球性的應用……第三次巨變正在蘊釀。
————摘自《騰訊區塊鏈方案白皮書》
當第一次讀到這段時,完全不敢想像這是一家世界級企業對一項新技術的評價,
瞬間引起了我的興趣。「巨變」是什麼含義?就是說完全有可能顛覆我們現有的
經濟結構和認知,徹底改變我們的生活方式。
一種從2009年才誕生的比特幣技術中 抽象而來的block chain(區塊鏈)技術,
居然獲得了這么高的評價,這難道不是很神奇的一件事么?不管這件事會不會發
生,已經令人非常激動了,我們正在迎接一項變革並且可能參與其中,不是任何
時代的人都有這種機會,何其幸運!
不論你是否接受,未來終將改變。全球眾多經濟學家、企業家、國家政要都在推
崇區塊鏈,聲稱區塊鏈技術將重塑商業、貨幣和世界,將顛覆互聯網、銀行、證
券、保險、物流、電力、製造、會計稅收、法律服務、文化創業、醫葯衛生等眾
多行業。
雖然說到「區塊鏈」,大家都會提到「去中心化」,也舉了很多形象的例子。但
是我是一個較真的人,希望能夠找到大家做出這種判斷,背後的邏輯到底是什
么?就需要搞懂一切推斷背後的本質,就需要了解區塊鏈的核心技術邏輯。
閱讀了一些書籍和資料之後,拋開「比特幣」不說,要了解區塊鏈,有兩個核心
名詞:共識機制、智能合約。
共識機制是區塊鏈技術的核心,要搞清楚」共識機制「,就不得不提著名的「拜
占庭將軍問題」,拜占庭將軍問題由萊斯利·蘭伯特提出的點對點通信中的基本
問題,主要是用於分析在分布式節點傳輸信息時如何保持數據的一致,即共識這
個問題。
拜占庭將軍問題
一組拜占庭將軍分別各率領一支軍隊共同圍困一座城市。為了簡化問題,將各支
軍隊的行動策略限定為進攻或撤離兩種。
因為部分軍隊進攻部分軍隊撤離可能會造成災難性後果,因此各位將軍必須通過
投票來達成一致策略,即所有軍隊一起進攻或所有軍隊一起撤離。因為各位將軍
分處城市不同方向,他們只能通過信使互相聯系。
在投票過程中每位將軍都將自己投票給進攻還是撤退的信息通過信使分別通知其
他所有將軍,這樣一來每位將軍根據自己的投票和其他所有將軍送來的信息就可
以知道共同的投票結果而決定行動策略。
系統的問題在於,將軍中可能出現叛徒,他們不僅可能向較為糟糕的策略投票,
還可能選擇性地發送投票信息。這樣各支軍隊的一致協同就遭到了破壞。由於將
軍之間需要通過信使通訊,叛變將軍可能通過偽造信件來以其他將軍的身份發送
假投票。而即使在保證所有將軍忠誠的情況下,也不能排除信使被敵人截殺,甚
至被敵人間諜替換等情況。因此很難通過保證人員可靠性及通訊可靠性來解決問
題。
假始那些忠誠的將軍仍然能通過多數決來決定他們的戰略,便稱達到了拜占庭容
錯。
拜占庭將軍問題被認為是容錯性問題中最難的問題類型之一。在一個有n個節點的
系統中,每一個節點都有一個輸入的值,其中一些節點具有故障,甚至是惡意
的。
在分布式計算中,不同的計算機通過通訊交換信息達成共識而按照同一套協作策
略行動。但有時候,系統中的成員計算機可能出錯而發送錯誤的信息,用於傳遞
信息的通訊網路也可能導致信息損壞,使得網路中不同的成員關於全體協作的策
略得出不同結論,從而破壞系統一致性。
但是中本聰在設計比特幣系統時應用的「工作量證明鏈」(PoW)模型很好的解決
了共識問題,至於什麼是「PoW」,感興趣的可以研究下。
智能合約是一套以數字形式定義的承諾(promises) ,包括合約參與方可以在
上面執行這些承諾的協議。一個合約就是存在區塊鏈里的程序。合約的參與雙方
將達成的協議提前安裝到區塊鏈系統中。在雙方的約定完成後,開始執行合約,
不能修改。至於合約執行所需要的「燃料」,也就是手續費,也需要提前支付。
智能合約可以解決日常生活中常見的違約問題,如果應用到各行業中,可以避免
違約的信用問題。
在區塊鏈出現之前,商業領域的信任關系通常要依賴於正直、誠信的個人、中介
機構或其他組織才能建立起來。在區塊鏈這個新興的領域中,信任關系的建立是
基於網路,甚至是網路上的某個對象。由區塊鏈驅動的智能合約將會要求雙方遵
守他們的承諾。
在區塊鏈體系中,共識機制和智能合約,保證了數據的真實性和合約執行力,實
現「去中心化」。當然還有很多技術層面的東西沒有說到,感興趣的可以深入了
解下。
雖然大部分人對於區塊鏈的認知還停留在比特幣、各種代幣上,也就是對金融行
業的變革。但是了解區塊鏈核心邏輯後,結合自己所在的行業「區塊鏈 +」,區
塊鏈的各行業的應用剛進前半場,相信都會想到很多好的創新方向。
『貳』 什麼是區塊鏈共識
所謂「共識機制」,是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相乾的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。再通俗一點來講,如果中國一名微博大V、美國一名虛擬幣玩家、一名非洲留學生和一名歐洲旅行者互不相識,但他們都一致認為你是個好人,那麼基本上就可以斷定你這人還不壞。
區塊鏈作為一種按時間順序存儲數據的數據結構,可支持不同的共識機制。共識機制是區塊鏈技術的重要組件。區塊鏈共識機制的目標是使所有的誠實節點保存一致的區塊鏈視圖,同時滿足兩個性質:
1)一致性。所有誠實節點保存的區塊鏈的前綴部分完全相同。
2)有效性。由某誠實節點發布的信息終將被其他所有誠實節點記錄在自己的區塊鏈中。
『叄』 區塊鏈一般概念摘要
雖然是個前端開發,但是阻擋不了我八卦各種熱門的心。下面簡單匯總下一些學習到的概念性東西。
1、區塊鏈技術隨比特幣誕生,因此先了解比特幣概念
2、比特幣是什麼
(1)、基於分布式網路的數字貨幣
3、比特系統運行原理
(1)、所有節點都會保存完整賬本
(2)、賬本保持一致性
4、區塊鏈記賬原理
hash函數在區塊鏈技術中有廣泛的運用
(1)、哈希函數hash:任何信息hash後會得到一個簡短的摘要信息
(2)、hash特點:簡化信息、標識信息、隱匿信息、驗證信息
(3)、區塊鏈記賬會把時間節點的賬單信息hash,構成一個區塊
(4)、比特幣系統約10分鍾記賬一次,即每個區塊生成的時間間隔大約10分鍾
(5)、記錄下一個賬單時,會把上一個區塊的hash值和當前賬單的信息一起作為原始信息進行hash
(6)、每個區塊都包含了之前區塊的信息,這些區塊組合成了區塊鏈
5、比特幣的所有權-非對稱加密應用
比特幣系統使用了橢圓曲線簽名演算法,演算法的私鑰由32個位元組隨機數組成,通過私鑰可以計算出公鑰,公鑰經過一序列哈希演算法和編碼演算法得到比特幣地址,地址也可以理解為公鑰的摘要。
(1)、轉賬是把比特幣從一個地址轉移到另一個地址
(2)、地址私鑰是非對稱的關系,私鑰經過一系列的運算(其中包含兩次hash),就可以得到地址,但是從地址無法得到私鑰
(3)、轉賬成功後廣播其他節點,其他節點驗證成功後再轉發到相鄰的節點,廣播的信息包含了原始的信息和簽名信息
(4)、驗證,其他節點驗證簽名信息是不是付款方用私鑰對交易原始信息簽名產生的,如果是才記錄(再驗證有足夠余額)
6、比特幣如何挖礦
(1)、完成記賬的節點可以獲得系統給予的一定數量比特幣獎勵(這個獎勵過程也就是比特幣的發行過程,因此大家把記賬稱為挖礦)
(2)、一段時間內只有一人可以記賬成功,因此需要收集沒有被收集的原始交易信息,檢查有沒有餘額、正確簽名
(3)、為了提高記賬難度,十分鍾左右只有一人可以記賬,hash結果需要若干0開頭,並且進行hash時引入隨機數變數
(4)、隨著更多礦工的加入,游戲難度越來越大,計算難度加大,電力損耗等加大,國內電力成本低,中國算力占整個網路的一半以上
(5)、網路中只有最快解密的區塊,才會添加到賬本中,其他的節點復制,保證賬本的唯一性。如果有節點作弊,導致整個網路不通過,則會被丟棄再也不會記錄到總賬本中。因此所有節點都會遵守比特幣系統的共同協議。
【關於區塊鏈會延伸到那些領域的思考】:
由以上的概念可以總結出,區塊鏈技術存在這安全性、唯一性、去中心化。
原則上是可以避免部分信息泄露,讓確認方既可以確認你的身份,又無需暴露自己的真是用戶信息等。
目前區塊鏈技術集中被運用再比特幣,我覺得後續更大的意義應該在需要數據私密性、安全性的領域。
【關於區塊鏈目前發展的瓶頸和局限性思考】:
由於每個節點都參與了整個賬本記錄活動,難免造成資源的浪費和損耗。以及加大了每個節點的計算難度,後續的發展和普及需要每個節點的硬體提升。
『肆』 區塊鏈具有哪些特點
據報道,區塊鏈具有去中心化、去信任和不可篡改等優勢特點。
而相比於互聯網,Cosmos所構想的區塊鏈網路在信息交互的同時,也實現了資產價值傳遞。通過IBC跨鏈協議,基於Cosmos的Tendermint Core開發的區塊鏈之間能實現代幣的跨鏈轉移,而對於類似於以太坊一類的基於PoW共識機制生成的公有鏈,可以使用Pegged Zone橋接。
文章來源:比特110網
『伍』 深入了解區塊鏈的共識機制及演算法原理
所謂「共識機制」,是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相乾的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。再通俗一點來講,如果中國一名微博大V、美國一名虛擬幣玩家、一名非洲留學生和一名歐洲旅行者互不相識,但他們都一致認為你是個好人,那麼基本上就可以斷定你這人還不壞。
要想整個區塊鏈網路節點維持一份相同的數據,同時保證每個參與者的公平性,整個體系的所有參與者必須要有統一的協議,也就是我們這里要將的共識演算法。比特幣所有的節點都遵循統一的協議規范。協議規范(共識演算法)由相關的共識規則組成,這些規則可以分為兩個大的核心:工作量證明與最長鏈機制。所有規則(共識)的最終體現就是比特幣的最長鏈。共識演算法的目的就是保證比特幣不停地在最長鏈條上運轉,從而保證整個記賬系統的一致性和可靠性。
區塊鏈中的用戶進行交易時不需要考慮對方的信用、不需要信任對方,也無需一個可信的中介機構或中央機構,只需要依據區塊鏈協議即可實現交易。這種不需要可信第三方中介就可以順利交易的前提是區塊鏈的共識機制,即在互不了解、信任的市場環境中,參與交易的各節點出於對自身利益考慮,沒有任何違規作弊的動機、行為,因此各節點會主動自覺遵守預先設定的規則,來判斷每一筆交易的真實性和可靠性,並將檢驗通過的記錄寫入到區塊鏈中。各節點的利益各不相同,邏輯上將它們沒有合謀欺騙作弊的動機產生,而當網路中有的節點擁有公共信譽時,這一點尤為明顯。區塊鏈技術運用基於數學原理的共識演算法,在節點之間建立「信任」網路,利用技術手段從而實現一種創新式的信用網路。
目前區款連行業內主流的共識演算法機制包含:工作量證明機制、權益證明機制、股份授權證明機制和Pool驗證池這四大類。
工作量證明機制即對於工作量的證明,是生成要加入到區塊鏈中的一筆新的交易信息(即新區塊)時必須滿足的要求。在基於工作量證明機制構建的區塊鏈網路中,節點通過計算隨機哈希散列的數值解爭奪記賬權,求得正確的數值解以生成區塊的能力是節點算力的具體表現。工作量證明機制具有完全去中心化的優點,在以工作量證明機制為共識的區塊鏈中,節點可以自由進出。大家所熟知的比特幣網路就應用工作量證明機制來生產新的貨幣。然而,由於工作量證明機制在比特幣網路中的應用已經吸引了全球計算機大部分的算力,其他想嘗試使用該機制的區塊鏈應用很難獲得同樣規模的算力來維持自身的安全。同時,基於工作量證明機制的挖礦行為還造成了大量的資源浪費,達成共識所需要的周期也較長,因此該機制並不適合商業應用。
2012年,化名Sunny King的網友推出了Peercoin,該加密電子貨幣採用工作量證明機制發行新幣,採用權益證明機制維護網路安全,這是權益證明機制在加密電子貨幣中的首次應用。與要求證明人執行一定量的計算工作不同,權益證明要求證明人提供一定數量加密貨幣的所有權即可。權益證明機制的運作方式是,當創造一個新區塊時,礦工需要創建一個「幣權」交易,交易會按照預先設定的比例把一些幣發送給礦工本身。權益證明機制根據每個節點擁有代幣的比例和時間,依據演算法等比例地降低節點的挖礦難度,從而加快了尋找隨機數的速度。這種共識機制可以縮短達成共識所需的時間,但本質上仍然需要網路中的節點進行挖礦運算。因此,PoS機制並沒有從根本上解決PoW機制難以應用於商業領域的問題。
股份授權證明機制是一種新的保障網路安全的共識機制。它在嘗試解決傳統的PoW機制和PoS機制問題的同時,還能通過實施科技式的民主抵消中心化所帶來的負面效應。
股份授權證明機制與董事會投票類似,該機制擁有一個內置的實時股權人投票系統,就像系統隨時都在召開一個永不散場的股東大會,所有股東都在這里投票決定公司決策。基於DPoS機制建立的區塊鏈的去中心化依賴於一定數量的代表,而非全體用戶。在這樣的區塊鏈中,全體節點投票選舉出一定數量的節點代表,由他們來代理全體節點確認區塊、維持系統有序運行。同時,區塊鏈中的全體節點具有隨時罷免和任命代表的權力。如果必要,全體節點可以通過投票讓現任節點代表失去代表資格,重新選舉新的代表,實現實時的民主。
股份授權證明機制可以大大縮小參與驗證和記賬節點的數量,從而達到秒級的共識驗證。然而,該共識機制仍然不能完美解決區塊鏈在商業中的應用問題,因為該共識機制無法擺脫對於代幣的依賴,而在很多商業應用中並不需要代幣的存在。
Pool驗證池基於傳統的分布式一致性技術建立,並輔之以數據驗證機制,是目前區塊鏈中廣泛使用的一種共識機制。
Pool驗證池不需要依賴代幣就可以工作,在成熟的分布式一致性演算法(Pasox、Raft)基礎之上,可以實現秒級共識驗證,更適合有多方參與的多中心商業模式。不過,Pool驗證池也存在一些不足,例如該共識機制能夠實現的分布式程度不如PoW機制等
這里主要講解區塊鏈工作量證明機制的一些演算法原理以及比特幣網路是如何證明自己的工作量的,希望大家能夠對共識演算法有一個基本的認識。
工作量證明系統的主要特徵是客戶端要做一定難度的工作來得到一個結果,驗證方則很容易通過結果來檢查客戶端是不是做了相應的工作。這種方案的一個核心特徵是不對稱性:工作對於請求方是適中中的,對於驗證方是易於驗證的。它與驗證碼不同,驗證碼是易於被人類解決而不是易於被計算機解決。
下圖所示的為工作量證明流程。
舉個例子,給個一個基本的字元創「hello,world!」,我們給出的工作量要求是,可以在這個字元創後面添加一個叫做nonce(隨機數)的整數值,對變更後(添加nonce)的字元創進行SHA-256運算,如果得到的結果(一十六進制的形式表示)以「0000」開頭的,則驗證通過。為了達到這個工作量證明的目標,需要不停地遞增nonce值,對得到的字元創進行SHA-256哈希運算。按照這個規則,需要經過4251次運算,才能找到前導為4個0的哈希散列。
通過這個示例我們對工作量證明機制有了一個初步的理解。有人或許認為如果工作量證明只是這樣一個過程,那是不是只要記住nonce為4521使計算能通過驗證就行了,當然不是了,這只是一個例子。
下面我們將輸入簡單的變更為」Hello,World!+整數值」,整數值取1~1000,也就是說將輸入變成一個1~1000的數組:Hello,World!1;Hello,World!2;...;Hello,World!1000。然後對數組中的每一個輸入依次進行上面的工作量證明—找到前導為4個0的哈希散列。
由於哈希值偽隨機的特性,根據概率論的相關知識容易計算出,預計要進行2的16次方次數的嘗試,才能得到前導為4個0的哈希散列。而統計一下剛剛進行的1000次計算的實際結果會發現,進行計算的平均次數為66958次,十分接近2的16次方(65536)。在這個例子中,數學期望的計算次數實際就是要求的「工作量」,重復進行多次的工作量證明會是一個符合統計學規律的概率事件。
統計輸入的字元創與得到對應目標結果實際使用的計算次數如下:
對於比特幣網路中的任何節點,如果想生成一個新的區塊加入到區塊鏈中,則必須解決出比特幣網路出的這道謎題。這道題的關鍵要素是工作量證明函數、區塊及難度值。工作量證明函數是這道題的計算方法,區塊是這道題的輸入數據,難度值決定了解這道題的所需要的計算量。
比特幣網路中使用的工作量證明函數正是上文提及的SHA-256。區塊其實就是在工作量證明環節產生的。曠工通過不停地構造區塊數據,檢驗每次計算出的結果是否滿足要求的工作量,從而判斷該區塊是不是符合網路難度。區塊頭即比特幣工作量證明函數的輸入數據。
難度值是礦工們挖掘的重要參考指標,它決定了曠工需要經過多少次哈希運算才能產生一個合法的區塊。比特幣網路大約每10分鍾生成一個區塊,如果在不同的全網算力條件下,新區塊的產生基本都保持這個速度,難度值必須根據全網算力的變化進行調整。總的原則即為無論挖礦能力如何,使得網路始終保持10分鍾產生一個新區塊。
難度值的調整是在每個完整節點中獨立自動發生的。每隔2016個區塊,所有節點都會按照統一的格式自動調整難度值,這個公式是由最新產生的2016個區塊的花費時長與期望時長(按每10分鍾產生一個取款,則期望時長為20160分鍾)比較得出來的,根據實際時長一期望時長的比值進行調整。也就是說,如果區塊產生的速度比10分鍾快,則增加難度值;反正,則降低難度值。用公式來表達如下:
新難度值=舊難度值*(20160分鍾/過去2016個區塊花費時長)。
工作量證明需要有一個目標值。比特幣工作量證明的目標值(Target)的計算公式如下:
目標值=最大目標值/難度值,其中最大目標值為一個恆定值
目標值的大小與難度值成反比,比特幣工作量證明的達成就是礦中計算出來的區塊哈希值必須小於目標值。
我們也可以將比特幣工作量的過程簡單的理解成,通過不停變更區塊頭(即嘗試不同nonce值)並將其作為輸入,進行SHA-256哈希運算,找出一個有特定格式哈希值的過程(即要求有一定數量的前導0),而要求的前導0個數越多,難度越大。
可以把比特幣將這道工作量證明謎題的步驟大致歸納如下:
該過程可以用下圖表示:
比特幣的工作量證明,就是我們俗稱「挖礦」所做的主要工作。理解工作量證明機制,將為我們進一步理解比特幣區塊鏈的共識機制奠定基礎。
『陸』 《區塊鏈項目開發指南》讀書筆記
ethash
答:在DAPP中,沒有一個中心伺服器來協調節點,或者決定什麼是對,什麼是錯,因此應對這個挑戰確實不容易,一致性協議(concensus protocol)可用於解決這個問題。
補充:共識演算法的核心就是解決拜占庭將軍問題(分布式網路一致性問題)。
答:修改bug或者更新DAPP很困難。
如果我需要從一個中心化應用抓取數據,如車輛違章信息,怎麼保證抓取的數據是真實有效的?
答:為了訪問中心化的API,可以使用Oraclize服務可以作為中間人,Oraclize為從中心化服務智能合約中抓取的數據提供TLSNotary驗證。
中心化應用的所有者需要有盈利才能長期維護應用的運行,而DAPP雖然沒有所有者,但是跟中心化應用一樣,DAPP節點需要硬體和網路資源才能維持運行。DAPP節點需要一些有用的回報來維持運行,於是內部貨幣登場了。大多數DAPP都有內置內部貨幣,或者可以說最成功的DAPP都有內置內部貨幣。如以太幣
授權的DAPP不對所有人開放。授權的DAPP繼承了免許可權DAPP的全部屬性,但需要許可權才能參與到網路中去。授權的DAPP與免許可權的DAPP的共識協議是不同的。授權的DAPP沒有內部貨幣。
超級賬本(Hyperledger)項目致力於開發創建授權的DAPP技術。
為什麼少數國家認定比特幣是非法的,大部分國家對此還沒有做出決定呢?原因如下:
星際文件存儲系統(InterPlanetary File System)是一個去中心化的文件系統。
目標是通過使交易幾乎瞬間完成,並隱藏交易賬戶的信息,還可以防止他人用ISP追蹤所有者。
任何人都可以成為以太坊網路中的礦工。每個礦工獨自解決問題,第一個解決問題的礦工是勝利者,它得到的回報是5個以太幣和該區塊中全部交易的交易費。區塊鏈中有多少個區塊沒有限制,可以生成的以太幣總數也沒有限制。
網路中的任何節點都可以檢查區塊鏈是否合法,首先檢查交易在區塊鏈中是否合法以及時間戳的驗證情況,然後檢查區塊的目標值和隨機數是否合法、礦工是否得到合法的回報等。
節點是如何發現網路中的其他節點的呢?
以太坊的節點發現協議:Kadelima,在這種協議中,有一種特殊節點Bootstrap節點。它保存了一段時間內與它連接的所有節點列表,但其本身不保存區塊鏈。
當對等節點連接到以太坊網路時,它們首先連接到Bootstrap節點。
可以有多種以太坊實例,也就是說,不同的網路每個都有自己的網路ID。
兩種主要的以太坊網路是主網和測試網。以太幣在主網上交易,而測試網供開發人員測試。
一個去中心化的通信協議,它支持廣播、用戶到用戶、加密信息等,但不用於傳輸大數據。
一個去中心化的文件系統。
geth為其他應用提供了與其通信的JSON-RPC API。使用HTTP、WebSocket和其他協議服務於JSON-RPC API。
JSON-RPC API提供的API分成如下類型:
以太坊網路中的節點默認用 30303 埠通信。
--networkid 用於指定網路ID,1代表主網網路ID,預設默認值為1,2代表測試網路ID
--dev 標記運行一個私有網路
--etherbase 指定挖礦賺取的回報存入的錢包地址
--unlock 解鎖一個或者多個賬戶
以太坊錢包與geth捆綁在一起。運行以太坊時,它會嘗試發現一個本地geth實例並與之連接;如果它不能發現geth正在運行,它就啟動自己的geth節點。以太坊錢包使用IPC與geth通信。geth支持以文件為基礎的IPC。
以太坊下一個主要更新的名字。Serenity把共識協議改為casper,並將整合狀態通道和分片。
Casper 實施了一個進程,使得它可以懲罰所有的惡意因素。這就是權益證明在Casper下是如何工作的:
驗證者押下一定比例的他們擁有的以太幣作為保證金。然後,他們將開始驗證區塊。也就是說,當他們發現一個可以他們認為可以被加到鏈上的區塊的時候,他們將以通過押下賭注來驗證它。
如果該區塊被加到鏈上,然後驗證者們將得到一個跟他們的賭注成比例的獎勵。但是,如果一個驗證者採用一種惡意的方式行動、試圖做「無利害關系」的事,他們將立即遭到懲罰,他們所有的權益都會被砍掉。正如你可以看到的,Casper被設計成可以在一個無需信任的系統上工作,並且是更加拜占庭容錯的。
支付通道 功能允許將兩個以上向另一個賬戶發送以太幣的交易合並成兩個交易。其工作原理為:假設X是一個視頻網站老闆,Y是個用戶。X每分鍾收費1個以太幣。現在X想讓Y看視頻期間每分鍾交一次錢。當然,Y可以每分鍾廣播交易,但是這里有些問題,例如X不得不等待確認,所以視頻就會中斷一會。支付通道可以解決這個問題。使用支付通道,Y可以廣播一個鎖定交易,為X把一些以太幣(比如100個以太幣)鎖定一段時間(比如24小時)。現在每看完一分鍾視頻,Y將發送一個簽名記錄表示可以解鎖,一個以太幣就進入X的賬戶,其餘的進入Y的賬戶。再過一分鍾,Y將發送一個簽名記錄表示可以解鎖,兩個以太幣就進入X的賬戶,其餘的進入Y的賬戶。Y觀看X網站的視頻過程中,該過程將持續。現在假設Y看完了100小時視頻或者24小時時間到了,X將向網路廣播最後的簽名記錄,以把錢收到自己的賬戶里。如果X沒有在24小時內提款,全款會返還給Y。所以在區塊鏈中,我們將看到lock和unlock兩種交易。
Sybil攻擊
51%攻擊
補充:不能存儲較大數據,目前有Swarm與IPFS等分布式存儲方式可供選擇
把所有東西都存在內存里,因此,節點一旦重啟,將丟失以前的狀態。
默認監聽埠:8545
『柒』 區塊鏈的共識機制是什麼
如何讓去中心化網路達成共識?
在區塊鏈系統當中,沒有一個像銀行一樣的中心化記賬機構,保證每一筆交易在所有記賬節點上的一致性,即讓全網達成共識至關重要。共識機制解決的就是這個問題。
目前主要的共識機制有工作量證明機制PoW和權益證明機制PoS。
PoW通過評估你的工作量來決定你獲得記賬權的機率,工作量越大,就越有可能獲得此次記賬機會。
PoS通過評估你持有代幣的數量和時長來決定你獲得記賬權的機率。這就類似於股票的分紅制度,持有股權相對多的人能夠獲得更多的分紅。
DPOS與POS原理相似,只是選了一些「人大代表」。 與PoS的主要區別在於節點選舉若干代理人,由代理人驗證和記賬。
隨著技術的發展,未來可能還會誕生更先進的共識機制。
『捌』 區塊鏈常見的三大共識機制
區塊鏈是建立在P2P網路,由節點參與的分布式賬本系統,最大的特點是「去中心化」。也就是說在區塊鏈系統中,用戶與用戶之間、用戶與機構之間、機構與機構之間,無需建立彼此之間的信任,只需依靠區塊鏈協議系統就能實現交易。
可是,要如何保證賬本的准確性,權威性,以及可靠性?區塊鏈網路上的節點為什麼要參與記賬?節點如果造假怎麼辦?如何防止賬本被篡改?如何保證節點間的數據一致性?……這些都是區塊鏈在建立「去中心化」交易時需要解決的問題,由此產生了共識機制。
所謂「共識機制」,就是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;當出現意見不一致時,在沒有中心控制的情況下,若干個節點參與決策達成共識,即在互相沒有信任基礎的個體之間如何建立信任關系。
區塊鏈技術正是運用一套基於共識的數學演算法,在機器之間建立「信任」網路,從而通過技術背書而非中心化信用機構來進行全新的信用創造。
不同的區塊鏈種類需要不同的共識演算法來確保區塊鏈上最後的區塊能夠在任何時候都反應出全網的狀態。
目前為止,區塊鏈共識機制主要有以下幾種:POW工作量證明、POS股權證明、DPOS授權股權證明、Paxos、PBFT(實用拜占庭容錯演算法)、dBFT、DAG(有向無環圖)
接下來我們主要說說常見的POW、POS、DPOS共識機制的原理及應用場景
概念:
工作量證明機制(Proof of work ),最早是一個經濟學名詞,指系統為達到某一目標而設置的度量方法。簡單理解就是一份證明,用來確認你做過一定量的工作,通過對工作的結果進行認證來證明完成了相應的工作量。
工作量證明機制具有完全去中心化的優點,在以工作量證明機制為共識的區塊鏈中,節點可以自由進出,並通過計算隨機哈希散列的數值解爭奪記賬權,求得正確的數值解以生成區塊的能力是節點算力的具體表現。
應用:
POW最著名的應用當屬比特幣。在比特幣網路中,在Block的生成過程中,礦工需要解決復雜的密碼數學難題,尋找到一個符合要求的Block Hash由N個前導零構成,零的個數取決於網路的難度值。這期間需要經過大量嘗試計算(工作量),計算時間取決於機器的哈希運算速度。
而尋找合理hash是一個概率事件,當節點擁有佔全網n%的算力時,該節點即有n/100的概率找到Block Hash。在節點成功找到滿足的Hash值之後,會馬上對全網進行廣播打包區塊,網路的節點收到廣播打包區塊,會立刻對其進行驗證。
如果驗證通過,則表明已經有節點成功解迷,自己就不再競爭當前區塊,而是選擇接受這個區塊,記錄到自己的賬本中,然後進行下一個區塊的競爭猜謎。網路中只有最快解謎的區塊,才會添加的賬本中,其他的節點進行復制,以此保證了整個賬本的唯一性。
假如節點有任何的作弊行為,都會導致網路的節點驗證不通過,直接丟棄其打包的區塊,這個區塊就無法記錄到總賬本中,作弊的節點耗費的成本就白費了,因此在巨大的挖礦成本下,也使得礦工自覺自願的遵守比特幣系統的共識協議,也就確保了整個系統的安全。
優缺點
優點:結果能被快速驗證,系統承擔的節點量大,作惡成本高進而保證礦工的自覺遵守性。
缺點:需要消耗大量的演算法,達成共識的周期較長
概念:
權益證明機制(Proof of Stake),要求證明人提供一定數量加密貨幣的所有權。
權益證明機制的運作方式是,當創造一個新區塊時,礦工需要創建一個「幣權」交易,交易會按照預先設定的比例把一些幣發送給礦工本身。權益證明機制根據每個節點擁有代幣的比例和時間,依據演算法等比例地降低節點的挖礦難度,從而加快了尋找隨機數的速度。
應用:
2012年,化名Sunny King的網友推出了Peercoin(點點幣),是權益證明機制在加密電子貨幣中的首次應用。PPC最大創新是其采礦方式混合了POW及POS兩種方式,採用工作量證明機制發行新幣,採用權益證明機制維護網路安全。
為了實現POS,Sunny King借鑒於中本聰的Coinbase,專門設計了一種特殊類型交易,叫Coinstake。
上圖為Coinstake工作原理,其中幣齡指的是貨幣的持有時間段,假如你擁有10個幣,並且持有10天,那你就收集到了100天的幣齡。如果你使用了這10個幣,幣齡被消耗(銷毀)了。
優缺點:
優點:縮短達成共識所需的時間,比工作量證明更加節約能源。
缺點:本質上仍然需要網路中的節點進行挖礦運算,轉賬真實性較難保證
概念:
授權股權證明機制(Delegated Proof of Stake),與董事會投票類似,該機制擁有一個內置的實時股權人投票系統,就像系統隨時都在召開一個永不散場的股東大會,所有股東都在這里投票決定公司決策。
授權股權證明在嘗試解決傳統的PoW機制和PoS機制問題的同時,還能通過實施科技式的民主抵消中心化所帶來的負面效應。基於DPoS機制建立的區塊鏈的去中心化依賴於一定數量的代表,而非全體用戶。在這樣的區塊鏈中,全體節點投票選舉出一定數量的節點代表,由他們來代理全體節點確認區塊、維持系統有序運行。
同時,區塊鏈中的全體節點具有隨時罷免和任命代表的權力。如果必要,全體節點可以通過投票讓現任節點代表失去代表資格,重新選舉新的代表,實現實時的民主。
應用:
比特股(Bitshare)是一類採用DPOS機制的密碼貨幣。通過引入了見證人這個概念,見證人可以生成區塊,每一個持有比特股的人都可以投票選舉見證人。得到總同意票數中的前N個(N通常定義為101)候選者可以當選為見證人,當選見證人的個數(N)需滿足:至少一半的參與投票者相信N已經充分地去中心化。
見證人的候選名單每個維護周期(1天)更新一次。見證人然後隨機排列,每個見證人按序有2秒的許可權時間生成區塊,若見證人在給定的時間片不能生成區塊,區塊生成許可權交給下一個時間片對應的見證人。DPoS的這種設計使得區塊的生成更為快速,也更加節能。
DPOS充分利用了持股人的投票,以公平民主的方式達成共識,他們投票選出的N個見證人,可以視為N個礦池,而這N個礦池彼此的權利是完全相等的。持股人可以隨時通過投票更換這些見證人(礦池),只要他們提供的算力不穩定,計算機宕機,或者試圖利用手中的權力作惡。
優缺點:
優點:縮小參與驗證和記賬節點的數量,從而達到秒級的共識驗證
缺點:中心程度較弱,安全性相比POW較弱,同時節點代理是人為選出的,公平性相比POS較低,同時整個共識機制還是依賴於代幣的增發來維持代理節點的穩定性。
『玖』 區塊鏈 --- 共識演算法
PoW演算法是一種防止分布式服務資源被濫用、拒絕服務攻擊的機制。它要求節點進行適量消耗時間和資源的復雜運算,並且其運算結果能被其他節點快速驗算,以耗用時間、能源做擔保,以確保服務與資源被真正的需求所使用。
PoW演算法中最基本的技術原理是使用哈希演算法。假設求哈希值Hash(r),若原始數據為r(raw),則運算結果為R(Result)。
R = Hash(r)
哈希函數Hash()的特性是,對於任意輸入值r,得出結果R,並且無法從R反推回r。當輸入的原始數據r變動1比特時,其結果R值完全改變。在比特幣的PoW演算法中,引入演算法難度d和隨機值n,得到以下公式:
Rd = Hash(r+n)
該公式要求在填入隨機值n的情況下,計算結果Rd的前d位元組必須為0。由於哈希函數結果的未知性,每個礦工都要做大量運算之後,才能得出正確結果,而算出結果廣播給全網之後,其他節點只需要進行一次哈希運算即可校驗。PoW演算法就是採用這種方式讓計算消耗資源,而校驗僅需一次。
PoS演算法要求節點驗證者必須質押一定的資金才有挖礦打包資格,並且區域鏈系統在選定打包節點時使用隨機的方式,當節點質押的資金越多時,其被選定打包區塊的概率越大。
POS模式下,每個幣每天產生1幣齡,比如你持有100個幣,總共持有了30天,那麼,此時你的幣齡就為3000。這個時候,如果你驗證了一個POS區塊,你的幣齡就會被清空為0,同時從區塊中獲得相對應的數字貨幣利息。
節點通過PoS演算法出塊的過程如下:普通的節點要成為出塊節點,首先要進行資產的質押,當輪到自己出塊時,打包區塊,然後向全網廣播,其他驗證節點將會校驗區塊的合法性。
DPoS演算法和PoS演算法相似,也採用股份和權益質押。
但不同的是,DPoS演算法採用委託質押的方式,類似於用全民選舉代表的方式選出N個超級節點記賬出塊。
選民把自己的選票投給某個節點,如果某個節點當選記賬節點,那麼該記賬節點往往在獲取出塊獎勵後,可以採用任意方式來回報自己的選民。
這N個記賬節點將輪流出塊,並且節點之間相互監督,如果其作惡,那麼會被扣除質押金。
通過信任少量的誠信節點,可以去除區塊簽名過程中不必要的步驟,提高了交易的速度。
拜占庭問題:
拜占庭是古代東羅馬帝國的首都,為了防禦在每塊封地都駐扎一支由單個將軍帶領的軍隊,將軍之間只能靠信差傳遞消息。在戰爭時,所有將軍必須達成共識,決定是否共同開戰。
但是,在軍隊內可能有叛徒,這些人將影響將軍們達成共識。拜占庭將軍問題是指在已知有將軍是叛徒的情況下,剩餘的將軍如何達成一致決策的問題。
BFT:
BFT即拜占庭容錯,拜占庭容錯技術是一類分布式計算領域的容錯技術。拜占庭假設是對現實世界的模型化,由於硬體錯誤、網路擁塞或中斷以及遭到惡意攻擊等原因,計算機和網路可能出現不可預料的行為。拜占庭容錯技術被設計用來處理這些異常行為,並滿足所要解決的問題的規范要求。
拜占庭容錯系統 :
發生故障的節點被稱為 拜占庭節點 ,而正常的節點即為 非拜占庭節點 。
假設分布式系統擁有n台節點,並假設整個系統拜占庭節點不超過m台(n ≥ 3m + 1),拜占庭容錯系統需要滿足如下兩個條件:
另外,拜占庭容錯系統需要達成如下兩個指標:
PBFT即實用拜占庭容錯演算法,解決了原始拜占庭容錯演算法效率不高的問題,演算法的時間復雜度是O(n^2),使得在實際系統應用中可以解決拜占庭容錯問題
PBFT是一種狀態機副本復制演算法,所有的副本在一個視圖(view)輪換的過程中操作,主節點通過視圖編號以及節點數集合來確定,即:主節點 p = v mod |R|。v:視圖編號,|R|節點個數,p:主節點編號。
PBFT演算法的共識過程如下:客戶端(Client)發起消息請求(request),並廣播轉發至每一個副本節點(Replica),由其中一個主節點(Leader)發起提案消息pre-prepare,並廣播。其他節點獲取原始消息,在校驗完成後發送prepare消息。每個節點收到2f+1個prepare消息,即認為已經准備完畢,並發送commit消息。當節點收到2f+1個commit消息,客戶端收到f+1個相同的reply消息時,說明客戶端發起的請求已經達成全網共識。
具體流程如下 :
客戶端c向主節點p發送<REQUEST, o, t, c>請求。o: 請求的具體操作,t: 請求時客戶端追加的時間戳,c:客戶端標識。REQUEST: 包含消息內容m,以及消息摘要d(m)。客戶端對請求進行簽名。
主節點收到客戶端的請求,需要進行以下交驗:
a. 客戶端請求消息簽名是否正確。
非法請求丟棄。正確請求,分配一個編號n,編號n主要用於對客戶端的請求進行排序。然後廣播一條<<PRE-PREPARE, v, n, d>, m>消息給其他副本節點。v:視圖編號,d客戶端消息摘要,m消息內容。<PRE-PREPARE, v, n, d>進行主節點簽名。n是要在某一個范圍區間內的[h, H],具體原因參見 垃圾回收 章節。
副本節點i收到主節點的PRE-PREPARE消息,需要進行以下交驗:
a. 主節點PRE-PREPARE消息簽名是否正確。
b. 當前副本節點是否已經收到了一條在同一v下並且編號也是n,但是簽名不同的PRE-PREPARE信息。
c. d與m的摘要是否一致。
d. n是否在區間[h, H]內。
非法請求丟棄。正確請求,副本節點i向其他節點包括主節點發送一條<PREPARE, v, n, d, i>消息, v, n, d, m與上述PRE-PREPARE消息內容相同,i是當前副本節點編號。<PREPARE, v, n, d, i>進行副本節點i的簽名。記錄PRE-PREPARE和PREPARE消息到log中,用於View Change過程中恢復未完成的請求操作。
主節點和副本節點收到PREPARE消息,需要進行以下交驗:
a. 副本節點PREPARE消息簽名是否正確。
b. 當前副本節點是否已經收到了同一視圖v下的n。
c. n是否在區間[h, H]內。
d. d是否和當前已收到PRE-PPREPARE中的d相同
非法請求丟棄。如果副本節點i收到了2f+1個驗證通過的PREPARE消息,則向其他節點包括主節點發送一條<COMMIT, v, n, d, i>消息,v, n, d, i與上述PREPARE消息內容相同。<COMMIT, v, n, d, i>進行副本節點i的簽名。記錄COMMIT消息到日誌中,用於View Change過程中恢復未完成的請求操作。記錄其他副本節點發送的PREPARE消息到log中。
主節點和副本節點收到COMMIT消息,需要進行以下交驗:
a. 副本節點COMMIT消息簽名是否正確。
b. 當前副本節點是否已經收到了同一視圖v下的n。
c. d與m的摘要是否一致。
d. n是否在區間[h, H]內。
非法請求丟棄。如果副本節點i收到了2f+1個驗證通過的COMMIT消息,說明當前網路中的大部分節點已經達成共識,運行客戶端的請求操作o,並返回<REPLY, v, t, c, i, r>給客戶端,r:是請求操作結果,客戶端如果收到f+1個相同的REPLY消息,說明客戶端發起的請求已經達成全網共識,否則客戶端需要判斷是否重新發送請求給主節點。記錄其他副本節點發送的COMMIT消息到log中。
如果主節點作惡,它可能會給不同的請求編上相同的序號,或者不去分配序號,或者讓相鄰的序號不連續。備份節點應當有職責來主動檢查這些序號的合法性。
如果主節點掉線或者作惡不廣播客戶端的請求,客戶端設置超時機制,超時的話,向所有副本節點廣播請求消息。副本節點檢測出主節點作惡或者下線,發起View Change協議。
View Change協議 :
副本節點向其他節點廣播<VIEW-CHANGE, v+1, n, C , P , i>消息。n是最新的stable checkpoint的編號, C 是 2f+1驗證過的CheckPoint消息集合, P 是當前副本節點未完成的請求的PRE-PREPARE和PREPARE消息集合。
當主節點p = v + 1 mod |R|收到 2f 個有效的VIEW-CHANGE消息後,向其他節點廣播<NEW-VIEW, v+1, V , O >消息。 V 是有效的VIEW-CHANGE消息集合。 O 是主節點重新發起的未經完成的PRE-PREPARE消息集合。PRE-PREPARE消息集合的選取規則:
副本節點收到主節點的NEW-VIEW消息,驗證有效性,有效的話,進入v+1狀態,並且開始 O 中的PRE-PREPARE消息處理流程。
在上述演算法流程中,為了確保在View Change的過程中,能夠恢復先前的請求,每一個副本節點都記錄一些消息到本地的log中,當執行請求後副本節點需要把之前該請求的記錄消息清除掉。
最簡單的做法是在Reply消息後,再執行一次當前狀態的共識同步,這樣做的成本比較高,因此可以在執行完多條請求K(例如:100條)後執行一次狀態同步。這個狀態同步消息就是CheckPoint消息。
副本節點i發送<CheckPoint, n, d, i>給其他節點,n是當前節點所保留的最後一個視圖請求編號,d是對當前狀態的一個摘要,該CheckPoint消息記錄到log中。如果副本節點i收到了2f+1個驗證過的CheckPoint消息,則清除先前日誌中的消息,並以n作為當前一個stable checkpoint。
這是理想情況,實際上當副本節點i向其他節點發出CheckPoint消息後,其他節點還沒有完成K條請求,所以不會立即對i的請求作出響應,它還會按照自己的節奏,向前行進,但此時發出的CheckPoint並未形成stable。
為了防止i的處理請求過快,設置一個上文提到的 高低水位區間[h, H] 來解決這個問題。低水位h等於上一個stable checkpoint的編號,高水位H = h + L,其中L是我們指定的數值,等於checkpoint周期處理請求數K的整數倍,可以設置為L = 2K。當副本節點i處理請求超過高水位H時,此時就會停止腳步,等待stable checkpoint發生變化,再繼續前進。
在區塊鏈場景中,一般適合於對強一致性有要求的私有鏈和聯盟鏈場景。例如,在IBM主導的區塊鏈超級賬本項目中,PBFT是一個可選的共識協議。在Hyperledger的Fabric項目中,共識模塊被設計成可插拔的模塊,支持像PBFT、Raft等共識演算法。
Raft基於領導者驅動的共識模型,其中將選舉一位傑出的領導者(Leader),而該Leader將完全負責管理集群,Leader負責管理Raft集群的所有節點之間的復制日誌。
下圖中,將在啟動過程中選擇集群的Leader(S1),並為來自客戶端的所有命令/請求提供服務。 Raft集群中的所有節點都維護一個分布式日誌(復制日誌)以存儲和提交由客戶端發出的命令(日誌條目)。 Leader接受來自客戶端的日誌條目,並在Raft集群中的所有關注者(S2,S3,S4,S5)之間復制它們。
在Raft集群中,需要滿足最少數量的節點才能提供預期的級別共識保證, 這也稱為法定人數。 在Raft集群中執行操作所需的最少投票數為 (N / 2 +1) ,其中N是組中成員總數,即 投票至少超過一半 ,這也就是為什麼集群節點通常為奇數的原因。 因此,在上面的示例中,我們至少需要3個節點才能具有共識保證。
如果法定仲裁節點由於任何原因不可用,也就是投票沒有超過半數,則此次協商沒有達成一致,並且無法提交新日誌。
數據存儲:Tidb/TiKV
日誌:阿里巴巴的 DLedger
服務發現:Consul& etcd
集群調度:HashiCorp Nomad
只能容納故障節點(CFT),不容納作惡節點
順序投票,只能串列apply,因此高並發場景下性能差
Raft通過解決圍繞Leader選舉的三個主要子問題,管理分布式日誌和演算法的安全性功能來解決分布式共識問題。
當我們啟動一個新的Raft集群或某個領導者不可用時,將通過集群中所有成員節點之間協商來選舉一個新的領導者。 因此,在給定的實例中,Raft集群的節點可以處於以下任何狀態: 追隨者(Follower),候選人(Candidate)或領導者(Leader)。
系統剛開始啟動的時候,所有節點都是follower,在一段時間內如果它們沒有收到Leader的心跳信號,follower就會轉化為Candidate;
如果某個Candidate節點收到大多數節點的票,則這個Candidate就可以轉化為Leader,其餘的Candidate節點都會回到Follower狀態;
一旦一個Leader發現系統中存在一個Leader節點比自己擁有更高的任期(Term),它就會轉換為Follower。
Raft使用基於心跳的RPC機制來檢測何時開始新的選舉。 在正常期間, Leader 會定期向所有可用的 Follower 發送心跳消息(實際中可能把日誌和心跳一起發過去)。 因此,其他節點以 Follower 狀態啟動,只要它從當前 Leader 那裡收到周期性的心跳,就一直保持在 Follower 狀態。
當 Follower 達到其超時時間時,它將通過以下方式啟動選舉程序:
根據 Candidate 從集群中其他節點收到的響應,可以得出選舉的三個結果。
共識演算法的實現一般是基於復制狀態機(Replicated state machines),何為 復制狀態機 :
簡單來說: 相同的初識狀態 + 相同的輸入 = 相同的結束狀態 。不同節點要以相同且確定性的函數來處理輸入,而不要引入一下不確定的值,比如本地時間等。使用replicated log是一個很不錯的注意,log具有持久化、保序的特點,是大多數分布式系統的基石。
有了Leader之後,客戶端所有並發的請求可以在Leader這邊形成一個有序的日誌(狀態)序列,以此來表示這些請求的先後處理順序。Leader然後將自己的日誌序列發送Follower,保持整個系統的全局一致性。注意並不是強一致性,而是 最終一致性 。
日誌由有序編號(log index)的日誌條目組成。每個日誌條目包含它被創建時的任期號(term),和日誌中包含的數據組成,日誌包含的數據可以為任何類型,從簡單類型到區塊鏈的區塊。每個日誌條目可以用[ term, index, data]序列對表示,其中term表示任期, index表示索引號,data表示日誌數據。
Leader 嘗試在集群中的大多數節點上執行復制命令。 如果復製成功,則將命令提交給集群,並將響應發送回客戶端。類似兩階段提交(2PC),不過與2PC的區別在於,leader只需要超過一半節點同意(處於工作狀態)即可。
leader 、 follower 都可能crash,那麼 follower 維護的日誌與 leader 相比可能出現以下情況
當出現了leader與follower不一致的情況,leader強制follower復制自己的log, Leader會從後往前試 ,每次AppendEntries失敗後嘗試前一個日誌條目(遞減nextIndex值), 直到成功找到每個Follower的日誌一致位置點(基於上述的兩條保證),然後向後逐條覆蓋Followers在該位置之後的條目 。所以丟失的或者多出來的條目可能會持續多個任期。
要求候選人的日誌至少與其他節點一樣最新。如果不是,則跟隨者節點將不投票給候選者。
意味著每個提交的條目都必須存在於這些伺服器中的至少一個中。如果候選人的日誌至少與該多數日誌中的其他日誌一樣最新,則它將保存所有已提交的條目,避免了日誌回滾事件的發生。
即任一任期內最多一個leader被選出。這一點非常重要,在一個復制集中任何時刻只能有一個leader。系統中同時有多餘一個leader,被稱之為腦裂(brain split),這是非常嚴重的問題,會導致數據的覆蓋丟失。在raft中,兩點保證了這個屬性:
因此, 某一任期內一定只有一個leader 。
當集群中節點的狀態發生變化(集群配置發生變化)時,系統容易受到系統故障。 因此,為防止這種情況,Raft使用了一種稱為兩階段的方法來更改集群成員身份。 因此,在這種方法中,集群在實現新的成員身份配置之前首先更改為中間狀態(稱為聯合共識)。 聯合共識使系統即使在配置之間進行轉換時也可用於響應客戶端請求,它的主要目的是提升分布式系統的可用性。
『拾』 區塊變化會導致後續節點的什麼變化
區塊鏈採用P2P網路,所有節點都是對等的。如果修改了本地區塊鏈,還需要傳播到所有節點,而一致性協議規定了半數以上的結果才能被支持。
這又大大增加了篡改的代價。篡改交易會導致默克爾樹根變化,從而導致區塊變化;而區塊變化會導致後繼節點的「前一區塊的哈希值」變化,從而導致整個鏈的變化;要將篡改後的區塊鏈同步到所有對等網路節點,由於一致性協議的限制,幾乎沒有可能。
區塊鏈(英語:blockchain 或 block chain)是用分布式資料庫識別、傳播和記載信息的智能化對等網路, 也稱為價值互聯網。中本聰在2008年,於《比特幣白皮書》中提出「區塊鏈」概念,並在2009年創立了比特幣社會網路,開發出第一個區塊,即「創世區塊」。
總結如下:
區塊鏈共享價值體系首先被眾多的加密貨幣效仿,並在工作量證明上和演算法上進行了改進,如採用權益證明和SCrypt演算法。隨後,區塊鏈生態系統在全球不斷進化,出現了首次代幣發售ICO;智能合約區塊鏈以太坊。
「輕所有權、重使用權」的資產代幣化共享經濟; 和區塊鏈國家。人們正在利用這一共享價值體系,在各行各業開發去中心化電腦程序(Decentralized applications, Dapp)。
在全球各地構建去中心化自主組織和去中心化自主社區(Decentralized autonomous society, DAS)。