zilliqa,第一個實現(xiàn)了分片技術(shù)提升性能的公鏈

分片的技術(shù)一直在區(qū)塊量行業(yè)被提起,但以太網(wǎng)絡(luò)的分片推進也是相當?shù)木徛O喾?,Zilliqa,作為第一個使用了分片技術(shù)用來提升整體網(wǎng)絡(luò)吞吐量的公鏈,已經(jīng)上線了。在Zilliqa自己的測試網(wǎng)絡(luò)上,有4個分片,每個分片600個節(jié)點,達到了支持每秒1400的交易容量,在加入更多分片和節(jié)點的情況下,達到了2800多的TPS。

官網(wǎng)https://zilliqa.com
Zilliqa主要解決兩方面的問題:

  1. 提高公鏈性能。通過引入分片機制,使得公鏈的整體性能與分片和節(jié)點數(shù)保持線性增加的比例,從而解決現(xiàn)有公鏈性能差,無法支持大規(guī)模用戶和應用的問題。
  2. 解決公鏈(尤其是以太)智能合約適用性的問題。通過引入Scilla,一種新的智能合約語言,實現(xiàn)了偏向分布式計算應用的需求實現(xiàn);并針對現(xiàn)有的solicit編寫的智能合約出現(xiàn)的安全性問題,做了全面的優(yōu)化。

這篇文章主要來解讀一下Zilliqa的分片機制。


Zilliqa的挖礦節(jié)點采用了PoW的形式,但PoW只是用來防止女巫攻擊,以及生成節(jié)點的身份憑證,而不用做共識。其PoW使用了Ethash算法。Ethash算法使得使用ASIC專用礦機變得困難,從而可以讓更多使用GPU的礦機加入挖礦節(jié)點,從而保證礦工的數(shù)量,進而保證安全。

Zilliqa區(qū)塊鏈里面的“區(qū)塊”有兩層:

  1. 第一層,叫DS Block,全稱是directory service blocks。一個DS Block包含了將要參與交易區(qū)塊共識的節(jié)點信息。
  2. 第二層,就是普通的交易區(qū)塊TX-Blocks。由在DS Block里指定的節(jié)點進行共識。

Zilliqa的分片和共識機制如下:
1. DS Block的共識
一個目錄服務委員會(directory service committee,簡稱 DS committee) 被選舉出來,然后目錄服務委員會將整個網(wǎng)絡(luò)節(jié)點分片,并將每個節(jié)點分配到相應的分片中。

  • 基于PoW1算法,最先計算出一個合理的nonce值的節(jié)點,會提議一個新的DS Block的頭信息(header),然后向其他的DS節(jié)點廣播。
  • 一旦2/3的其他DS節(jié)點接受了該header(通過簽名),這個新的DS區(qū)塊就被寫入在了DS鏈上。
  • 成功挖出DS區(qū)塊的節(jié)點,將代替DS committee中最老的節(jié)點成為新的DS committee節(jié)點,并且在隨后的DS節(jié)點的公式過程中充當了領(lǐng)導者(Leader)的角色。

2. 分片的產(chǎn)生
在DS committee確認后,分片開始了。

  • 一個節(jié)點基于PoW2算法,算出一個合理的nonce值后,將其廣播到DS committee里的節(jié)點里。
  • DS committee的領(lǐng)導者在收集到一定數(shù)量的PoW2要求的nonce值的解決方案后,它會開啟一個針對PoW2結(jié)果的共識。假設(shè)整個網(wǎng)絡(luò)需要L個分片,每個分片需要n0個節(jié)點。被收集到的nonce的結(jié)果,會按照從小到大的結(jié)果排序,產(chǎn)生頭n0個nonce結(jié)果的節(jié)點被分配到第一個分片,然后依次分配。同一個分片中產(chǎn)生最大nonce結(jié)果的那個節(jié)點被作為該分片的領(lǐng)導者(leader)。
  • 超過2/3的DS節(jié)點對于PoW2結(jié)果產(chǎn)生共識后,DS committee的leader會產(chǎn)生一個被2/3的共識DS節(jié)點共同簽名過的多簽名證明。

