摘要:更多區塊鏈知識共識機制是區塊鏈領域的核心概念,無共識,不區塊鏈。是比特幣采用的共識算法,從誕生起運行至今,表現穩健,是史上最成功的共識算法,沒有之一。挖到礦的礦工同時得到一筆算法賦予的獎勵,也就是一些比特幣。
更多區塊鏈知識
區塊鏈作為一個分布式系統,可以由不同的人或機構,將安裝了區塊鏈軟件的計算機(簡稱節點)加入到網絡里,然后共同計算數據、共同見證交易的執行過程,并確認最終計算結果。
如何協同這些松散耦合,互不信任的節點一起工作,達成信任關系,并保障一致性,持續性,可以抽象為“共識”過程。
共識需要解決的幾個核心問題是:
1. 誰在這個網絡里有記賬權,也就是做為leader發起一次記賬。 2. 做為互相不信任的參與者,為什么要采納和相信某一個人給出的記賬。 3. 怎么保證大家最終收到的結果都是一致的,無錯的。
公鏈上把“激勵”也作為一個核心的考慮項,來保證鏈的可持續發展,這是合理的,但是聯盟鏈不一定會采用代幣激勵,所以本文不把激勵放到這三個核心問題里。
以下介紹幾個典型共識的策略:
首先介紹 PoW(Proof Of Work)工作量證明。POW是比特幣采用的共識算法,從誕生起運行至今,表現穩健,是史上最成功的共識算法,沒有之一。
POW的哲學簡單可靠,大家理論上都可以發起記賬,拼算力,看誰能先算出一個小概率的隨機數,也就是俗稱的挖礦,這個隨機數在數學角度有嚴謹的推演,通過動態調整的難度策略限制,無論礦工投入的硬件多強,都能控制在10分鐘左右挖到一個礦,算力強的礦工因為可以在這段時間內計算更多的隨機數,所以更有機會比其他人先挖到礦。
挖到礦的礦工就可以廣播自己的記賬結果,全網的其他節點可以選擇接受這個結果,然后默默開始的下一輪的挖礦。挖到礦的礦工同時得到一筆算法賦予的獎勵,也就是一些比特幣。
如果剛好兩個礦工完全同時的挖到礦,那么就會出現競爭,網絡上出現了兩個記賬結果,這個時候其他節點會隨機選擇一個,或者按順序選擇自己先接收到的一個,繼續在它基礎上進行挖礦(基于該記賬結果的基礎,再挖到的新的一次礦,稱為新一次確認),由于網絡有隨機延遲,隨機策略等區別,一般會有一個記賬結果會被更多人接受,有機會更快的被持續確認六次,另一個就被拋棄了。這就是競爭和分叉處理。
POW的表現有點像單純的原始年代,大家都憑力量和速度去挖礦淘金,誰先挖到一塊金子,就勝出一次,看起來非常的公平公正,簡單粗暴,無可挑剔,其簡單性也讓這個體系得以穩定運行多年。畢竟拼了老命去挖礦的礦工,只會繼續拼命挖礦來加固自己的成果,輕易不會作弊,礦工作弊會導致網絡失去公信力,其辛苦挖來的持有的資產也會貶值。其他人想攻擊這網絡,需要投入的算力要比現有的礦工多,得比現有的已經很熟練很有力量的礦工更努力,如果收益不是很可觀,是不值得的 -- 換句話說,反正比特幣網絡有獎勵,如果我有這超越了其他礦工算力,為何不去挖礦賺錢,破壞網絡吃力不討好干啥(除非別有所圖)。于是,博弈論就這么玄妙的產生了作用。
同時,這種掰腕子秀肌肉的哲學,最讓人吐槽的就是不環保,能耗太多,效率較低,無腦算HASH,對科學計算也沒什么貢獻(曾經有將算力用于計算天文問題來挖礦的方案,但是沒有形成大規模效應),參與者能通過暴力堆積硬件,采用極致優化(只能做HASH計算的)芯片,在網絡里掌握話語權,也就是所謂的算力集中問題。
總結一下,之前的三個問題在POW里的解決方案
1. 誰在這個網絡里有記賬權,也就是做為leader發起一次記賬。 雖然大家都有機會參與記賬,算力強大的人更有機會成為記賬者,誰勁兒大誰當擂主。 2. 做為互相不信任的參與者,為什么要接受和相信某一個人給出的記賬。 因為記賬者付出了算力的巨大代價做為背書,他可以為記賬行為負責,可以傾向認為他不作惡。 3. 怎么保證大家最終收到的結果都是一致的,無錯的。
其他人可以從網絡里同步到記賬者的數據,通過區塊里的hash算法校驗數據,因為區塊數據有難以產生(需要算力),容易校驗(hash容易計算)的特性,大家對數據校驗通過后都采用記賬者給出的數據,全網一致,如有分叉,6次確認后解決。
考慮到POW的短板,行業里提出了PoS(Proof Of Stake)權益證明的思路。PoS的基本思想是讓在網絡中擁有更多權益的人有機會在更短時間里做更多的決定,因為畢竟權益持有者人更傾向維護網絡的利益,且害怕作惡后被懲罰,損傷自己的聲望和財產。
PoS的算法實現有很多變種,其中一個比較典型的是引入了“幣齡”的概念,比如,一個人手里拿了一筆錢,而且持續拿了一段時間,那么基本上可以認為這個人是比較忠于這個網絡的,他的權益值就比較高了。為了鼓勵人們持有代幣,一般是有利息可圖的,所以也鼓勵了人們傾向持有資產,不斷增值,維持權益。
對權益較高的人,如何獲得記賬權力,也有多個變種實現,在繼續采用挖礦算法的網絡里,可以加權的降低他的挖礦難度,讓他更容易挖到礦,獲得記賬權。或者采用加權的輪詢算法,輪流讓權益擁有者輪流記賬。
可以認為,PoS引入了財富做為公信力背書的一個考慮角度,和簡單粗暴誰有力量誰說了算的PoW對比,有利于降低純計算資源的消耗,看起來也沒有那么肌肉感了。
總結一下PoS:
1. 誰在這個網絡里有記賬權,也就是做為leader發起一次記賬。 持有權益較多的一撥人競爭或輪流記賬。 2. 做為互相不信任的參與者,為什么要接受和相信某一個人給出的記賬。 記賬者用自己的財力做為背書,大家相信他們不會輕易作惡,如果作惡,可以用經濟方式懲罰他。 3. 怎么保證大家最終收到的結果都是一致的,無錯的。 通過驗證記賬權益和數據,大家相信這一輪的記賬者,一致使用他的記賬結果 。
在PoS的基礎上,又發展出了一個DPoS的共識算法。和PoS對比多了D,全稱是“Delegated Proof of Stake,股份授權證明機制”,原理是讓所有持幣人都有機會選出自己的代表,比如全網有1萬個參與人,通過一定的算法,參與人以自己的代幣為權益證明,選出101個代表,這些代表可以輪流或者采用PoS算法加權的獲得記賬權,進行記賬。
DPoS理論上不要求選出的代表個體本身是權益所有人,看起來更民主,更開放。網絡參與者做為選民有機會選出自己的代表,來給自己的利益代言。如果選出的代表不作為(輪到自己記賬時不記賬),或者作惡,可以把他們踢掉,如有必要進行懲罰(選民們也有可能被懲罰)。否則記賬者有機會獲得相應的獎勵,也有可能將獎勵發放給選出自己的民眾們。
總結一下DPoS:
1. 誰在這個網絡里有記賬權,也就是做為leader發起一次記賬。 擁有權益的散戶,分別選出自己的代表參與記賬。 2. 做為互相不信任的參與者,為什么要接受和相信某一個人給出的記賬。 大家相信代表,因為他們能代表相當一部分人的在網絡里的利益。 3. 怎么保證大家最終收到的結果都是一致的,無錯的。 相信代表,一致使用他的記賬結果 。
以上的都是在公有鏈里采用的共識算法,都能解決可信和一致性的問題,區別在于組織方式和計算代價不同,有一點相同的是:都是追求“最終一致性”,而不是強一致性。
也就是說在網絡中,由于網絡故障、通信分區、權益和算力相近等情況,依舊可能有多個記賬者在競爭記賬,所以每次記賬可以理解成一次提案,大家暫時保存這一次提案的競爭結果,最終確定下來可能要依賴多次競爭,也就是所謂的一頓燒烤解決不了的問題,那就再來一頓,然后再一頓。直到大家看到,之前的某一次記賬,都被大家接受了,而且是接受了好幾次,才達成最終一致性,這個時間是相對比較長的,比如比特幣的6次確認,需要一個小時。公鏈里的共識以及其他交易行為,可以理解為一種概率游戲,隨著時間推移和投入到共識里的工作量或權益越多,確定性的概率就越大,大到概率上幾乎不可逆,或者必須投入匪夷所思的大量的資源才能推翻時,就達成了確定性。
我們的目標是實現聯盟鏈的共識,聯盟鏈和公有鏈不同的是,參與記賬的人,身份是可知的、可控的,可能有監管或者經濟共同利益之類的措施來約束他們。
另外,聯盟鏈的場景傾向與追求強一致性,也就是說一筆交易發生了,就不能再被分叉或回滾推翻了。所以聯盟鏈通常使用的是PBFT和Raft算法以及其變種。
所以我們的實現是可動態配置式的記賬者列表,在具備共同利益的的聯盟鏈網絡里,所有或大部分機構都參與記賬,大家一起維護商業利益,如果某個機構在記賬過程中犯錯、作弊、或者不工作,都可以通過少數服從多數容錯,然后進行事后追責,保護大家的利益。算法的容錯能力是能接受1/3成員的錯誤和作弊,如7個成員,只要作惡或出錯的成員在兩個和兩個以下,網絡就是安全的。但如果網絡里有很多個作惡者,那么這個網絡可被視為失效。
BFT算法的過程是一次提案,幾步提交,在這個過程中有復雜的狀態機維護的細節。起始時可按一些簡單的規則,如輪次機制,讓某一個機構的某一個節點在某個區塊高度上,成為議長,得到記賬權,然后進行記賬提案,其他節點對提案進行數據驗證(驗證簽名,驗證交易數據,驗證合約計算結果等),覺得都ok之后,返回一個簽名確認,議長收集大家的簽名,達到一定的數量后,認為達成少數服從多數的效果,則將記賬結果廣播出去,大家在將記賬結果存下來之前,還可以再進行一次投票和計票,確認大多數人都收妥了記賬數據并無異議,再將記賬數據存下來,開始下一輪。
可以形象的描述下:一個團體,比如有7個人,大家都有投票權,要對某次聚餐計劃的選擇進行投票,這個時候某一個人發起一個提議,大家看ok呀,紛紛舉手,提議的人定時數數,舉手的人超過4個,就達成決議,否則再換一個人提議。如果提議達成,決定了吃什么什么時候吃,發起人給大家群發個郵件制定日程,大家接受日程并給出反饋,當看到有不少人都接受了郵件日程不會反悔,那么,這頓飯就成行了。
如果團隊人數較多,也是可以讓一部分人成為投票代表,比如一個上百人的班里,由選出來的班干部投票就可以了。其他人成為“觀察者”,無條件接受這一部分人通過拜占庭容錯算法得出的結果,和DPoS的思想類似。
PBFT算法在參與人數較少的聯盟鏈里,有相當可觀的實用價值:
1. 少數服從多數,體現了民主性。 2. 大家參與投票,都能刷存在感。 3. 不需要粗暴的算力介入,相當環保。 4. 多步提交反復確認,一旦共識完成就達成一致性,可以短時間內就達成確定性的交易。 5. 每次投票都有數字簽名,可以抗抵賴,不會投了票不認。 6. 可以不依賴代幣經濟鼓勵來保證記賬的正確性。
所以,PBFT相對公鏈的各種共識,可以理解成特定的已知身份的團隊內的快速達成一致的一種高效算法,特定團隊的形成也是至關重要的,所以會有PBFT-Auth(經過驗證的記賬人), PBFT-PoS,PBFT-DPoS等多種變化。是否需要在投票和容錯的部分進行常場景性的優化(如帶加權系數的投票,容錯由1/3改為1/2或者改為0容錯等等),要看場景需求,目前來看,保證有一個相對簡單,運行穩定的PBFT算法是首要的。
總結一下PBFT:
誰在這個網絡里有記賬權,也就是做為leader發起一次記賬。
所有人平等的輪流參與記賬,或者經過許可的,或者大家選出來的一撥人進行輪流記賬。
做為互相不信任的參與者,為什么要接受和相信某一個人給出的記賬。
少數服從多數,每次記賬的結果都是多數派的投票勝利。
怎么保證大家最終收到的結果都是一致的,無錯的。
通過多步提交反復確認,保證提案和最終結果都是正確的,是多數人承認的,是全網一致的。
PBFT的小問題在于狀態機維護復雜,投票往返步驟較多,容易受網絡波動影響,對網路延遲和丟包相當敏感,當參與者數量增多,不穩定因素會被放大,其穩定性和效率可能會顯著下降,這也是我們在持續的踩坑和優化的部分,要做到一個企業級環境可用的,健壯的PBFT共識,是非常有挑戰性的,不但需要對區塊鏈的數據和運作哲學有很深的理解,也要對分布式系統的通信,協作,性能優化有大量的實踐經驗。
結合以太坊帳戶模型和智能合約引擎機制,我們對PBFT也做了大量的優化,比如把串行的任務改成并行,把不必要重復計算的數據(如區塊數據打包,簽名等)緩存下來,快速偵測記賬者存活,加快切換速度等等,都是復雜的工程,需要一次又一次迭代的長夜漫漫的腦補、實現、測試、修BUG、壓測、量化,足以重新寫一篇長文了。
聯盟鏈還可以采用一種共識算法Raft,簡單的說可以理解成大家選出一個記賬者,如果它穩定運行沒有掛掉,就由他記賬,大家無條件接受他的記賬結果,相信他是誠實的,如果他掛掉了,那么大家是可以通過超時或網絡探測感知,然后快速啟動一輪投票,來選出一個新的記賬者,然后繼續無條件的等它記賬,這樣就達成了容錯性。
這在信任度較高,機構組成簡單的的聯盟鏈或者一個機構內的私有鏈里,是比PBFT更加高效的一種做法,因為不需要多步的反復確認,受網絡影響的可能性也小很多。
但是Raft算法并不解決記賬者耍花樣的問題,如果選出的記賬者作惡,其他人當時是沒有辦法識破的,最多只能通過事后檢查來發現,在確定性要求較高的場景,比如收了錢就要交貨的DVP場景里,容易出現錢貨兩空的情況。另外,Raft算法有可能在網絡波動或競爭情況下出現短暫的網絡分叉,需要多次確認。
Raft適合用于專注解決可用性(保持系統穩定運行),追求相對較高效率(比優化后的PBFT大致高20~50%的效率)的場景,基本忽略欺詐可能,且對交易延時要求可以放寬(等待多次確認)。
為了在速度和抗欺詐之間獲得平衡,也有出現PBFT-Raft混用的共識,比如讓一個記賬者固定出塊,其他人極少輪次的投票,或者進行快速的后置檢測,如果發現Raft的記賬者在作惡,立刻回滾沖正,并踢掉并懲罰作惡的記賬者等等,這就有一些場景化的需求需要考慮了。
總結一下Raft:
1. 誰在這個網絡里有記賬權,也就是做為leader發起一次記賬。 選出一個記賬者,讓他做為唯一的可信者進行記賬,除非掛掉。 2. 做為互相不信任的參與者,為什么要接受和相信某一個人給出的記賬。 無條件相信記賬者,from the beginning till the last,至死不渝。 3. 怎么保證大家最終收到的結果都是一致的,無錯的。 記賬者說的都是對的,大家都用他的數據,是一致的。
回顧一下:
共識算法的研究是很有意思的課題,我們也看到共識算法的選擇和演進,隱約和人類社會的不同階段是對應得上的。算法其實是社會里人和財產的關系在計算機世界的一種映射,研究共識算法,不僅是需要研究計算機理論(圖靈機時代,其實計算機也能體現人性),也要去深刻的理解社會學,經濟學,心理學,博弈論。
畢竟,在一個不完全互信的環境里,宛如黑暗森林,需要復雜的算法來協同、斡旋各懷心事的參與者,并且能懲罰作惡的、獎勵誠實的,目前社會制度其實也沒有完美的做到,一切努力只是盡量的使系統運作的盡量順暢,讓世界更好一點點。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24025.html
摘要:區塊鏈科技原罪還是交往理性迄今為止,我們尚未見到從中本聰開始的任何一位區塊鏈開發者提及哈貝馬斯,但區塊鏈卻奇妙契合了哈貝馬斯對理想話語情境的描述。 生活在我們這個時代的人,不可避免的活在消費控制之下。著名的哲學家馬爾庫塞說,人們似乎是為商品而生活。小轎車、高清晰度的傳真裝置、錯層式家庭住宅以及廚房設備成了人們生活的靈魂。人們被被消費欲望所控制,自主性喪失,個性泯滅,成為單向度的人。 s...
摘要:黑暗騎士年,一部名為蝙蝠俠前傳黑暗騎士的電影上映。那些被懷疑又站出來否認的人,或許他們真的不是,又或許,他們只是因為知道,在黑暗騎士被徹底打敗之前,蝙蝠俠是不能安睡的。 showImg(https://segmentfault.com/img/bVbfZEO?w=564&h=846); 黑暗騎士 2008年,一部名為《蝙蝠俠前傳:黑暗騎士》的電影上映。影片中,新一輪的混亂席卷了科技與污...
摘要:小雪又問你到底挖的啥礦呀比特幣。據說,世界上第一個區塊鏈礦工叫中本聰。但隨著以比特幣為首的虛擬貨幣暴漲,挖礦成為了一個完整的產業鏈,有專門的礦機礦場礦池等。 某個夏日,晴。某鬧市區的一個咖啡廳里,一男一女對桌而坐。兩人相看無言,不太自在,于是各自開始看自己的手機。 女孩叫小雪,大學畢業5年了,至今還沒對象,父母急得團團轉,到處找人安排她相親。這是小雪的第38次相親。爸媽說這人是挖礦的,...
摘要:由此,監察官制度應運而生。公元前年,羅馬共和國設立監察官。兩名監察官的同僚協議性質使其互相牽制監察官的任期為十八個月且不得連任也有效限制了其權力。和羅馬一樣,監察官屬于高級職位。世界中,具有挖礦權力的礦工正由監察官通過投票選舉產生的。 在講正題之前,先給大家講個小故事: showImg(https://segmentfault.com/img/bVbgZgF?w=472&h=316);...
摘要:在法國,這場抗議運動被稱作五月風暴,一度使法國資產階級國家機器受到威脅,但終究還是被平息下去了。這種二元項的對立并非是平等并置的,邏各斯中心主義通過設立第一項的優先性而迫使第二項從屬于它,例如,把女人視為第二性。 1968年,一場激進學生運動席卷整個歐美。在法國,這場抗議運動被稱作五月風暴,一度使法國資產階級國家機器受到威脅,但終究還是被平息下去了。情緒受到嚴重壓抑的大學生,對在學潮中...
閱讀 3023·2021-09-22 15:52
閱讀 2902·2019-08-30 15:55
閱讀 2699·2019-08-30 15:53
閱讀 2453·2019-08-30 13:21
閱讀 1620·2019-08-30 13:10
閱讀 2481·2019-08-26 12:09
閱讀 2563·2019-08-26 10:33
閱讀 1801·2019-08-23 18:06