自去年10月份MultiVAC演算法團隊啟動智慧合約程式設計模式設計,到今年5月份完稿釋出,紫皮書共經歷了6個月接近30個版本的迭代。方案設計的同時,團隊同步推進了工程可行性驗證和架構開發工作。
紫皮書的釋出,也意味著MultiVAC底層架構已經全部設計完畢,接下來將進入經濟模型討論與開發者平臺構建階段。
以下內容是對紫皮書部分的摘要和解讀,歡迎廣大技術愛好者和社羣粉絲討論指正:
如果概括MultiVAC的整體設計,引用紫皮書中的一段話:“MultiVAC精巧地將各個功能模組做了合理劃分,使執行節點各司其職。在儲存上,將壓力轉移到儲存模組,減輕了普通參與者的負擔,而儲存模組本身不涉及執行和共識,不存在中心化風險。在執行上,MultiVAC 提供了完整的指令集,不給開發者設定侷限,且在設計過程中,時刻體現了對執行效能的重視。在共識方面,權力在各執行節點中均勻分佈,平權原則落到實處。”
MultiVAC 系統的特色如下:
· MultiVAC 是一個圖靈完備的分片區塊鏈方案。為開發者提供靈活的程式設計開發框架以搭建複雜的應用。
· MultiVAC 是首個實現效能完全線性擴充套件的分片。非同步分片架構為構建高 TPS 的區塊鏈網路提供了基礎。
· 降低了參與者的裝置門檻,維護了區塊鏈系統去中心化的核心價值主張。MultiVAC 網路的參與者不需要效能強勁的裝置,使得社羣更加平民化、去中心化。
· MultiVAC 的拓展性十分優異。目前的 MultiVAC 方案靈活、簡潔、優雅,在當前基礎上可以較簡單地加入新的擴充套件功能,如閃電網路或隱私計算等。
MultiVAC 突破性地解決了當今區塊鏈世界的多項關鍵性難題,為建立一個理想的區塊鏈社羣打下了堅實的基礎。
1、UTXO/賬戶雙模型彈性選擇+非同步分片程式設計——保證跨分片互動一致性
現有的其他合約分片方案,大多采用兩種方式保證跨分片資訊傳遞的一致性。一種要求傳送跨分片交易時等待回執,並對涉及資料加鎖,不僅大幅度降低系統效能,回執也可能丟失。這就像你透過微信給一人傳送訊息,如果對方沒有回覆,你需要一直等待,什麼也不做。可能對方很久之後才能回覆你,也有可能永遠不回覆(訊息丟失了),因此這種方式會對系統效能產生極大的限制。
另一種是將跨分片交易拆分為多個子操作。比如一筆交易從分片A傳送到分片B,在分片A中執行扣款後,轉賬指令的執行將完全由分片B決定,因此一但交易量上升,將導致執行順序喪失單調一致性。這就要求跨片操作滿足交換律(轉賬類操作),即改變執行順序也可以得到同樣結果。但很多其他邏輯的智慧合約是無法滿足交換律的,很多公鏈專案透過對系統的約束來保證此類指令的交換律,因此放棄了智慧合約的圖靈完備性,使得可開發的應用邏輯受到了極大的限制。
舉個例子,A村的兩個男村民皇埔鐵牛和司馬鐵蛋都愛上了隔壁B村的蘇翠花姑娘,他們都寫了一封情書給蘇翠花。而蘇翠花先收到誰的情書就會接受誰。皇埔鐵牛和司馬鐵蛋先後將情書放入郵筒,並由B村的郵遞員送到蘇翠花的手裡。在一個無法維持單調一致性的郵政系統中,蘇翠花先收到誰的信取決於郵遞員:郵遞員保證信最終會送到收信人手中,但是收信人收到信的順序不一定遵循基礎的順序。而在MultiVAC的系統中,郵遞員保證收信的順序和寄出信件的順序一致。
針對這一問題,MultiVAC將跨片操作分為兩類:
對於滿足交換律的操作,使用UTXO資料型別,礦工可以無視內容低成本快速執行操作;
對於必須滿足單調一致性的複雜智慧合約操作,則使用賬戶模型,並強制從協議層面要求礦工按照順序執行,但成本較高,適用於低頻操作。
透過首創的雙資料模型彈性選擇,允許開發者靈活選擇所需的資料型別,使系統在一致性、效能和成本方面達成了靈活與平衡。
此外,礦工傳送跨片間交易指令是非同步操作,傳送完畢後礦工可立即參與下一輪的出塊,無需等待其他分片回執,分片之間資料不共享和互動不堵塞,避免了資料加鎖帶來的效能瓶頸。
2、全域性資料分散設計+多賬戶模型——提高分片並行效能
我們知道,將區塊鏈網路進行分片的目的是要提高整體效能。因此為了達到並行處理的目的,分片之間不可能進行完全資料共享,那樣也違背了分片的初衷。但智慧合約又要求所有分片都對此全域性資料有感知。
比如,某個電商平臺的智慧合約中有10個商品,分片A的使用者買了5個,分片B的使用者最多隻能購買5個,商品數量就是全域性資料,每次合約呼叫各分片間都需要相互同步,否則就會造成超賣。因此,如何處理對全域性資料的依賴是所有區塊鏈系統都要面對的難題。
為了保證資料一致性,目前通常有兩種方案,一種是給資料加鎖,同一時間只能被單一分片讀寫;另一種是資料只允許被單一指定分片呼叫。但這兩種方案都會導致智慧合約的吞吐量嚴重製約於單個分片。
針對以上,我們首次提出將全域性資料拆分到各個分片上,即將總商品數量下放到分片,每個分片中都會有一定的商品額度,當交易發生時,智慧合約只讀寫對應分片的資料就可以。允許使用者在不同分片上進行操作,防止分片間購買力不同而造成的庫存不足,將全域性交易分散到各個分片上。同時,使用者在所有分片上都有賬戶,鼓勵使用者進行快速低成本的片內交易,充分釋放了分片的並行效能。
3、圖靈完備虛擬機器+高階語言C/C++/Rust——實現超高自由度開發
正如紫皮書中提到的,目前很多公鏈方案為了簡化設計,捨棄了圖靈完備性,導致開發者能夠實現的業務邏輯嚴重受限。也有部分公鏈提出了自己的開發語言,不僅學習成本高,而且無法支援高階開發框架,徒增開發者的程式設計負擔。
在這一點上,MultiVAC秉承了一貫的設計理念,不給開發者設限。我們提供了圖靈完備的虛擬機器,同時適配C/C++/Rust等多種高階成熟程式語言,為開發者提供靈活的程式設計開發框架以搭建各種複雜應用。
不僅如此,MultiVAC 團隊認為,沒有完美的區塊鏈系統,一套好的區塊鏈方案應該能夠隨著各領域的技術突破不斷進化。所以在設計過程中,MultiVAC遵循了鬆弛可擴充套件的原則,保證整套技術框架易迭代易拓展,各模組能夠靈活地整合新技術,與時俱進。目前的 MultiVAC 方案靈活、簡潔、優雅,在當前基礎上可以較簡單地加入新的擴充套件功能,如閃電網路或隱私計算等。