BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

區塊鏈公鏈如何才能快起來 ?

Winkrypto
特邀专栏作者
2018-10-15 08:50
本文約6568字,閱讀全文需要約10分鐘
無論哪種算法,都有不可調和的區塊大小和出塊間隔之間的矛盾。
AI總結
展開
無論哪種算法,都有不可調和的區塊大小和出塊間隔之間的矛盾。

編者按:本文來自鏈聞ChainNews編者按:本文來自

鏈聞ChainNews

編者按:本文來自

鏈聞ChainNews

編者按:本文來自

(ID:chainnewscom),作者:王嘉平,創新工場執行董事,Odaily經授權發布。

不過,雄心歸雄心,正蓬勃發展的區塊鏈技術,尤其是公鏈領域,有一個瓶頸卻一直有待突破:以當今數字世界的規模和體量,任何一個在線系統,如果沒有一個大容量、高吞吐的基礎設施,就無法承載哪怕僅僅一個互聯網級別的應用。

二級標題這是一個世界性的難題,全世界最聰明的學者、開發者都在嘗試解決這個問題。我曾在微軟工作多年,擔任微軟研究院主管研究員,很長一段時間專注於分佈式系統方面的研究;離開微軟之後,我又在創新工場擔任負責區塊鍊和人工智能投資方向的執行董事。多年在分佈式系統方面的研究心得,以及在區塊鏈投資領域評估多個公鏈項目的經驗,讓我深深明白,在徹底去中心化的系統中實現高性能設計,是一項難度極高、極具挑戰的工作。二級標題

我看到行業內存在大量對於區塊鏈公鏈性能瓶頸及解決方法的討論,有些充滿洞見,令人受益匪淺,但也有不少謬誤,更有很多為了自身項目宣傳而編造的似是而非的見解,頗有把討論引入歧途的風險。在和多位該行業頂尖的學者、開發人員、投資人多次深入交流之後,他們都鼓勵我把自己的看法分享出來。再三思索之後,我決定把自己對該話題的一些拙見記錄下來,這樣既可以讓自己的一些思考能夠沉澱,同時,也希望能和對該話題感興趣的更多同仁進行一些探討。「Chain of Blocks」不要只關注性能瓶頸,而忽略了容量瓶頸只要是

先說一下我的一個結論:在當前以類金融為主流應用場景的情形下,區塊鏈系統最首要的性能瓶頸是區塊數據的廣播延遲造成的,本質上受限於互聯網的帶寬和通訊延遲,這一點直接製約了吞吐量TPS。「Graph of Blocks」只要是

的系統,無論具體採用了什麼共識算法,無論是工作量證明PoW、權益證明PoS、拜占庭容錯BFT,還是委託權益證明DPoS,在出下一個區塊之前,都需要保證前一個區塊在全網有一定的同步率,從而約束了每個區塊不能太大,出塊頻率也不能太高,然後,這個問題無解請注意,這裡說的區塊鏈系統特指「Chain of Blocks」的系統,其特徵是要

保證系統能最終收斂到一條單一的鍊錶結構,並只有這條鏈上面的區塊才是被確認的,反例是系統,例如所採用的DAG 結構IOTA。

假設物理網絡的帶寬和延遲可以被忽略,例如基於數據中心高速鏈路的EOS,系統第二個瓶頸是受限的賬簿容量

,本質上受限於單台全節點的內存容量,這一點直接製約了鏈上可以承載多少個用戶地址以及多少個DApp。無論具體採用了什麼共識算法,只要交易驗證/執行過程隨時可能涉及到任何一個用戶,那麼單台全節點就必須隨時保持全網每一個用戶、每一個DApp 相關的狀態在內存裡面,以供交易驗證實時訪問。當前所有主流的「Chain of Blocks」的系統,包括比特幣區塊鏈、以太坊、EOS 等,都有這個問題,並且同樣的,這個問題也是無解的

。多級緩存的數據庫技術,例如RocksDB,可以稍微改善一下這個限制,使得只有活躍用戶受到內存限制,而總用戶基數受限於硬盤的容量。但是這並不從根本上解決問題。「容量」這個問題的關注度遠遠少於吞吐量,原因很簡單:因為吞吐量這個短板還沒解決,所以容量問題被掩蓋住了。一個典型的例子是EOS。

