17. 平行链与群组
17.1. 背景
超级链具备平行链特性,能够实现业务的混部,确保整体架构性能上可以水平扩展;
同时,平行链还具备群组特性,能够一定程度上实现平行链隐私数据的隔离,只有群组内的节点才能有这个平行链的数据。
17.2. 术语
平行链 :相对于主链而言,运行在超级链中的用户级区块链实例,用户通过调用主链的智能合约创建。功能与主链无区别,全网节点均可以获取平行链账本数据,实现整体架构水平可扩展。
群组 :作用于平行链,具备群组特性的平行链,只有特定节点才拥有该平行链的账本数据。群组具备的特性包括私密性、动态性。
17.3. 架构
平行链的群组特性通过白名单机制来实现,在网络层进行过滤。平行链的群组架构,如下图
17.4. 设计思路
如何要支持群组,需要在xuper链部署一个系统合约:GroupChain(一个网络有且仅有一个)
这样是为了保证兼容性,如果没有部署这个GroupChain合约,那么行为和旧版本一致。
<平行链名字,IP> → Address
为什么把IP放在Key中,是为了方便做过滤的时候查找更快,直接Get。
平行链名字作为前缀,方便列出这条链的所有合法成员节点。
备注:此处IP是代指一个TCP协议定位符,可以是libp2p风格的URL。
查询特定的链是否具备群组关系
Case1: 部分链希望有群组特性,即只有特定的节点才能同步账本数据;
Case2: 剩下的链还是期望所有节点都参与同步、验证区块;
基于以上两种场景,需要增加一层映射,即<平行链,是否支持群组>
如果每次转发都Lookup数据库过滤IP,性能有影响,可以考虑在p2p中维护一个Cache;
通过这个智能合约接口,可以修改(address, IP)的映射关系
合约的Owner(GroupChain这个合约的Owner)可以添加或删除address
节点也可以后期自己修改IP(节点有权更换自己的IP),合约里面会判断Initiator()字段和address是否一致,确保每个address只能修改自己的IP
平行链中转消息的时候,必须确保目的IP在智能合约的映射表中存在
如果每次转发都Lookup数据库过滤IP,性能有影响,可以考虑在p2p中维护一个Cache;