分片是區塊鏈擴容的一個重要方向。
傳統的區塊鏈如以太坊每秒僅能處理20個左右的交易。主要原因是以太坊中每個交易都要在每個節點上執行一遍, 單台機器的處理能力限制了以太坊的最大TPS。
分片的思路是把所有節點進行分組,每個節點不再參與全部交易的驗證,而是僅驗證一部分的交易,因此可以突破單台機器處理能力的限制。
今天這篇文章將會為大家介紹Near protocol提出的分片方案—夜影協議(Nightshade) 。
分片的基本設計
區塊鏈依靠在所有節點複製所有交易來保證數據的正確性,每個節點如果只驗證一部分,那就明顯會降低安全性。
系統共有10個分片(shard chain), 每個分片鏈由1/10的節點驗證,理論上TPS可以提升十倍,但安全性也會隨之下降。
假設原始的區塊鏈中有51%以上的惡意節點合謀了,才可以破壞整條鏈的狀態,那麼分片後只要有5.1% (51/100) 的惡意節點合謀就足夠破壞某個分片上的狀態。
大部分分片方案的應對思路是隨機分配驗證者,只要讓惡意節點不在同一條分片鏈上,他們就無法合謀。
大多數方案選擇用一條獨立的鏈來實現管理分片,處理POS(proof of stake)共識,生成隨機數等等。
就比如以太坊2.0的Beacon chain、PolkaDot的Relay chain、Cosmos的Cosmos Hub。
而Nightshade也使用了一條這樣的Beacon chain (信標鏈)。
一般來說區塊鏈的節點會負責以下任務:
1.處理交易。
2.Relay 合法的交易和區塊給其他節點。
3.保存整條鏈的狀態和歷史數據。
以上三點都會影響整個網絡的處理能力。
從長遠來看,狀態存儲的壓力比較大,即使TPS一直保持在20左右,鏈的狀態也會一直增長,但短期來看,區塊鏈處理交易的能力才是更加重要的。
截止發稿,以太坊全狀態大約為100G,大多數節點仍可以輕鬆處理,但是以太坊的TPS僅有20左右,很難滿足實際需求。
Nightshade的分片也會分割以上提到的三點。分片中的節點僅驗證和傳播與分片相關的交易,並且只存儲和分片相關的狀態。
在Nightshade的方案中,分片數量和計算、存儲、網絡等資源為線性關係。
Nightshade對Beacon chain和分片鏈進行了簡化,在Nightshade中僅維護一條區塊鏈,所有分片上的交易都會在這一條鏈上被確認。
一個塊中的交易列表按照分片數量被分為多個chunks, 每個chunk對應一個分片,分片的驗證者只需要下載和驗證分片的chunk而不需要下載整個塊,系統中沒有節點會驗證整個塊的交易和狀態。
現實中由於網絡因素可能會導致chunks丟失,所以我們允許每個塊中的分片可以對應一個或零個chunk。
出塊
Nightshade中有兩個角色共同維護協議:出塊者和驗證者。
在系統中任何時間點都有w個出塊者和wv個驗證者,系統採用POS (proof of stake),出塊者和驗證者都會質押一定的Token作為不遵守協議時的懲罰。
系統包含n個分片,每個出塊者和驗證者都僅下載和驗證一部分的狀態。
在