@: 蓝石区块链技术白皮书框架
蓝石链基本逻辑
蓝石区块链是由北京航空航天大学郑院士领导的一个项目,基本的逻辑是由主链和多条并行子链组成,强调了在用户看来,蓝石链是一条可扩展,安全的,分布式的单链。这篇文章主要来概况蓝石技术白皮书中的一些关键设计和基本架构。技术白皮书参考如下:
[http://chain.bluecefa.com/CefaChain_WhitePaper.pdf ]
主链&子链
每个节点都有主链数据,主链上不存储具体交易,但包括全局信息和子链路由信息。子链个数,子链块头,账户和合约与子链的映射关系,哪些节点负责存储哪条子链数据(类似数据节点)都写在主链上面。子链上包括账户,合约和交易。路由信息都储存在主链上面。
节点
蓝石链的节点都需要到主链上进行注册。向主链系统合约提交注册请求。系统会根据当前状况,分派到一条节点最少的子链或者创建一条的新的子链(新的子链节点数目需要达到一定要求才能生效)。系统合约对外提供管理共识节点的接口,管理权限有部署蓝石链的节点账户拥有。新的共识节点加入需要满足一定的硬件要求,并且需要有公网IP和经过CA节点的认证,所有信息记录在系统合约里。白皮书中提到的节点有很多种
- 出块节点(感觉就是共识节点)
- 共识节点:提案节点,背书节点,验证节点
- CA节点,审核节点,监管节点
所有的共识节点都主链数据和某一条子链的数据。主链上记录了哪一个节点有哪一条子链数据(类似数据节点?)。
注:这里的节点加入都需要验证,并且管理权限由部署蓝石链的节点账户拥有。没有加入state的概念,更像一个permissioned的模型。当然在可以在之后的版本中进行开放,加入类似的机制。
网络
每个节点会参与两类P2P网络,主链和子链P2P。主链P2P网络用于子链向主链提交数据,跨链通信协调,传播主链数据等。子链P2P有分为两类:数据和验证P2P。简单来说就是结构化网络。
共识
共识流程主要分三步:
- 根据主链当前块高度,前一区块的提案者(也就是打包者),前一区块的根哈希,前一区块的VRF值(作为随机种子?)结算hash。然后根据hash计算出主链以及每一条子链当前高度区块的共识节点。
- 子链共识节点进行拜占庭共识,出块后,将块头以交易的形式提交给主链。
- 主链对子链提交的块头信息进行拜占庭共识和出块。
本轮共识结束。
注:这里子链之间是并行的,确也需要时同步的。这也就要求每条子链的共识周期是一样的,或者说主链应该(没提)需要等待所有子链上传块头信息,再开始下一轮。
共识方案
共识节点有三种:提案节点,背书节点和验证节点。其中提案节点是从所有存储子链信息的节点随机选取(数据节点),背书节点和验证节点是从所有节点随机选取(抵御1%攻击)。
共识包括三步:
- 提案节点打包交易,以及相关数据读写集,数据的Merkle数证明签名。(注:只有提案节点有数据,需要它提供数据相应的证明)
- 背书节点验证签名有效后,对权重最高的提案节点进行背书签名。
- 确认节点(应该是指验证节点,这里面名字经常混淆)进行无状态交易验证签名(应为有数据的Merkle证明,可以进行验证),需要有2/3验证节点签名,形成区块。
注1:提案节点是从数据节点中选取,而数据节点基本上不改变,这样会很不安全。并之前数据节点分配并不是随机的,而是根据哪条链节点少,就分配到哪条链上。这样无法抵抗女巫攻击。除非在注册的时候有强审查机制。
注2:共识流程中没有说权重的含义,也没有考虑异步的情况,背书节点会收到不同的区块,也没有考虑出不了块的情况,有很多的问题。不过退一步,还是可以使用PBFT代替的。
跨链
四种基本的场景:
- 转账
- 部署合约
- 提交合约交易(调用合约)
- 查询交易和块
转账
转账交易,是从一个账户转到另外一个账户的一定金额。如何在两个账户在同一条链上容易处理。对于不同链的转账,就需要跨链转账。
跨链转账的请求会放入请求消息队列,在子链A(原始链)出块后,会向主链提供A块头信息和汇聚块中所有交易的跨链请求通知信息(不包括详情)。主链出块后,子链B(目标块)会同步到主链块信息,发现请求通知,就可以直接连接A节点,获取请求详情及证明。验证通过后,处理请求,生成响应和更新跨链响应队列状态。同样上传给主链,然后子链A主链获取响应消息,从B链请求响应详情,验证通过后,更新请求队列,处理可能的失败回滚,最后调用用户提供的回调函数。如果链B支付失败,则给用户退款(如何验证支付失败?)
注:简单概括就是通过Merkle Proof来进行跨链交易,但是用到了主链作为一个跨链消息的传递。这里默认了所有的跨链请求都会被处理,只需要等待结果。
部署合约
合约只能部署到其创建者所在的子链上,主链上会记录合约与子链的映射关系。合约不能依赖其他子链的合约,否则部署失败。合约同时也会部署到主链上,以便任意节点验证其他子链上的交易(那主链上的合约会不会同步更新,数据如何管理?)
提交合约交易
与转账类似,如果在同一条子链上,可以直接处理。否则构造跨链请求。
总结
蓝石链的逻辑整体上采取主链和多条并行子链的架构。这也是现在用多链来做公链的一个基本框架,基本上都可以想到,不会再是一个很新鲜的事情。蓝石链的架构相对很简单,很多问题都没有考虑和提到,只能算一个半成品。
网友评论