eout
发布于

zilliqa

System Settings

要了解Zilliqa,我们要先了解整个体系中的角色扮演。传统的区块链中,以Ethereum为例,只会有一条链,链上每个区块都纪录了数笔交易,十分的单纯。而整个制造区块链的工作都交给同一个角色— 矿工 (miners)来完成。
在Zilliqa中则稍有不同,整个生态系中大概可以分成两群节点:DS Committee以及Shard Members。在了解他们各自的工作之前,我们要先简介一下Sharding。

Network Sharding

Network Sharding是一个很好理解的概念,简单的说就是把一个大网路分成很多不同的子网路(sub-network),每个子网路就被称为一个Shard。不同的交易会被分配到不同的shard中进行运算及验证,透过这样的方法达到「平行化」的目的。

DS Committee

在Zilliqa的实践方法中,最重要的一群角色就是DS Committee,全名为Directory Service Committee,可以想像是网路中主导共识过程的「委员会」。这个委员会会有一个Leader (会长),负责提案所有要投票的内容,其他的成员就只负责认证并签章。
这个DS Committee将会动态的分配整个网路成若干个shards,并且指定不同节点至不同的shard中成为shard members。每一个shard就好像是一个小的委员会,同样是透过一个leader带领的方式进行PBFT共识。理想状况下一个shard会有约800个节点。这个数量可以使得恶意节点控制某个shard的机率降至足够低,并且维持高效能。每个shard会各自处理网路上一部分的交易,并且产生一个交易区块(称为Micro Blocks)。这些交易区块(Micro Blocks)在各个shard中获取足够的签名后,会被提交回到DS Committee中,最后在由DS Committee产生一个Final Block。这就是Zilliqa将网路分片的大致作法,我们将在后面对其细节做更多说明。

Data Layer & Network Layer

在Zilliqa中,区块被分为两大类:DS blocks以及Tx Blocks,而且分别形成两条不同的链:DS Blockchain以及Tx Blockchain。

DS Blocks

DS-Block contains metadata about the miners who participated in the consensus protocol.
DS Blocks的全名为Directory Service Blocks,作用是决定DS Committee。前面有稍微提过,Zilliqa的共识机制是PoW与PBFT的结合,进一步的说,Zilliqa是先透过一个PoW个过程,选择出好的DS Committee成员,接着再直接在这个DS-Committee中快速的透过PBFT进行交易的验证以及交易区块的撰写。
在一条公有链当中,大家都想要当这个Committee的一员,因为有权撰写区块并领取奖励,因此就必须采用PoW的方式来竞争,也借此防止女巫攻击。Zilliqa的设计是让最快挖到下一个DS-Block的miner加入DS-Committee,并且成为下一个DS-epoch (也就是持续到下一个DS-Bloc出现)最初的Leader。Leader可以算是整个共识过程中最重要的角色,在这段期间内所有有效的blocks (包含Tx Final Blocks以及下一个DS-block)都是由Leader产生。在加入了一位新成员后,为了维持委员会中委员数量恒定,最老的一个成员就必须离开。
也就是说,DS blocks纪录了DS-committee中成员的加入与退出。在Zilliqa的设计当中,每一个DS-block 都非常的简单,只有几个属性:
其中,Leader Public Key就是当前的Committee Leader,miner就是挖到这个DS-Block的人,也就是下一个DS-Block中的Leader。整个DS-Block除了Signature以外的部份和称为Header。

DS Blockchain

在一个DS miner成功找到PoW解答(nonce)后,会把这个答案交给DS-Committee中的Leader,由Leader确认无误后会组成这个 header,然后交给委员会中的其他成员验证及签名,超过2/3的成员Multisig的结果,就是DS-Block的Signature部份。这样就完成了一个DS-Block的交接,这个新的DS Block就会被接到DS Blockchain上,DS-Committee就被更新了,DS miner将成为新的leader接管网路。

TX Blocks

TX-Blocks stores information on which transactions were agreed upon by the nodes in a DS-Block.
再来就要说到Transaction Blocks。如同我们上面所说,TX-Blocks是我们比较熟悉的一种类型,其内容跟Ethereum的区块很像,纪录了BlockNumber、GasUsed、transactionRoot等等东西。一个TX-Block除了header跟Signature之外,还含有Data的部份,纪录了转帐以及智能合约呼叫等等关键讯息。而TX Blocks又可以分为两种:由各个Shard产生的Micro Block以及DS Committee决定的Final Block。

Micro Blocks

如同前面所说,Micro Block是由各个Shard Leader所产生。这些Micro Blocks不会真实被连接到任何一个区块链上,他们只是用来提交给DS Committee制造Final Blocks的小零件而已。Micro Blocks在实做广播时,会以type = 0x00标示。
Final Blocks: TX Blockchain
我们在 Zilliqa Explorer上可以查询到的TX-Blocks都属于Final Blocks。如下图所示,每个Final Block都会有一个 DS Block Number,表示了这个Block是在第几个DS-Epoch被产出,一个DS Block则可以连结到多个Final Blocks。
Explorer里有一项Number of Micro Blocks,代表了这个Final Block是由几个Micro Blocks组成。每一个Final Block从一个shard中最多只能拿一个Micro Block(说明由几个shared),并且会连结到上一个Final Block之后,形成TX Blockchain,并以type = 0x01标示该区块。

