menu-icon
anue logo
澳洲房產鉅亨號鉅亨買幣
search icon
區塊鏈

公鏈Shardeum:探討分片的另一種可能

BlockBeats 律動財經 2022-10-21 22:02

cover image of news article
律動財經圖片



2022 年 9 月 15 日,以太坊合併(Merge)。這是一個歷史性的時刻,以太坊為此準備了 5 年、推遲了 6 次,由於反覆的調試與長期的開發、萬眾矚目的暈輪效應,很多人誤以為合併會自然而然地帶來更高的可擴展性、安全性和可持續性,實際上並不是——我們還是用兩個列車的比喻,從 PoW(工作量證明)到 PoS(權益證明)的過渡,只是更換了軌道和輪子,它並不會直接地帶來更快的速度、更大的容量、更低的車票費用,真正能完成以上三點的,是一整套解決方案:擁有分片能力的主網搭配增強可擴展性的 Layer2 解決方案。

正如以太坊創始⼈Vitalik Buterin 所指出的,分⽚是可擴展性三難困境下的一種擴容解決⽅案,通過將⽹絡中的節點分成更⼩的組,處理不同的事務集並實現並行處理。通過分擔處理整個網路上匯總所需的大量數據的負擔,就像我們在 Walmart 購物結賬時一樣,通過多開設幾條購物結賬的收銀通道,可以直觀地減少排隊時間和提升結賬效率。

公鏈
圖 1 分片的簡單邏輯

這就是分片的邏輯,直接而簡單,然而,魔鬼都在細節中——原理和方向沒錯,但在實施中總會遇到很多問題。本文想通過理順在「分片」這條路上的方向和困局,繪製一張仰望星空與腳踏實地的分片探索者地圖。同時通過比較現有的分片解決方案,找到一些共性的問題,並提出一種可行的探索方向:Shardeum 與動態分片。

一、關於「分片」

簡單來說,考慮不可能三角的制約,從以太坊作為坐標系原點(0,0)出發,按照「縱向」和「橫向」兩種思路,我們將當前的區塊鏈的擴展性方法分為兩大類:

縱向擴容(Vertical Scaling):通過提高系統現有硬體的性能來實現。建立一個去中心化網路,而網路中的每個節點都具有超級計算能力,即每個節點都需要「更好」的硬體——這種方式簡單有效,可以達成吞吐量的初步改進,尤其適用於高頻交易、遊戲以及其他對延遲比較敏感的應用場景。然而這種擴容方式會限制網路的去中心化水平,因為運行驗證節點或全節點的成本變高了。維持去中心化水平受限於計算硬體性能的大致增長速度(這就是所謂的「摩爾定律」:晶片上的晶體管數量每兩年會翻一倍,計算成本則會減半)。

橫向擴容(Horizontal Scaling):橫向擴容一般有幾種思路。一種是在區塊鏈的語境下,將某一生態中的交易計算量分散到多個獨立的區塊鏈上,每條鏈都擁有自己的區塊生產者和執行能力,這種方式可以充分定製化每條鏈的執行層,比如節點硬體要求、隱私功能、gas 費用、虛擬機以及許可設置等。另一種橫向擴容方案是模塊化區塊鏈,將區塊鏈的基礎架構劃分成執行層、數據可用性層(DA)以及共識層。最主流的區塊鏈模塊化機制就是 rollup。還有一種是將一條區塊鏈分成很多片,並行執行。每個分片可以看成一個區塊鏈,也就是說許多區塊鏈可以並行執行。另外,通常還會有一條主鏈,其唯一的任務就是保持所有分片同步。

需要指出的是,以上的擴容思路都不是孤立存在的,每一種解決方案都是在不可能三角中找到一個權衡點,配合系統中經濟力量創造的激勵機制設計,達到宏觀和微觀層面的有效平衡。

為了討論「分片」,我們需要從頭開始梳理。

依然假設這樣一種情景,Walmart 購物結賬,為了提高結賬效率,降低客戶等待時間,我們從單一的結賬通道,擴展到 10 個結賬窗口,為了避免賬本錯誤,這個時候我們需要制定統一的規則:

第一,如果我們有 10 個收銀員,該如何分配他們去哪個窗口工作?

第二,如果我們有 1000 個客戶排隊等待,該如何決定每一個客戶去哪個窗口結賬?

