淺談Zilliqa

weixin_34279579發表於2018-02-15
10582824-b6674fe6a5ef157e.png

Zilliqa是一個通過分片技術達到可以高速處理交易的區塊鏈。在他們釋出的一個2400個節點,4個分片的測試網路上,他們達到了每秒1389個交易量。2018年1月,Zilliqa完成ICO。一共融資了2千2百萬美金。這是我對Zilliqa技術做的一個總結,分享給大家。Zilliqa自己釋出的三篇部落格講得很詳細。我基本上就按這個來講。大家也可以去看原文。前兩篇去年十月份發的。第三篇這個星期剛發,跟第二篇談到的就有不同。可以看出,Zilliqa也在不斷摸索。

這篇主要談了Sharding

https://blog.zilliqa.com/https-blog-zilliqa-com-the-zilliqa-design-story-piece-by-piece-part1-d9cb32ea1e65 

主要知識點:

- 每個參與者都要做POW,一是防女巫攻擊,二是用POW提交結果把節點分片。提交結果由一個節點Committee驗證。

- Zilliqa會選一些節點組成Committee來決定分片。每一段時間內,Committee要踢出一個節點,然後把POW最快的一個節點加進來。

- Committee決定每個節點參與哪一個shard,會根據提交的POW的雜湊值的最後幾位和一些隨機因素來分配。

- 分片大小為最少600個,這樣可以把一個片裡存在1/3個壞節點的可能性降到百萬分之一。

- 每筆交易都會根據自己地址的前幾位分到不同的shard,(這樣也保證同一個地址的交易都由一個shard處理。)

- Sharding還支援多執行緒計算,就像分散式處理中的map/reduce.

這篇主要談了Consensus

https://blog.zilliqa.com/the-zilliqa-design-story-piece-by-piece-part-2-consensus-protocol-e38f6bf566e3

主要知識點:

- 分片中所有節點進行排序,有一個主節點(Leader),其他都是從節點(Backup)。

- 使用PBFT共識機制,一共有三步:

  1)Pre-prepare Phase: 主節點發布訊息。

  2)Prepare Phase: 從節點接受並驗證訊息,並將自己的驗證結果發給所有從節點。

  3) Commit Phase: 從節點接受到大部分其他從節點傳送的結果後,得出最終結果,然後發確認給其他從節點。最後,等到接收到大部分其他節點的確認後同意結果。

- PBFT的主節點必須是誠實節點。

- 如果主節點不誠實,或不工作,分片內就會在一段時間內沒有進展。這時候從節點可以要求更換主節點。大部分從節點要求更換主節點就可以把主節點換掉。

- PBFT優點:結果是最終的;只用POW做節點認證是節能的;lower reward variance(尚未理解)。

這篇主要提到pBFT如何被優化。

https://blog.zilliqa.com/the-zilliqa-design-story-piece-by-piece-part-3-making-consensus-efficient-7a9c569a8f0e

主要知識點:

- 使用MAC(Message Authentication Code) 主節點可以把給其他所有節點的資訊先給節點A,A接受自己的資訊,再把剩下的傳給B,這樣一直傳遞下去。就不需要主節點跟所有節點聯絡。節點間的聯絡次數從n的平方減少到n.

- 使用數字簽名,主節點只用傳遞一個資訊和多層簽名,收到的節點用自己的簽名可以看到屬於自己的不會被更改的資訊。這樣資訊數量也從n的平方減少到n。

- 每個節點有一個aggregator(也就是上一篇裡講的Leader)來決定區塊,然後發給其他所有節點(上一篇裡講的Backup),所有節點投票決定是否同意,投票結果最後由一個Verifier來審批。

- 這個投票過程分以下幾步

第一步:所有節點給aggregator發一個公鑰。aggregator用某種演算法用所有的公鑰生成一個單一的共有的公鑰。然後aggregator將共有公鑰發給verifier。

第二步:aggregator決定一個區塊,把資訊發給所有的節點。各節點對區塊進行投票。這個過程又分三步。

1. Commit Phase:每個節點給主節點發一個隨機產生但是加密過的資訊。

2. Challenge Phase:主節點整合所有收到的加密資訊,生成一個新資訊(這叫challenge),然後他把challenge,第一步生產的單一公鑰,和要傳達的主資訊(區塊)發給每個節點。challenge只能用主節點生產的單一公鑰和節點的私鑰才能開啟。只有知道challenge是什麼的節點才是真正的節點。他們的回覆才是有效的。

3. Response Phase:每個節點對區塊進行投票。投票結果發給主節點。

最後主節點把所有的回覆整合在一起,加上challenge,發給Verifier,Verifier可以用第一步生產的單一公鑰解開所有資訊。

- 使用Schnorr簽名,這樣單一簽名和多個簽名的位元組大小不變,這樣大大減小資訊量。

- aggregator會定期更換。

原始碼:https://github.com/Zilliqa/Zilliqa