比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

詳解Tendermint共識算法_PRO

Author:

Time:1900/1/1 0:00:00

原作者:靈魂機器Tendermint是Tendermint公司開源的的一個項目,是一個pBFT算法的變體,Tendermint和pBFT的關系類似于Raft和Paxos的關系,Tendermint是pBFT的簡化版。算法核心流程

Tendermint核心算法流程如下圖所示:

Tendermint算法先隨機選出一些節點作為Validators(怎么選擇驗證節點?見后面的“如何選擇驗證節點”),然后選擇其中一個validator作為proposer節點。Proposer節點開始監聽并收集全網的所有交易,幾分鐘后,組裝一個新塊,并向全網廣播,這個就是proposalblock。全網所有validator節點收到這個proposalblock后,開始讀取這個block里的所有交易,一一進行驗證,如果沒有問題,就發出一條pre-vote投票消息,表示同意這個block,投一個肯定票,如果發現block里有非法交易,則投一個反對票,這些投票消息會被廣播到所有validator節點,所以每個validator節點既會發出一個投票消息,又會收集別人的投票消息,當發現收集到的同意投票數量超過2/3時,就發出一個pre-commit投票信息,這是第二階段的投票了,這是每個節點也在監聽并收集pre-commit的投票消息。當一個validator節點收集到的pre-commit同意票數超過2/3時,說明這個block是得到了大多數人統同意的,可以放心把這個block寫入本地的區塊鏈,追加到末尾,即完成commit。同時區塊高度增一,proposer節點索引也增1,進入下一輪(round),開始提議新快。上述描述的是90%時候的正常流程,即藍色箭頭表示的那個大循環。接下來說一下內圈那個紅色箭頭表示的小循環。大部分情況下,一個塊只需要一輪就可以完成確認,達成共識,但是有時候網絡狀態不好,經常發生超時,這時候就會進入內圈紅色流程了。由于每一輪(round)只有一個proposer有權力出塊,如果這個proposer掛了或者網絡不好超時了,怎么辦?不可能大家永遠等待這個proposer啊,算法顯然不會設計的這么蠢,存在一個明顯的單點故障。在proposer節點propose階段,所有validator節點會啟動一個定時器,設置超時時間為T,如果在這個時間內還沒有收到proposer節點發來的新塊,就認為這個proposer節點掛了,所有validator節點不會繼續等下去,會立刻在本機生成一個特殊結構的空塊,假裝這個空塊是從Proposer節點那里收到的,這樣,無論如何,在時間T內,都會收到一個proposal區塊,要么是一個正常塊要么是一個空塊。然后接著對這個塊進行pre-vote投票和pre-commit投票。如果proposer掛了,絕大部分validator看到的都是一個空塊,因此空塊會獲得多數投票,進入commit階段。commit空塊的時候,不會真的往區塊鏈寫入一個空塊,而是什么都不寫,區塊高度不自增,保持不變,這樣相當于什么也沒有干,這一輪(round)是在空轉。這一輪轉完了,下一輪開始的時候會換下一個validator當proposer,這樣當前那個掛掉的proposer,就不會卡主整個網絡。網絡通信復雜度

歐洲央行:公共部門應建立全面的監管框架,解決與加密相關的社會和環境風險:金色財經報道,歐洲中央銀行(ECB)董事會成員FabioPanetta在第22屆國際清算銀行年會上關于加密貨幣未來的小組上表示,加密資產已被推廣為去中心化的替代品,有望提供更具彈性的金融服務。然而,現實并沒有兌現這一承諾。支持加密資產的區塊鏈技術可能非常緩慢、能源密集且可擴展性不足。由于處理復雜且價格波動較大,加密資產在日常交易中的實用性較低。

為了解決這些缺點,加密生態系統改變了它的敘述方式,支持更集中的組織形式,強調加密投機和快速獲利。但最近發生的事件暴露了加密生態系統的脆弱性,表明人們對加密資產的信心消失得有多快。在許多方面,這個生態系統重現了區塊鏈技術最初想要解決的缺點和漏洞。

公共部門應采取堅定的立場,建立全面的監管框架,解決與加密相關的社會和環境風險,包括將無擔保的加密資產用于投機目的。它還應該抵制為加密貨幣提供國家支持的呼吁,這本質上會使加密貨幣風險社會化。相反,公共部門應集中精力為可靠的數字結算資產的開發做出貢獻,包括通過在央行數字貨幣方面的工作。[2023/6/25 21:58:12]