第三,這 10 個窗口對應的 10 個單獨賬本,該如何進行匯總?

第四,為了避免發生賬目不匹配的情況,該如何防止收銀員出現錯誤?

這幾個問題其實對應了分片中的幾個關鍵問題,分別是:

該如何確定全網的節點 / 驗證者屬於哪個分片?即:如何進行網路分片(Network Sharding);

該如何確定每一筆交易分配給哪個分片?即:如何進行交易分片(Transaction Sharding);

區塊鏈資料如何在不同分片中儲存?即:如何進行狀態分片(State Sharding);

複雜意味著風險,在以上所有的基礎上,該如何避免整個系統安全性的分裂?

01 網路分片(Network Sharding)

如果我們將區塊鏈簡單理解成一種去中心化賬本,無論是 PoS 還是 PoW 的共識機制,都是為了讓各個節點按一定的既定規則爭奪記賬權,在這個過程中保證賬本的正確性。而網路分片是指,需要另一種既定規則,將區塊鏈網路分片,在儘量降低互相通信的前提下,由各個分片處理鏈上交易,爭奪記賬權——即,節點的分組規則。

而在這個過程中遇到的問題是,隨著區塊鏈內部節點被劃分成不同的片,攻擊者的難度和成本會直線下降。我們可以推理,假定這個分組過程的規則和結果是固定且可以預知的,那攻擊者想要控制整個區塊鏈網路,只需要定向地控制其中一個分片,收買分片內的部分節點即可。

Near 的創始人 Alexander Skidanov 這樣描述這個問題:如果一個有 X 個驗證者的單一鏈決定硬分叉成一個分片鏈,並將 X 個驗證者分成 10 個分片,每個分片現在只有 X/10 個驗證者,破壞一個分片只需要破壞 5.1%(51% / 10) 的驗證者總數。這就引出了第二點:誰為每個分片選擇驗證者?只有當所有這 5.1% 的驗證者都在同一個分片中時,控制 5.1% 的驗證者才是有害的。如果驗證者無法選擇在哪個分片中進行驗證,則控制 5.1% 的驗證者的參與者極不可能將所有驗證者都放在同一個分片中,從而大大降低了他們破壞系統的能力。

公鏈
圖 2 攻擊某個分片的難度大大降低

分片系統必須開發一種機制來信任網路不會從外部分片中逆轉這些交易。迄今為止,可能最好的答案是確保分片內的驗證者數量高於某個最小閾值,這樣不誠實的驗證者壓倒單個分片的機率就會很低。最常見的辦法是構建一定程度上的無偏隨機性,依靠數學的方式,將攻擊者的成功機率降到最低。比如以太坊以太坊的解決辦法是隨機從所有驗證者中選出某個分片的驗證者,並且每 6.4 分鐘(一個 epoch 的長度)更換一次驗證者。

公鏈
圖 3
以太坊
2.0 中構想的驗證者輪換

說的簡單一點就是將節點隨機分組,再將工作分配給各組節點獨立驗證。

然而需要指出的是,區塊鏈中的隨機性是一個非常具有挑戰性的話題,按照邏輯來說,這個隨機數的生成過程不應該依賴於任何特定分片的計算。對於該計算,很多的現有設計思路都是開發一個單獨的區塊鏈,維護整個網路。這樣的鏈在 Ethereum 和 Near 中稱為 Beacon 鏈,在 PolkaDot 中稱為 Relay 鏈,在 Cosmos 中稱為 Cosmos Hub。

02 交易分片(Transaction Sharding)

交易分片是指關於「哪些交易要被分配到哪些分片」的規則制定,則既能夠達到並行處理的目的又能避免雙花問題的出現。區塊鏈的帳本模型的不同會對交易分片的開發造成影響。

目前區塊鏈網路中存在兩類記賬方式,分別為 UTXO(Unspent Transaction Outputs,未使用交易輸出)模型和帳戶 / 餘額模型,前者的典型代表是 BTC,後者如 ETH。