DS節(jié)點會在一個公開信道(public channel)里面發(fā)布相關(guān)的信息,這些信息也是經(jīng)過2/3以上的DS節(jié)點共識的。這些信息包括但不限于以下內(nèi)容:

  • DS節(jié)點的身份標記以及連接方式;
  • 每個分片里的節(jié)點;
  • 每個交易提交到不同分片的邏輯。

3. 交易處理

每個交易提交到不同分片的邏輯如下:
根據(jù)每個交易發(fā)送方地址的最后幾位,通過(log 2 L) + 1 的算法將交易分配到不同的L個分片中做驗證。

注:由于交易是按照發(fā)送者的地址來決定進入哪個分片處理的,所以雙花問題可以在一個分片中被處理并被發(fā)現(xiàn)

  • 當交易被某個分片中的部分節(jié)點接收后,該交易被接收到的節(jié)點在分片里廣播,直到被該分片的領(lǐng)導者所接收。該分片領(lǐng)導者將該交易打包在區(qū)塊后,開始分片的共識流程。
  • 一旦一個分片里區(qū)塊的共識被2/3該分片的節(jié)點所簽名,分片的領(lǐng)導者會將分片區(qū)塊的頭信息以及簽名(包含了簽署所有該分片區(qū)塊的分片節(jié)點的簽名)發(fā)送給DS committee的節(jié)點。
  • DS committee的節(jié)點在收到該分片區(qū)塊信息后,會將該分片區(qū)塊信息廣播,直到DS committee的領(lǐng)導者收到該信息。
  • 當所有分片的分片區(qū)塊信息被收到后,DS committee的領(lǐng)導者會將所有分片的區(qū)塊組成"最終區(qū)塊"。

4. 最終區(qū)塊的共識

  • 最終區(qū)塊生成后,DS committee的領(lǐng)導者會主導另外一個共識流程。將該最終區(qū)塊的頭信息和簽名信息向每個分片廣播。
  • 分片收到DS committee發(fā)出來的最終區(qū)塊的廣播后,首先通過掌握的DS節(jié)點的公鑰驗證該最終區(qū)塊信息是否經(jīng)過了DS committee的驗證。
  • 如果確實是經(jīng)過了DS committee驗證的,針對每一筆在最終區(qū)塊里面列出的交易,在本分片掌握的交易信息里是否找得到。
  • 如果交易信息不是在本分片的,那么交易發(fā)送者的賬戶在本分片會被暫時掛起,直到根據(jù)全局狀態(tài)的更新會把該賬號的掛起解除。
  • 如果該交易是在本分片的,那么最終區(qū)塊的數(shù)據(jù)項會被本區(qū)塊掌握的交易信息填充,該交易賬戶的狀態(tài)以及全局狀態(tài)也會被更新。

不管是在DS committee里面,還是在每個分片里面,共識機制都是PBFT,但加以了改進,利用數(shù)字簽名,將PBFT需要的交流復雜度從O(n2)降低到了O(n);并應用了植入了EC-Schnorr 多簽方法,以及自定義的簽名數(shù)位(bitmap)的方式,并將簽名數(shù)據(jù)大小從O(n)降低到了O(1)。
Zilliqa的簽名數(shù)位是指:通過一個數(shù)字B[i],記錄第i個節(jié)點是否簽名。簽名的話,B[i]=1,不然為0。

Zilliqa里面交易確認以及智能合約的運行也是需要消耗“gas”的。Zilliqa里面的gas用Zilliqa自己的通證ZIL來支付。每個參與交易區(qū)塊共識的分片里面的節(jié)點(包括領(lǐng)導者),以及DS committee的共識節(jié)點(包括領(lǐng)導者)都能從區(qū)塊里面的“gas”這個數(shù)據(jù)項指定的數(shù)字獲得指定的ZIL的獎勵。ZIL總量是210億,會在10年內(nèi)被“挖礦”出來,前4年大約挖出整體的80%,后6年則是20%。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容