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