觀點 | 反思分片和智慧合約的制約因素

買賣虛擬貨幣

現在有很多研究致力於如何透過分片來增強區塊鏈的可擴充套件性。而據我所知,這些研究主要的想法是在不犧牲區塊鏈(包括其所有的分片)的不可篡改性和安全性的前提下,使在相互獨立的分片中並行執行多個交易成為可能。我能找到的絕大部分研究都聚焦在分片的共識演算法上。儘管所有這些研究看起來都很有前景,但我想透過一個不一樣的視角來看待分片。

首先,為了論證我的觀點,讓我們一起來討論一下現有分片設計中的共識演算法。更準確地來說,是討論當下正在開放的免信任型區塊鏈上執行且可用的共識演算法。儘管這些演算法是可用的,並且已經在執行了,可是我們真的透過分片獲得了希望中的可擴充套件性麼?讓我們快速瞭解一下阿爾達姆定律吧 [1] ,這樣你更能體會到我的困惑:

-阿爾達姆定律-

上述定律表明,在理論上,執行所有任務的速度會隨著系統資源的提升而加快,然而,無論提升的幅度有多大,理論速度總是受限於無法從改進中受益的那部分任務的執行速度 [2]。這帶來了一個根本性的難題 —— 一旦所有可並行化部分的吞吐量都達到最大時,序列化部分的吞吐量將成為系統吞吐量的天花板

對於區塊鏈的分片來說,這就意味著吞吐量的潛在增長受限於當前可以在隔離的分片中同時執行的交易數量。也就是說,如果分片中的一筆交易需要來自其它分片的資料,它就不得不從其它分片中同步該資料的轉移。這就是一種序列化事務,根據阿爾達姆定律,一大堆分片的存在限制了吞吐量。

獨立的原生貨幣交易

如果兩個賬戶之間的交易被明確地限制為僅在這兩個賬戶之間轉移貨幣餘額,比如在兩個賬戶之間傳送貨幣, 那就不需要任何其它賬戶中的資料。因此,如果兩個賬戶的資料同處於一個特定的分片中是可用的,那麼這筆交易和其它賬戶的交易就可以被非同步地執行。當分片數量以及賬戶對之間不相關的交易數量上升時,網路吞吐量就擴充套件了。隨著賬戶數量的增長,可以預見的是,對獨立交易進行分片的可能性也會增加。在上述限制條件下,吞吐量的大小由執行單筆交易所需花費的時間決定,因為同一時間我們可以執行非常多的交易。這正是我們在考慮提高區塊鏈吞吐量時想象到的理想情形。

為分片設計智慧合約

但對於智慧合約而言,情況不會有想象中那麼順利。智慧合約是作為一個單獨的賬本賬戶被部署在區塊鏈上的,賬戶中除了資料狀態還有它的程式程式碼。程式碼上執行的每一筆交易都在改變智慧合約中的資料狀態。每一個改變都被記錄在區塊鏈上,並透過一個代表狀態的雜湊值進行驗證。為了保持區塊鏈狀態的確定性和連續性,每個智慧合約每次只能在一個分片中執行,除非智慧合約賬戶本身的狀態也能被分片。總之,這使得對於所有往智慧合約傳送交易的賬戶而言,智慧合約賬戶的執行成為了限制因素。由於智慧合約被用於發行代幣,因此隨著特定代幣流通量的增加,無論存在多少分片,其智慧合約很有可能成為吞吐量的瓶頸,正如阿爾達姆定律所預測的那樣。

就目前有關智慧合約的分片實現來看,我只能看到兩種可能透過分片提升擴充套件性的方式:

  • 使用隔離在分片中的多個智慧合約

  • 使用確定性的多執行緒智慧合約,(又稱 SIMD)

使用多個智慧合約可以充分發揮分片的優勢。舉例來說,如果每個智慧合約(代表一個代幣)都被分配到一個單獨的分片中執行,那麼對於一個特定的代幣而言,其交易不會對其它代幣的交易造成影響。儘管每種獨立代幣的交易都受限於它所在的特定分片中智慧合約的吞吐量,但分片的數量可以隨著大量且不斷增長的代幣而線性增長。這並沒有解決單個智慧合約的吞吐量問題,但是對於一個所有合約都在一條鏈上、沒有分片的區塊鏈而言,它是一個改進方案。

