区块链扩容所面临的问题有很多:
1. 交易数量陡增。例如一些独角兽和以太猫。
2. 现在产生区块的过程,扩容性受到限制。区块中的gas limit,使得区块的计算能够受到限制。但是提高gas limit或者过多地减少区块时间,都会导致过高的等待时间,并且降低网络抵抗攻击的能力。
3. 缺乏并行性(parallelizability)。首先,现有的以太坊虚拟机是线性处理交易。其次,每个全节点都要处理每个转账,然后把整个状态树都存储,从而确保安全性和去中心化。
为了解决扩容问题,分片技术通过进行链上状态分区,可以获得更高的吞吐量。
技术方法
首先,我们需要了解区分主链和分片链上的一些专业术语:
你可以很容易地看出,转账应该都整合在一组“校对”里面;就和一个区块类似,这组校对也指向它链上的主校对,这就是我们要谈论的分片链。成为“校对器”意味着有资格来在权益证明的分片链上提出新的校对。
基础二次分片
分片链的共识取决于主链
和侧链技术类似,只有很少部分的验证需要记录在主链上,这也是我们想要扩容区块链的基本方案:(i)分片链有他们自己的转账方式,分片的验证者只需要验证他们在观察的分片;(ii)分片链仍然追踪主链,来通过权益证明机制来获得更高层次的共识。
验证者管理合约(VMC)
为了加入主链上的分片链,就需要在主链上增加特殊的合约,被称为验证者管理合约(VMC)。VMC是这个分片机制的核心; VMC的目标可以看作如下:
1. 权益证明系统。如果验证者做出欺诈,他们的抵押就会被没收。
2. 伪随机抽样。通过将最近的区块哈希值作为起源,来选择合适的校验者。基本上来说,验证者会将他们的权益抵押放入VMC,然后他们的验证代码地址就会在VMC内部的通用验证者池列表中记录。一个分片链的验证者会从验证者池列表中被抽样,然后成为特定时间段(正如下面解释的那样),特定分片的校验者。这个想法是为了让验证者不能预测他们何时会成为校验者,以及他们会成为哪些分片的验证者。
3. 校验头部验证。VMC包含addHeader(bytes collationHeader) 函数,用来验证校验头部,同时也为有效的校验头部哈希写下记录。这个函数会立刻提供链上验证。
4. 跨分片通信。通过使用UTXO模型,用户可以将以太币通过转账调用存入特定的分片,并且在主链上创建回执(带有回执ID)。分片链的用户可以通过给定的回执ID创建消耗回执的转账,从而发出这个回执。
5. 链上治理。通过让VMC作为国会。它能让验证者在链上进行投票。
如何在分片中提出校验?
VMC会维护100个分片(SHARD_COUNT = 100)。每个分片都会同步处理转账,而且分片i的客户端只需要验证分片i上的转账。“时间段”是通过区块时间窗口来定义的,例如PERIOD_LENGTH = 5 表示这个时间段有5个区块产生。这会在每个时间段进行说明,对于每个分片,只能少于或等于1个有效校正。
一旦验证者选出来成为校验者,并且提出新的校验,那么这个校验者就必须要验证近期的校验,同时发出转账,调用addHeader 函数。需要注意地是,如果校验者在第10阶段被选出来进行新的校验,这意味着addHeader 转账就必须要包含在阶段10,也就是说,区块数10 * PERIOD_LENGTH to block number (10 + 1) * PERIOD_LENGTH — 1.
校验的头部哈希必须要记录在VMC上,从而证明它的头部是有效的。而且,分片的其他验证者必须要时刻地观察VMC,从而获得最新的状态。然后验证是否这些转账是有效的。
分片链的分叉原则
在基本的分片技术中,分叉选择准则取决于最长的主链。给定分片的有效头部并不是简单地“最长有效分片链”的头部校验,而是“所有最长有效主链中的最长有效分片链”。
下图的例子中,主链有两次硬分叉,而且第二个链在下图中是最长的有效主链。因为 block B3是头部区块,很容易就可以看到审查C3是头部审核。
然后block B3′就会到下图中的流程。假设现在block B3 的得分是比 block B3′的分数高,所以上面的链仍然是最长的主链:
最后,block 4 就会到下图的流程。需要注意地是,在这个分片中,collation C3就比collation C2的分数更高,但是下面的链是最长的有效主链,所以collation C2 就是现在的头部审核:
在扩容性和安全性之间找到平衡
区块链系统只能至多有以下3个特性中的2个:去中心化,扩容性和安全性。
分片其中一个重要的机制,就是如何在链上产生随机性。
-被选为审核者的概率应该只是相对的,并且和验证者的资金存入成正比。
-如果验证者可以预测或者选择他们要参加的分片,那么最不诚信的验证者就可以和其他人串通,并且开始恶意攻击。
如果抽样过程不能有很高的随机性,那么攻击者就能开始在分片中开始1%的攻击:如果有100个分片,攻击者就可以专注于攻击某个特定的分片,他们只需要1%的哈希力(PoW)/抵押(PoS)就可以控制整个分片。
区块链分片的显性最终确定性
显性最终确定性vs 隐性最终确定性
首先,我必须要澄清分片机制应该能够应用在工作量证明和权益证明的链上;尽管如此,例如Casper的显性终结性会让分片变的更强。
在通用的工作量证明链上,终结性是有概率的和隐性的;换句话说,尽管区块已经有了上千次确认,还是有可能去重写这个链。相反地,使用权益证明的Casper FFG数字经济机制就会有显性的终结性,也就是说我们可以检查在这个协议中,是否已经是最后的结果。
对于协议内的显性终结性,其中也有一个经济风险。在2/3 + 1 and 1/3 + 1的时候,它会创造最理想的尺寸。相应地,任何不在2/3 + 1 处进行审查的节点,就会变为0。
取决于主链的最终确定性
在普通的分片技术中,分片链和主链挂钩。对于分片验证者而言,我们希望分片技术,区块链性能可以是单个链的100倍,因此这些100个分片的所有验证者都需要观察VMC的状态,从而获得正确有效的头部审查。对于验证者来说,清楚地知道他们是审查者,这点很重要;对于普通用户,如果我们应用第2部分的跨分片转账,普通的用户也需要取回在VMC上的存款信息(回执ID)。显性的结果会帮助降低主链和众多分片链之间的不确定性。
显性最终确定性可以帮助无状态客户端
无状态客户端是指不存储整个状态树的客户端,他们只存储状态树根部的状态。归档客户端存储全部的状态树,并且提供审查所需要的Merkle树分支。通过这些Merkle树分支,无状态客户端能够打造部分状态树,而且验证审查。
一旦验证者被选出,整个过程就会开始同步,并且开始洗牌(也就是说,改变验证者观察的分片,并且同步分片链)。通过无状态客户端机制,洗牌的花费几乎降为零,因为他们只需要验证最近的审查(也就是说,那些分数高的审查)来同步分片。
由于同步过程会快很多,无状态客户端模型会可以在每个审查之间进行混洗。它不仅会减少存储负担和开销,而且也会让这个系统更加安全,因为频繁采样能够获得适应性攻击的抵抗能力。
虽然同步的费用变得非常低,但是在某个时间段,无状态的验证者仍然需要验证尽可能多的审查(collation),来确定他们会获得最高分数的有效审查(collation)。
Casper FFG 将会提供显式最终确定性阈值after about 2.5 “epoch times”,也就是说,125 个区块时间 。如果在再混洗期间,验证人能够验证超过 125 / PERIOD_LENGTH = 25 collation,分片系统能够从显式最终确定性中受益,确信从现在起的前 25 个 collation 可以最终确定。当然了,如果在同步时有更多 collation 得到验证,就会更加安全。
结论
希望此文可以给大家一个关于目前以太坊分片设计的初步介绍,以及显性的最终确定性是如何能够让分片机制获得好处。