淺談Zilliqa
Zilliqa是一個通過分片技術達到可以高速處理交易的區塊鏈。在他們釋出的一個2400個節點,4個分片的測試網路上,他們達到了每秒1389個交易量。2018年1月,Zilliqa完成ICO。一共融資了2千2百萬美金。這是我對Zilliqa技術做的一個總結,分享給大家。Zilliqa自己釋出的三篇部落格講得很詳細。我基本上就按這個來講。大家也可以去看原文。前兩篇去年十月份發的。第三篇這個星期剛發,跟第二篇談到的就有不同。可以看出,Zilliqa也在不斷摸索。
這篇主要談了Sharding
主要知識點:
- 每個參與者都要做POW,一是防女巫攻擊,二是用POW提交結果把節點分片。提交結果由一個節點Committee驗證。
- Zilliqa會選一些節點組成Committee來決定分片。每一段時間內,Committee要踢出一個節點,然後把POW最快的一個節點加進來。
- Committee決定每個節點參與哪一個shard,會根據提交的POW的雜湊值的最後幾位和一些隨機因素來分配。
- 分片大小為最少600個,這樣可以把一個片裡存在1/3個壞節點的可能性降到百萬分之一。
- 每筆交易都會根據自己地址的前幾位分到不同的shard,(這樣也保證同一個地址的交易都由一個shard處理。)
- Sharding還支援多執行緒計算,就像分散式處理中的map/reduce.
這篇主要談了Consensus
主要知識點:
- 分片中所有節點進行排序,有一個主節點(Leader),其他都是從節點(Backup)。
- 使用PBFT共識機制,一共有三步:
1)Pre-prepare Phase: 主節點發布訊息。
2)Prepare Phase: 從節點接受並驗證訊息,並將自己的驗證結果發給所有從節點。
3) Commit Phase: 從節點接受到大部分其他從節點傳送的結果後,得出最終結果,然後發確認給其他從節點。最後,等到接收到大部分其他節點的確認後同意結果。
- PBFT的主節點必須是誠實節點。
- 如果主節點不誠實,或不工作,分片內就會在一段時間內沒有進展。這時候從節點可以要求更換主節點。大部分從節點要求更換主節點就可以把主節點換掉。
- PBFT優點:結果是最終的;只用POW做節點認證是節能的;lower reward variance(尚未理解)。
這篇主要提到pBFT如何被優化。
主要知識點:
- 使用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會定期更換。
相關文章
- 淺淺談ReduxRedux
- 淺淺淺談JavaScript作用域JavaScript
- Zilliqa進度更新第21期
- 淺談WebSocketWeb
- 淺談HTMLHTML
- ZooKeeper淺談
- ElasticJob淺談AST
- 淺談flutterFlutter
- 淺談JMM
- Celery淺談
- 淺談JavaScriptJavaScript
- 淺談IHttpHandlerHTTP
- 淺談HTTPSHTTP
- 淺談RMQMQ
- 淺談 PromisePromise
- 淺談mockMock
- 淺談ViewModelView
- 淺談PWA
- 淺談Disruptor
- 淺談反射反射
- 淺談SYNPROXY
- 淺談vuexVue
- ElasticSearch淺談Elasticsearch
- 淺談NginxNginx
- 淺談promisePromise
- 淺談visibility
- 淺談閱讀
- 淺談 $prufer$ 序列
- 淺談偏序
- 淺談JS原型JS原型
- 淺談群論
- 淺談克隆 JavaScriptJavaScript
- 淺談BFC格局~
- 淺談Mysql索引MySql索引
- 淺談async/awaitAI
- 淺談redux(一)Redux
- 淺談Spring BeanSpringBean
- 淺談 Java集合Java
- csrf漏洞淺談