LikeLib:給區塊鏈技術發展換一種思路,也許能找到出路

LikeLib發表於2019-02-19

比特幣即將迎來第一個十週年,這十年中比特幣與其背後的區塊鏈技術蓬勃發展,以去中心化技術之名,大有變革整個線上數字世界的氣勢和雄心。

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

近10年過去了,為了提高區塊鏈系統的效能,前赴後繼出現了大把專案,但到今天為止,並沒有出現多少能夠承載網際網路級別應用的解決方案。

這是一個世界性的難題,全世界最聰明的學者、開發者都在嘗試解決這個問題。行業記憶體在大量對於區塊鏈公鏈效能瓶頸及解決方法的討論,有些充滿洞見,令人受益匪淺,但也有不少謬誤,更有很多為了自身專案宣傳而編造的似是而非的見解,頗有把討論引入歧途的風險。在和多位該行業頂尖的學者、開發人員、投資人多次深入交流之後,我把自己的看法分享出來,這樣既可以讓自己的一些思考能夠沉澱,同時,也希望能和對該話題感興趣的更多同仁進行一些探討。

不要只關注效能瓶頸,而忽略了容量瓶頸

先說一下我的一個結論:在當前以類金融為主流應用場景的情形下,區塊鏈系統最首要的效能瓶頸是區塊資料的廣播延遲造成的,本質上受限於網際網路的頻寬和通訊延遲,這一點直接制約了吞吐量 TPS。

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

請注意,這裡說的區塊鏈系統特指「Chain of Blocks」的系統,其特徵是要保證系統能最終收斂到一條單一連結串列結構並只有這條鏈上面的區塊才是被確認的,反例是「Graph of Blocks」系統。

「容量」這個問題的關注度遠遠少於吞吐量,原因很簡單:因為吞吐量這個短板還沒解決,所以容量問題被掩蓋住了請記住,一旦吞吐量實現了大幅提升,容量問題馬上就會出現:在一個高吞吐的系統上,如果使用者量上不去,很可能高效能根本跑不滿。

一個典型的例子是 EOS。當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 的出塊權隨機指定,競爭節點之間完全不需要協同和通訊,可以輕鬆支援任意數量的出塊節點共同競爭,具有極佳的去中心特性。也正是由於這一點,這個演算法導致了區塊廣播延遲和出塊間隔之間矛盾。當出塊間隔較短時,一個新的區塊尚未充分全網廣播之前,就有另一個礦工在同樣的高度出了另一個新的區塊,即發生了所謂的分叉 Fork。這種情況下,最終其中一個區塊會被拋棄掉 ophaned。發生這種情況的概率不能太高,否則會顯著降低原為 51% 的算力攻擊基準 Selfish Mining,極端情況甚至會導致分叉始終無法到達穩定收斂。

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

PoW 帶來算力競爭,即所謂的挖礦,確實消耗了大量能源。不過這也為 PoW 系統發行的每一個幣奠定了一個基礎成本,使之價值有個底線。需要指出的是,PoW 的算力和區塊鏈系統的效能沒有任何聯絡,任何加速 hash 演算法的軟體或者硬體都不會提高區塊鏈系統單位時間的吞吐量。這就是為什麼比特幣區塊鏈的全網 hash 算力提高了萬億倍,但是其吞吐量一直是 7 TPS 左右。

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

拜占庭容錯 BFT

拜占庭容錯類共識演算法採用隨機演算法確定每一次出塊的節點,根據賬簿上的數字貨幣地址,而不是 IP 地址。所有參與出塊候選的節點無須競爭。新的區塊將被委員會 一組驗證者 所有成員驗證並簽名 投票,然後廣播全網,繼而開始下一個出塊的流程。

與 PoW 不同的是,BFT 出塊候選是一個協作的過程,期間至少涉及 O(n^2) 的通訊複雜度,而 PoW 在出塊競爭過程中無須任何通訊代價。基於 BFT 的協作過程將不會導致分叉,也不需要消耗稀缺資源 算力或者 Coin Age,但是由於這個協作的過程涉及到相當多的資料通訊,所以這個過程無法在全網候選,驗證並簽名的過程無法在全網展開。這就是為什麼 BFT 類演算法一定會涉及到一個委員會的構建過程,並且驗證簽名只在一個小範圍裡面發生,剩下的人相信他們就好了。