Tendermint的網絡通信復雜度為O(n2),因為在兩個投票階段,每個validator節點都需要收集超過2/3個投票消息,網絡發送的數據包數量是n2,因此網絡同心復雜度是O(n2)。在Proposal階段,新塊只需要被所有validator收到,網絡通信復雜度是O(n)。總的來說,是O(n2)。網絡通信復雜度為O(n2),注定了Tendermint的節點數不會太多,太多的話網絡通信這一塊會成為瓶頸,因此Tendermint適用于私有連和聯盟鏈,論文第17頁也指明了這一點:Tendermintisthatsolution,optimizedforconsortia,orinter-organizationallogic不過如果配合良好的分片Sharding機制,還是可以用于公有鏈的。這是后話了。網絡假設

BTC突破27500美元:金色財經報道,行情顯示,BTC突破27500美元,現報27512.5美元,日內漲幅達到10.43%,行情波動較大,請做好風險控制。[2023/3/18 13:11:46]

Tendermint對網絡的要求是,需要網絡是半同步的。Tendermint在Propose階段,有一個超時機制,但是這個超時時間不是一個常量,是動態變化的,因此在這個階段,要求網絡是半同步的。在pre-vote階段和pre-commit兩個投票階段,對網絡沒有要求的,即網絡是異步的。因此,Tendermint對網絡要求是半同步的。由于在pre-vote和pre-commit的投票階段,網絡是異步的,如果沒有收集到超過2/3的投票數,所有validator節點會無限期等待下去,因此,整個系統會卡住。Tendermint在Liveness方面有所妥協,換取了更強的Finality。舉個例子,如果在某一輪中proposer節點廣播出了一個新塊blockX,某個validatorA節點沒有按時收到新塊,那么該A就會在本機構造一個空塊,當做是從proposer收到的,發出一個pre-votenil投票消息然后進入pre-vote循環,并啟動一個超時定時器,這時進入了紅色內圈循環,A開始監聽網絡并收集投票信息,如果在規定時間內,收集到的投票數,無論是投給空塊的還是blockX的,加起來,沒有超過2/3,則無限等待,直到投票總數超過2/3收集到了超過2/3的投票總數后,如果投給空塊的票數超過2/3,則發出pre-votenil投給空塊,依舊留在紅色內圈;如果投給blockX的票數超過2/3,則發出pre-vote投給blockX,切換到藍色外圈;如果空塊和blockX各自的票數,都沒有超過2/3,那么發出pre-votenil消息投票給空塊,進入pre-commit階段,依舊在紅色內圈。一旦A發出了pre-commitnil的投票消息,A還是留在紅色內圈循環,pre-commit流程與上面類似。總而言之,紅色內圈的流程,需要假設網絡是半同步的。Finality和Liveness

硅谷銀行(SIVB.O)盤前跌超50%:金色財經報道,硅谷銀行(SIVB.O)盤前跌超50%,此前多家機構建議撤出資金。[2023/3/10 12:55:00]

Tendermint的Finality是Deterministic的,而比特幣的Finality是Probabilistic,Tendermint比比特幣具有更強的Finality。但是在Liveness方面,例如在網絡發生分裂的時候,Tendermint理論上有可能卡住,任何新交易都無法寫入,而比特幣可以分裂成兩個分叉,各自獨立工作,新的交易可以繼續進行。鎖機制

在上面的圖中,其實還隱含有一個鎖機制,沒有在圖中表現出來。舉個例子,有四個validator節點,A,B,C,D,在某個R輪,在propose階段,proposer節點廣播出了新塊blockXA的超時時間內沒有收到這個新塊,向外廣播pre-votenil,B,C,D都收到了,向外廣播pre-vote投給blockX現在四個節點進入了pre-commit階段,A處于紅色內圈,B,C,D處于藍色外圈假設A由于自身網絡不好,又沒有在規定時間內收到超過2/3個對blockX的投票,于是只能發出pre-commitnil投票消息投給空塊D收到了B和C的pre-vote消息,加上自己的,就超過了2/3了,于是D在本機區塊鏈里commit了blockXB和C網絡出現問題,收不到D在pre-commit消息,這是B和C只能看到2票投給了blockX,一票投給了空塊,全部不足2/3,于是B和C都只能commit空塊,高度不變,進人R+1輪,A也只能看到2票投給了blockX,一票投給了空塊,也只能commit空塊,高度不變,進人R+1輪在R+1輪,由于新歡了一個proposer,提議了新的區塊blockY,A,B,C三個個可能會在達成共識,提交blockY,于是在同樣的高度,就有blockX和blockY兩個塊,產生了分叉。Tendermint加上了鎖的機制,具體就是,在第7步,即使proposer出了新塊blockY,A,B,C只能被鎖定在第6步他們的pre-commit塊上,即A在第6步投給了空塊,那么在第R+1輪,只能繼續投給空塊,B在第6步投給了blockX,那么在新一輪,永遠只能投給blockX,C也是類似。這樣在R+1輪,就會有1票投給空塊,兩票投給blockX,最終達成共識blockX,A,B,C三人都會commitblockX,與D一致,沒有產生沖突。Tendermint與pBFT比較