UTXO 模型:在 BTC 交易中,每筆交易都會有一個或多個輸出,UTXO 指尚未花費的區塊鏈交易的輸出,可以作為新交易的輸入,而已花費的交易輸出不可再花費,類似紙幣交易情況下的支付和找零,顧客將一張或多張紙幣支付給店家,店家則將一張或多張紙幣找零給顧客。UTXO 模型下,交易分片需要跨分片通信。一筆交易可能包括多個輸入和多個輸出,沒有帳戶的概念,也不會有餘額的紀錄,一個可能的方式是:按照其交易的某個輸入值將其放入哈希函數處理成為離散型的哈希值以確定數據應該去哪個分片。如下:

公鏈
圖 4 針對 UTXO 的一種可能的交易分片思路

為了確保條目以一致的方式放置在正確的分片中,輸入到哈希函數中的值都應該來自同一列。此列稱為 Shard Key。之後,將產生為 1 值的交易都分入分片 1,將產生為 2 值的交易都分入分片 2。而這種方式的弊端在於,分片之間不得不進行通信以避免雙花攻擊。如果限制跨分片交易將限制平台的可用性,而允許跨分片交易則不得不權衡跨分片通信的成本和性能提升帶來的收益。

帳戶 / 餘額模型:系統記錄每個帳戶的餘額,在進行交易時,系統檢查帳戶是否有足夠餘額用於支付,類似於銀行轉賬時,銀行會記錄每個帳戶的餘額,只有帳戶餘額大於所需轉賬金額時,交易才能夠進行。在帳戶 / 餘額模型下,由於一筆交易只有一個輸入,因此只要將交易按照發送者地址進行分片,就可以保證同一個帳戶的多筆交易在同一個分片中處理,有效防止雙花。因此,大多數採用分片技術的區塊鏈,都是像以太坊一樣的帳戶帳本系統。

03 狀態分片(State Sharding)

狀態分片指的是,在區塊鏈資料是如何分配在不同分片中儲存的。

依舊沿用我們 Walmart 排隊的例子,每個窗口都有一筆賬,他們的賬本是如何記錄的?如果:客戶來排哪個隊,就記哪個賬,比如 A 客戶去了 A 窗口,那第二天該客戶去了別的結賬窗口比如 B 窗口,而 B 窗口並沒有該客戶的過往帳戶資訊(比如涉及到了儲值卡等結賬方式),該怎麼辦?向 A 窗口調用該客戶的帳戶資訊?

狀態分片是分片最大的難題,比上述的網路分片和交易分片更棘手。因為在分片機制下,交易會根據地址分配在不同的分片處理,也就是說,狀態只會儲存在其地址所在的分片中,此時要面臨的一個問題是,交易不會只在一個分片中進行,時常會涉及到跨分片(Cross-Sharding)。

考慮一種轉賬情形,A 帳戶轉賬 10U 給 B 帳戶,而 A 的地址分配在分片 1,交易的紀錄也會儲存在分片 1。B 的地址分配在分片 2,交易的紀錄就會儲存在分片 2。

一但 A 要轉賬給 B,就會形成跨分片交易,分片 2 就會向分片 1 調用過去的交易紀錄,確認交易的有效性,如果 A 頻繁地打幣給 B,分片 2 就必須不斷跟分片 1 互動,交易的處理效率便會因此降低。但是,如果不下載和驗證特定分片的整個歷史,參與者則不一定能確定他們之間交互的狀態是某些有效塊序列的結果,且這樣的塊序列確實是分片中的規範鏈。

因此,相比於無分片的單一鏈,分片系統面臨的新挑戰是用戶無法直接完全驗證任何給定鏈的有效性和可用性,因為數據太多。必須為用戶提供最大限度的去信任和實用的間接方法來驗證哪條鏈是完全可用且有效,以便於他們可確定哪條鏈是規範鏈。在實踐中,區塊鏈開發者可以使用如下技術解決驗證中的一些問題:如委員會、SNARKs/STARKs、漁夫機制、以及欺詐和數據可用性證明等。

有兩種思路可以解決這個問題,一個是同步跨分片(Synchronous),即緊耦合(Tight Coupling),每當需要執行跨分片交易時,包含狀態轉換的相關塊都同時發生,每個分片上的節點協作執行交易。看起來很自然,使用體驗也最好,該模型最著名的設計稱為 Merge Blocks,但在實踐中實現這一點很複雜。要完成以上,需要分片之間的驗證器彼此同步通信。如果對跨分片事務的需求足夠高,性能可能會降低,因為更多的分片工作者必須一起協作來處理跨分片事務。

