CESS机制详解(2):区块链层与随机选取轮值(R²S)共识节点机制
相较于单纯的公链,存储公链虽然是一个比较细分的功能性网络,但对于数据处理效率的要求并不亚于一般公链。究其原因,还是由于当下公链为了追求效率,很多时候链上仅仅作为最终状态确认的场所,而将较多的复杂内容放在链下执行。
作为Web3.0底层基础设施,去中心化云存储网络CESS(Cumulus Encrypted Storage System)在设计之初秉持着对去中心化理念的坚持,在“信息上链”层面做到了尽可能的满足,并利用高效的链上处理效率来避免去中心化带来的低效问题,在“分散”和“高效”两个对立面上做到了很好的平衡。1
随机选取轮值共识节点机制(R²S)
为了在提高链上事务处理效率的同时又可以实现节点的去中心化,CESS采用了创新的随机选取轮值共识节点机制(R²S)来实现区块打包以及其他链上事务。正如字面上所看到的,该机制中完成链上共识的节点是轮值的,也就是说会随着时间的推移而变化。另一方面,所谓的“轮值”,在选择上也是“随机”的,单从字面意思来看,CESS在一个时间窗口内会由一定数量的轮值节点负责共识的维护,并且通过选取的随机性来保证去中心化程度。
不过,真实的R²S并不如字面上看起来那么简单。
1.1
如何实现“随机”与“轮值”
其实区块链最重要的点是共识问题,但在解释R²S的共识机制之前,需要先介绍一下该机制中节点相关的问题。
R²S机制允许所有希望成为节点运营者的用户可以自由地加入候选节点,但在每一个时间窗口内(例如每1万个区块),只选取11个正式的轮值节点参与出块。而未参与出块的候选节点,也可以通过参与数据预处理流程来为自己的工作能力提供证明,从而参与下一轮的正式轮值节点选取。在这个过程中,网络对每个节点都会进行信誉评分,当节点在工作过程中出现对网络整体利益存在损害的行为时,将会降低其分数。当分数低于某一基准线时,该节点将无法参与候选节点的竞争。
这里简单解释一下,CESS对于用户上传的数据需要经过一轮数据预处理后,再分配给节点进行存储。预处理包含了数据的分片、加密、冗余等流程。具体的内容我们会在后续存储的具体流程中展示。
我们来完整看一下机制的整套运作流程:首先,网络从所有候选节点中随机选取11个轮值节点,在固定的时间窗口内完成出块等共识的维护工作,而候选节点则参与数据的预处理过程为自己的工作能力提供证明。在轮值节点当值过程的同时,网络将会在满足条件的候选节点中再度随机选取11个节点作为下一个时间窗口内的正式轮值节点进行共识维护,以此类推。
在这个过程中,如果有个别正式节点存在故意作恶或无法满足网络要求等问题,从而导致被强制下线时,网络将从候选节点里随机选抽节点补上直至完成此轮时间窗口的当值。所以对共识节点运营者而言,即使仅仅作为候选节点也需要保持对网络的持续贡献,如此可以大大增加获取收益的可能性。
1.2
拜占庭容错与可验证随机函数
在了解完具体的节点进入与退出机制后,下面就是区块链的核心问题:如何在去中心化的前提下保证链上数据的准确性。在该方面,CESS选择了采用安全性更高的拜占庭容错与可验证随机函数来确保共识的安全。
1.2.1
拜占庭容错
CESS借鉴PBFT共识算法,引入门限签名算法和收集者角色,实现高可用性的拜占庭容错共识算法。该算法保证了当网络中出现作恶节点时,依然可以实现链上共识的达成。
本算法的11个当值共识节点可分为主节点和副节点,其中副节点根据任务不同,共包含转发节点和收集节点两个角色。每轮的共识过程都会有一个主节点,主节点在收到来自客户端的请求后将打包交易成块并发送至所有副节点。然后,转发节点将确认与签名消息并转发至收集节点。收集节点通过门限签名机制,把收集到的所有消息聚合成一个签名消息,随即发送至其他所有节点。接下来,继续新的一轮转发与收集过程,直至将确认消息返回至客户端。值得注意的是,两轮的收集节点可以指定为同一节点,也可为不同节点。本算法保证安全性和活性的的前提同样是假设系统中拜占庭节点数量不超过系统总节点数的1/3。节点总数量为N时,最多只能容纳f个拜占庭故障(叛徒)节点,令N大于等于3f + 1。
1.2.2
可验证随机函数
与大多数公链不同,CESS的共识节点通过随机选取生成,这意味着对网络应对变化的能力有更高的要求。为了可以在这样的背景下依然尽可能保证安全性,CESS采用“随机从候选共识节点中选取出若干共识节点,接着再通过共识算法合作打包交易出块”的模式,在增加节点选举的随机性和不可预测性的前提下,提升区块链的安全性。
每个候选共识节点拥有一个公私钥对,在每轮时间窗口选举当值共识节点时,各候选共识节点通过以下公式计算哈希随机输出。
R=VRF_Hash(SK, Seed)
P=VRF_Proof(SK, Seed)
其中,SK是节点的私钥,Seed是CESS链上某区块中的一个字段信息,无法提前预测。R为哈希随机输出,P为哈希证明。
通过上述步骤,验证者可以轻易验证和两个值确实是由拥有该值的节点产生。
R=VRF_P2H(P)
VRF_Verify(PK, Seed, P)
其中PK为被验证节点的公钥。
此时,可选择哈希随机输出最小的11个节点为当值共识节点。如果选出的节点多于11个,将根据信誉度评分高低进行筛选。
1.3
准入与退出
虽然CESS对节点的进入并未设置过于严苛的前置要求,但也需要满足网络运行条件的基本运行指标、资源贡献指标,并质押一定数量的CESS代币来进行参与,防止节点作恶。在节点完成了CESS代币的质押之后,就可以参与到上述的流程中去。当节点想要退出时,网络会根据节点在运营过程中的评分来判定是否全额退还抵押代币。理论上只要节点正常工作,未出现长时间的掉线或者故意作恶等问题,网络都将全额退还抵押代币。
该准入机制可预防女巫攻击,提高共识安全性。2
R²S机制优势何在
单从机制设计的角度上来说,R²S略显复杂了一些,但CESS团队在设计该模式的时候,有针对存储公链特别的考量。
2.1
解决“矿工困境”,避免垄断
“矿工困境”是指在存储网络中,由于矿工更倾向于存储可以产生收益的数据而并非区块历史(可以理解为不愿意建立全节点),只通过向少数全节点调取数据来保证网络同步或者加入矿池,从而导致了全节点的过于中心化。CESS通过R²S来实现共识和存储的隔离,一方面保证了对于区块历史的存储更加去中心化,另一方面也防止大矿工的过于集权而对网络整体的发展不利。
2.2
大幅提高去中心化框架下的效率
如果单纯由11个节点来维护共识,虽然提高了效率,但网络却会像联盟链一样非常地中心化。CESS为了在该高效方案的背景下实现去中心化,所以设置了随机选取每一轮参与维护共识的机制。只需要满足节点要求即有机会参与出块,很好地解决了中心化的问题。
2.3
实现链上事务处理
CESS的链上数据,除了交易以及合约的确认,还包括了用户上传数据的“位置”信息。也就是说,CESS成功实现了所存储内容元数据的上链。虽然当下很多项目倾向于使用部分数据链下处理来提高链上效率,但这样的方案在安全性上需要非常多的保证机制,并且也是由于链处理效率较低而不得已为之。CESS由于链上事务处理的高效,所以可以实现元数据的上链,从而在数据存储的寻址等方面可以直接通过链上数据实现,而上链则是保证了数据的真实性。
但这个需要说明的是,实际的操作中,为了存储网络效率优先的原则,节点会维护一个元数据的数据库,寻址将首先从该数据库中出发,只有在无法找到的情况下才会选择在链上调取数据。该数据库是通过同步链上信息而生成的,本质上并没有破坏真实性这个特点。
而作为共识节点之所以需要将同样的数据同时在链上链下进行保存,一方面是为了在网络需求旺盛时降低不断向链上请求数据造成的高成本,另一方面也是方便了其他调度方可以更快地处理用户数据。3
总结
总体而言,CESS采用R²S机制,一方面实现了共识与存储分离,防止出现“矿工困境”与垄断;另一方面,通过可信执行环境(TEE)技术定期检查共识节点的诚实性和调度功能,来保证节点之间通过公平竞争来为网络提供尽可能优质的服务。基于Substrate开源框架开发的CESS去中心化云存储网络,不仅支持WASM,还将在未来兼容EVM智能合约,这不仅是为了方便开发者建立CESS原生生态,让很多对数据交互需求较高的项目有容身之地;也使得很多应用可以无缝迁移至CESS,为前期的快速发展铺好了道路。