以太坊域名服務 ENS 將在兩周后部署 NameWrapper 至主網:1月17日消息,以太坊域名服務(ENS)現已將重新審計過的 NameWrapper 部署至 Goerli 測試網,在部署到主網之前至少會在 Goerli 上保留兩周時間。NameWrapper 智能合約通過將現有 ENS 域名包裝為 ERC-115 代幣來增強功能,包括更好地控制包裝域名的權限,能夠在任何支持 ERC-115 標準的錢包中顯示、傳輸和交易包裝域名。另外,NameWrapper 允許主域名控制子域名的過期情況,也能授予子域所有者或其他帳戶延長到期時間的權限。[2023/1/17 11:16:46]

Tendermint和pBFT看起來非常類似,例如:都屬于BFT類型的算法,最多容忍不超過1/3的惡意節點都是三階段提交,Tendermint的propose->pre-vote->pre-commit三個階段,跟pBFT的三個階段,pre-prepare,prepare,commit三階段是一一對應的都在超時的時候,換掉proposer/primary不夠Tendermint相對于pBFT有兩處簡化。Tendermint沒有pBFT那種ViewChange階段,Tendermint很巧妙的把超時的情況,跟普通情況融合成了統一的形式,都是propose->pre-vote->pre-commit三階段,只是超時的時候新塊是一個特殊的空塊。切換proposer是通過提交commit空塊來觸發的,而pBFT是有一個單獨的viewchange過程來觸發primary輪換。除了消除ViewChange這一點,Tendermint還在另一個地方有所簡化,Tendermint的所有信息都存儲在blockchain里。因為pBFT是1999年提出來的,那時候還沒有blockchain這個東西(blockchain是2009年比特幣出現之后才有的),因此pBFT的所有節點雖有有一致的數據,但數據是分散存放的。pBFT的每個節點的數據包括:Thestateofeachreplicaincludesthestateoftheservice,amessagelogcontainingmessagesthereplicahasaccepted,andanintegerdenotingthereplica’scurrentview.Blockchain就是一個分布式數據庫,好比在MySQL這類DBMS數據庫沒出現之前,人們都是把數據寫入文件然后存在硬盤上,發明出各種奇怪的文件格式和組織方式。有了MySQL后,管理數據就方便多了。同理,Tendermint把數據全部存入blockchain,pBFT沒有blockchain這樣一個分布式數據庫,所有全節點需要自己在硬盤上管理數據,比如為了壓縮消息日志,丟棄老的消息,節省硬盤空間,引入了checkpoint的概念,光是數據管理這一塊就多了很多繁瑣的步驟。Tendermint和pBFT關系類似于Raft和Paxos的關系,Tendermint是pBFT的簡化版,是針對blockchain這個場景下的簡化版pBFT。如何選擇驗證節點

前黑石集團高管:比特幣將成為每個人投資組合的一部分:7月18日消息,前黑石公司高管和投資顧問Edward Dowd強調,盡管最近加密貨幣市場出現動蕩,但比特幣將繼續存在,并將進入每個人的投資組合。

在參加Layah Heilpern的播客節目時,Dowd重申,一旦比特幣走向成熟,它將可能擊敗黃金,因為它具有獨特的功能。根據Dowd的說法,盡管黃金仍然是一種可行的投資,但比特幣作為一種財富的儲存方式有更好的機會。

Dowd認為,加密貨幣市場可以與互聯網時代相提并論,當時大多數公司都倒閉了,而強勢的公司卻活了下來。Dowd說 ,可以把加密貨幣比作網絡時代,其中90%的公司歸于零,10%成為“亞馬遜”。加密從業者的工作是弄清楚什么是加密行業的“亞馬遜”。我認為比特幣有可能成為加密行業的“亞馬遜。(Finbold)[2022/7/18 2:21:20]