另一種方式是異步跨分片(Asynchronous),即松耦合(Loosely Coupling)。這種思路的採用更廣泛,比如 NEAR、以太坊、Cosmos、Kadena 等。而在這個過程中,最具有挑戰的事項是交易的原子性。根據 Scalar Capital 的聯合創始人 Jordan Clifford,如果我們想象收據(Receipt)的概念,接收者通過提供源分片中的交易的默克爾路徑來證明他們將從外部分片接收了 Token。目標分片使用收據並將其記入收件人的帳戶。這必須以原子方式完成。發件人和收件人的帳戶要麼一起修改,要麼不一起修改。如果存在差距或一端失敗,發件人可能會欺騙收件人,讓他們相信他們已經收到了他們永遠不會得到的資金。

這裡對原子性一詞做出一種生活化的比喻,比如我們想要進行一趟海邊旅行,需要同時訂購機票以及酒店,如果預定不到酒店,我希望也不要購買飛機票,如果預定不到飛機票,則也不要預定酒店。這就叫做原子性——要不然都成功,要不然就都不要成功。

二、分片的探索與嘗試

我們回顧一下以上有關於分片的討論時,提到的一些關鍵性問題:

一是如何進行狀態分片,即區塊鏈資料是如何分配在不同分片中儲存,如果要進行跨分片通訊時,該如何保證其中的效益平衡。

二是如何處理交易的原子性問題,一個分片對於共同訪問的狀態的修改,需要及時地讓另一個分片知道,否則就容易出現狀態錯亂。

在下文中,我們梳理了業內比較知名的公鏈以及其技術解決方案。其中可以窺見部分脈絡,並在此基礎上討論 Shardeum 的前沿性和革新性。

01 計算分片

Zilliqa 是最早嘗試分⽚的智能合約平台之⼀,是分片技術的一種很有益也很有效的嘗試。

其成立於 2017 年,由與新加坡國立大學相關的專門研究人員和學者組成的團隊推動,主要目標是解決可擴展性問題,專為計算密集型任務而構建。Zilliqa 網路能夠通過稱為計算分片的並行化過程,在其網路上處理高吞吐量的交易。在分片式區塊鏈網路上,計算交易的任務分布在網路的各個分片上。

從分片過程來說,Zilliqa 將其分為兩部分。首先,選擇目錄服務(DS)委員會節點,然後啟動分片過程並將節點分配給每個分片。一旦在分片中驗證了交易,便可以通過整個網路對其進行驗證,並進入一個全局狀態,該狀態將所有分片中的交易組合到 Zilliqa 區塊鏈上的單個可驗證真相來源。

簡單來說,對於區塊鏈中的節點具有的三個主要功能:

- 處理交易

- 打包交易並廣播到其他節點

- 儲存整個網路的歷史賬本

Zilliqa 利用了一種簡潔有效的思路來解決我們提到的跨分片通訊以及原子性問題,即:只進行計算分片,不進行網路和儲存的分片。該平台中的所有節點都儲存了完整的狀態,並且每個交易都被每個節點接收。為了驗證交易,⽹絡根據賬⼾的地址空間被分割成多個分區。這被稱為計算分⽚,因為它劃分了驗證交易的⼯作,這通常是計算密集型的。由於每個節點仍然接收每筆交易並更新所有賬⼾的狀態,因此⽹絡帶寬和儲存操作仍然成為瓶頸——⽹絡和儲存沒有分⽚,因此⽆法真正擴展。

02 靜態狀態分片

更為通用的分片方法是將帳戶的地址空間劃分為多個稱為分片的固定大小區域,並將網路中的節點分配給不同的分片。這稱為狀態分片。Near、Elrond 和 Harmony 等平台正在採用這種方法。儘管以太坊最初計劃實施狀態分片,但新方法僅對數據進行分片以增加可訪問性。

2.1 以太坊的數據分片構想

以太坊環境中,分片將通過分擔處理整個網路上匯總所需的大量數據的負擔,與 Layer2 協同工作。這將繼續減少網路擁塞並增加每秒交易量。

應該指出的是,隨著更有效的擴展路徑的開發,以太坊的分片計劃也在不斷發展。以太坊對於未來分片構想其中一個方案版本是基於「數據可用性」的分片,「Danksharding」是一種新的分片方法,它不使用分片「Chain」的概念,而是使用分片「Blob」來分割數據,同時使用「數據可用性抽樣」來確認所有數據是否可用。

