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