BFT 類演算法的投票通常是有權重的,以規避女巫攻擊 Sybil Attack。而這個權重多與參與者的權益相關,和 PoS 的精神類似,進而現在很多人將 BFT 的這類投票演算法稱為了 PoS 演算法。而事實上,BFT 類共識演算法和一開始提出的 PoS 演算法(例如 Peercoin )是本質不同的機制。

上面我們提到,不同的 BFT 類演算法其具體選定出塊節點以及委員會成員的過程和系統的效能關係不大。和 PoW/PoS 類似,其吞吐效能同樣決定於每次出塊的大小,以及出塊的週期。在 BFT 系統中,如果想要允許每次出塊比較大,就需要出塊的週期也比較大,從而大概率保證新出的塊及其委員會的簽名資料在委員會內部完全傳播。如果這個傳播不充分,將可能導致委員會成員無法達成 2/3 以上的投票,進而使得委員會內部驗證並簽名過程超時,最終在本出塊的週期內出塊失敗。

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

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

前面已經說到效能瓶頸和容量瓶頸,在現在單鏈的「Chain of Blocks」的系統中,很難有大的提升,尤其是容量瓶頸。這就是所謂的區塊鏈不可能三角的由來。

舉個例子,GPU 用了幾千個效能普通的 Core 一起並行工作,實現超越 CPU 計算效能幾個數量級的效能提升,而 GPU 所依賴的半導體技術並沒有和 CPU 晶片有什麼本質的不同。再如,現今的線上雲服務系統,是用幾千甚至上萬臺效能普通的伺服器一起並行工作,來支援大容量高吞吐的線上服務。

我在這裡不妨大膽設想:也許一個大容量高吞吐的區塊鏈系統會是類似的方案,即讓成千上萬個同質的單鏈例項一起並行工作,切分全網的工作量,以實現整體上的大容量和高吞吐。

比特幣是初代的公鏈,技術點主要包括共識機制、賬本結構、加密演算法、P2P網路四大要素組成,這些構成了區塊鏈行業的基礎。第二代公鏈以太坊主要增加了智慧合約、快速發行Token,以及便捷二次開發等特性,也造就了很多一行程式碼都沒寫的空氣幣。

LikeLib的新共識機制和商用級TPS水平

LikeLib提供帳戶,身份驗證,資料庫,非同步通訊以及在數以萬計的CPU或群集上的程式排程。LikeLib提出的共識演算法 ,能夠實現較高的交易吞吐量、可擴充套件性和安全。在演算法中,每個使用者將會被分配權重優先順序,優先順序可以以使用者收益中的權益來衡量,以此為基礎形成一種基於使用者權重的記賬人節點選取機制。這種改進有效提高交易吞吐量並避免分叉,不需要一套固定的伺服器組同時能夠抵抗女巫攻擊;避免惡意領導者單獨形成一個分支,降低影響,無需使用者配置複雜的信任策略。擁有高TPS、低交易延遲、低手續費等特點,使得區塊鏈技術可以可以深入到商業場景內部,其交易確認時間也是秒級,在各類資料上也保持行業頂尖水平。

LikeLib側鏈/跨鏈技術

在區塊鏈世界裡,底層公鏈的存在必定少不了側鏈。簡單來講,側鏈是一種允許Token在不同的區塊鏈之間進行安全的資產交換的技術,因此也就可以實現不同區塊鏈技術架構之間的跨鏈操作。

LikeLib在協議層優化了分散式賬本和共識機制以提高業務處理能力,在業務擴充層優化了智慧合約以提高業務的靈活性,在應用層加強了跨鏈交易以提高使用者的便捷性。

除此之外,LikeLib還提供海量的API介面和具有行業屬性智慧合約的模板,這些由最優秀(當然也是最貴)的區塊鏈工程師編寫的程式和程式碼非常安全可靠,初創公司可以通過API呼叫或者修改模板引數,簡單快速地實現業務目的,迅速提供服務和產品。讓區塊鏈程式設計逐漸模組化,更有利於生態的快速建立。

這樣的一個系統,可以在大幅提高 TPS 的同時,支援 億以上級別的使用者量,並且保持每一個參與到這個網路的中的全節點僅有一個合理的負荷,讓大部分網際網路上的普通伺服器都可以輕鬆部署一個全節點,共同參與網路的維護和治理。

相關文章