而另一種方案版本涉及到在方案一的基礎上,為每個分片添加額外的功能,使每一個分片更像今天的以太坊主網,允許分片儲存和執行代碼並處理交易,因為每個分片都將包含其獨特的智能合約和帳戶餘額集,跨分片通信將允許分片之間的交易。然而這種方案還在社區辯論中,因為方案一的數據可用性加上 Layer2 的協同,已經可以為以太坊提供足夠的可拓展性,因此社區還在評估版本二的經濟成本與收益價值。

2.2 Harmony

Harmony 是一個基於 PoS 的分片網路,採用了一種更為標準的分片方法,這種方法的想法是擁有多個稱為分片的小型區塊鏈,每個分片負責狀態的一部分,以及一個協調它們的區塊鏈,在 Harmony 中稱為信標鏈。我們按照之前的討論,先看看 Harmony 是如何從下到上解決網路分片、交易分片和狀態分片的問題。

網路分片:Harmony 將驗證者網路分為不同分片,每個分片都包含一組不同的驗證器,它們彼此緊密相連,在它們之間運行共識。

交易分片:Harmony 的交易由單個分片處理和處理。這使得分片能夠同時處理交易,提高了區塊鏈的總交易容量。對於交易,用戶只需在簽名交易中指定 shard_id 字段,表示交易所屬的分片。

狀態分片:在 Harmony 中,每個分片的驗證者都需要儲存 1/N 的全局狀態,因為他們維護自己的區塊鏈和狀態數據庫(N= 分片數)。這減輕了驗證者對數據可用性的擔憂。此外,交叉分片進一步提高了分片之間的狀態一致性。

Harmony 主網支持多個分片中的數千個節點,在幾秒鐘內生成具有即時確定性的塊。通過質押機制的安排減少了中心化,同時支持質押委託、獎勵複合和雙簽削減。採用了 EPoS (Effective Proof-of-Stake) 的有效抵押機制和安全的隨機分片技術 (Random Sharding),靠協議的規定把大戶抵押的Token打散成許多細小的部分,並隨機分配到多個分片里,這樣任何人就無法把他抵押的 Token 集中到單一分片內,從而無法攻擊單一分片。

而關於跨分片,在跨分片交易和信標鏈同步的情況下,來自不同分片的驗證者通過全球連接的網路跨分片發送消息。根據 Harmony 官方文檔,採用了「Kademlia 跨片路由技術」,來控制跨片間通信的網路開銷,並且利用「糾刪碼」對區塊廣播過程進行優化,使廣播者的網路壓力更小,避免發送者的網路瓶頸問題,從而實現高效的橫向分片擴展。已經裝備自己成為第一個完成跨分片消息傳遞的分片區塊鏈。藉助有效的跨分片消息傳遞協議和全網狀設計,分片之間將能夠進行無縫通信,隨著團隊積極朝着這個目標努力,用戶和開發人員可以期待今年晚些時候在 Harmony 上的跨分片消息傳遞協議。

對於 Harmony 上的構建者和開發者來說,這是一個重大突破,因為他們可以通過整理特性和使用駐留在不同分片上的數據來構建。此外,分片間數據的一致性也很重要。這兩種追求將決定這種無限可擴展性的可持續性。

2.3 Elrond

Elrond 是一個高吞吐量的公共區塊鏈,旨在提供安全性、效率、可擴展性和互操作性。使 Elrond 與眾不同的兩個最重要的特性是自適應狀態分片和安全的權益證明共識機制。

對於交易、數據和網路,Elrond 採用所有級別的自適應狀態分片。動態自適應分片機制將執行分片合併和分片拆分,同時考慮可用驗證節點的數量和網路使用情況。由於跨分片的定期節點改組,對惡意攻擊保持高彈性。每個 epoch,每個分片中最多 1/3 的節點被重新洗牌到其他分片,以防止串通。在隨機性方面,使用 BLS 簽名保護隨機源,這使其無偏見和不可預測。

而對於分片狀態架構上的智能合約採用跨分片執行過程處理,分片負載均衡。跨分片平衡智能合約允許 Elrond 並行運行多個智能合約。

