當區塊鏈進入吞吐量瓶頸後,可以將網絡分片成多個鏈,由不同的共識組產生區塊,不同的區塊生產者可以並行處理不同的交易,從而將交易負載分散,增加鏈上的整體吞吐量。
設計這樣的分片區塊鏈系統的關鍵兩點是:
1.設計一個可用於跨分片交易的協議,來原子性地訪問和修改狀態。
2.增強交易模型,使得智能合約能夠被設計為跨片並行運行。
這樣設計的目的是為了防止不同分片中的交易衝突,這種情況,需要一個協議來實現原子性的跨分片交易。
Chainspace即是一種支持智能合約的分佈式賬本系統,它通過分片的方式,允許節點並行處理鏈上交易。因此主要設計目標是允許原子性的跨分片交易。
具體來說Chainspace是一個可以隨著節點數量的增加而無限擴展的系統,可以容忍拜占庭式的故障,並且可以被完全公開地審計。
具體操作上,Chainspace提出了’對象’,一個類似UTXO 的數據模型,用於支持原子性的智能合約,從而允許在不同的分片上並行處理交易。
提出了一個新的分佈式的原子性的狀態確認協議,稱為S-BAC ,用於跨多個拜占庭節點,對通用智能合約的交易進行分片處理,並正確協調這些節點以確保安全性、可用性,以及防破壞性。
對象和合約
Chainspace的對像是指系統中持有狀態的原子。所有的對像都有基於密碼學的唯一標識符,用來明確地指代該對象,對像也有一個類型,類型包含了定義了它們的智能合約的唯一標識符,以及類型名稱。
在Chainspace 中,對象狀態是不可變的。但對象可以處於兩種’元’狀態,即活動或不活動。活動的對象可以通過智能合約的過程進行操作,而不活動的對象則是為了審計的目的而保留。
合約則是特殊類型的對象,它包含,關於如何操縱合約所定義的其他類型的對象的,可執行信息。它們定義了一組初始對象,這些對像在Chainspace中隨著合約首次創建時被創建。並隨著合約邏輯運行,最後輸出結果。
每個智能合約,會定義一個檢查器,檢查器是純函數,會將合約運行過程以及輸入、輸出、引用和局部變量作為參數。即獲取合約數據。
Chainspace系統雖無視過程,只依賴檢查器。但應用程序可以使用過程來創建有效的交易。
客戶端會打包足夠的關於執行這些過程的信息,以允許Chainspace 安全地將其執行序列化,這樣一來,只有在所有交易,根據相關的智能合約的檢查器,是有效的情況下,才會原子性的將交易確認。
系統的分片結構
Chainspace系統由管理有效對象,並確保僅提交有效交易的,基礎節點網絡組成。一個關鍵的設計目標是在高交易吞吐量和低延遲方面實現可擴展性。為此,節點被組織成分片,它們管理對象的狀態,確保對象的有效性,並記錄中止或確認的交易。
在每個分片中,所有誠實的節點都確保他們在是否接受交易的問題上完全一致:對像在任何時刻是活動的還是不活動的,以及從它們所涉及的合約得到的痕跡,按照合約的檢查器,是否是有效的。
跨分片時,如果所有分片都願意確認交易,節點必須確保交易被確認,如果任何分片決定中止交易,由於檢查器返回’假’或對像不活動,節點必須確保交易被拒絕(或中止)。為了滿足這些要求,Chainspace 實現了S-BAC協議,是一種以新穎的方式組合現有的拜占庭一
致性,和原子性確認的基本概念的協議。
確認(或中止)交易的共識過程在不同的分片中並行進行。為了透明性和可審計性,每個分片中的節點會周期性地發布,由檢查點組成的,有簽名的區塊鏈:分片將證據組成的區塊(是
一個默克爾樹)添加到區塊鏈上,證據包括在當前週期處理的交易,以及來自其他節點的有簽名的承諾。
交易
在Chainspace 中,一個交易是由組成該交易的過程生成的,執行痕蹟的序列,以及它們之間的相互依賴關係所表示的。這些都是由最終用戶的客戶端計算和打包的,其中包含了檢查器建立交易的正確性,所需的所有信息。
交易是一種數據結構,為了生成一組構成交易的痕跡,用戶在客戶端,依據輸入對象、引用和本地變量,執行所有包含在智能合約中的過程,並為每個過程生成輸出對象和本地返回值。因此,交易背後的實際計算由用戶執行,形成交易的痕跡中,已經包含輸出對象和返回值,以及足夠的信息,以便通過智能合約的檢查器,檢查其有效性。
一個合約過程可以調用另一個智能合約的交易,給它指定參數,並依賴於它的返回的值。這是通過將變量傳遞給智能合約的檢查器來實現的。
除了執行交易外,Chainspace 客戶端還需要讀取對象的狀態以正確形成交易。即使它們被用作交易的輸入或引用,讀取本身不會使系統接受不一致的狀態。
因此,任何機制都可用於向客戶端公開對象的狀態,此外,可以使用任何索引機制來允許客戶端更快地檢索具有特定特徵的對象。
隱私
將智能合約邏輯定義為檢查器允許Chainspace 通過特定的設計,支持隱私友好型合約。在此類合約中,對像中的某些信息不是公開的的,而是使用公鑰加密,或者使用安全提交方案進行提交。交易僅包含有效的證據,表示智能合約過程的邏輯或不變量,被正確應用或各自持有,並且可以採用零知識證明或簡潔知識論證(SNARK)的形式。
可擴展性
Chainspace 使用分片策略來確保可擴展性,公共函數將每個對象映射到一組節點,這些節點共同受託管理對象的狀態、確保其有效性、記錄涉及到對象的交易,並最終提交至多一個使用對像作為輸入,並使輸入對像變為不活動狀態的交易。但是,只有當節點確定所有其他節點已經,或即將要,通過消費這些對象,記錄相同交易時,它們才能將該交易記錄為已確認。這種分佈式算法稱為’分片內共識算法’。
Chainspace 通過結合拜占庭協議和原子性確認協議,提出了分片拜占庭式原子確認(S-BAC)協議,在拜占庭和異步條件下,處理交易的分片內共識算法。其中:
拜占庭協議確保大小為3 f + 1 的分片的所有誠實成員,能就特定公共操作序列達成一致,即使分片中包含f 個惡意節點。協議還能夠保證,在尋求達成協議時,最終將商定一項決議或順序動作。共識協議在每個分片內執行,以協調所有節點。通過PBFT 的MOD-SMART實現用於狀態機複製,從而使通信步驟的數量最優化。
原子性提交協議跨越所有分片運行,這些分片管理了交易涉及的對象。它要求每個分片都需要同意確認交易,來使交易被確認;即使只有一個分片拒絕該交易,所有的’同意’都會被否決。
在Chainspace 中,每個交易在管理它的輸入和引用的分片中,均涉及固定數量的相關節點。如果兩筆之間的相關節點集不交叉,則它們之間就不存在衝突,並且可以並行執行或以任意順序執行。
但是,如果兩個交易之間存在共同的輸入對象,則所有節點只接受其中的一個交易。這一過程將通過S-BAC 協議來實現。這一過程僅與管理衝突交易的節點有關,因此它是局部性的,而不需要全局性的共識。
PS:Chainspace是模塊化區塊鏈Celestia的技術原理,以上內容整理摘錄於Celestia白皮書。