然後,EOS 把賬簿容量瓶頸這個問題包裝成了一個稀缺資源,並將其代幣化,成了EOS RAM 虛擬幣。當然除了內存,單台全節點CPU 也會成為容量的瓶頸,所以也被代幣化,成了EOS CPU 虛擬幣。不過,在類金融應用場景中,通常計算複雜度非常低,所以,內存會是主要瓶頸。

二級標題

  • 共識算法其實幫不了解決性能和容量的瓶頸,試圖從標新立異的共識算法出發,提升「Chain of Blocks」系統性能的努力,基本上不會讓系統性能有實質上的大幅提升

  • 二級標題

  • 。總之,解決上面所提及的兩個瓶頸問題,需要的是分佈式系統設計上的巧思妙想,這和共識算法相關,也和密碼學相關,但是本質的出發點不是共識算法和密碼學。

二級標題性能瓶頸: 一個出塊節點在做什麼首先出塊節點也是全節點,接受全網的已確認區塊以及未確認交易,並構造成鏈,不斷維護賬簿的最新狀態,然後抓緊機會試圖在鏈尾追加新的區塊。無論採用哪種共識算法,都會歷經以下幾個步驟:

第二個步驟,為這個新的區塊,參與出塊的權力的競爭或者候選,在這個階段,大概率會因為賬簿狀態更新了即其他節點成功出塊了而中斷,回到第一步;

不同的共識算法,其核心差異在於如何完成其中的第二個步驟的出塊權的競爭或者候選。但是

二級標題

這個矛盾使得如果每次出塊比較大可以包含更多的交易,就必須有比較長的出塊間隔,以保障該區塊在下一次出塊之前,在全網被充分傳播二級標題如果傳播不充分,在PoW 和PoS 系統中,將表現為較高的分叉率出了無效的塊,而在BFT 系統中則表現為較高的失敗率區塊拿不到2/3 的同意票。

二級標題Proof-of-Work 和Proof-of-Stake

PoW 通過設定一個Hash Target,要求Hash 值必須小於一個特定的值例如,將256 位的Hash 值當成一個大整數看待。而Hash 值必鬚根據新區塊數據拼合一個Nonce 數據計算而得。找到滿足Hash Target 對應Nonce 的任何一個節點,便獲得了出塊的權力。由於只能通過隨機窮舉的方式找Nonce,所以這個競爭就轉換成了計算Hash 的算力的競爭。 PoS 如Peercoin 是PoW的一個變種,引入了消耗Coin Age 來增大Hash Target 的機制,使得出塊權力的競爭可以部分地被數字貨幣持有的時間和數量所代替。可以看到,PoW 機制最大的好處是用一個簡潔的算法,實現了完全非許可premissionless 的出塊權隨機指定,競爭節點之間完全不需要協同和通訊,可以輕鬆支持任意數量的出塊節點共同競爭,具有極佳的去中心特性。也正是由於這一點,

這個算法導致了區塊廣播延遲和出塊間隔之間的矛盾。區塊廣播延遲主要由區塊大小和全網各個節點間的帶寬決定。另外,值得提一下當前的互聯網環境,大致需要10 秒可以廣播到90% 以上的節點。所以在比特幣網絡中,10 分鐘左右的出塊間隔使得區塊分叉的概率極其低。 2018 年整個上半年,僅出現兩次分叉。而在以太坊網絡中,15 秒左右的出塊間隔使得區塊分叉的概率始終保持在10% 左右,即使其區塊遠小於比特幣的區塊。要注意一點,PoW 的出塊間隔是統計意義上的,實際情況是出塊間隔時大時小,而統計期望是10 分鐘。這個並不是全網算力波動造成的,而是因為搜索Nonce 的過程是個隨機刺探過程撞大運,所以很多礦池都給出了自身的運氣值曲線。

對於比特幣網絡來說,10 分鐘的出塊間隔其實在現今的互聯網環境中是有很大保留的,要知道,畢竟這是在10 年前提出的方案,這使得擴大區塊大小就可以實現簡單的擴容方案,但是由於區塊廣播延遲這一根本矛盾的存在,這種提升只在一定程度上有效。GHOST 協議

另外,無論採用GHOST 協議與否,對公鏈的性能無實質幫助。另外,另外,

另外,

二級標題

因為投入挖礦的能源總量在一個個礦場建立的時候已經確定,當有更高能效的挖礦技術或者設備出現時,算力競爭將導致所有礦工都應用新的技術,最終哄抬了全網的挖礦難度罷了。二級標題