同時,對於跨分片,Elrond 採用他們稱為元鏈(Meta Chain)的設計,可以做到在幾秒鐘內快速確定跨分片交易(Finality)。通過研究其技術白皮書,我們簡化其過程如下:假定 Elrond 網路僅有兩個分片和元鏈。假設用戶從他的錢包中生成一筆交易,該錢包的地址位於分片 0,並希望將 EGLD 發送給另一個錢包地址位於分片 1 的用戶,則需要下圖所示的步驟來處理跨分片交易。

塊的結構由包含有關塊的資訊(塊隨機數、輪次、提議者、驗證者時間戳等)的塊頭表示,以及包含內部實際交易的每個分片的小塊(miniblock)列表。在我們的例子中,對於分片 0 中的一個塊,通常會有 3 個小塊(miniblock):

miniblock 0:包含分片 0 的分片內交易 miniblock 1:包含與分片 0 中的發送者和分片 1 中的目的地的跨分片交易 miniblock 2:包含跨分片交易,發件人在分片 1,目的地在分片 0。這些交易已經在發件人分片 1 中處理,將在當前分片處理後完成。



一個塊中具有相同發送者和接收者的小塊的數量沒有限制。這意味著具有相同發送者和接收者的多個小塊(miniblock)可以出現在同一個塊中。在這個過程中,跨分片執行的原子處理單元是一個小塊(miniblock):要麼立即處理小塊(miniblock)的所有事務,要麼不處理,小塊(miniblock)的執行將在下一輪重試。

Elrond 的跨分片交易策略使用異步模型。驗證和處理首先在發送者的分片中完成,然後在接收者的分片中完成。交易首先在發送者的分片中分派,因為它可以完全驗證從該分片中的帳戶發起的任何交易。之後,在接收者的分片中,節點只需要元鏈提供的執行證明,進行簽名驗證和檢查重放攻擊,最後為接收者更新餘額,添加交易金額。

分片 0 處理小塊 0(miniblock 0)中的分片內交易和一組跨分片交易,這些交易的地址來自分片 1 作為小塊 1(miniblock 1)中的接收者。塊頭和小塊(miniblock)被發送到元鏈。元鏈通過創建一個新的元鏈塊(元塊)來公證分片 0 的塊,其中包含有關每個小塊(miniblock)的以下資訊:發送者分片 ID、接收者分片 ID、小塊哈希。

分片 1 從元塊中獲取小塊 1(miniblock 1)的哈希,從分片 0 請求小塊(miniblock),解析交易列表,請求丟失的交易(如果有),在分片 1 中執行相同的小塊 1(miniblock 1)並發送到元鏈結果塊。經過公證,交叉交易集可以被認為是最終確定的。下圖顯示了完成交易所需的輪數。這些輪次被認為是從第一個包含在小塊(miniblock)中到最後一個小塊(miniblock)被公證。

公鏈
圖 5 Elrond 的跨分片異步模型

2.4 Near

Near 是一個全狀態分片、對開發者友好的可拓展性公鏈,他們提出了一種新的協議和解決方案,稱之為夜影協議(Nightshade)。

與上述兩個分片公鏈不同的是,它的技術架構並不是由一個信標鏈和多個分片鏈組成的,而是把系統建模成一個單獨的區塊鏈,在區塊級別進行了分片,每個分片中有很多「段」。

公鏈
圖 6 Near 放棄了信標鏈的做法,採用了 Nightshade 的設計

Nightshade 將系統建模為單個區塊鏈,其中每個塊在邏輯上包含所有分片的所有事務,並更改所有分片的整體狀態。在物理上,沒有參與者下載完整狀態或完整邏輯塊。相反,網路的每個參與者只維護與他們驗證交易的分片相對應的狀態,並且塊(Block)中所有交易的列表被分成物理塊(Chunk),每個分片一個塊。

在理想條件下,每個塊每個塊的每個分片恰好包含一個塊,這大致對應於具有分片鏈的模型,其中分片鏈以與信標鏈相同的速度生成塊。然而,由於網路延遲,一些塊可能會丟失,因此實際上每個塊的每個分片都包含一個或零個塊。

