区块链公链分片技术方案(配思维导图)
unitimes.io
全球视角,独到见解
以太坊分片思路
其基本思想是,将网络中的节点分成不同的碎片,各分片可以并行处理不同交易,这样可以并行处理相互之间未建立连接的交易,以提高网络并发量。分片方案的特点是,随着节点数目的增加,网络吞吐量也随之增加。
Vitalik Buterin在最新的推文中表示以太坊分片技术最重要的原则是“最大限度地接近与单一区块链相同的性质”
二次方分片的目的,就是通过一种双层的设计来增加交易容量。第一层不需要硬分叉,主链就保持原样。不过,一个叫做 校验器管理合约 (validator manager contract,VMC)的合约需要被发布到主链上,它用来维持分片系统。这个合约中会存在 O(c) 个 分片 (目前为 100),每个分片都像是个独立的“银河”:它具有自己的账户空间,交易需要指定它们自己应该被发布到哪个分片中,并且分片间的通信是受限的。
分片系统中的大多数用户都会运行两部分程序。(i) 一个在主链上的全节点(需要 O(c) 资源)或轻量节点(需要 O(log(c)) 资源)。 (ii) 一个通过 RPC 与主链交互的“分片客户端”
子链、侧链、状态通道
它们都属于链下扩容。
链下交易,对应比特币的闪电网络(Lightning Network)和以太坊的雷电网络(Raiden Network)。
提前支付一些以太坊或比特币作为押金,之后你可以在链下通过一些手段,来跟其他人进行交易。交易结束后把这个结算放在区块链上面。需要主流交易所、钱包这种大节点参与才比较有效。
核心思路是每个链可以独立自主地处理交易或者事物,相互之间不需要交流,最终把结算信息放在主链上。
跟分片最本质的区别是,分片是链上扩容,是对整个区块链网络的一个重构,节点也是相互关联的。
代理人共识协议
典型代表EOS,TRX。如何选出这些代理人,可以用权益证明,也可以通过一些官方的验证。
不管是7个代理人还是21个代理人,甚至可能是几十个代理人,大家会形成一个小团体。这个机制的好处是可以保证在一个很小的团体内部,很快就达成共识。
zilliqa分片
开源地址:https://github.com/Zilliqa/Zilliqa
C++实现的
在亚马逊的EC2上面测试得到用3600节点实现了每秒2488笔交易
特点:分片技术、PoW+PBFT混合共识机制
测试网络:https://explorer.zilliqa.com
Zilliqa的设计构思 第1部分:网络分片
https://my.oschina.net/zilliqa/blog/2962501
Zilliqa 的设计构思 第2部分:共识协议
https://my.oschina.net/zilliqa/blog/2962504
Zilliqa 的设计构思 第3部分:使共识更有效
https://my.oschina.net/zilliqa/blog/2962511
Zilliqa官方挖矿指南中文版
https://www.huoxing24.com/newsdetail/20181206173835283794.html
网络分片
假设我们有一个包含1000个节点的网络,将自动地把该网络分成10个、每个包含100个节点的分片,且所有分片可并行地处理交易。
由于分片架构能平行地处理交易,因此吞吐量可随着网络规模增加而线性增长。
每个分片现在都能独立处理交易并因此产生高吞吐量。
需要解决的关键问题
对女巫攻击的防御(Sybil Resistance)
创建分片、给分片分配节点和任务
分片大小
跨片交易
zilliqa解决方法
1. 防控女巫节点
使用PoW。每个希望加入Zilliqa网络的新节点都必须先执行PoW,网络中的现有节点验证新节点的PoW并授权其加入网络。
POW工作量证明部分跟以太坊基本上是一样的,这要求你将上一个区块的哈希值、节点的IP地址和你的公钥一起进行哈希计算。
对应的难度是相匹配的,例如哈希值的前100位都是0,如果你算出来的哈希值满足这个条件,就说明你完成了工作量证明。
根据工作量证明节点ID的最后几位,来决定分到哪一个分片上。对于一个新的节点来说,是无法通过自己的意志去加入某一个分片的,只能通过工作量证明,而工作量证明难度较高,因此可以避免出现新节点自己选择分片的情况。因此工作量证明的最后几位,就可以从数学上保证你的随机性是足够的。可以保证一些恶意节点不能直接加入到某一个分片。
2. 自动创建分片
有一个单独的分片即DS委员会去整合每个分片的结果,收集不同分片里面交易哈希,进行一个共识协议,形成哈希的哈希,然后广播,其他节点验证签名。
在每个DS Epoch开始时,所有候选人都将运行工作证明(Ethash算法)过程300秒窗口,以便竞争加入Zilliqa网络。
每个DS Epoch(约1.5小时)内总共有100个TX时期(每个~1分钟)。第100个TX时期被称为Vacuous时期。空白时期会处理coinbase交易(奖励机制)、升级机制(因为pBFT中没有分支)和持久状态存储(写入节点的DB而不是仅存储在内存中)。在这个时期,网络不会处理任何常规交易。
基于POW选举出DS委员会,使用先进先出策略定期移出一名DS委员会老成员、增加一名新成员,新进入委员会的节点是最快解决PoW的节点,任何时候DS委员会的大小都是固定的。DS委员会一旦当选,便启动分片程序,网络中的所有其他节点立即执行另一个PoW,其PoW由DS委员会验证,每个节点根据提交情况和随机性,被分配到特定的分片。PoW提交的最后几位二进制数字决定了节点将被分配到哪个分片。
3. 选择合适的尺寸
选择合适的分片大小对系统的安全至关重要。使用PoW创建分片相当于随机无差别地抽样一个节点集。
从600个节点开始,其包含三分之一的恶意节点的概率降至百万分之一。出于这个原因,Zilliqa认为最小分片大小为600。
4. 避免跨片交易
因为跨片交易需要锁协议,因此其开销成本很高,在分片设计之初就尽量避免跨片交易的产生
原子提交协议技术方案
5. 交易分片
每当交易到达网络时,它就被分配到一个特定的分片上。分配是由交易发送地址的前几位二进制数字决定的,这就叫做交易分片。
交易首先由分片打包,生成微块,然后上传给DS委员会,如果幸运,能被DS节点确认并签名,生成最终块。
每一个节点都可以收到最终的区块,这个区块的内容是很小的。同时,不同区块之间也会进行交换数据,从而分享最终区块内的这些交易。
整个系统有三层结构:第一层,是哈希的哈希;第二层,交易的哈希;第三层,真正的交易内容。通过这种三层结构来保证整个系统在每一步进行广播的时候,内容量都是相对比较小的。因此过了一段时间之后,你的不同分片里面,大家都可以获得这一段时间以来交易处理之后的一个共同状态。
交易分片按照交易发送者的账号地址来划分,来自同一发送者的所有交易都将在同一个分片中处理,允许每个分片成员检测其是否双花。通过每个交易中存在的随机数nonce,可以轻松检测双重花费(或重放攻击)。
6. 计算分片
分片还使计算执行和智能合约运行十分高效。例如,一部分分片可以充当映射器(mapper),其他部分分片可以充当归约器(reducer),并非常有效地执行映射-归约任务(map-reduce task),这也被称为计算分片。
共识协议
计算密集型的PoW需要大量的时间进行计算并且可能减慢共识协议,且它与网络中的节点数量无关,而是取决于网络的集体计算能力。不能很好地利用分片小的优势。
实用拜占庭容错协议(Practical Byzantine Fault Tolerance, 简称为PBFT)
Zilliqa采用PBFT在每个分片中达成共识。该协议是由卡斯特罗和利斯科夫(Castro and Liskov)在1999年提出的。它是在这样的假设下运行的:在执行协议之前,假设每个分片中最多有1/3的节点是恶意的。
在PBFT中,一个共识组中(即一个分片中)的所有节点按顺序排列,它有一个主节点(领导者),其他节点被称为备份节点。每轮PBFT都有三个阶段:预备、准备、提交。
PBFT与Nakamoto共识协议相比其他优点
1. 交易最终性
一旦交易被提交到区块链,那么它就是最终的了且不会有临时分叉,因此不需要确认。
2. 低能耗
Zilliqa只使用PoW来防止女巫节点攻击、确认节点身份并进行分片,而不用于达成共识。现实中,每确认大约100个区块才需要做一次PoW。
3. 报酬差异小
Zilliqa中参与共识协议的每个矿工都可以获得对应的奖励
PBFT的挑战
一个主要缺点:只有当分片规模很小时(即小于50)才高效。但是,正如我们前面的文章中所讨论的,出于安全原因,Zilliqa的分片大小必须不少于600个节点。
PBFT对于大型网络而言效率低下的主要原因是它有一个潜在的通信成本,即 分片中的每个节点都必须与所有其他节点通信,这就是通信成本二次方的原因。
使用数字签名而不是MAC将发送消息的数量从二次方数量级减少到线性,当n很大时这种减少会产生重要影响。以600个节点为例,其中传播的消息数量可以从17.97万减少到599。
使用多重签名的方法来降低通信成本,减少每个消息的大小。
目前一种比较流行的多重签名方案是基于Schnorr数字签名技术。
Zilliqa使用了近期一些学术论文中的技术来提高经典pBFT协议的效率。
附:思维导图
来源:虫洞社区
作者:大自然
【文章版权归原作者所有,其内容与观点不代表Unitimes立 场。转载文章仅为传播更有价值的信息,合作或授权联系请发邮件至 [email protected]或添加微信unitimes2017】