所以實際的總能源消耗,在宏觀上,只和幣價、電價以及數字貨幣的投資信心相關,和挖礦效率無關。

二級標題拜占庭容錯BFT

拜占庭容錯類共識算法採用隨機算法確定每一次出塊的節點,根據賬簿上的數字貨幣地址,而不是IP 地址。所有參與出塊候選的節點無須競爭。新的區塊將被委員會一組驗證者所有成員驗證並簽名投票,然後廣播全網,繼而開始下一個出塊的流程。最近出現的很多基於BFT 的公鏈項目,比如Algorand,在如何安全公平的選出這個委員會方面做了很多工作,雖然這些工作對系統性能的提升沒有直接關係。

上面我們提到,不同的BFT 類算法其具體選定出塊節點以及委員會成員的過程和系統的性能關係不大。和PoW/PoS 類似,其吞吐性能同樣決定於每次出塊的大小,以及出塊的周期。在BFT 系統中,如果想要允許每次出塊比較大,就需要出塊的周期也比較大,從而大概率保證新出的塊及其委員會的簽名數據在委員會內部完全傳播。

二級標題

理論上說,委員會的規模遠小於全網,BFT 類算法中的廣播延遲會比同等規模的PoW/PoS 網絡小。事實上也確實如此,但是基於Gossip 協議的廣播延遲和網絡規模的對數成正比而不是線性,所以廣播延遲並沒有小很多。加之BFT 類算法依賴一些額外的周期性全局同步等安全措施,使得實際效果中,BFT 類算法並沒有比PoW/PoS 系統有太多性能優勢。

無論哪種算法,均無法大幅提升性能

二級標題不過,基於Gossip 協議實現充分傳播的時間,和傳播的數據量呈線性關係,和傳播的節點數量呈對數關係,所以BFT 在傳播時延上也沒有太大的優勢。二級標題

結果就是,無論哪種算法,都有不可調和的區塊大小和出塊間隔之間的矛盾,從而無法大幅提升性能。

二級標題容量瓶頸: 一個不出塊的全節點在做什麼單鏈的「Chain of Blocks」的系統中,大致有三種角色的節點:

出塊的全節點,不出塊的全節點和輕量節點。全節點無論出塊與否,都會驗證並接力廣播新的區塊和未確認交易,這裡的廣播工作佔據了主要的通訊量以及磁盤I/O 的負荷,對於TPS 只有十幾的以太坊geth 來說,這個通訊量約為1.5Mbps。為了可以實時完成對新區塊和未確認交易的驗證,所有用戶的賬簿以及所有智能合約狀態都需要駐留在內存中,這個佔據了主要的內存開銷,當前規模的以太坊會佔用將近4GB 的內存。每一個全節點都會需要承擔這樣的一個負荷,如果要出塊PoW 的挖礦節點或者PoS 的驗證節點還需要做額外的事情。這些負荷的代價,換來的是安全的徹底去中心化,任何一個全節點不需要預先信任任何其他節點,任何全節點也沒有能力去欺騙其他全節點。普通全節點的價值體現在兩個方面:例如手機錢包這樣的輕量節點不驗證也不接力廣播區塊數據或者未確認交易,它依賴並信任預先設定好的一個或者多個全節點,通過這些全節點來獲取特定用戶的狀態,例如賬戶餘額,以及發起轉賬交易。輕量節點自身完全沒有驗證信息真偽的能力,更像是區塊鏈世界裡的一個終端而已。

那麼基本上大部分互聯網上的普通服務器都無法順利部署一個全節點了。

二級標題如果全節點只能由專業礦場操作,普通人無法獨立部署一個全節點的話,那麼整個系統就會退化成一個多地部署的中心化雲服務了,而變得容易被攻擊,也容易被封禁。

二級標題

所以,這兩個瓶頸不僅僅對於出塊節點需要解決,對於普通全節點也需要解決。二級標題

何不換種思路,尋找新的出路

前面已經說到性能瓶頸和容量瓶頸,在現在單鏈的「Chain of Blocks」的系統中,很難有大的提升,尤其是容量瓶頸。這就是所謂的區塊鏈不可能三角的由來。縱觀計算機技術發展史,大容量高吞吐的設計範式,屢獲大規模成功的只有一個:


歡迎加入Odaily官方社群