Consensus Layer

如果对于PBFT共识机制不太了解的话,可以看一下这篇文章的介绍,作者在文中将PBFR介绍地相当清楚。PBFT需要一个领导加上一群选定的节点进行PrePrepare-> Prepare-> Commit三阶段的沟通。不同于PoW,PBFT比较像是现代POS系列投票表决形成共识的演算法。由于不需要每一个区块都由所有矿工进行PoW竞争,这种轮流方式可以大幅提升出块速度,并且减少能源的耗损。
但PBFT最大的问题在于无法支持节点的动态加入,因此通常只在联盟链中被实用。在Zilliqa中,要加入Committee或是成为shard member以进行PBFT,就要透过PoW当作一个门槛。这可以防止有人以不同身份大量冒充节点进入网路,也透过奖励机制鼓励这些节点正常运作。个人认为是Zilliqa整个项目中最巧妙的设计之一。
一个节点若想要加入网路,可以选择挖一个DS Block来加入DS Committee (PoW1),或是在每一个DS Epoch开始的时候,试着去解另一个PoW问题(PoW2)来取得Shard Membership。在加入了Committee或是取得Shard Membership之后,节点就不需要再进行PoW这种高耗能的运算了,只要按照顺序轮流当Leader,准备好合法的区块或帮忙验证就可以了。因此在Tx Blocks当中,不会像以太坊的交易区块有nonce栏位,同时BFT的区块链也不会有分叉的发生,只要交易一被纪录上链即是「确认」。

EC-Schonorr Signature

由于PBFT中需要使用到大量的Multisig(每一轮的PFBT步骤都需要获得2/3节点的多签),因此Zilliqa选择使用EC-Schonorr当作数位签章的演算法。EC-Schonorr的特点在于可以直接透过add operation把大家的签章加在一起,所以无论多少人进行multisig都不会增加总signature的长度。但是在验章过程中,必须要明确指出是由哪些public keys所签章才有办法成功检验(不能只说一个Signature是这五个public key中的三个的签章结果)。因此在Zilliqa的实践中,每次提交多签结果都会搭配一个Bitmap来标示「参与签名的公钥」,借此方便验章的流程。

完整流程

以上就是Zilliqa对于网路分片、DS Committee选举以及区块产生的逻辑。这里我们再整理一下整个网路的运作流程:

  1. DS Committee Election
    在一切过程开始之前,要先进行DS Committee的选举。所有想要加入DS Committee的节点都会参加PoW1,成功解出nonce的节点提交答案至现有DS Committee当中,超过2/3节点验证并签章后即可接上新的DS Block,加入委员会成为新的Leader。
  2. Generating Shards
    有了DS Committee以及Leader之后,便会开始进行进行Network Sharding。所有想要参与Sharding的节点都必须进行挖矿,并提交PoW2的答案给DS Committee。等到DS Committee收集到足够多的PoW2答案后,会将所有nonce依照大小排序,依照顺序分配各个Node进入各个shard中,每个shard里面nonce最大的节点首先担任Leader。(分配过程一样是由DSC Leader发布,2/3成员检验后签名才会成立)
  3. Public Blockchain Information
    在完成Network Sharding之后,DS Committee会透过公开频道对外发布目前blockchain的状况,例如目前的shard数量以及各个shard的Leader以及成员们的IP位址。这么一来每个交易在提交时就知道「哪个shard负责处理我的交易」,可以直接将交易送网该IP位址。
  4. Transaction Processing
    每一笔交易被送至目标shard中后,就会由shard leader来收集这些交易并组成Micro Blocks。组出Micro Block之后,要经过该shard中2/3的成员认证并进行多签,才能合法提交给DS Committee。
    接着DS Committee的Leader会再结合所有收到的合法Micro Blocks,组织成Final Block,并且一样在DS Committee中达成PBFT共识,最后接到Tx Blockchain上。
    当一个shard成功提交一个Micro Block之后,Leader就会照顺序轮换下去。同样的在DS Committee当中,Leader也会在成功产生Final Block之后进行轮替。
  5. Processing Final Blocks
    在DS Committee成功发布Final Block的后,各个sharding会根据Final Block的资料来更新自己本地端的Tx Blockchain。同时更新Globalstate。
  6. New Nodes Joining ZILLIQA
    一个想要进入网路的节点可以透过解PoW1来成为DS node或是透过PoW2来成为shard member。
    有没有融会贯通啦?看到这里差不多已经可以理解Zilliqa的运作,在看Block Explorer的时候也不会雾煞煞了。

broswer

https://viewblock.io/zh-CN/zilliqa/blocks
https://devex.zilliqa.com/

pool

https://miningpoolstats.stream/zilliqa

地址转换:

https://www.coinhako.com/zil-check

浏览 (1015)
点赞
收藏
评论