在 Nightshade 中有兩個角色:區塊生產者和驗證者。在任何時候,系統都包含 w 個塊生產者(Block Producer)和 wv 個驗證者(Validator),在 near 的模型中 w=100 v = 100, wv = 10, 000。系統包含 n 個分片,在 near 的模型中 n = 1000。在 Nightshade 中沒有分片鏈,而是所有的區塊生產者和驗證者都在構建一個單一的區塊鏈,稱之為主鏈。主鏈的狀態被分割成 n 個分片,每個區塊生產者和驗證者在任何時候都只在本地下載了與該分片的某個子集對應的狀態子集,並且只處理和驗證影響這些部分的交易狀態。網路的維護是按時期完成的,其中一個時期是幾天的時間段。

塊生產者和塊生產者根據固定的時間表輪換每個塊。區塊生產者有一個訂單,並按該順序重複生產區塊。例如,如果有 100 個區塊生產者,第一個區塊生產者負責生產區塊 1、101、201 等,第二個區塊生產者負責生產 2、102、202 等)。由於塊生產與塊生產不同,需要維護狀態,並且對於每個分片,只有 sww/n 個塊生產者維護每個分片的狀態,相應地,只有那些 sww/n 個塊生產者輪換創建塊。

而關於跨分片,如果一個事務需要影響 Near 中的多個分片,則需要分別在每個分片中連續執行。完整的交易被發送到第一個受影響的分片,一旦該交易被包含在該分片的塊中,並在該塊被包含在一個塊中後應用,它會生成一個收據交易,該交易被路由到下一個需要在其中執行事務的分片。如果需要更多步驟,則收據事務的執行會生成新的收據事務,依此類推。具體見下圖:

公鏈
圖 7 Near 中的跨分片交易

三、Shardeum 與動態狀態分片

由上述對 Harmony、Elrond 以及 Near 的分析中,我們可以看到對於我們提出的兩個問題的解答:

1. 目前的 Layer1,最通⽤的分⽚⽅法是將帳戶的地址劃分為多個稱為分⽚的固定⼤⼩區域,並將⽹絡中的節點分配給不同的分⽚。

2. 在具有狀態分片的網路中,同一分片中的合約之間的交易快速而簡單,而跨多個分片的交易則慢得多,但並非不可能。如果一個事務需要影響多個分片,則需要在每個分片中連續執行。因為交易被分組到塊中並且共識是在塊級別完成的,所以影響多個分片的交易有可能在一個分片中被確認,但在另一個分片中被回滾。此外,影響多個分片的事務將需要與它們影響的分片數量成比例的額外處理時間。

但是同時,通過分析目前市場上的探索與解決方案,我們發現了目前階段公鏈分片的一些新問題:

1. 在跨分片交易時,如何在避免分片連續執行的基礎上,同時保證交易的原子處理?

2. 如果要網路中增加了不足一個分片節點數量的節點,網路如何處理多出來的這部分節點?

作為一個專注於促進區塊鏈的大規模應用、重塑 web3 價值範式與賦能未來的專業投資公司,Jsquare 一直關注區塊鏈的擴展性和安全性,在關注 Web3 運用層的同時,對更去中心化的基礎架構、無感的區塊鏈使用體驗以及依託於加密技術的安全性未來抱有極大的信心。即使分片的概念並不是新的,即使在這個道路上人們已經探索了一年又一年,我們在接觸 Shardeum 的時候,依然覺得他們對於分片賽道的洞察以及他們所做出的革命性技術改善值得我們下注。與這兩個問題對應的,Shardeum 提出了兩種新穎的解決方式。

3.1 Shardeum 與交易級共識

Shardeum 形成了一種獨特的技術與共識算法,該算法將法定人數證明 (PoQ) 與權益證明 (PoS) 相結合,共識算法將通過 trustless 投票收集和驗證節點的質押來幫助保護網路。每個交易會在被分組到塊 / 分區之前按照收到的順序進行處理。

而與上述成名已久的公鏈網路不同,Shardeum 網路上的共識是在每個交易(Transaction)級別而不是塊(Block)級別完成的,允許跨分片同時處理事務,而不是像 Near 的塊(Block)級共識那樣連續處理。這種交易級共識消除了確保原子處理(Atomic Processing)所需的複雜性。因此可以做到秒級的 finality 和低延遲,從而防止網路擁塞。

3.2 Shardeum 與線性擴展 

要解釋什麼叫線性擴展,我們需要想象下面一種情形:

Near 主⽹ 1 個 100 個節點的分⽚。預計將來會添加更多分⽚。Harmony 有 4 個分片,每個分片 250 個節點,主網共 1000 個節點。所有的合約在同一個分片。Elrond 有 3 個分片與 1 個元鏈,每個分片 800 個節點,主網共 3200 個節點。

如果在 Harmony 中添加 100 個節點,不足一個分片中需要的 250 個節點,Harmony 該如何處理這部分節點?是否可以考慮將這共 1100 個節點分成 11 個分片,每片 100 個節點?

聽起來更美好,但是由於某些分片的靜態特性,許多額外的節點需要加入網路才能創建新的分片。假如,我們要向上述網路中加入一些節點,如果只增加 1 個單獨的節點,是無法提高整個區塊的表現的,至少要為目前「最小分片大小」數量的節點(在 Near 中即為 100 個節點)——因為目前的分片都是靜態分片,不支持線性擴展,還沒有生產網路實際能做到靜態分片的拆分和合併。

在「交易級別的共識」之外,Shardeum 的白皮書提到,一個獨特功能是它使用動態狀態分片,不同於靜態分片中的所有節點都覆蓋相同的地址範圍,Shardeum 的虛擬分片(也即動態分片)可以讓每個節點持有不同的地址範圍,覆蓋的地址之間存在重疊節點——這樣做具有更大的複雜性,但是好處是它允許真正的線性縮放。

通過地址空間和節點對應關係的動態變化,加上一種新的數據可用性證明來做跨分片驗證,Shardeum 可以做到擬合或者近似的「線性擴展」。這種按照「交易級別」進行驗證和確認的方式,可能會一定程度上犧牲單片內的性能,但是對於網路整體,是非常有益的擴展。

Shardeum 目前擁有 10 個分片,每個分片 128 個節點,共 1280 個節點,主網預計 2022 年第第四季上線。雖然 Shardeum 仍在開發中,但在協議層面使用的 Shardus 技術已被證明可以實現線性擴展。在 2021 年第第三季的更新活動中,shardus 運行在 AWS t3.medium 硬體上的 1000 個節點的網路被證明可以達到 5000 TPS 的跨分片交易。

公鏈
圖 8 2021 年第第三季,Shardus 被證明可以達到 5000 TPS 的跨分片交易

2022 年 8 月,Shardeum 在具有完整分片功能的測試網 Liberty 2.0 上,通過 ERC20 Token 轉移成功展示了 100TPS 的能力。通常來說,一個區塊鏈需要幾年的時間才能建立並達到更高的 TPS,但 Shardeum 在推出 Liberty 1.0 後不到 4 個月就實現了這一目標。目前,Shardeum 用 50 個節點測試並發布了 Liberty 2.0,其中每個節點儲存了約 1/5 的總數據,執行了 1/5 的總交易。

四、結語

一個真正的分片和可擴展的區塊鏈需要從頭開始。同樣,一個擁有鑽石般共識的社區也需要從無到有地構建,而社區的建設從來不比技術的研究和突破輕鬆容易。我們看到了 Shardeum 測試網上線後,活躍的測試人數以及測試交易數,興奮於我們發現的革新之路有更多人攜手同行,同時也看到了一些質疑的聲音,只是我們相信進步的道路是螺旋而曲折的,任何的創意和探索都值得一試。

正如《抱朴子·用刑》中說,「國有六職,百工與居一焉。或坐而論道,或作而行之」。也有一說,與其坐而論道,不如起而行之,Jsquare 始終以開放的態度,希望更多建設者們加入去中心化與分片的測試與探索中。2022 年 4 月 26 日 Shardeum 推出了 Shardeum alphanet(Liberty)1.0,從那時起,很多用戶參與了 Shardeum 測試,超過 100K+ 的錢包創建,1000+ 的智能合約部署,導致更大的 TPS 要求。正如我們相信,只有在 Web3 大面積採用的時候,那些高質量高性能去中心化的公鏈才會在市場競爭中脫穎而出,也正如我們所相信的,那些經歷了質疑、指責、公開討論和反覆論證的社區,才能在去中心化的路上走得越來越遠。

原文連結

暢行幣圈交易全攻略,專家駐群實戰交流

▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!

前往鉅亨買幣找交易所優惠

文章標籤

鉅亨號貼文

看更多

Empty