首先,在創始區塊里,可以靜態設置一組validator節點其次,當鏈啟動后,可以發送ValidatorUpdate消息,更新validator列表。見ValidatorUpdates這個地方文檔里沒有講太多,看起來還是比較原始的,沒有Algorand那種密碼抽簽類似的隨機抽樣算法。不過這個地方應該是可以隨時拓展的。如何輪流換Proposer

選出來了一組validator節點后,全網所有validator節點都會存一份,比如放在一個循環數組里。一般一個區塊大部分情況下只需要一輪(round)就能產生,網絡不好的時候可能要多輪才能出一個塊。無論如何,每一輪都會有一個新的validator作為proposer,輪換規則就是很簡單的依次遞增,第一輪,會選擇數組中第0個validator作為proposer,第二輪選擇第1個validator,一次類推,到達最后一個后,重置為0,這樣無限循環。然后開始共識算法,第0輪回選擇位置為0的validator作為proposer節點,第1輪選擇位置為1的validator,第2輪選擇位置為2的validator作為proposer,到達最后一個后在重置為0,無限循環。這種round-robin策略,能有效的略過超時的proposer節點。如果一個proposer節點掛了或者所在網絡很差,大部分節點都不能按時收到一個新快,于是超時后每個驗證節點會在本機構造出一個空塊,并廣播投票消息出去,經過pre-vote和pre-commit兩輪投票之后,最后commit一個空塊,等價于什么不做,高度不變,開始新一輪。由于每開始新一輪,都會按順序換成下一個proposer,這樣就自然跳過了掛掉的proposer節點,算法能自動進行下去。Round-robin策略太簡單了,容易被壞人預測到下一個validator是誰,于是可以提前布局,對validator發起DDoS攻擊或別的攻擊,怎么辦呢?Tendermint的解決方法就是,把validator節點,全部放在SentryNode后面,對外不暴露IP地址。

π-calculus形式化證明

待續TODO參考資料

Tendermint:ByzantineFaultToleranceintheAgeofBlockchainsTendermint:Consensuswithoutmining

Tags:PROPROPPOSINTPROGEprops幣有投資意義嗎POS價格QUINT

歐易交易所
10月區塊鏈融資額超21.3億元,環比增長169.6%,但國內資本寒冬仍在持續_區塊鏈

作者:互鏈脈搏·梁山花榮10月份,國內區塊鏈融資遇冷的跡象仍未見好轉。據互鏈脈搏不完全統計,2018年10月,全球區塊鏈領域共斬獲29筆融資,融資總額超過21.3億元人民幣,環比增長169.6%.

1900/1/1 0:00:00
區塊鏈50國之泰國:發行國家數字貨幣CTH,欲與新加坡爭奪東南亞ICO中心_HAI

作者:鏈塔分析師團隊來源:鏈塔智庫前言從禁止比特幣到接納再到率先推出國家數字貨幣,泰國的180度轉變幾乎是在一年之內完成的。從2018年春天開始,泰國就不斷醞釀各種政策,并通過媒體吹風.

1900/1/1 0:00:00
為了把以太坊從鬼門關拉回來,我們舉行了第一次“虛擬國家的全民公投”_EDAO

編者按:本文來自橙皮書,作者:orangefans,星球日報經授權轉發。EOS的RAM被炒到天價的時候,我感到很好奇,于是去查了下RAM到底是什么東西,后來看到一個有趣的說法:RAM就像一個城市.

1900/1/1 0:00:00
以太坊硬分叉升級測試失敗,主要是沒多少礦工在周末作業?_TEN

以太坊升級再遇阻。據Cointelegraph報道,以太坊進行硬分叉失敗的原因或許在于網絡節點出現“共識”失敗.

1900/1/1 0:00:00
胡潤百富榜首現區塊鏈領域上榜者:詹克團進入前百,吳忌寒位列204位_PLE

每次富豪排行榜的出爐都能引起人們的廣泛關注,一邊調侃自己的排名穩定于14億名左右,一邊作為吃瓜群眾,“觀戰”各位大佬們的“起起伏伏”.

1900/1/1 0:00:00
數字加密貨幣到底應該如何分類?_加密貨幣

編者按:本文來自:區塊律動BlockBeats,原作者:DavidHoffman譯者:0x4,Odaily星球日報經授權轉載。定義加密貨幣已經被證實是一件很困難的事情.

1900/1/1 0:00:00
ads