17. 平行链与群组

17.1. 背景

超级链具备平行链特性,能够实现业务的混部,确保整体架构性能上可以水平扩展;

同时,平行链还具备群组特性,能够一定程度上实现平行链隐私数据的隔离,只有群组内的节点才能有这个平行链的数据。

17.2. 术语

  • 平行链 :相对于主链而言,运行在超级链中的用户级区块链实例,用户通过调用主链的智能合约创建。功能与主链无区别,全网节点均可以获取平行链账本数据,实现整体架构水平可扩展。

  • 群组 :作用于平行链,具备群组特性的平行链,只有特定节点才拥有该平行链的账本数据。群组具备的特性包括私密性、动态性。

17.3. 架构

平行链的群组特性通过白名单机制来实现,在网络层进行过滤。平行链的群组架构,如下图

../_images/parallel.png

17.4. 设计思路

  1. 如何要支持群组,需要在xuper链部署一个系统合约:GroupChain(一个网络有且仅有一个)

    这样是为了保证兼容性,如果没有部署这个GroupChain合约,那么行为和旧版本一致。

    <平行链名字,IP> → Address

    为什么把IP放在Key中,是为了方便做过滤的时候查找更快,直接Get。

    平行链名字作为前缀,方便列出这条链的所有合法成员节点。

    备注:此处IP是代指一个TCP协议定位符,可以是libp2p风格的URL。

  2. 查询特定的链是否具备群组关系

    Case1: 部分链希望有群组特性,即只有特定的节点才能同步账本数据;

    Case2: 剩下的链还是期望所有节点都参与同步、验证区块;

    基于以上两种场景,需要增加一层映射,即<平行链,是否支持群组>

    如果每次转发都Lookup数据库过滤IP,性能有影响,可以考虑在p2p中维护一个Cache;

  3. 通过这个智能合约接口,可以修改(address, IP)的映射关系

    合约的Owner(GroupChain这个合约的Owner)可以添加或删除address

    节点也可以后期自己修改IP(节点有权更换自己的IP),合约里面会判断Initiator()字段和address是否一致,确保每个address只能修改自己的IP

  4. 平行链中转消息的时候,必须确保目的IP在智能合约的映射表中存在

    如果每次转发都Lookup数据库过滤IP,性能有影响,可以考虑在p2p中维护一个Cache;