不過,即便使用這種方法,只要一個使用者賬戶的狀態被分散在不同分片間、又同時被需要(例如,使用原生貨幣來支付交易),問題還是會出現

一種來自超級計算的叫做向量化(vectorization)的技術使得程式能夠並行地執行其部分程式碼。這就是為人熟知的的單指令多資料流(“SIMD”)。針對 SIMD 編寫的程式都是確定性的。從本質上來說,SIMD 機器(也就是如今的通用型 GPU(“GUGPU”))是透過一系列的處理器來對其資料進行分片的。這對於某些型別的應用來說非常有效,諸如圖形以及類似的矩陣運算。

理論上來說,這項技術也能被應用到區塊鏈的智慧合約中。也就是說,智慧合約可以被明確地編寫為透過某種方式來支援交易的並行執行。至於這要如何實施,我並不太清楚。也許在這片領域裡會湧現出一些創新的區塊鏈研究。然而,可以預見的是,即便有了一個這樣的解決方案,編寫一個適合 SIMD 執行的智慧合約也會變得相當複雜。

無論是使用隔離在分片中的多個智慧合約,還是使用 SIMD 智慧合約,都很難算作一個理想的解決方案,儘管它們都有可能提高可擴充套件性。

智慧物件資產使分片成為可能

對於智慧合約的分片來說,其主要的限制因素在於狀態的分片和程式碼的執行。如果存在一種方法可以避免在單個智慧合約狀態和程式碼執行中的交易序列化,分片就可以透過增加吞吐量來提升擴充套件性。換言之,如果存在一種多指令多資料流(“MIMD”)的執行方法,透過區塊鏈分片來提升可擴充套件性的機會將顯著提高

正如我們在 “反思區塊鏈賬戶概念” [3] 這篇文章中所描述的那樣,如果每個使用者賬戶都有它自己的狀態,而不是使用相互獨立的智慧合約的話,那麼每個使用者賬戶都能包含代表資產的物件,無論該物件是代幣還是其他型別的實體。正如文章 “可擴充套件的智慧物件資產、智慧物件資產所有權及基於 DataGrid 區塊鏈的擴充套件區塊鏈物件模型的分數級智慧物件資產所有權” [4] 所述,XOSA 和對 XSOA 的引用可以被用於在賬戶狀態之間透過交易直接轉移賬戶之間的所有權。

舉例來說,假設有兩組交易,其中每筆交易都介於不同的賬戶之間,也就是說:一筆交易從賬戶 A 傳送到賬戶 B;另一筆交易從賬戶 C 傳送到賬戶 D,那麼這兩筆交易可以在不同的分片中被同時執行。進一步來說,因為 XSOA 的程式碼獨立於任何賬戶,且對於每筆交易來說,程式碼可能並不相同,因此我們可以使用一個 MIMD 模型實現分片。在該模型中,每個分片中的程式碼和資料都各不相同

對於這個模型而言,限制其可擴充套件性的因素是不相交的賬戶組之間能同時發生的交易數量。我們可以預見的是,隨著賬戶數量的增長,不相交的賬戶組之間發生任意一組交易j的機會也會增加,這反過來將導致分片的機會也得到增加。

結論

作為一種已經假定可用的分片共識演算法,一個突出的問題在於如何使用這些技術。智慧合約天然地會將交易序列化,除非使用複雜的 SIMD 型別的解決方案,就只能透過使用多個隔離的智慧合約來提供擴充套件性。即使使用這一方案,每個智慧合約的吞吐量仍會受到單個分片的吞吐量限制。透過重新讓使用者賬戶來包含狀態資訊,並使用 XBOM 模型,DataGrid 區塊鏈提供了一種提升分片可擴充套件性的解決方案——根據賬戶的數量和賬戶之間的不相交交易來進行擴充套件。除了支援繼承和實時程式碼重用以外,我們認為這是一個對於區塊鏈擴充套件性問題的重要的解決方案。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;