通往百萬TPS之路(四):區塊鏈分級、分層、分片設計區塊鏈

                  界面 2018-10-06 21:02
                  分享到:
                  導讀

                  但如果實現了分片,那比特幣網絡則是可以實現無限擴展,什么百萬TPS,都不在話下,什么1M、8M、32M根本就不是事,至少1G區塊。

                  第0章 引言

                  如果你關心區塊鏈的可擴展性設計,你可能會遇到分層設計和分片這兩個概念,我今天介紹這兩個概念,同時補充分級這個概念來修正社區討論分層設計時的一個誤區。

                  第1章 分級設計

                  在比特幣擴容爭議中,小區塊的支持者最常使用的一個支持小區塊的邏輯就是應該采用分層設計——主鏈承當結算層,閃電網絡充當支付層,或者稱為大額交易走結算層,小額支付走閃電網絡。

                  但我覺得主鏈和閃電網絡將這種行駛相同功能,按功能的規模設計分成“分層”,并不能真正稱為分層設計,這個應該稱為分級設計。

                  我以前做機械設計的,設計過過濾粉塵的機器,就經常會用到分級設計。使用一個粗孔濾芯,先過濾掉一些大顆粒粉塵,然后再用細孔濾芯,過濾小顆粒粉塵。處理同一類對象但“物理大小”不一樣,設計成多級。這樣設計的好處在于節省運營成本。如果過濾器不分級,直接按最小顆粒來設計濾芯,那很快就要換濾芯,越細孔的濾芯成本越高。但分級成,使用兩級來分擔過濾任務,粗孔濾芯更便宜,讓粗孔濾芯先過濾掉大粉塵,細孔濾芯壓力就小,這樣可以節省成本。

                  分級設計在我們生活中是非常常見的,我們家庭常用的飲用水過濾器就是分級的。

                  比特幣擴容方案選擇的時候,有人提出使用閃電網絡來分流主鏈的壓力,這屬于分級設計。因為這種提議,主鏈和閃電網絡行駛的功能是完全一樣的,都是發交易的支付行為。雖然有人將主鏈的交易行為稱為“結算”,但這個叫法無法改變行為的功能。

                  因為比特幣主鏈上發交易的成本是最高的,對個人來說,需要支付礦工費,對比特幣系統來說需要所有節點來完整驗證交易,需要系統的CPU、帶寬、硬盤。而在閃電網絡上發交易的成本是較低的,對個人來說,閃電網絡里的手續費更低,速度更快,對比特幣系統來說,并不需要所有節點去驗證閃電網絡內的交易,只需要驗證進出閃電網絡的交易。

                  同樣的,使用offchain錢包來完整同錢包內的轉賬,也屬于分級設計。因為offchain錢包,只是錢包公司自己完整數據的調整就可以了,這和在比特幣網絡上發交易是完全不一樣的成本。

                  分級設計中,第一級(主鏈)是根本就不需要關心第二級是什么樣子的,但第二級(閃電網絡和offchain等)是需要關心主鏈的。比如閃電網絡就需要監視主鏈,以保證不會出現支付通道的人做廣播欺詐。

                  分級設計中,第二級出了問題,并不會傷害第一級主鏈。比如offchain錢包被盜了,跟主鏈毛關系都沒有。但反過來則不一樣。

                  分級設計其實是人對成本的考量而催生出來的,并不需要頂層設計,讓市場自由博弈就能涌現出來分級解決方案。

                  第2章 分層設計

                  互聯網最成功的分層設計應該是網絡協議分層,就是我們熟知的七層網絡結構,什么物理層、鏈路層、網絡層……

                  分層的基本設計原則是:

                  各層是獨立的,各自層做好自己的事即可。

                  層和層之間的功能是不一樣的。

                  層和層之間的交流都是通過接口通信,只要接口保持不變,層內部的設計可以改變,且不會影響別的層。

                  目前各種區塊鏈的設計,各種宣稱說自己是分層設計的,往往都是不符合上述原理。

                  比特幣比較接近分層設計的思想是側鏈的設計原理。側鏈可以完整獨立設計成和主鏈完全不一樣的功能,比如RSK目標是實現智能合約。而比特幣主鏈實現的核心功能就是UTXO的轉賬和賬本的更新維護。側鏈和主鏈只是通過特定的交易來充當接口。但側鏈往往需要關心主鏈在干嗎,主鏈是不需要關心側鏈的。這就是側鏈和主鏈并不是相互獨立的。

                  比特幣(包括BTC和BCH),尤其是BCH的OP_Return就是一個將來非常好的擴展為分層的設計。比特幣主鏈對OP_Return里的數據只關心是否為真,并不關心具體的數據。那OP_Return就可以在里面設計出一整套新的功能,只要這里面的代碼最后在BCH主鏈的交易里為真。而主鏈和OP_Return設計出來的新層是不需要相互關心的。

                  很早之前,以太坊的V神就想在OP_Return上實現他的以太坊的智能合約設想,可惜當時被Core開發組限制了。

                  比特現金BCH的開發正在拿OP_Return大做文章。

                  其實比特幣的元幣協議,就是一個很好的分層設計,只是一直沒有被廣泛使用起來。但現在我還沒有充值理解元幣協議,以后搞懂了再來講。

                  以太坊并不是分層設計,所有的功能都是在同一層上。以太坊所有的Dapp都是在同一套賬本層里做事,并沒有分層處理。

                  第3章 分片設計

                  分片設計目前還沒有做完,無論是在比特幣還是在以太坊上,都沒有實現。但我可以簡單講下原理。

                  現在比特幣網絡處理交易是這樣的,一個節點收到一波交易,比如1萬筆,節點會先將這些交易序列化,即給這些交易編個號排隊,然后一筆一筆去驗證。如果碰到某一筆驗證無法通過,比如需要前置零確認的交易,那就先緩存起來。如果碰到有非法的交易,則直接丟棄。

                  比特幣現在的這種處理交易方式就是串行的,即一個時間點,只能處理一筆交易。這樣做就會有很大的瓶頸,單一電腦再牛逼,處理能力也會有上限。

                  那能不能分成兩臺電腦,比如將1萬筆交易,分成兩波,5000筆一波,分別發給一臺服務器去驗證呢?不能!目前比特幣還不支持這種并行驗證。

                  如何要做到并行驗證呢?那就是要講到分片設計了。

                  比特幣的UTXO的“物理實體”是這樣的,一筆UTXO在電腦里存的主要數據是以下四個部分:

                  1生成這筆UTXO的交易的txid;

                  2生成這筆UTXO的交易的輸出序列號index。因為大部分交易是一個或多個輸入,多個輸出,第一個輸入序列號是0,第二個是1。

                  3鎖定腳本lockscript。

                  4是金額value

                  其中txid是16進制表達,即使用0到F來表達,如果將首字符來分類,0歸一類,1歸一類……F歸一類,就可以分為16類。如果使用首兩個字符來分類,00一類,01一類……FF一類,那就可以分為256類……如果使用4個字符呢?16^4類。

                  我們將上述的一類稱為一個片,這就是分片。分片后,將一類分給一臺電腦去處理,另一類分給另一臺去處理……,256片就可以分成256臺電腦來處理。

                  而UTXO的txid就是交易的txid,則打包交易的區塊,也可以按這種分類來打包,比如分成256片,則同一區塊里,可以設成256個分區,一個分區打包一個片。

                  也就是說,UTXO、交易、和區塊都可以按同樣的規則分片。

                  這樣比特幣全網就可以實現節點可選擇處理哪一個分片,比如我運行一個節點,我只收、驗證和廣播特定分片的UTXO、交易和區塊。

                  這樣就實現了比特幣網絡的并行擴展。

                  但這種分片還是很復雜的,我上面講的只是基本的原理,要完成設計是非常復雜的。比如一個UTXO去花費兩次,是可以實現不同的txid,然后發到不同的分片,如果分片之間沒有機制來通信,則可能會雙花成功,但如果分片之間還要為這種攻擊大量通信,則還不如不分片呢。

                  但如果實現了分片,那比特幣網絡則是可以實現無限擴展,什么百萬TPS,都不在話下,什么1M、8M、32M根本就不是事,至少1G區塊。因為一臺電腦處理不了,可以搞16^n臺來處理好了,一個人買不起16^n臺電腦(中心化)的話,那就找16^n個人每人買一臺好了。

                  以太坊的分片更復雜,我暫時講不明白。

                  BCH的開發正在全力開發UTXO分片,我也在努力學習這些知識,以求能貢獻一點知識。

                  設計 交易 比特幣 分級 網絡
                  分享到:

                  1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
                  2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
                  3.作者投稿可能會經TMT觀察網編輯修改或補充。